@deephaven/dashboard-core-plugins 1.22.1 → 1.22.2-alpha-pivot-builder.0730ba6.0

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.
Files changed (105) hide show
  1. package/dist/ChartBuilderPlugin.js +8 -15
  2. package/dist/ChartBuilderPlugin.js.map +1 -1
  3. package/dist/ChartPanelPlugin.js +13 -6
  4. package/dist/ChartPanelPlugin.js.map +1 -1
  5. package/dist/ChartWidgetPlugin.js +11 -4
  6. package/dist/ChartWidgetPlugin.js.map +1 -1
  7. package/dist/ConsolePlugin.js +38 -46
  8. package/dist/ConsolePlugin.js.map +1 -1
  9. package/dist/FilterPlugin.js +63 -44
  10. package/dist/FilterPlugin.js.map +1 -1
  11. package/dist/GridPanelPlugin.js +3 -5
  12. package/dist/GridPanelPlugin.js.map +1 -1
  13. package/dist/GridWidgetPlugin.d.ts +18 -1
  14. package/dist/GridWidgetPlugin.d.ts.map +1 -1
  15. package/dist/GridWidgetPlugin.js +54 -30
  16. package/dist/GridWidgetPlugin.js.map +1 -1
  17. package/dist/LinkerPlugin.js +3 -5
  18. package/dist/LinkerPlugin.js.map +1 -1
  19. package/dist/MarkdownPlugin.js +18 -17
  20. package/dist/MarkdownPlugin.js.map +1 -1
  21. package/dist/PandasPanelPlugin.js +3 -5
  22. package/dist/PandasPanelPlugin.js.map +1 -1
  23. package/dist/PandasWidgetPlugin.js +3 -7
  24. package/dist/PandasWidgetPlugin.js.map +1 -1
  25. package/dist/TablePluginWrapper.js +8 -10
  26. package/dist/TablePluginWrapper.js.map +1 -1
  27. package/dist/WidgetLoaderPlugin.js +24 -29
  28. package/dist/WidgetLoaderPlugin.js.map +1 -1
  29. package/dist/controls/dropdown-filter/DropdownFilter.js +63 -79
  30. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  31. package/dist/controls/input-filter/InputFilter.js +32 -58
  32. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  33. package/dist/controls/markdown/MarkdownContainer.js +4 -5
  34. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  35. package/dist/controls/markdown/MarkdownEditor.js +7 -10
  36. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  37. package/dist/controls/markdown/MarkdownStartPage.js +8 -12
  38. package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
  39. package/dist/linker/Linker.js +100 -192
  40. package/dist/linker/Linker.js.map +1 -1
  41. package/dist/linker/LinkerLink.js +23 -31
  42. package/dist/linker/LinkerLink.js.map +1 -1
  43. package/dist/linker/LinkerOverlayContent.js +65 -66
  44. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  45. package/dist/linker/LinkerUtils.js +6 -14
  46. package/dist/linker/LinkerUtils.js.map +1 -1
  47. package/dist/panels/ChartColumnSelectorOverlay.js +4 -6
  48. package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
  49. package/dist/panels/ChartFilterOverlay.js +7 -9
  50. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  51. package/dist/panels/ChartPanel.js +136 -220
  52. package/dist/panels/ChartPanel.js.map +1 -1
  53. package/dist/panels/ChartPanelUtils.js +3 -4
  54. package/dist/panels/ChartPanelUtils.js.map +1 -1
  55. package/dist/panels/CommandHistoryPanel.js +33 -52
  56. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  57. package/dist/panels/ConsolePanel.js +68 -130
  58. package/dist/panels/ConsolePanel.js.map +1 -1
  59. package/dist/panels/CorePanel.js +6 -18
  60. package/dist/panels/CorePanel.js.map +1 -1
  61. package/dist/panels/DropdownFilterPanel.js +109 -165
  62. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  63. package/dist/panels/FileExplorerPanel.js +30 -55
  64. package/dist/panels/FileExplorerPanel.js.map +1 -1
  65. package/dist/panels/FilterSetManager.js +81 -141
  66. package/dist/panels/FilterSetManager.js.map +1 -1
  67. package/dist/panels/FilterSetManagerPanel.js +68 -87
  68. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  69. package/dist/panels/InputFilterPanel.js +45 -68
  70. package/dist/panels/InputFilterPanel.js.map +1 -1
  71. package/dist/panels/IrisGridPanel.d.ts +28 -6
  72. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  73. package/dist/panels/IrisGridPanel.js +224 -280
  74. package/dist/panels/IrisGridPanel.js.map +1 -1
  75. package/dist/panels/IrisGridPanelTooltip.js +1 -3
  76. package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
  77. package/dist/panels/LogPanel.js +6 -13
  78. package/dist/panels/LogPanel.js.map +1 -1
  79. package/dist/panels/MarkdownNotebook.js +28 -50
  80. package/dist/panels/MarkdownNotebook.js.map +1 -1
  81. package/dist/panels/MarkdownPanel.js +19 -38
  82. package/dist/panels/MarkdownPanel.js.map +1 -1
  83. package/dist/panels/NotebookPanel.js +157 -292
  84. package/dist/panels/NotebookPanel.js.map +1 -1
  85. package/dist/panels/PandasPanel.js +5 -15
  86. package/dist/panels/PandasPanel.js.map +1 -1
  87. package/dist/panels/PandasReloadButton.js +1 -3
  88. package/dist/panels/PandasReloadButton.js.map +1 -1
  89. package/dist/panels/WidgetPanel.js +42 -51
  90. package/dist/panels/WidgetPanel.js.map +1 -1
  91. package/dist/panels/WidgetPanelTooltip.js +6 -10
  92. package/dist/panels/WidgetPanelTooltip.js.map +1 -1
  93. package/dist/useConfigureRuff.js +8 -9
  94. package/dist/useConfigureRuff.js.map +1 -1
  95. package/dist/useDashboardColumnFilters.js +4 -7
  96. package/dist/useDashboardColumnFilters.js.map +1 -1
  97. package/dist/useGridLinker.js +9 -16
  98. package/dist/useGridLinker.js.map +1 -1
  99. package/dist/useIrisGridModel.d.ts +2 -2
  100. package/dist/useIrisGridModel.d.ts.map +1 -1
  101. package/dist/useIrisGridModel.js +34 -6
  102. package/dist/useIrisGridModel.js.map +1 -1
  103. package/dist/useTablePlugin.js +27 -14
  104. package/dist/useTablePlugin.js.map +1 -1
  105. package/package.json +24 -24
@@ -36,9 +36,7 @@ class FilterSetManager extends Component {
36
36
  _defineProperty(this, "dropdownRef", /*#__PURE__*/React.createRef());
37
37
  _defineProperty(this, "editDropdownRef", /*#__PURE__*/React.createRef());
38
38
  _defineProperty(this, "isRenamingExistingSet", memoizeOne((filterSets, renameSet) => renameSet !== undefined && filterSets.some(_ref => {
39
- var {
40
- id
41
- } = _ref;
39
+ var id = _ref.id;
42
40
  return id === renameSet.id;
43
41
  })));
44
42
  this.handleSettingsCancel = this.handleSettingsCancel.bind(this);
@@ -67,9 +65,7 @@ class FilterSetManager extends Component {
67
65
  };
68
66
  }
69
67
  componentDidMount() {
70
- var {
71
- isValueShown
72
- } = this.props;
68
+ var isValueShown = this.props.isValueShown;
73
69
  if (isValueShown) {
74
70
  this.updateSelectedId();
75
71
  } else {
@@ -77,13 +73,10 @@ class FilterSetManager extends Component {
77
73
  }
78
74
  }
79
75
  componentDidUpdate(prevProps, prevState) {
80
- var {
81
- isValueShown,
82
- filterSets
83
- } = this.props;
84
- var {
85
- modifiedFilterSets
86
- } = this.state;
76
+ var _this$props = this.props,
77
+ isValueShown = _this$props.isValueShown,
78
+ filterSets = _this$props.filterSets;
79
+ var modifiedFilterSets = this.state.modifiedFilterSets;
87
80
  if (prevProps.isValueShown && !isValueShown) {
88
81
  this.initSettingsScreen();
89
82
  }
@@ -93,9 +86,7 @@ class FilterSetManager extends Component {
93
86
  if (filterSets !== prevProps.filterSets) {
94
87
  if (!isValueShown && filterSets.length > 0 && prevProps.filterSets.length === 0 && modifiedFilterSets.length === 0) {
95
88
  // Filter set added from another panel, flip from the settings side/initial screen to the value side
96
- var {
97
- onChange
98
- } = this.props;
89
+ var onChange = this.props.onChange;
99
90
  onChange({
100
91
  isValueShown: true,
101
92
  selectedId: filterSets[0].id
@@ -106,10 +97,9 @@ class FilterSetManager extends Component {
106
97
  }
107
98
  }
108
99
  initSettingsScreen() {
109
- var {
110
- filterSets,
111
- selectedId
112
- } = this.props;
100
+ var _this$props2 = this.props,
101
+ filterSets = _this$props2.filterSets,
102
+ selectedId = _this$props2.selectedId;
113
103
  log.debug('initSettingsScreen', filterSets, selectedId);
114
104
  this.setState({
115
105
  modifiedFilterSets: [...filterSets],
@@ -119,20 +109,17 @@ class FilterSetManager extends Component {
119
109
 
120
110
  // Update selected id without applying the new set on filterSets change
121
111
  updateSelectedId() {
122
- var {
123
- isValueShown,
124
- filterSets,
125
- selectedId,
126
- onChange
127
- } = this.props;
112
+ var _this$props3 = this.props,
113
+ isValueShown = _this$props3.isValueShown,
114
+ filterSets = _this$props3.filterSets,
115
+ selectedId = _this$props3.selectedId,
116
+ onChange = _this$props3.onChange;
128
117
  log.debug('updateSelectedId', filterSets, selectedId);
129
118
  if (!isValueShown) {
130
119
  return;
131
120
  }
132
121
  if (!filterSets.some(_ref2 => {
133
- var {
134
- id
135
- } = _ref2;
122
+ var id = _ref2.id;
136
123
  return id === selectedId;
137
124
  })) {
138
125
  // Update the selection if selectedId doesn't exist in the list
@@ -151,10 +138,9 @@ class FilterSetManager extends Component {
151
138
  }
152
139
  handleFilterChange(eventTargetValue) {
153
140
  var selectedId = eventTargetValue;
154
- var {
155
- isValueShown,
156
- onChange
157
- } = this.props;
141
+ var _this$props4 = this.props,
142
+ isValueShown = _this$props4.isValueShown,
143
+ onChange = _this$props4.onChange;
158
144
  this.applyFilterSet(selectedId);
159
145
  onChange({
160
146
  isValueShown,
@@ -162,17 +148,14 @@ class FilterSetManager extends Component {
162
148
  });
163
149
  }
164
150
  handleFilterApply() {
165
- var {
166
- selectedId
167
- } = this.props;
151
+ var selectedId = this.props.selectedId;
168
152
  this.applyFilterSet(selectedId);
169
153
  }
170
154
  handleSettingsCancel() {
171
- var {
172
- onChange,
173
- selectedId,
174
- filterSets
175
- } = this.props;
155
+ var _this$props5 = this.props,
156
+ onChange = _this$props5.onChange,
157
+ selectedId = _this$props5.selectedId,
158
+ filterSets = _this$props5.filterSets;
176
159
  this.setState({
177
160
  modifiedFilterSets: []
178
161
  });
@@ -186,14 +169,12 @@ class FilterSetManager extends Component {
186
169
  }
187
170
  }
188
171
  handleSettingsSave() {
189
- var {
190
- onChange,
191
- onUpdateSets
192
- } = this.props;
193
- var {
194
- modifiedFilterSets,
195
- editId
196
- } = this.state;
172
+ var _this$props6 = this.props,
173
+ onChange = _this$props6.onChange,
174
+ onUpdateSets = _this$props6.onUpdateSets;
175
+ var _this$state = this.state,
176
+ modifiedFilterSets = _this$state.modifiedFilterSets,
177
+ editId = _this$state.editId;
197
178
  this.setState({
198
179
  modifiedFilterSets: []
199
180
  });
@@ -208,9 +189,7 @@ class FilterSetManager extends Component {
208
189
  }
209
190
  }
210
191
  handleCaptureNewSet() {
211
- var {
212
- getFilterState
213
- } = this.props;
192
+ var getFilterState = this.props.getFilterState;
214
193
  FilterSetManager.animateScreenFlash();
215
194
  var id = nanoid();
216
195
  var panels = getFilterState();
@@ -238,20 +217,17 @@ class FilterSetManager extends Component {
238
217
  }
239
218
  getNameError(nameInputValue) {
240
219
  var _nameInputValue$trim;
241
- var {
242
- renameSet,
243
- modifiedFilterSets
244
- } = this.state;
220
+ var _this$state2 = this.state,
221
+ renameSet = _this$state2.renameSet,
222
+ modifiedFilterSets = _this$state2.modifiedFilterSets;
245
223
  var trimmedName = (_nameInputValue$trim = nameInputValue === null || nameInputValue === void 0 ? void 0 : nameInputValue.trim()) !== null && _nameInputValue$trim !== void 0 ? _nameInputValue$trim : '';
246
224
  if (trimmedName.length === 0) {
247
225
  log.debug('Name cannot be empty', trimmedName);
248
226
  return 'Name cannot be empty';
249
227
  }
250
228
  if (renameSet !== undefined && modifiedFilterSets.some(_ref3 => {
251
- var {
252
- title,
253
- id
254
- } = _ref3;
229
+ var title = _ref3.title,
230
+ id = _ref3.id;
255
231
  return title === trimmedName && id !== renameSet.id;
256
232
  })) {
257
233
  log.debug('Set with this name already exists', trimmedName);
@@ -261,12 +237,11 @@ class FilterSetManager extends Component {
261
237
  }
262
238
  handleRenameConfirm() {
263
239
  var _nameInputValue$trim2;
264
- var {
265
- nameInputValue,
266
- renameSet,
267
- modifiedFilterSets,
268
- restoreFullState
269
- } = this.state;
240
+ var _this$state3 = this.state,
241
+ nameInputValue = _this$state3.nameInputValue,
242
+ renameSet = _this$state3.renameSet,
243
+ modifiedFilterSets = _this$state3.modifiedFilterSets,
244
+ restoreFullState = _this$state3.restoreFullState;
270
245
  if (renameSet === undefined) {
271
246
  log.error('Renamed set undefined.');
272
247
  return;
@@ -285,9 +260,7 @@ class FilterSetManager extends Component {
285
260
  restoreFullState
286
261
  });
287
262
  var selectedIndex = modifiedFilterSets.findIndex(_ref4 => {
288
- var {
289
- id
290
- } = _ref4;
263
+ var id = _ref4.id;
291
264
  return id === renameSet.id;
292
265
  });
293
266
  var updatedModifiedFilterSets = [...modifiedFilterSets];
@@ -306,14 +279,10 @@ class FilterSetManager extends Component {
306
279
  }
307
280
  handleSetDelete() {
308
281
  this.setState(state => {
309
- var {
310
- editId,
311
- modifiedFilterSets: prevFilterSets
312
- } = state;
282
+ var editId = state.editId,
283
+ prevFilterSets = state.modifiedFilterSets;
313
284
  var selectedIndex = prevFilterSets.findIndex(_ref5 => {
314
- var {
315
- id
316
- } = _ref5;
285
+ var id = _ref5.id;
317
286
  return id === editId;
318
287
  });
319
288
  if (selectedIndex < 0) {
@@ -321,9 +290,7 @@ class FilterSetManager extends Component {
321
290
  return null;
322
291
  }
323
292
  var modifiedFilterSets = prevFilterSets.filter(_ref6 => {
324
- var {
325
- id
326
- } = _ref6;
293
+ var id = _ref6.id;
327
294
  return id !== editId;
328
295
  });
329
296
  var newSelectedIndex = Math.max(0, Math.min(modifiedFilterSets.length - 1, selectedIndex - 1));
@@ -337,25 +304,19 @@ class FilterSetManager extends Component {
337
304
  });
338
305
  }
339
306
  handleSetUpdate() {
340
- var {
341
- getFilterState
342
- } = this.props;
307
+ var getFilterState = this.props.getFilterState;
343
308
  FilterSetManager.animateScreenFlash();
344
309
  var panels = getFilterState();
345
310
  this.setState(_ref7 => {
346
- var {
347
- modifiedFilterSets: prevFilterSets,
348
- editId
349
- } = _ref7;
311
+ var prevFilterSets = _ref7.modifiedFilterSets,
312
+ editId = _ref7.editId;
350
313
  if (editId === undefined) {
351
314
  log.error('Filter for update not selected.');
352
315
  return null;
353
316
  }
354
317
  var modifiedFilterSets = [...prevFilterSets];
355
318
  var selectedSetIndex = modifiedFilterSets.findIndex(_ref8 => {
356
- var {
357
- id
358
- } = _ref8;
319
+ var id = _ref8.id;
359
320
  return id === editId;
360
321
  });
361
322
  if (selectedSetIndex < 0) {
@@ -374,24 +335,19 @@ class FilterSetManager extends Component {
374
335
  }
375
336
  handleSetEdit() {
376
337
  this.setState(_ref9 => {
377
- var {
378
- editId,
379
- modifiedFilterSets
380
- } = _ref9;
338
+ var editId = _ref9.editId,
339
+ modifiedFilterSets = _ref9.modifiedFilterSets;
381
340
  var selectedSet = modifiedFilterSets.find(_ref0 => {
382
- var {
383
- id
384
- } = _ref0;
341
+ var id = _ref0.id;
385
342
  return id === editId;
386
343
  });
387
344
  if (selectedSet === undefined) {
388
345
  log.error('Could not find selected set', editId, modifiedFilterSets);
389
346
  return null;
390
347
  }
391
- var {
392
- title,
393
- restoreFullState = false
394
- } = selectedSet;
348
+ var title = selectedSet.title,
349
+ _selectedSet$restoreF = selectedSet.restoreFullState,
350
+ restoreFullState = _selectedSet$restoreF === void 0 ? false : _selectedSet$restoreF;
395
351
  return {
396
352
  nameInputValue: title,
397
353
  nameInputError: undefined,
@@ -402,10 +358,9 @@ class FilterSetManager extends Component {
402
358
  }
403
359
  handleSettingsClick(event) {
404
360
  event.stopPropagation();
405
- var {
406
- onChange,
407
- selectedId
408
- } = this.props;
361
+ var _this$props7 = this.props,
362
+ onChange = _this$props7.onChange,
363
+ selectedId = _this$props7.selectedId;
409
364
  onChange({
410
365
  isValueShown: false,
411
366
  selectedId
@@ -419,9 +374,7 @@ class FilterSetManager extends Component {
419
374
  }
420
375
  }
421
376
  handleNameInputChange(event) {
422
- var {
423
- value: nameInputValue
424
- } = event.target;
377
+ var nameInputValue = event.target.value;
425
378
  var nameInputError = this.getNameError(nameInputValue);
426
379
  this.setState({
427
380
  nameInputValue,
@@ -429,9 +382,7 @@ class FilterSetManager extends Component {
429
382
  });
430
383
  }
431
384
  handleNameInputKeyPress(event) {
432
- var {
433
- key
434
- } = event;
385
+ var key = event.key;
435
386
  if (key === 'Enter') {
436
387
  event.preventDefault();
437
388
  this.handleRenameConfirm();
@@ -439,24 +390,19 @@ class FilterSetManager extends Component {
439
390
  }
440
391
  isNameInputScreen() {
441
392
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;
442
- var {
443
- renameSet
444
- } = state;
393
+ var renameSet = state.renameSet;
445
394
  return renameSet !== undefined;
446
395
  }
447
396
  applyFilterSet(selectedId) {
448
- var {
449
- onApply,
450
- filterSets
451
- } = this.props;
397
+ var _this$props8 = this.props,
398
+ onApply = _this$props8.onApply,
399
+ filterSets = _this$props8.filterSets;
452
400
  if (selectedId === undefined) {
453
401
  log.debug('No filter selected');
454
402
  return;
455
403
  }
456
404
  var filterSet = filterSets.find(_ref1 => {
457
- var {
458
- id
459
- } = _ref1;
405
+ var id = _ref1.id;
460
406
  return id === selectedId;
461
407
  });
462
408
  if (filterSet === undefined) {
@@ -475,19 +421,17 @@ class FilterSetManager extends Component {
475
421
  (_this$renameInputRef$ = this.renameInputRef.current) === null || _this$renameInputRef$ === void 0 || _this$renameInputRef$.focus();
476
422
  }
477
423
  render() {
478
- var {
479
- nameInputValue,
480
- nameInputError,
481
- editId,
482
- renameSet,
483
- modifiedFilterSets,
484
- restoreFullState
485
- } = this.state;
486
- var {
487
- isValueShown,
488
- filterSets,
489
- selectedId
490
- } = this.props;
424
+ var _this$state4 = this.state,
425
+ nameInputValue = _this$state4.nameInputValue,
426
+ nameInputError = _this$state4.nameInputError,
427
+ editId = _this$state4.editId,
428
+ renameSet = _this$state4.renameSet,
429
+ modifiedFilterSets = _this$state4.modifiedFilterSets,
430
+ restoreFullState = _this$state4.restoreFullState;
431
+ var _this$props9 = this.props,
432
+ isValueShown = _this$props9.isValueShown,
433
+ filterSets = _this$props9.filterSets,
434
+ selectedId = _this$props9.selectedId;
491
435
  var isNameInputScreen = this.isNameInputScreen();
492
436
  var isRenamingExistingSet = this.isRenamingExistingSet(modifiedFilterSets, renameSet);
493
437
  var isEmptyEditList = modifiedFilterSets.length === 0;
@@ -609,10 +553,8 @@ class FilterSetManager extends Component {
609
553
  disabled: true,
610
554
  children: EMPTY_LIST_PLACEHOLDER
611
555
  }), modifiedFilterSets.map(_ref10 => {
612
- var {
613
- id,
614
- title
615
- } = _ref10;
556
+ var id = _ref10.id,
557
+ title = _ref10.title;
616
558
  return /*#__PURE__*/_jsx("option", {
617
559
  value: id,
618
560
  children: title
@@ -686,10 +628,8 @@ class FilterSetManager extends Component {
686
628
  disabled: true,
687
629
  children: EMPTY_LIST_PLACEHOLDER
688
630
  }), filterSets.map(_ref11 => {
689
- var {
690
- id,
691
- title
692
- } = _ref11;
631
+ var id = _ref11.id,
632
+ title = _ref11.title;
693
633
  return /*#__PURE__*/_jsx("option", {
694
634
  value: id,
695
635
  children: title
@@ -1 +1 @@
1
- {"version":3,"file":"FilterSetManager.js","names":["React","Component","memoizeOne","nanoid","FontAwesomeIcon","vsEdit","vsGear","vsSave","vsCircleSlash","vsTrash","vsDeviceCamera","dhRefresh","dhNewCircleLargeFilled","vsCircleLargeFilled","vsArrowSmallUp","Log","Button","CardFlip","RadioGroup","Radio","Select","jsx","_jsx","jsxs","_jsxs","log","module","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","animateScreenFlash","_document$querySelect","overlay","document","createElement","classList","add","addEventListener","remove","querySelector","appendChild","constructor","props","_defineProperty","createRef","filterSets","renameSet","undefined","some","_ref","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","_ref2","isEmptyList","eventTargetValue","applyFilterSet","onUpdateSets","getFilterState","panels","title","value","getNameError","_nameInputValue$trim","trimmedName","trim","_ref3","_nameInputValue$trim2","error","namedFilterSet","_objectSpread","selectedIndex","findIndex","_ref4","updatedModifiedFilterSets","push","prevFilterSets","_ref5","filter","_ref6","newSelectedIndex","Math","max","min","newSelectedId","_ref7","selectedSetIndex","_ref8","_ref9","selectedSet","find","_ref0","event","stopPropagation","target","dropdownRef","current","focusInput","key","preventDefault","arguments","onApply","filterSet","_ref1","_this$dropdownRef$cur","focus","_this$renameInputRef$","renameInputRef","render","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","className","children","icon","mask","transform","updateSetIcon","isFlipped","kind","onClick","type","placeholder","ref","onKeyPress","spellCheck","tooltip","concat","editDropdownRef","disabled","map","_ref10","_ref11"],"sources":["../../src/panels/FilterSetManager.tsx"],"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 type ChangeEvent,\n Component,\n type ReactNode,\n type KeyboardEvent,\n type MouseEvent,\n} from 'react';\nimport memoizeOne from 'memoize-one';\nimport { nanoid } from 'nanoid';\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 {\n Button,\n CardFlip,\n RadioGroup,\n Radio,\n Select,\n} from '@deephaven/components';\n\nimport './FilterSetManager.scss';\n\nconst log = Log.module('FilterSetManager');\n\nexport interface FilterSetPanel {\n panelId?: string | string[] | null;\n type: string;\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 =\n this.handleRestoreFullStateChange.bind(this);\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(eventTargetValue: string): void {\n this.setState({ editId: eventTargetValue });\n }\n\n handleFilterChange(eventTargetValue: string): void {\n const selectedId = eventTargetValue;\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 = nanoid();\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(value: string): void {\n this.setState({\n restoreFullState: 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 { nameInputValue, renameSet, modifiedFilterSets, 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 !== undefined && (\n <div className=\"error-message\">{nameInputError}</div>\n )}\n </div>\n <div className=\"form-group\">\n <RadioGroup\n aria-label=\"Restoration options\"\n onChange={this.handleRestoreFullStateChange}\n value={`${restoreFullState}`}\n >\n <Radio value=\"false\">Restore only filters</Radio>\n <Radio value=\"true\">Restore full table state</Radio>\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 &nbsp;\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 <div className=\"filter-set-manager-column\">\n <div className=\"filter-set-manager-column-title\">Filter sets</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 ?? '-1'}\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 </div>\n </CardFlip>\n </div>\n );\n }\n}\n\nexport default FilterSetManager;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FilterSetManager.js","names":["React","Component","memoizeOne","nanoid","FontAwesomeIcon","vsEdit","vsGear","vsSave","vsCircleSlash","vsTrash","vsDeviceCamera","dhRefresh","dhNewCircleLargeFilled","vsCircleLargeFilled","vsArrowSmallUp","Log","Button","CardFlip","RadioGroup","Radio","Select","jsx","_jsx","jsxs","_jsxs","log","module","NAME_INPUT_PLACEHOLDER","EMPTY_LIST_PLACEHOLDER","FilterSetManager","animateScreenFlash","_document$querySelect","overlay","document","createElement","classList","add","addEventListener","remove","querySelector","appendChild","constructor","props","_defineProperty","createRef","filterSets","renameSet","undefined","some","_ref","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","_this$props","isNameInputScreen","focusRenameInput","length","onChange","selectedId","_this$props2","debug","setState","_this$props3","_ref2","isEmptyList","eventTargetValue","_this$props4","applyFilterSet","_this$props5","_this$props6","onUpdateSets","_this$state","getFilterState","panels","title","value","getNameError","_nameInputValue$trim","_this$state2","trimmedName","trim","_ref3","_nameInputValue$trim2","_this$state3","error","namedFilterSet","_objectSpread","selectedIndex","findIndex","_ref4","updatedModifiedFilterSets","push","prevFilterSets","_ref5","filter","_ref6","newSelectedIndex","Math","max","min","newSelectedId","_ref7","selectedSetIndex","_ref8","_ref9","selectedSet","find","_ref0","_selectedSet$restoreF","event","stopPropagation","_this$props7","target","dropdownRef","current","focusInput","key","preventDefault","arguments","_this$props8","onApply","filterSet","_ref1","_this$dropdownRef$cur","focus","_this$renameInputRef$","renameInputRef","render","_this$state4","_this$props9","isRenamingExistingSet","isEmptyEditList","isInitialScreen","isEditListScreen","captureSetIcon","className","children","icon","mask","transform","updateSetIcon","isFlipped","kind","onClick","type","placeholder","ref","onKeyPress","spellCheck","tooltip","concat","editDropdownRef","disabled","map","_ref10","_ref11"],"sources":["../../src/panels/FilterSetManager.tsx"],"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 type ChangeEvent,\n Component,\n type ReactNode,\n type KeyboardEvent,\n type MouseEvent,\n} from 'react';\nimport memoizeOne from 'memoize-one';\nimport { nanoid } from 'nanoid';\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 {\n Button,\n CardFlip,\n RadioGroup,\n Radio,\n Select,\n} from '@deephaven/components';\n\nimport './FilterSetManager.scss';\n\nconst log = Log.module('FilterSetManager');\n\nexport interface FilterSetPanel {\n panelId?: string | string[] | null;\n type: string;\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 =\n this.handleRestoreFullStateChange.bind(this);\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(eventTargetValue: string): void {\n this.setState({ editId: eventTargetValue });\n }\n\n handleFilterChange(eventTargetValue: string): void {\n const selectedId = eventTargetValue;\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 = nanoid();\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(value: string): void {\n this.setState({\n restoreFullState: 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 { nameInputValue, renameSet, modifiedFilterSets, 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 !== undefined && (\n <div className=\"error-message\">{nameInputError}</div>\n )}\n </div>\n <div className=\"form-group\">\n <RadioGroup\n aria-label=\"Restoration options\"\n onChange={this.handleRestoreFullStateChange}\n value={`${restoreFullState}`}\n >\n <Radio value=\"false\">Restore only filters</Radio>\n <Radio value=\"true\">Restore full table state</Radio>\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 &nbsp;\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 <div className=\"filter-set-manager-column\">\n <div className=\"filter-set-manager-column-title\">Filter sets</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 ?? '-1'}\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 </div>\n </CardFlip>\n </div>\n );\n }\n}\n\nexport default FilterSetManager;\n"],"mappings":"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","ignoreList":[]}