Line data Source code
1 : import * as React from 'react';
2 :
3 : import * as styles from './session_export_settings_view.module.css';
4 : import { ToggleSwitch } from '../../ui/foundations/toggle_switch.js';
5 :
6 : export interface SessionExportSettings {
7 : withCatalog: boolean;
8 : withLoginHint: boolean;
9 : preserveUUIDs: boolean;
10 : }
11 :
12 : interface Props {
13 : withCatalog: boolean;
14 : // Whether the connection actually has a login hint to share. When false the login-hint toggle
15 : // is disabled and forced off — there is nothing to include.
16 : withLoginHint: boolean;
17 : settings: SessionExportSettings;
18 : setSettings: (s: SessionExportSettings) => void;
19 : /// Show the toggles of the UUIDs and the catalog, an export of a single connection has neither
20 : withSessionParts?: boolean;
21 : }
22 :
23 1 : export const SessionExportSettingsView: React.FC<Props> = (props: Props) => {
24 :
25 1 : const toggleCatalog = React.useCallback((e: React.MouseEvent) => {
26 0 : e.stopPropagation();
27 0 : props.setSettings({ ...props.settings, withCatalog: !props.settings.withCatalog });
28 1 : }, [props.settings, props.setSettings]);
29 :
30 1 : const toggleLoginHint = React.useCallback((e: React.MouseEvent) => {
31 0 : e.stopPropagation();
32 0 : props.setSettings({ ...props.settings, withLoginHint: !props.settings.withLoginHint });
33 1 : }, [props.settings, props.setSettings]);
34 :
35 1 : const togglePreserveUUIDs = React.useCallback((e: React.MouseEvent) => {
36 1 : e.stopPropagation();
37 1 : props.setSettings({ ...props.settings, preserveUUIDs: !props.settings.preserveUUIDs });
38 1 : }, [props.settings, props.setSettings]);
39 :
40 1 : return (
41 1 : <div className={styles.root}>
42 1 : <div className={styles.part_list}>
43 1 : <div id="export-toggle-login-hint-label" className={styles.part_name}>
44 : Login Hint
45 1 : </div>
46 1 : <div className={styles.part_toggle}>
47 1 : <ToggleSwitch
48 1 : size="medium"
49 1 : checked={props.withLoginHint && props.settings.withLoginHint}
50 1 : disabled={!props.withLoginHint}
51 1 : onClick={toggleLoginHint}
52 1 : aria-labelledby="export-toggle-login-hint-label"
53 1 : />
54 1 : </div>
55 1 : {props.withSessionParts !== false && <>
56 1 : <div id="export-toggle-preserve-uuids-label" className={styles.part_name}>
57 : Preserve UUIDs
58 1 : </div>
59 1 : <div className={styles.part_toggle}>
60 1 : <ToggleSwitch
61 1 : size="medium"
62 1 : checked={props.settings.preserveUUIDs}
63 1 : onClick={togglePreserveUUIDs}
64 1 : aria-labelledby="export-toggle-preserve-uuids-label"
65 1 : />
66 1 : </div>
67 1 : <div id="export-toggle-catalog-label" className={styles.part_name}>
68 : Catalog Data
69 1 : </div>
70 1 : <div className={styles.part_toggle}>
71 1 : <ToggleSwitch
72 1 : size="medium"
73 1 : checked={props.settings.withCatalog}
74 1 : disabled={!props.withCatalog}
75 1 : onClick={toggleCatalog}
76 1 : aria-labelledby="export-toggle-catalog-label"
77 1 : />
78 1 : </div>
79 1 : </>}
80 1 : </div>
81 1 : </div>
82 : );
83 1 : };
|