@deephaven/dashboard-core-plugins 0.11.6-beta.8 → 0.11.7-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/panels/FilterSetManager.d.ts +4 -1
- package/dist/panels/FilterSetManager.d.ts.map +1 -1
- package/dist/panels/FilterSetManager.js +45 -16
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.d.ts +7 -8
- package/dist/panels/FilterSetManagerPanel.d.ts.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js +42 -39
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +1 -0
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +72 -20
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/package.json +15 -15
|
@@ -8,6 +8,7 @@ export interface FilterSet {
|
|
|
8
8
|
id: string;
|
|
9
9
|
title: string;
|
|
10
10
|
panels: FilterSetPanel[];
|
|
11
|
+
restoreFullState?: boolean;
|
|
11
12
|
}
|
|
12
13
|
export interface ChangeHandlerArgs {
|
|
13
14
|
isValueShown: boolean;
|
|
@@ -28,6 +29,7 @@ interface FilterSetManagerState {
|
|
|
28
29
|
editId?: string;
|
|
29
30
|
renameSet?: FilterSet;
|
|
30
31
|
modifiedFilterSets: FilterSet[];
|
|
32
|
+
restoreFullState: boolean;
|
|
31
33
|
}
|
|
32
34
|
declare class FilterSetManager extends Component<FilterSetManagerProps, FilterSetManagerState> {
|
|
33
35
|
static animateScreenFlash(): void;
|
|
@@ -46,11 +48,12 @@ declare class FilterSetManager extends Component<FilterSetManagerProps, FilterSe
|
|
|
46
48
|
handleSettingsSave(): void;
|
|
47
49
|
handleCaptureNewSet(): void;
|
|
48
50
|
handleRenameCancel(): void;
|
|
51
|
+
handleRestoreFullStateChange(event: ChangeEvent<HTMLInputElement>): void;
|
|
49
52
|
getNameError(nameInputValue: string): string | undefined;
|
|
50
53
|
handleRenameConfirm(): void;
|
|
51
54
|
handleSetDelete(): void;
|
|
52
55
|
handleSetUpdate(): void;
|
|
53
|
-
|
|
56
|
+
handleSetEdit(): void;
|
|
54
57
|
handleSettingsClick(event: MouseEvent): void;
|
|
55
58
|
handleBackgroundClick(event: MouseEvent): void;
|
|
56
59
|
handleNameInputChange(event: ChangeEvent<HTMLInputElement>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterSetManager.d.ts","sourceRoot":"","sources":["../../src/panels/FilterSetManager.tsx"],"names":[],"mappings":"AAIA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,aAAa,EACb,UAAU,EACX,MAAM,OAAO,CAAC;AAmBf,OAAO,yBAAyB,CAAC;AAIjC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"FilterSetManager.d.ts","sourceRoot":"","sources":["../../src/panels/FilterSetManager.tsx"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,9 @@ import React, { Component } from 'react';
|
|
|
12
12
|
import memoizeOne from 'memoize-one';
|
|
13
13
|
import shortid from 'shortid';
|
|
14
14
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
15
|
-
import { vsGear, vsSave, vsCircleSlash, vsTrash, vsDeviceCamera,
|
|
15
|
+
import { vsEdit, vsGear, vsSave, vsCircleSlash, vsTrash, vsDeviceCamera, dhRefresh, dhNewCircleLargeFilled, vsCircleLargeFilled, vsArrowSmallUp } from '@deephaven/icons';
|
|
16
16
|
import Log from '@deephaven/log';
|
|
17
|
-
import { Button, CardFlip } from '@deephaven/components';
|
|
17
|
+
import { Button, CardFlip, RadioGroup, RadioItem } from '@deephaven/components';
|
|
18
18
|
import "./FilterSetManager.css";
|
|
19
19
|
var log = Log.module('FilterSetManager');
|
|
20
20
|
var NAME_INPUT_PLACEHOLDER = 'Enter name...';
|
|
@@ -61,15 +61,17 @@ class FilterSetManager extends Component {
|
|
|
61
61
|
this.handleNameInputKeyPress = this.handleNameInputKeyPress.bind(this);
|
|
62
62
|
this.handleRenameConfirm = this.handleRenameConfirm.bind(this);
|
|
63
63
|
this.handleRenameCancel = this.handleRenameCancel.bind(this);
|
|
64
|
+
this.handleRestoreFullStateChange = this.handleRestoreFullStateChange.bind(this);
|
|
64
65
|
this.handleSetDelete = this.handleSetDelete.bind(this);
|
|
65
|
-
this.
|
|
66
|
+
this.handleSetEdit = this.handleSetEdit.bind(this);
|
|
66
67
|
this.handleSetUpdate = this.handleSetUpdate.bind(this);
|
|
67
68
|
this.state = {
|
|
68
69
|
editId: undefined,
|
|
69
70
|
renameSet: undefined,
|
|
70
71
|
nameInputValue: '',
|
|
71
72
|
nameInputError: undefined,
|
|
72
|
-
modifiedFilterSets: []
|
|
73
|
+
modifiedFilterSets: [],
|
|
74
|
+
restoreFullState: false
|
|
73
75
|
};
|
|
74
76
|
}
|
|
75
77
|
|
|
@@ -260,6 +262,12 @@ class FilterSetManager extends Component {
|
|
|
260
262
|
});
|
|
261
263
|
}
|
|
262
264
|
|
|
265
|
+
handleRestoreFullStateChange(event) {
|
|
266
|
+
this.setState({
|
|
267
|
+
restoreFullState: event.target.value === 'true'
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
|
|
263
271
|
getNameError(nameInputValue) {
|
|
264
272
|
var _nameInputValue$trim;
|
|
265
273
|
|
|
@@ -294,7 +302,8 @@ class FilterSetManager extends Component {
|
|
|
294
302
|
var {
|
|
295
303
|
nameInputValue,
|
|
296
304
|
renameSet,
|
|
297
|
-
modifiedFilterSets
|
|
305
|
+
modifiedFilterSets,
|
|
306
|
+
restoreFullState
|
|
298
307
|
} = this.state;
|
|
299
308
|
|
|
300
309
|
if (renameSet === undefined) {
|
|
@@ -315,7 +324,8 @@ class FilterSetManager extends Component {
|
|
|
315
324
|
var trimmedName = (_nameInputValue$trim2 = nameInputValue === null || nameInputValue === void 0 ? void 0 : nameInputValue.trim()) !== null && _nameInputValue$trim2 !== void 0 ? _nameInputValue$trim2 : '';
|
|
316
325
|
|
|
317
326
|
var namedFilterSet = _objectSpread(_objectSpread({}, renameSet), {}, {
|
|
318
|
-
title: trimmedName
|
|
327
|
+
title: trimmedName,
|
|
328
|
+
restoreFullState
|
|
319
329
|
});
|
|
320
330
|
|
|
321
331
|
var selectedIndex = modifiedFilterSets.findIndex(_ref4 => {
|
|
@@ -417,7 +427,7 @@ class FilterSetManager extends Component {
|
|
|
417
427
|
});
|
|
418
428
|
}
|
|
419
429
|
|
|
420
|
-
|
|
430
|
+
handleSetEdit() {
|
|
421
431
|
this.setState(_ref9 => {
|
|
422
432
|
var {
|
|
423
433
|
editId,
|
|
@@ -436,12 +446,14 @@ class FilterSetManager extends Component {
|
|
|
436
446
|
}
|
|
437
447
|
|
|
438
448
|
var {
|
|
439
|
-
title
|
|
449
|
+
title,
|
|
450
|
+
restoreFullState = false
|
|
440
451
|
} = selectedSet;
|
|
441
452
|
return {
|
|
442
453
|
nameInputValue: title,
|
|
443
454
|
nameInputError: undefined,
|
|
444
|
-
renameSet: selectedSet
|
|
455
|
+
renameSet: selectedSet,
|
|
456
|
+
restoreFullState
|
|
445
457
|
};
|
|
446
458
|
});
|
|
447
459
|
}
|
|
@@ -541,7 +553,8 @@ class FilterSetManager extends Component {
|
|
|
541
553
|
nameInputError,
|
|
542
554
|
editId,
|
|
543
555
|
renameSet,
|
|
544
|
-
modifiedFilterSets
|
|
556
|
+
modifiedFilterSets,
|
|
557
|
+
restoreFullState
|
|
545
558
|
} = this.state;
|
|
546
559
|
var {
|
|
547
560
|
isValueShown,
|
|
@@ -592,10 +605,11 @@ class FilterSetManager extends Component {
|
|
|
592
605
|
}, "Capture filter set"), /*#__PURE__*/React.createElement("div", {
|
|
593
606
|
className: "py-3 text-muted small"
|
|
594
607
|
}, "Takes a snapshot of the currently applied filters on all panels, allowing you to restore saved filter sets later.")), isNameInputScreen && /*#__PURE__*/React.createElement("div", {
|
|
595
|
-
className: "d-flex flex-column justify-content-center"
|
|
608
|
+
className: "d-flex flex-column justify-content-center",
|
|
609
|
+
"data-testid": "edit-filter-set-container"
|
|
596
610
|
}, /*#__PURE__*/React.createElement("div", {
|
|
597
611
|
className: "form-group"
|
|
598
|
-
}, /*#__PURE__*/React.createElement("label", null, isRenamingExistingSet ? '
|
|
612
|
+
}, /*#__PURE__*/React.createElement("label", null, isRenamingExistingSet ? 'Edit set' : 'Name captured set'), /*#__PURE__*/React.createElement("div", {
|
|
599
613
|
className: "name-input-container"
|
|
600
614
|
}, /*#__PURE__*/React.createElement("input", {
|
|
601
615
|
type: "text",
|
|
@@ -607,12 +621,15 @@ class FilterSetManager extends Component {
|
|
|
607
621
|
onKeyPress: this.handleNameInputKeyPress,
|
|
608
622
|
spellCheck: "false"
|
|
609
623
|
}), /*#__PURE__*/React.createElement(Button, {
|
|
624
|
+
"data-testid": "rename-confirm-button",
|
|
610
625
|
kind: "ghost",
|
|
611
626
|
className: "btn btn-link no-underline pt-2 pb-2",
|
|
612
627
|
onClick: this.handleRenameConfirm,
|
|
613
628
|
tooltip: "Save",
|
|
629
|
+
"test-id": "button-save",
|
|
614
630
|
icon: vsSave
|
|
615
631
|
}), /*#__PURE__*/React.createElement(Button, {
|
|
632
|
+
"data-testid": "rename-cancel-button",
|
|
616
633
|
kind: "ghost",
|
|
617
634
|
className: "btn btn-link no-underline pt-2 pb-2",
|
|
618
635
|
onClick: this.handleRenameCancel,
|
|
@@ -620,13 +637,23 @@ class FilterSetManager extends Component {
|
|
|
620
637
|
icon: vsCircleSlash
|
|
621
638
|
})), nameInputError && /*#__PURE__*/React.createElement("div", {
|
|
622
639
|
className: "error-message"
|
|
623
|
-
}, nameInputError))
|
|
640
|
+
}, nameInputError)), /*#__PURE__*/React.createElement("div", {
|
|
641
|
+
className: "form-group"
|
|
642
|
+
}, /*#__PURE__*/React.createElement(RadioGroup, {
|
|
643
|
+
onChange: this.handleRestoreFullStateChange,
|
|
644
|
+
value: "".concat(restoreFullState)
|
|
645
|
+
}, /*#__PURE__*/React.createElement(RadioItem, {
|
|
646
|
+
value: "false"
|
|
647
|
+
}, "Restore only filters"), /*#__PURE__*/React.createElement(RadioItem, {
|
|
648
|
+
value: "true"
|
|
649
|
+
}, "Restore full table state")))), isEditListScreen && /*#__PURE__*/React.createElement("div", {
|
|
624
650
|
className: "filter-set-manager-settings-grid-1"
|
|
625
651
|
}, /*#__PURE__*/React.createElement("div", {
|
|
626
652
|
className: "form-group"
|
|
627
653
|
}, /*#__PURE__*/React.createElement("label", null, "Edit filter sets"), /*#__PURE__*/React.createElement("div", {
|
|
628
654
|
className: "filter-select-container"
|
|
629
655
|
}, /*#__PURE__*/React.createElement("select", {
|
|
656
|
+
"data-testid": "settings-card-filter-select",
|
|
630
657
|
ref: this.editDropdownRef,
|
|
631
658
|
value: editId !== null && editId !== void 0 ? editId : '-1',
|
|
632
659
|
className: "custom-select filter-value-select",
|
|
@@ -652,10 +679,10 @@ class FilterSetManager extends Component {
|
|
|
652
679
|
tooltip: "Update"
|
|
653
680
|
}), /*#__PURE__*/React.createElement(Button, {
|
|
654
681
|
kind: "ghost",
|
|
655
|
-
onClick: this.
|
|
682
|
+
onClick: this.handleSetEdit,
|
|
656
683
|
disabled: isEmptyEditList,
|
|
657
|
-
icon:
|
|
658
|
-
tooltip: "
|
|
684
|
+
icon: vsEdit,
|
|
685
|
+
tooltip: "Edit"
|
|
659
686
|
}), /*#__PURE__*/React.createElement(Button, {
|
|
660
687
|
kind: "ghost",
|
|
661
688
|
onClick: this.handleSetDelete,
|
|
@@ -690,6 +717,7 @@ class FilterSetManager extends Component {
|
|
|
690
717
|
}, /*#__PURE__*/React.createElement("div", {
|
|
691
718
|
className: "filter-select-container"
|
|
692
719
|
}, /*#__PURE__*/React.createElement("select", {
|
|
720
|
+
"data-testid": "value-card-filter-select",
|
|
693
721
|
ref: this.dropdownRef,
|
|
694
722
|
value: selectedId,
|
|
695
723
|
className: "custom-select filter-value-select",
|
|
@@ -707,6 +735,7 @@ class FilterSetManager extends Component {
|
|
|
707
735
|
value: id
|
|
708
736
|
}, title);
|
|
709
737
|
})), /*#__PURE__*/React.createElement(Button, {
|
|
738
|
+
"data-testid": "filter-apply-button",
|
|
710
739
|
kind: "ghost",
|
|
711
740
|
onClick: this.handleFilterApply,
|
|
712
741
|
icon: dhRefresh,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/panels/FilterSetManager.tsx"],"names":["React","Component","memoizeOne","shortid","FontAwesomeIcon","vsGear","vsSave","vsCircleSlash","vsTrash","vsDeviceCamera","dhICursor","dhRefresh","dhNewCircleLargeFilled","vsCircleLargeFilled","vsArrowSmallUp","Log","Button","CardFlip","log","module","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","animateScreenFlash","overlay","document","createElement","classList","add","addEventListener","remove","querySelector","appendChild","constructor","props","createRef","filterSets","renameSet","undefined","some","id","handleSettingsCancel","bind","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleEditDropdownChange","handleFilterChange","handleFilterApply","handleCaptureNewSet","handleNameInputChange","handleNameInputKeyPress","handleRenameConfirm","handleRenameCancel","handleSetDelete","handleSetRename","handleSetUpdate","state","editId","nameInputValue","nameInputError","modifiedFilterSets","componentDidMount","isValueShown","updateSelectedId","initSettingsScreen","componentDidUpdate","prevProps","prevState","isNameInputScreen","focusRenameInput","length","onChange","selectedId","debug","setState","isEmptyList","event","value","target","applyFilterSet","onUpdateSets","getFilterState","panels","title","getNameError","trimmedName","trim","error","namedFilterSet","selectedIndex","findIndex","updatedModifiedFilterSets","push","prevFilterSets","filter","newSelectedIndex","Math","max","min","newSelectedId","selectedSetIndex","selectedSet","find","stopPropagation","dropdownRef","current","focusInput","key","preventDefault","onApply","filterSet","focus","renameInputRef","render","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","updateSetIcon","editDropdownRef","map"],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, {\n ChangeEvent,\n Component,\n ReactNode,\n KeyboardEvent,\n MouseEvent,\n} from 'react';\nimport memoizeOne from 'memoize-one';\nimport shortid from 'shortid';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n vsGear,\n vsSave,\n vsCircleSlash,\n vsTrash,\n vsDeviceCamera,\n dhICursor,\n dhRefresh,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsArrowSmallUp,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { Button, CardFlip } from '@deephaven/components';\n\nimport './FilterSetManager.scss';\n\nconst log = Log.module('FilterSetManager');\n\nexport interface FilterSetPanel {\n id: string;\n state: unknown;\n}\n\nexport interface FilterSet {\n id: string;\n title: string;\n panels: FilterSetPanel[];\n}\n\nexport interface ChangeHandlerArgs {\n isValueShown: boolean;\n selectedId?: string;\n}\n\ninterface FilterSetManagerProps {\n isValueShown: boolean;\n selectedId?: string;\n filterSets: FilterSet[];\n getFilterState(): FilterSetPanel[];\n onChange(args: ChangeHandlerArgs): void;\n onApply(filterSet: FilterSet): void;\n onUpdateSets(filterSets: FilterSet[], editId?: string): void;\n}\n\ninterface FilterSetManagerState {\n nameInputValue: string;\n nameInputError?: string;\n editId?: string;\n renameSet?: FilterSet;\n // Unsaved set changes on the settings screen\n modifiedFilterSets: FilterSet[];\n}\n\nconst NAME_INPUT_PLACEHOLDER = 'Enter name...';\n\nconst EMPTY_LIST_PLACEHOLDER = 'No Available Filter Sets';\n\nclass FilterSetManager extends Component<\n FilterSetManagerProps,\n FilterSetManagerState\n> {\n static animateScreenFlash(): void {\n const overlay = document.createElement('div');\n overlay.classList.add('screen-flash-overlay');\n overlay.addEventListener('animationend', () => {\n // Removing the element removes its event listeners\n overlay.remove();\n });\n document.querySelector('body')?.appendChild(overlay);\n }\n\n constructor(props: FilterSetManagerProps) {\n super(props);\n\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleEditDropdownChange = this.handleEditDropdownChange.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterApply = this.handleFilterApply.bind(this);\n this.handleCaptureNewSet = this.handleCaptureNewSet.bind(this);\n this.handleNameInputChange = this.handleNameInputChange.bind(this);\n this.handleNameInputKeyPress = this.handleNameInputKeyPress.bind(this);\n this.handleRenameConfirm = this.handleRenameConfirm.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n\n this.handleSetDelete = this.handleSetDelete.bind(this);\n this.handleSetRename = this.handleSetRename.bind(this);\n this.handleSetUpdate = this.handleSetUpdate.bind(this);\n\n this.state = {\n editId: undefined,\n renameSet: undefined,\n nameInputValue: '',\n nameInputError: undefined,\n modifiedFilterSets: [],\n };\n }\n\n componentDidMount(): void {\n const { isValueShown } = this.props;\n if (isValueShown) {\n this.updateSelectedId();\n } else {\n this.initSettingsScreen();\n }\n }\n\n componentDidUpdate(\n prevProps: FilterSetManagerProps,\n prevState: FilterSetManagerState\n ): void {\n const { isValueShown, filterSets } = this.props;\n const { modifiedFilterSets } = this.state;\n\n if (prevProps.isValueShown && !isValueShown) {\n this.initSettingsScreen();\n }\n\n if (this.isNameInputScreen() && !this.isNameInputScreen(prevState)) {\n this.focusRenameInput();\n }\n\n if (filterSets !== prevProps.filterSets) {\n if (\n !isValueShown &&\n filterSets.length > 0 &&\n prevProps.filterSets.length === 0 &&\n modifiedFilterSets.length === 0\n ) {\n // Filter set added from another panel, flip from the settings side/initial screen to the value side\n const { onChange } = this.props;\n onChange({ isValueShown: true, selectedId: filterSets[0].id });\n } else {\n this.updateSelectedId();\n }\n }\n }\n\n private renameInputRef = React.createRef<HTMLInputElement>();\n\n private dropdownRef = React.createRef<HTMLSelectElement>();\n\n private editDropdownRef = React.createRef<HTMLSelectElement>();\n\n initSettingsScreen(): void {\n const { filterSets, selectedId } = this.props;\n log.debug('initSettingsScreen', filterSets, selectedId);\n this.setState({\n modifiedFilterSets: [...filterSets],\n editId: selectedId,\n });\n }\n\n // Update selected id without applying the new set on filterSets change\n updateSelectedId(): void {\n const { isValueShown, filterSets, selectedId, onChange } = this.props;\n log.debug('updateSelectedId', filterSets, selectedId);\n if (!isValueShown) {\n return;\n }\n if (!filterSets.some(({ id }) => id === selectedId)) {\n // Update the selection if selectedId doesn't exist in the list\n // Flip to the settings side for empty list to show the initial screen\n const isEmptyList = filterSets.length === 0;\n onChange({\n isValueShown: !isEmptyList,\n selectedId: isEmptyList ? undefined : filterSets[0].id,\n });\n }\n }\n\n handleEditDropdownChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value: editId } = event.target;\n this.setState({ editId });\n }\n\n handleFilterChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value: selectedId } = event.target;\n const { isValueShown, onChange } = this.props;\n this.applyFilterSet(selectedId);\n onChange({ isValueShown, selectedId });\n }\n\n handleFilterApply(): void {\n const { selectedId } = this.props;\n this.applyFilterSet(selectedId);\n }\n\n handleSettingsCancel(): void {\n const { onChange, selectedId, filterSets } = this.props;\n this.setState({ modifiedFilterSets: [] });\n // Flip the card to the filter set selection screen if the sets list isn't empty\n // Otherwise show the initial screen\n if (filterSets.length > 0) {\n onChange({ isValueShown: true, selectedId });\n }\n }\n\n handleSettingsSave(): void {\n const { onChange, onUpdateSets } = this.props;\n const { modifiedFilterSets, editId } = this.state;\n this.setState({ modifiedFilterSets: [] });\n log.debug('Update sets', modifiedFilterSets, editId);\n onUpdateSets(modifiedFilterSets);\n // Don't flip the card to the filter set selection screen if the updated sets list is empty\n if (modifiedFilterSets.length > 0) {\n onChange({ isValueShown: true, selectedId: editId });\n }\n }\n\n handleCaptureNewSet(): void {\n const { getFilterState } = this.props;\n FilterSetManager.animateScreenFlash();\n const id = shortid();\n const panels = getFilterState();\n const renameSet = {\n id,\n title: '',\n panels,\n };\n log.debug('handleSetCreate', renameSet);\n this.setState({ nameInputValue: '', nameInputError: undefined, renameSet });\n }\n\n handleRenameCancel(): void {\n this.setState({ renameSet: undefined });\n }\n\n getNameError(nameInputValue: string): string | undefined {\n const { renameSet, modifiedFilterSets } = this.state;\n const trimmedName = nameInputValue?.trim() ?? '';\n if (trimmedName.length === 0) {\n log.debug('Name cannot be empty', trimmedName);\n return 'Name cannot be empty';\n }\n\n if (\n renameSet !== undefined &&\n modifiedFilterSets.some(\n ({ title, id }) => title === trimmedName && id !== renameSet.id\n )\n ) {\n log.debug('Set with this name already exists', trimmedName);\n return 'Set with this name already exists';\n }\n\n return undefined;\n }\n\n handleRenameConfirm(): void {\n const { nameInputValue, renameSet, modifiedFilterSets } = this.state;\n if (renameSet === undefined) {\n log.error('Renamed set undefined.');\n return;\n }\n const nameInputError = this.getNameError(nameInputValue);\n log.debug('handleRenameConfirm', nameInputValue, nameInputError);\n if (nameInputError !== undefined) {\n this.setState({ nameInputError });\n return;\n }\n const trimmedName = nameInputValue?.trim() ?? '';\n const namedFilterSet = { ...renameSet, title: trimmedName };\n const selectedIndex = modifiedFilterSets.findIndex(\n ({ id }) => id === renameSet.id\n );\n const updatedModifiedFilterSets = [...modifiedFilterSets];\n\n if (selectedIndex >= 0) {\n updatedModifiedFilterSets[selectedIndex] = namedFilterSet;\n log.debug('Renamed existing set', updatedModifiedFilterSets);\n } else {\n updatedModifiedFilterSets.push(namedFilterSet);\n log.debug('Added new set to modified sets', updatedModifiedFilterSets);\n }\n\n this.setState({\n editId: namedFilterSet.id,\n modifiedFilterSets: updatedModifiedFilterSets,\n renameSet: undefined,\n });\n }\n\n handleSetDelete(): void {\n this.setState(state => {\n const { editId, modifiedFilterSets: prevFilterSets } = state;\n const selectedIndex = prevFilterSets.findIndex(({ id }) => id === editId);\n if (selectedIndex < 0) {\n log.error(\n 'Unable to find selected filterSet index',\n prevFilterSets,\n editId\n );\n return null;\n }\n const modifiedFilterSets = prevFilterSets.filter(\n ({ id }) => id !== editId\n );\n const newSelectedIndex = Math.max(\n 0,\n Math.min(modifiedFilterSets.length - 1, selectedIndex - 1)\n );\n const newSelectedId =\n modifiedFilterSets.length > 0\n ? modifiedFilterSets[newSelectedIndex].id\n : undefined;\n log.debug(\n 'Deleted selected set',\n editId,\n prevFilterSets,\n modifiedFilterSets\n );\n log.debug('New selection', newSelectedIndex, newSelectedId);\n return {\n modifiedFilterSets,\n editId: newSelectedId,\n };\n });\n }\n\n handleSetUpdate(): void {\n const { getFilterState } = this.props;\n FilterSetManager.animateScreenFlash();\n const panels = getFilterState();\n this.setState(({ modifiedFilterSets: prevFilterSets, editId }) => {\n if (editId === undefined) {\n log.error('Filter for update not selected.');\n return null;\n }\n const modifiedFilterSets = [...prevFilterSets];\n const selectedSetIndex = modifiedFilterSets.findIndex(\n ({ id }) => id === editId\n );\n if (selectedSetIndex < 0) {\n log.error('Selected set for update not found.');\n return null;\n }\n // Clone selected set to avoid mutation of the props\n modifiedFilterSets[selectedSetIndex] = {\n ...modifiedFilterSets[selectedSetIndex],\n panels,\n };\n\n log.debug('Update set', modifiedFilterSets, panels);\n return {\n modifiedFilterSets,\n };\n });\n }\n\n handleSetRename(): void {\n this.setState(({ editId, modifiedFilterSets }) => {\n const selectedSet = modifiedFilterSets.find(({ id }) => id === editId);\n if (selectedSet === undefined) {\n log.error('Could not find selected set', editId, modifiedFilterSets);\n return null;\n }\n const { title } = selectedSet;\n return {\n nameInputValue: title,\n nameInputError: undefined,\n renameSet: selectedSet,\n };\n });\n }\n\n handleSettingsClick(event: MouseEvent): void {\n event.stopPropagation();\n const { onChange, selectedId } = this.props;\n onChange({ isValueShown: false, selectedId });\n }\n\n handleBackgroundClick(event: MouseEvent): void {\n log.debug('handleBackgroundClick');\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n\n handleNameInputChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value: nameInputValue } = event.target;\n const nameInputError = this.getNameError(nameInputValue);\n this.setState({ nameInputValue, nameInputError });\n }\n\n handleNameInputKeyPress(event: KeyboardEvent): void {\n const { key } = event;\n if (key === 'Enter') {\n event.preventDefault();\n this.handleRenameConfirm();\n }\n }\n\n isNameInputScreen(state = this.state): boolean {\n const { renameSet } = state;\n return renameSet !== undefined;\n }\n\n isRenamingExistingSet = memoizeOne(\n (filterSets: FilterSet[], renameSet?: FilterSet): boolean =>\n renameSet !== undefined &&\n filterSets.some(({ id }) => id === renameSet.id)\n );\n\n applyFilterSet(selectedId?: string): void {\n const { onApply, filterSets } = this.props;\n if (selectedId === undefined) {\n log.debug('No filter selected');\n return;\n }\n const filterSet = filterSets.find(({ id }) => id === selectedId);\n if (filterSet === undefined) {\n log.debug('Selected id not found in filterSets', selectedId, filterSets);\n return;\n }\n log.debug('Apply filterSet', filterSet);\n onApply(filterSet);\n }\n\n focusInput(): void {\n this.dropdownRef.current?.focus();\n }\n\n focusRenameInput(): void {\n this.renameInputRef.current?.focus();\n }\n\n render(): ReactNode {\n const {\n nameInputValue,\n nameInputError,\n editId,\n renameSet,\n modifiedFilterSets,\n } = this.state;\n const { isValueShown, filterSets, selectedId } = this.props;\n const isNameInputScreen = this.isNameInputScreen();\n const isRenamingExistingSet = this.isRenamingExistingSet(\n modifiedFilterSets,\n renameSet\n );\n const isEmptyEditList = modifiedFilterSets.length === 0;\n const isInitialScreen =\n !isNameInputScreen && isEmptyEditList && filterSets.length === 0;\n const isEditListScreen = !isNameInputScreen && !isInitialScreen;\n const captureSetIcon = (\n <div className=\"fa-layers mr-3\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={vsDeviceCamera}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhNewCircleLargeFilled}\n className=\"text-primary\"\n transform=\"shrink-6 down-5 right-7\"\n />\n </div>\n );\n const updateSetIcon = (\n <div className=\"fa-layers\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={vsDeviceCamera}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={vsArrowSmallUp}\n transform=\"shrink-1 down-5 right-7\"\n />\n </div>\n );\n return (\n <div className=\"filter-set-manager fill-parent-absolute\">\n <CardFlip className=\"w-100 h-100\" isFlipped={isValueShown}>\n <div\n className=\"filter-set-manager-settings-card fill-parent-absolute\"\n key=\"front\"\n >\n <div className=\"filter-set-manager-card-content\">\n {isInitialScreen && (\n <div>\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline\"\n onClick={this.handleCaptureNewSet}\n icon={captureSetIcon}\n >\n Capture filter set\n </Button>\n <div className=\"py-3 text-muted small\">\n Takes a snapshot of the currently applied filters on all\n panels, allowing you to restore saved filter sets later.\n </div>\n </div>\n )}\n\n {isNameInputScreen && (\n <div className=\"d-flex flex-column justify-content-center\">\n <div className=\"form-group\">\n <label>\n {isRenamingExistingSet\n ? 'Rename set'\n : 'Name captured set'}\n </label>\n <div className=\"name-input-container\">\n <input\n type=\"text\"\n className=\"input-set-name form-control\"\n placeholder={NAME_INPUT_PLACEHOLDER}\n value={nameInputValue}\n ref={this.renameInputRef}\n onChange={this.handleNameInputChange}\n onKeyPress={this.handleNameInputKeyPress}\n spellCheck=\"false\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline pt-2 pb-2\"\n onClick={this.handleRenameConfirm}\n tooltip=\"Save\"\n icon={vsSave}\n />\n\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline pt-2 pb-2\"\n onClick={this.handleRenameCancel}\n tooltip=\"Cancel\"\n icon={vsCircleSlash}\n />\n </div>\n {nameInputError && (\n <div className=\"error-message\">{nameInputError}</div>\n )}\n </div>\n </div>\n )}\n\n {isEditListScreen && (\n <div className=\"filter-set-manager-settings-grid-1\">\n <div className=\"form-group\">\n <label>Edit filter sets</label>\n <div className=\"filter-select-container\">\n <select\n ref={this.editDropdownRef}\n value={editId ?? '-1'}\n className=\"custom-select filter-value-select\"\n onChange={this.handleEditDropdownChange}\n disabled={isEmptyEditList}\n >\n {isEmptyEditList && (\n <option value=\"-1\" disabled>\n {EMPTY_LIST_PLACEHOLDER}\n </option>\n )}\n {modifiedFilterSets.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </select>\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetUpdate}\n disabled={isEmptyEditList}\n icon={updateSetIcon}\n tooltip=\"Update\"\n />\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetRename}\n disabled={isEmptyEditList}\n icon={dhICursor}\n tooltip=\"Rename\"\n />\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetDelete}\n disabled={isEmptyEditList}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n </div>\n </div>\n\n <div>\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline\"\n onClick={this.handleCaptureNewSet}\n icon={captureSetIcon}\n >\n Capture new filter set\n </Button>\n </div>\n\n <div className=\"py-3 text-right\">\n <Button\n kind=\"secondary\"\n onClick={this.handleSettingsCancel}\n >\n Cancel\n </Button>\n \n <Button kind=\"primary\" onClick={this.handleSettingsSave}>\n Save\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n <div\n className=\"filter-set-manager-value-card fill-parent-absolute\"\n key=\"back\"\n onClick={this.handleBackgroundClick}\n >\n <>\n <div className=\"filter-set-manager-column\">\n <div className=\"filter-set-manager-column-title\">\n Filter sets\n </div>\n </div>\n <div className=\"filter-set-manager-card-content\">\n <div className=\"filter-set-manager-value-input\">\n <div className=\"filter-select-container\">\n <select\n ref={this.dropdownRef}\n value={selectedId}\n className=\"custom-select filter-value-select\"\n onChange={this.handleFilterChange}\n >\n {filterSets.length === 0 && (\n <option value=\"-1\" disabled>\n {EMPTY_LIST_PLACEHOLDER}\n </option>\n )}\n {filterSets.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </select>\n <Button\n kind=\"ghost\"\n onClick={this.handleFilterApply}\n icon={dhRefresh}\n tooltip=\"Apply Filter Set\"\n />\n </div>\n </div>\n </div>\n <div className=\"filter-set-manager-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn btn-link btn-link-icon m-2 px-2\"\n onClick={this.handleSettingsClick}\n tooltip=\"Settings\"\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n />\n </div>\n </>\n </div>\n </CardFlip>\n </div>\n );\n }\n}\n\nexport default FilterSetManager;\n"],"file":"FilterSetManager.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/panels/FilterSetManager.tsx"],"names":["React","Component","memoizeOne","shortid","FontAwesomeIcon","vsEdit","vsGear","vsSave","vsCircleSlash","vsTrash","vsDeviceCamera","dhRefresh","dhNewCircleLargeFilled","vsCircleLargeFilled","vsArrowSmallUp","Log","Button","CardFlip","RadioGroup","RadioItem","log","module","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","animateScreenFlash","overlay","document","createElement","classList","add","addEventListener","remove","querySelector","appendChild","constructor","props","createRef","filterSets","renameSet","undefined","some","id","handleSettingsCancel","bind","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleEditDropdownChange","handleFilterChange","handleFilterApply","handleCaptureNewSet","handleNameInputChange","handleNameInputKeyPress","handleRenameConfirm","handleRenameCancel","handleRestoreFullStateChange","handleSetDelete","handleSetEdit","handleSetUpdate","state","editId","nameInputValue","nameInputError","modifiedFilterSets","restoreFullState","componentDidMount","isValueShown","updateSelectedId","initSettingsScreen","componentDidUpdate","prevProps","prevState","isNameInputScreen","focusRenameInput","length","onChange","selectedId","debug","setState","isEmptyList","event","value","target","applyFilterSet","onUpdateSets","getFilterState","panels","title","getNameError","trimmedName","trim","error","namedFilterSet","selectedIndex","findIndex","updatedModifiedFilterSets","push","prevFilterSets","filter","newSelectedIndex","Math","max","min","newSelectedId","selectedSetIndex","selectedSet","find","stopPropagation","dropdownRef","current","focusInput","key","preventDefault","onApply","filterSet","focus","renameInputRef","render","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","updateSetIcon","editDropdownRef","map"],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, {\n ChangeEvent,\n Component,\n ReactNode,\n KeyboardEvent,\n MouseEvent,\n} from 'react';\nimport memoizeOne from 'memoize-one';\nimport shortid from 'shortid';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n vsEdit,\n vsGear,\n vsSave,\n vsCircleSlash,\n vsTrash,\n vsDeviceCamera,\n dhRefresh,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsArrowSmallUp,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { Button, CardFlip, RadioGroup, RadioItem } from '@deephaven/components';\n\nimport './FilterSetManager.scss';\n\nconst log = Log.module('FilterSetManager');\n\nexport interface FilterSetPanel {\n id: string;\n state: unknown;\n}\n\nexport interface FilterSet {\n id: string;\n title: string;\n panels: FilterSetPanel[];\n restoreFullState?: boolean;\n}\n\nexport interface ChangeHandlerArgs {\n isValueShown: boolean;\n selectedId?: string;\n}\n\ninterface FilterSetManagerProps {\n isValueShown: boolean;\n selectedId?: string;\n filterSets: FilterSet[];\n getFilterState(): FilterSetPanel[];\n onChange(args: ChangeHandlerArgs): void;\n onApply(filterSet: FilterSet): void;\n onUpdateSets(filterSets: FilterSet[], editId?: string): void;\n}\n\ninterface FilterSetManagerState {\n nameInputValue: string;\n nameInputError?: string;\n editId?: string;\n renameSet?: FilterSet;\n // Unsaved set changes on the settings screen\n modifiedFilterSets: FilterSet[];\n restoreFullState: boolean;\n}\n\nconst NAME_INPUT_PLACEHOLDER = 'Enter name...';\n\nconst EMPTY_LIST_PLACEHOLDER = 'No Available Filter Sets';\n\nclass FilterSetManager extends Component<\n FilterSetManagerProps,\n FilterSetManagerState\n> {\n static animateScreenFlash(): void {\n const overlay = document.createElement('div');\n overlay.classList.add('screen-flash-overlay');\n overlay.addEventListener('animationend', () => {\n // Removing the element removes its event listeners\n overlay.remove();\n });\n document.querySelector('body')?.appendChild(overlay);\n }\n\n constructor(props: FilterSetManagerProps) {\n super(props);\n\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleEditDropdownChange = this.handleEditDropdownChange.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterApply = this.handleFilterApply.bind(this);\n this.handleCaptureNewSet = this.handleCaptureNewSet.bind(this);\n this.handleNameInputChange = this.handleNameInputChange.bind(this);\n this.handleNameInputKeyPress = this.handleNameInputKeyPress.bind(this);\n this.handleRenameConfirm = this.handleRenameConfirm.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRestoreFullStateChange = this.handleRestoreFullStateChange.bind(\n this\n );\n\n this.handleSetDelete = this.handleSetDelete.bind(this);\n this.handleSetEdit = this.handleSetEdit.bind(this);\n this.handleSetUpdate = this.handleSetUpdate.bind(this);\n\n this.state = {\n editId: undefined,\n renameSet: undefined,\n nameInputValue: '',\n nameInputError: undefined,\n modifiedFilterSets: [],\n restoreFullState: false,\n };\n }\n\n componentDidMount(): void {\n const { isValueShown } = this.props;\n if (isValueShown) {\n this.updateSelectedId();\n } else {\n this.initSettingsScreen();\n }\n }\n\n componentDidUpdate(\n prevProps: FilterSetManagerProps,\n prevState: FilterSetManagerState\n ): void {\n const { isValueShown, filterSets } = this.props;\n const { modifiedFilterSets } = this.state;\n\n if (prevProps.isValueShown && !isValueShown) {\n this.initSettingsScreen();\n }\n\n if (this.isNameInputScreen() && !this.isNameInputScreen(prevState)) {\n this.focusRenameInput();\n }\n\n if (filterSets !== prevProps.filterSets) {\n if (\n !isValueShown &&\n filterSets.length > 0 &&\n prevProps.filterSets.length === 0 &&\n modifiedFilterSets.length === 0\n ) {\n // Filter set added from another panel, flip from the settings side/initial screen to the value side\n const { onChange } = this.props;\n onChange({ isValueShown: true, selectedId: filterSets[0].id });\n } else {\n this.updateSelectedId();\n }\n }\n }\n\n private renameInputRef = React.createRef<HTMLInputElement>();\n\n private dropdownRef = React.createRef<HTMLSelectElement>();\n\n private editDropdownRef = React.createRef<HTMLSelectElement>();\n\n initSettingsScreen(): void {\n const { filterSets, selectedId } = this.props;\n log.debug('initSettingsScreen', filterSets, selectedId);\n this.setState({\n modifiedFilterSets: [...filterSets],\n editId: selectedId,\n });\n }\n\n // Update selected id without applying the new set on filterSets change\n updateSelectedId(): void {\n const { isValueShown, filterSets, selectedId, onChange } = this.props;\n log.debug('updateSelectedId', filterSets, selectedId);\n if (!isValueShown) {\n return;\n }\n if (!filterSets.some(({ id }) => id === selectedId)) {\n // Update the selection if selectedId doesn't exist in the list\n // Flip to the settings side for empty list to show the initial screen\n const isEmptyList = filterSets.length === 0;\n onChange({\n isValueShown: !isEmptyList,\n selectedId: isEmptyList ? undefined : filterSets[0].id,\n });\n }\n }\n\n handleEditDropdownChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value: editId } = event.target;\n this.setState({ editId });\n }\n\n handleFilterChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value: selectedId } = event.target;\n const { isValueShown, onChange } = this.props;\n this.applyFilterSet(selectedId);\n onChange({ isValueShown, selectedId });\n }\n\n handleFilterApply(): void {\n const { selectedId } = this.props;\n this.applyFilterSet(selectedId);\n }\n\n handleSettingsCancel(): void {\n const { onChange, selectedId, filterSets } = this.props;\n this.setState({ modifiedFilterSets: [] });\n // Flip the card to the filter set selection screen if the sets list isn't empty\n // Otherwise show the initial screen\n if (filterSets.length > 0) {\n onChange({ isValueShown: true, selectedId });\n }\n }\n\n handleSettingsSave(): void {\n const { onChange, onUpdateSets } = this.props;\n const { modifiedFilterSets, editId } = this.state;\n this.setState({ modifiedFilterSets: [] });\n log.debug('Update sets', modifiedFilterSets, editId);\n onUpdateSets(modifiedFilterSets);\n // Don't flip the card to the filter set selection screen if the updated sets list is empty\n if (modifiedFilterSets.length > 0) {\n onChange({ isValueShown: true, selectedId: editId });\n }\n }\n\n handleCaptureNewSet(): void {\n const { getFilterState } = this.props;\n FilterSetManager.animateScreenFlash();\n const id = shortid();\n const panels = getFilterState();\n const renameSet = {\n id,\n title: '',\n panels,\n };\n log.debug('handleSetCreate', renameSet);\n this.setState({ nameInputValue: '', nameInputError: undefined, renameSet });\n }\n\n handleRenameCancel(): void {\n this.setState({ renameSet: undefined });\n }\n\n handleRestoreFullStateChange(event: ChangeEvent<HTMLInputElement>): void {\n this.setState({\n restoreFullState: event.target.value === 'true',\n });\n }\n\n getNameError(nameInputValue: string): string | undefined {\n const { renameSet, modifiedFilterSets } = this.state;\n const trimmedName = nameInputValue?.trim() ?? '';\n if (trimmedName.length === 0) {\n log.debug('Name cannot be empty', trimmedName);\n return 'Name cannot be empty';\n }\n\n if (\n renameSet !== undefined &&\n modifiedFilterSets.some(\n ({ title, id }) => title === trimmedName && id !== renameSet.id\n )\n ) {\n log.debug('Set with this name already exists', trimmedName);\n return 'Set with this name already exists';\n }\n\n return undefined;\n }\n\n handleRenameConfirm(): void {\n const {\n nameInputValue,\n renameSet,\n modifiedFilterSets,\n restoreFullState,\n } = this.state;\n if (renameSet === undefined) {\n log.error('Renamed set undefined.');\n return;\n }\n const nameInputError = this.getNameError(nameInputValue);\n log.debug('handleRenameConfirm', nameInputValue, nameInputError);\n if (nameInputError !== undefined) {\n this.setState({ nameInputError });\n return;\n }\n const trimmedName = nameInputValue?.trim() ?? '';\n const namedFilterSet = {\n ...renameSet,\n title: trimmedName,\n restoreFullState,\n };\n const selectedIndex = modifiedFilterSets.findIndex(\n ({ id }) => id === renameSet.id\n );\n const updatedModifiedFilterSets = [...modifiedFilterSets];\n\n if (selectedIndex >= 0) {\n updatedModifiedFilterSets[selectedIndex] = namedFilterSet;\n log.debug('Renamed existing set', updatedModifiedFilterSets);\n } else {\n updatedModifiedFilterSets.push(namedFilterSet);\n log.debug('Added new set to modified sets', updatedModifiedFilterSets);\n }\n\n this.setState({\n editId: namedFilterSet.id,\n modifiedFilterSets: updatedModifiedFilterSets,\n renameSet: undefined,\n });\n }\n\n handleSetDelete(): void {\n this.setState(state => {\n const { editId, modifiedFilterSets: prevFilterSets } = state;\n const selectedIndex = prevFilterSets.findIndex(({ id }) => id === editId);\n if (selectedIndex < 0) {\n log.error(\n 'Unable to find selected filterSet index',\n prevFilterSets,\n editId\n );\n return null;\n }\n const modifiedFilterSets = prevFilterSets.filter(\n ({ id }) => id !== editId\n );\n const newSelectedIndex = Math.max(\n 0,\n Math.min(modifiedFilterSets.length - 1, selectedIndex - 1)\n );\n const newSelectedId =\n modifiedFilterSets.length > 0\n ? modifiedFilterSets[newSelectedIndex].id\n : undefined;\n log.debug(\n 'Deleted selected set',\n editId,\n prevFilterSets,\n modifiedFilterSets\n );\n log.debug('New selection', newSelectedIndex, newSelectedId);\n return {\n modifiedFilterSets,\n editId: newSelectedId,\n };\n });\n }\n\n handleSetUpdate(): void {\n const { getFilterState } = this.props;\n FilterSetManager.animateScreenFlash();\n const panels = getFilterState();\n this.setState(({ modifiedFilterSets: prevFilterSets, editId }) => {\n if (editId === undefined) {\n log.error('Filter for update not selected.');\n return null;\n }\n const modifiedFilterSets = [...prevFilterSets];\n const selectedSetIndex = modifiedFilterSets.findIndex(\n ({ id }) => id === editId\n );\n if (selectedSetIndex < 0) {\n log.error('Selected set for update not found.');\n return null;\n }\n // Clone selected set to avoid mutation of the props\n modifiedFilterSets[selectedSetIndex] = {\n ...modifiedFilterSets[selectedSetIndex],\n panels,\n };\n\n log.debug('Update set', modifiedFilterSets, panels);\n return {\n modifiedFilterSets,\n };\n });\n }\n\n handleSetEdit(): void {\n this.setState(({ editId, modifiedFilterSets }) => {\n const selectedSet = modifiedFilterSets.find(({ id }) => id === editId);\n if (selectedSet === undefined) {\n log.error('Could not find selected set', editId, modifiedFilterSets);\n return null;\n }\n const { title, restoreFullState = false } = selectedSet;\n return {\n nameInputValue: title,\n nameInputError: undefined,\n renameSet: selectedSet,\n restoreFullState,\n };\n });\n }\n\n handleSettingsClick(event: MouseEvent): void {\n event.stopPropagation();\n const { onChange, selectedId } = this.props;\n onChange({ isValueShown: false, selectedId });\n }\n\n handleBackgroundClick(event: MouseEvent): void {\n log.debug('handleBackgroundClick');\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n\n handleNameInputChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value: nameInputValue } = event.target;\n const nameInputError = this.getNameError(nameInputValue);\n this.setState({ nameInputValue, nameInputError });\n }\n\n handleNameInputKeyPress(event: KeyboardEvent): void {\n const { key } = event;\n if (key === 'Enter') {\n event.preventDefault();\n this.handleRenameConfirm();\n }\n }\n\n isNameInputScreen(state = this.state): boolean {\n const { renameSet } = state;\n return renameSet !== undefined;\n }\n\n isRenamingExistingSet = memoizeOne(\n (filterSets: FilterSet[], renameSet?: FilterSet): boolean =>\n renameSet !== undefined &&\n filterSets.some(({ id }) => id === renameSet.id)\n );\n\n applyFilterSet(selectedId?: string): void {\n const { onApply, filterSets } = this.props;\n if (selectedId === undefined) {\n log.debug('No filter selected');\n return;\n }\n const filterSet = filterSets.find(({ id }) => id === selectedId);\n if (filterSet === undefined) {\n log.debug('Selected id not found in filterSets', selectedId, filterSets);\n return;\n }\n log.debug('Apply filterSet', filterSet);\n onApply(filterSet);\n }\n\n focusInput(): void {\n this.dropdownRef.current?.focus();\n }\n\n focusRenameInput(): void {\n this.renameInputRef.current?.focus();\n }\n\n render(): ReactNode {\n const {\n nameInputValue,\n nameInputError,\n editId,\n renameSet,\n modifiedFilterSets,\n restoreFullState,\n } = this.state;\n const { isValueShown, filterSets, selectedId } = this.props;\n const isNameInputScreen = this.isNameInputScreen();\n const isRenamingExistingSet = this.isRenamingExistingSet(\n modifiedFilterSets,\n renameSet\n );\n const isEmptyEditList = modifiedFilterSets.length === 0;\n const isInitialScreen =\n !isNameInputScreen && isEmptyEditList && filterSets.length === 0;\n const isEditListScreen = !isNameInputScreen && !isInitialScreen;\n const captureSetIcon = (\n <div className=\"fa-layers mr-3\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={vsDeviceCamera}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhNewCircleLargeFilled}\n className=\"text-primary\"\n transform=\"shrink-6 down-5 right-7\"\n />\n </div>\n );\n const updateSetIcon = (\n <div className=\"fa-layers\">\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={vsDeviceCamera}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={vsArrowSmallUp}\n transform=\"shrink-1 down-5 right-7\"\n />\n </div>\n );\n return (\n <div className=\"filter-set-manager fill-parent-absolute\">\n <CardFlip className=\"w-100 h-100\" isFlipped={isValueShown}>\n <div\n className=\"filter-set-manager-settings-card fill-parent-absolute\"\n key=\"front\"\n >\n <div className=\"filter-set-manager-card-content\">\n {isInitialScreen && (\n <div>\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline\"\n onClick={this.handleCaptureNewSet}\n icon={captureSetIcon}\n >\n Capture filter set\n </Button>\n <div className=\"py-3 text-muted small\">\n Takes a snapshot of the currently applied filters on all\n panels, allowing you to restore saved filter sets later.\n </div>\n </div>\n )}\n\n {isNameInputScreen && (\n <div\n className=\"d-flex flex-column justify-content-center\"\n data-testid=\"edit-filter-set-container\"\n >\n <div className=\"form-group\">\n <label>\n {isRenamingExistingSet ? 'Edit set' : 'Name captured set'}\n </label>\n <div className=\"name-input-container\">\n <input\n type=\"text\"\n className=\"input-set-name form-control\"\n placeholder={NAME_INPUT_PLACEHOLDER}\n value={nameInputValue}\n ref={this.renameInputRef}\n onChange={this.handleNameInputChange}\n onKeyPress={this.handleNameInputKeyPress}\n spellCheck=\"false\"\n />\n <Button\n data-testid=\"rename-confirm-button\"\n kind=\"ghost\"\n className=\"btn btn-link no-underline pt-2 pb-2\"\n onClick={this.handleRenameConfirm}\n tooltip=\"Save\"\n test-id=\"button-save\"\n icon={vsSave}\n />\n\n <Button\n data-testid=\"rename-cancel-button\"\n kind=\"ghost\"\n className=\"btn btn-link no-underline pt-2 pb-2\"\n onClick={this.handleRenameCancel}\n tooltip=\"Cancel\"\n icon={vsCircleSlash}\n />\n </div>\n {nameInputError && (\n <div className=\"error-message\">{nameInputError}</div>\n )}\n </div>\n <div className=\"form-group\">\n <RadioGroup\n onChange={this.handleRestoreFullStateChange}\n value={`${restoreFullState}`}\n >\n <RadioItem value=\"false\">Restore only filters</RadioItem>\n <RadioItem value=\"true\">\n Restore full table state\n </RadioItem>\n </RadioGroup>\n </div>\n </div>\n )}\n\n {isEditListScreen && (\n <div className=\"filter-set-manager-settings-grid-1\">\n <div className=\"form-group\">\n <label>Edit filter sets</label>\n <div className=\"filter-select-container\">\n <select\n data-testid=\"settings-card-filter-select\"\n ref={this.editDropdownRef}\n value={editId ?? '-1'}\n className=\"custom-select filter-value-select\"\n onChange={this.handleEditDropdownChange}\n disabled={isEmptyEditList}\n >\n {isEmptyEditList && (\n <option value=\"-1\" disabled>\n {EMPTY_LIST_PLACEHOLDER}\n </option>\n )}\n {modifiedFilterSets.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </select>\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetUpdate}\n disabled={isEmptyEditList}\n icon={updateSetIcon}\n tooltip=\"Update\"\n />\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetEdit}\n disabled={isEmptyEditList}\n icon={vsEdit}\n tooltip=\"Edit\"\n />\n\n <Button\n kind=\"ghost\"\n onClick={this.handleSetDelete}\n disabled={isEmptyEditList}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n </div>\n </div>\n\n <div>\n <Button\n kind=\"ghost\"\n className=\"btn btn-link no-underline\"\n onClick={this.handleCaptureNewSet}\n icon={captureSetIcon}\n >\n Capture new filter set\n </Button>\n </div>\n\n <div className=\"py-3 text-right\">\n <Button\n kind=\"secondary\"\n onClick={this.handleSettingsCancel}\n >\n Cancel\n </Button>\n \n <Button kind=\"primary\" onClick={this.handleSettingsSave}>\n Save\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n <div\n className=\"filter-set-manager-value-card fill-parent-absolute\"\n key=\"back\"\n onClick={this.handleBackgroundClick}\n >\n <>\n <div className=\"filter-set-manager-column\">\n <div className=\"filter-set-manager-column-title\">\n Filter sets\n </div>\n </div>\n <div className=\"filter-set-manager-card-content\">\n <div className=\"filter-set-manager-value-input\">\n <div className=\"filter-select-container\">\n <select\n data-testid=\"value-card-filter-select\"\n ref={this.dropdownRef}\n value={selectedId}\n className=\"custom-select filter-value-select\"\n onChange={this.handleFilterChange}\n >\n {filterSets.length === 0 && (\n <option value=\"-1\" disabled>\n {EMPTY_LIST_PLACEHOLDER}\n </option>\n )}\n {filterSets.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </select>\n <Button\n data-testid=\"filter-apply-button\"\n kind=\"ghost\"\n onClick={this.handleFilterApply}\n icon={dhRefresh}\n tooltip=\"Apply Filter Set\"\n />\n </div>\n </div>\n </div>\n <div className=\"filter-set-manager-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn btn-link btn-link-icon m-2 px-2\"\n onClick={this.handleSettingsClick}\n tooltip=\"Settings\"\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n />\n </div>\n </>\n </div>\n </CardFlip>\n </div>\n );\n }\n}\n\nexport default FilterSetManager;\n"],"file":"FilterSetManager.js"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
export default _default;
|
|
3
|
-
declare class FilterSetManagerPanel extends React.Component<any, any, any> {
|
|
1
|
+
export class FilterSetManagerPanel extends React.Component<any, any, any> {
|
|
4
2
|
static COMPONENT: string;
|
|
5
|
-
static changeFilterColumnNamesToIndexes(table: any, configs: any): any;
|
|
6
3
|
static changeFilterIndexesToColumnNames(table: any, configs: any): any;
|
|
7
4
|
constructor(props: any);
|
|
8
5
|
handleChange({ isValueShown, selectedId }: {
|
|
@@ -14,14 +11,14 @@ declare class FilterSetManagerPanel extends React.Component<any, any, any> {
|
|
|
14
11
|
handleGetFilterState(): any[];
|
|
15
12
|
getFilterState(): any[];
|
|
16
13
|
getIrisGridPanelFilters(panelId: any, panelState: any): {
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
irisGridState: any;
|
|
15
|
+
gridState: any;
|
|
19
16
|
} | null;
|
|
20
17
|
updatePanelState(): void;
|
|
21
|
-
restoreIrisGridFilters(panel: any, state: any): void;
|
|
18
|
+
restoreIrisGridFilters(panel: any, state: any, restoreFullState: any): void;
|
|
22
19
|
restoreInputFilterState(panel: any, state: any): void;
|
|
23
20
|
}
|
|
24
|
-
|
|
21
|
+
export namespace FilterSetManagerPanel {
|
|
25
22
|
namespace propTypes {
|
|
26
23
|
const glContainer: PropTypes.Validator<PropTypes.InferProps<{
|
|
27
24
|
on: PropTypes.Requireable<(...args: any[]) => any>;
|
|
@@ -64,6 +61,8 @@ declare namespace FilterSetManagerPanel {
|
|
|
64
61
|
export { panelState_1 as panelState };
|
|
65
62
|
}
|
|
66
63
|
}
|
|
64
|
+
declare var _default: import("react-redux").ConnectedComponent<typeof FilterSetManagerPanel, any>;
|
|
65
|
+
export default _default;
|
|
67
66
|
import React from "react";
|
|
68
67
|
import PropTypes from "prop-types";
|
|
69
68
|
//# sourceMappingURL=FilterSetManagerPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterSetManagerPanel.d.ts","sourceRoot":"","sources":["../../src/panels/FilterSetManagerPanel.jsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FilterSetManagerPanel.d.ts","sourceRoot":"","sources":["../../src/panels/FilterSetManagerPanel.jsx"],"names":[],"mappings":"AA0BA;IACE,yBAA2C;IAE3C,uEAUC;IAED,wBAoBC;IAkGD;;;aAIC;IAED,wCAsBC;IAED,gDAMC;IAxCD,8BAEC;IA7FD,wBAkDC;IAED;;;aAqCC;IA4CD,yBAQC;IAED,4EAyBC;IAGD,sDAMC;CA4BF"}
|
|
@@ -18,22 +18,10 @@ import InputFilterPanel from "./InputFilterPanel.js";
|
|
|
18
18
|
import DropdownFilterPanel from "./DropdownFilterPanel.js";
|
|
19
19
|
import "./FilterSetManagerPanel.css";
|
|
20
20
|
var log = Log.module('FilterSetManagerPanel');
|
|
21
|
-
|
|
22
|
-
class FilterSetManagerPanel extends Component {
|
|
23
|
-
static changeFilterColumnNamesToIndexes(table, configs) {
|
|
24
|
-
return configs.map(_ref => {
|
|
25
|
-
var {
|
|
26
|
-
name,
|
|
27
|
-
filter
|
|
28
|
-
} = _ref;
|
|
29
|
-
var index = table.columns.findIndex(column => column.name === name);
|
|
30
|
-
return index < 0 ? null : [index, filter];
|
|
31
|
-
}).filter(config => config != null);
|
|
32
|
-
}
|
|
33
|
-
|
|
21
|
+
export class FilterSetManagerPanel extends Component {
|
|
34
22
|
static changeFilterIndexesToColumnNames(table, configs) {
|
|
35
|
-
return configs.map(
|
|
36
|
-
var [index, filter] =
|
|
23
|
+
return configs.map(_ref => {
|
|
24
|
+
var [index, filter] = _ref;
|
|
37
25
|
|
|
38
26
|
if (index >= table.columns.length) {
|
|
39
27
|
return null;
|
|
@@ -164,19 +152,23 @@ class FilterSetManagerPanel extends Component {
|
|
|
164
152
|
|
|
165
153
|
|
|
166
154
|
var {
|
|
167
|
-
irisGridState =
|
|
155
|
+
irisGridState = {},
|
|
156
|
+
gridState = {}
|
|
168
157
|
} = panelState;
|
|
169
158
|
var {
|
|
170
|
-
advancedFilters: indexedAdvancedFilters
|
|
171
|
-
quickFilters: indexedQuickFilters
|
|
172
|
-
} = irisGridState
|
|
159
|
+
advancedFilters: indexedAdvancedFilters,
|
|
160
|
+
quickFilters: indexedQuickFilters
|
|
161
|
+
} = irisGridState;
|
|
173
162
|
var dehydratedAdvancedFilters = IrisGridUtils.dehydrateAdvancedFilters(table.columns, indexedAdvancedFilters);
|
|
174
163
|
var advancedFilters = FilterSetManagerPanel.changeFilterIndexesToColumnNames(table, dehydratedAdvancedFilters);
|
|
175
164
|
var dehydratedQuickFilters = IrisGridUtils.dehydrateQuickFilters(indexedQuickFilters);
|
|
176
165
|
var quickFilters = FilterSetManagerPanel.changeFilterIndexesToColumnNames(table, dehydratedQuickFilters);
|
|
177
166
|
return {
|
|
178
|
-
|
|
179
|
-
|
|
167
|
+
irisGridState: _objectSpread(_objectSpread({}, irisGridState), {}, {
|
|
168
|
+
advancedFilters,
|
|
169
|
+
quickFilters
|
|
170
|
+
}),
|
|
171
|
+
gridState: _objectSpread({}, gridState)
|
|
180
172
|
};
|
|
181
173
|
}
|
|
182
174
|
|
|
@@ -184,11 +176,11 @@ class FilterSetManagerPanel extends Component {
|
|
|
184
176
|
return this.getFilterState();
|
|
185
177
|
}
|
|
186
178
|
|
|
187
|
-
handleChange(
|
|
179
|
+
handleChange(_ref2) {
|
|
188
180
|
var {
|
|
189
181
|
isValueShown,
|
|
190
182
|
selectedId
|
|
191
|
-
} =
|
|
183
|
+
} = _ref2;
|
|
192
184
|
log.debug('handleChange', isValueShown, selectedId);
|
|
193
185
|
this.setState({
|
|
194
186
|
isValueShown,
|
|
@@ -202,15 +194,16 @@ class FilterSetManagerPanel extends Component {
|
|
|
202
194
|
dashboardOpenedPanelMap
|
|
203
195
|
} = this.props;
|
|
204
196
|
var {
|
|
205
|
-
panels
|
|
197
|
+
panels,
|
|
198
|
+
restoreFullState = false
|
|
206
199
|
} = filterSet;
|
|
207
200
|
log.debug("Apply filters from filter set", filterSet);
|
|
208
|
-
panels.forEach(
|
|
201
|
+
panels.forEach(_ref3 => {
|
|
209
202
|
var {
|
|
210
203
|
panelId,
|
|
211
204
|
type,
|
|
212
205
|
state
|
|
213
|
-
} =
|
|
206
|
+
} = _ref3;
|
|
214
207
|
|
|
215
208
|
if (!dashboardOpenedPanelMap.has(panelId)) {
|
|
216
209
|
log.debug('Ignore closed panel', panelId);
|
|
@@ -222,7 +215,7 @@ class FilterSetManagerPanel extends Component {
|
|
|
222
215
|
|
|
223
216
|
switch (type) {
|
|
224
217
|
case LayoutUtils.getComponentName(IrisGridPanel):
|
|
225
|
-
this.restoreIrisGridFilters(panel, state);
|
|
218
|
+
this.restoreIrisGridFilters(panel, state, restoreFullState);
|
|
226
219
|
break;
|
|
227
220
|
|
|
228
221
|
case LayoutUtils.getComponentName(InputFilterPanel):
|
|
@@ -247,11 +240,11 @@ class FilterSetManagerPanel extends Component {
|
|
|
247
240
|
}
|
|
248
241
|
|
|
249
242
|
updatePanelState() {
|
|
250
|
-
this.setState(
|
|
243
|
+
this.setState(_ref4 => {
|
|
251
244
|
var {
|
|
252
245
|
selectedId,
|
|
253
246
|
isValueShown
|
|
254
|
-
} =
|
|
247
|
+
} = _ref4;
|
|
255
248
|
return {
|
|
256
249
|
// eslint-disable-next-line react/no-unused-state
|
|
257
250
|
panelState: {
|
|
@@ -262,11 +255,18 @@ class FilterSetManagerPanel extends Component {
|
|
|
262
255
|
});
|
|
263
256
|
}
|
|
264
257
|
|
|
265
|
-
restoreIrisGridFilters(panel, state) {
|
|
258
|
+
restoreIrisGridFilters(panel, state, restoreFullState) {
|
|
259
|
+
// Fall back to state.advancedFilters and state.quickFilters
|
|
260
|
+
// for backward compatibility with filter sets that only contain filters
|
|
266
261
|
var {
|
|
267
|
-
|
|
268
|
-
|
|
262
|
+
irisGridState = {},
|
|
263
|
+
advancedFilters: prevAdvancedFilters = [],
|
|
264
|
+
quickFilters: prevQuickFilters = []
|
|
269
265
|
} = state;
|
|
266
|
+
var {
|
|
267
|
+
advancedFilters = prevAdvancedFilters,
|
|
268
|
+
quickFilters = prevQuickFilters
|
|
269
|
+
} = irisGridState;
|
|
270
270
|
var {
|
|
271
271
|
panelTableMap
|
|
272
272
|
} = this.props;
|
|
@@ -278,13 +278,16 @@ class FilterSetManagerPanel extends Component {
|
|
|
278
278
|
return;
|
|
279
279
|
}
|
|
280
280
|
|
|
281
|
-
log.debug('restoreIrisGridFilters', panelId, state);
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
281
|
+
log.debug('restoreIrisGridFilters', panelId, state, restoreFullState);
|
|
282
|
+
|
|
283
|
+
if (restoreFullState) {
|
|
284
|
+
panel.setStateOverrides(state);
|
|
285
|
+
} else {
|
|
286
|
+
panel.setFilters({
|
|
287
|
+
quickFilters,
|
|
288
|
+
advancedFilters
|
|
289
|
+
});
|
|
290
|
+
}
|
|
288
291
|
} // eslint-disable-next-line class-methods-use-this
|
|
289
292
|
|
|
290
293
|
|