@deephaven/dashboard-core-plugins 0.5.2-matplotlib.2 → 0.6.1-fixed-deps.2

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 (176) hide show
  1. package/dist/ChartPlugin.js +25 -22
  2. package/dist/ChartPlugin.js.map +1 -1
  3. package/dist/ConsolePlugin.d.ts.map +1 -1
  4. package/dist/ConsolePlugin.js +130 -134
  5. package/dist/ConsolePlugin.js.map +1 -1
  6. package/dist/FilterPlugin.d.ts.map +1 -1
  7. package/dist/FilterPlugin.js +114 -116
  8. package/dist/FilterPlugin.js.map +1 -1
  9. package/dist/GridPlugin.js +29 -26
  10. package/dist/GridPlugin.js.map +1 -1
  11. package/dist/LinkerPlugin.js +7 -5
  12. package/dist/LinkerPlugin.js.map +1 -1
  13. package/dist/MarkdownPlugin.js +44 -45
  14. package/dist/MarkdownPlugin.js.map +1 -1
  15. package/dist/PandasPlugin.d.ts +5 -2
  16. package/dist/PandasPlugin.d.ts.map +1 -1
  17. package/dist/PandasPlugin.js +12 -12
  18. package/dist/PandasPlugin.js.map +1 -1
  19. package/dist/controls/ControlType.d.ts +1 -0
  20. package/dist/controls/ControlType.d.ts.map +1 -1
  21. package/dist/controls/ControlType.js +3 -5
  22. package/dist/controls/ControlType.js.map +1 -1
  23. package/dist/controls/dropdown-filter/DropdownFilter.d.ts +6 -0
  24. package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
  25. package/dist/controls/dropdown-filter/DropdownFilter.js +356 -394
  26. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  27. package/dist/controls/input-filter/InputFilter.d.ts +6 -0
  28. package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
  29. package/dist/controls/input-filter/InputFilter.js +256 -270
  30. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  31. package/dist/controls/markdown/MarkdownContainer.js +18 -56
  32. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  33. package/dist/controls/markdown/MarkdownEditor.js +36 -75
  34. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  35. package/dist/controls/markdown/MarkdownStartPage.js +93 -133
  36. package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
  37. package/dist/controls/markdown/MarkdownUtils.js +17 -32
  38. package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
  39. package/dist/events/ChartEvent.js +1 -5
  40. package/dist/events/ChartEvent.js.map +1 -1
  41. package/dist/events/ConsoleEvent.js +1 -5
  42. package/dist/events/ConsoleEvent.js.map +1 -1
  43. package/dist/events/ControlEvent.js +1 -5
  44. package/dist/events/ControlEvent.js.map +1 -1
  45. package/dist/events/InputFilterEvent.d.ts +2 -0
  46. package/dist/events/InputFilterEvent.d.ts.map +1 -1
  47. package/dist/events/InputFilterEvent.js +3 -5
  48. package/dist/events/InputFilterEvent.js.map +1 -1
  49. package/dist/events/IrisGridEvent.js +1 -5
  50. package/dist/events/IrisGridEvent.js.map +1 -1
  51. package/dist/events/NotebookEvent.js +1 -5
  52. package/dist/events/NotebookEvent.js.map +1 -1
  53. package/dist/events/PQEvent.js +1 -5
  54. package/dist/events/PQEvent.js.map +1 -1
  55. package/dist/events/PandasEvent.js +1 -5
  56. package/dist/events/PandasEvent.js.map +1 -1
  57. package/dist/events/TabEvent.js +1 -5
  58. package/dist/events/TabEvent.js.map +1 -1
  59. package/dist/events/index.d.ts +0 -1
  60. package/dist/events/index.js +9 -10
  61. package/dist/events/index.js.map +1 -1
  62. package/dist/index.d.ts +0 -1
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +10 -11
  65. package/dist/index.js.map +1 -1
  66. package/dist/linker/Linker.d.ts +1 -1
  67. package/dist/linker/Linker.js +594 -606
  68. package/dist/linker/Linker.js.map +1 -1
  69. package/dist/linker/LinkerLink.js +92 -126
  70. package/dist/linker/LinkerLink.js.map +1 -1
  71. package/dist/linker/LinkerOverlayContent.js +162 -220
  72. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  73. package/dist/linker/LinkerUtils.js +105 -114
  74. package/dist/linker/LinkerUtils.js.map +1 -1
  75. package/dist/panels/ChartColumnSelectorOverlay.js +19 -25
  76. package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
  77. package/dist/panels/ChartFilterOverlay.js +18 -24
  78. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  79. package/dist/panels/ChartPanel.d.ts +3 -0
  80. package/dist/panels/ChartPanel.d.ts.map +1 -1
  81. package/dist/panels/ChartPanel.js +839 -873
  82. package/dist/panels/ChartPanel.js.map +1 -1
  83. package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
  84. package/dist/panels/CommandHistoryPanel.js +160 -186
  85. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  86. package/dist/panels/ConsolePanel.d.ts +1 -1
  87. package/dist/panels/ConsolePanel.d.ts.map +1 -1
  88. package/dist/panels/ConsolePanel.js +327 -374
  89. package/dist/panels/ConsolePanel.js.map +1 -1
  90. package/dist/panels/DropdownFilterPanel.d.ts +6 -0
  91. package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
  92. package/dist/panels/DropdownFilterPanel.js +537 -566
  93. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  94. package/dist/panels/FileExplorerPanel.d.ts +6 -1
  95. package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
  96. package/dist/panels/FileExplorerPanel.js +208 -210
  97. package/dist/panels/FileExplorerPanel.js.map +1 -1
  98. package/dist/panels/FilterSetManager.css +111 -0
  99. package/dist/panels/FilterSetManager.css.map +1 -0
  100. package/dist/panels/FilterSetManager.d.ts +66 -0
  101. package/dist/panels/FilterSetManager.d.ts.map +1 -0
  102. package/dist/panels/FilterSetManager.js +732 -0
  103. package/dist/panels/FilterSetManager.js.map +1 -0
  104. package/dist/panels/FilterSetManagerPanel.css +33 -0
  105. package/dist/panels/FilterSetManagerPanel.css.map +1 -0
  106. package/dist/panels/FilterSetManagerPanel.d.ts +69 -0
  107. package/dist/panels/FilterSetManagerPanel.d.ts.map +1 -0
  108. package/dist/panels/FilterSetManagerPanel.js +383 -0
  109. package/dist/panels/FilterSetManagerPanel.js.map +1 -0
  110. package/dist/panels/InputFilterPanel.d.ts +7 -0
  111. package/dist/panels/InputFilterPanel.d.ts.map +1 -1
  112. package/dist/panels/InputFilterPanel.js +198 -206
  113. package/dist/panels/InputFilterPanel.js.map +1 -1
  114. package/dist/panels/IrisGridPanel.d.ts +11 -3
  115. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  116. package/dist/panels/IrisGridPanel.js +779 -771
  117. package/dist/panels/IrisGridPanel.js.map +1 -1
  118. package/dist/panels/LogPanel.js +80 -116
  119. package/dist/panels/LogPanel.js.map +1 -1
  120. package/dist/panels/MarkdownPanel.js +165 -199
  121. package/dist/panels/MarkdownPanel.js.map +1 -1
  122. package/dist/panels/NotebookPanel.d.ts +3 -1
  123. package/dist/panels/NotebookPanel.d.ts.map +1 -1
  124. package/dist/panels/NotebookPanel.js +870 -862
  125. package/dist/panels/NotebookPanel.js.map +1 -1
  126. package/dist/panels/PandasPanel.js +56 -90
  127. package/dist/panels/PandasPanel.js.map +1 -1
  128. package/dist/panels/Panel.js +282 -313
  129. package/dist/panels/Panel.js.map +1 -1
  130. package/dist/panels/PanelContextMenu.js +107 -158
  131. package/dist/panels/PanelContextMenu.js.map +1 -1
  132. package/dist/panels/RenameDialog.js +144 -172
  133. package/dist/panels/RenameDialog.js.map +1 -1
  134. package/dist/panels/Shortcuts.js +1 -1
  135. package/dist/panels/Shortcuts.js.map +1 -1
  136. package/dist/panels/WidgetPanel.js +133 -163
  137. package/dist/panels/WidgetPanel.js.map +1 -1
  138. package/dist/panels/WidgetPanelTooltip.js +7 -5
  139. package/dist/panels/WidgetPanelTooltip.js.map +1 -1
  140. package/dist/panels/index.d.ts +1 -1
  141. package/dist/panels/index.js +16 -16
  142. package/dist/panels/index.js.map +1 -1
  143. package/dist/prop-types/CommonPropTypes.js +4 -8
  144. package/dist/prop-types/CommonPropTypes.js.map +1 -1
  145. package/dist/prop-types/UIPropTypes.js +6 -6
  146. package/dist/prop-types/UIPropTypes.js.map +1 -1
  147. package/dist/prop-types/index.js +2 -2
  148. package/dist/prop-types/index.js.map +1 -1
  149. package/dist/redux/actions.d.ts +1 -0
  150. package/dist/redux/actions.d.ts.map +1 -1
  151. package/dist/redux/actions.js +33 -54
  152. package/dist/redux/actions.js.map +1 -1
  153. package/dist/redux/index.js +6 -21
  154. package/dist/redux/index.js.map +1 -1
  155. package/dist/redux/reducers/index.js +2 -2
  156. package/dist/redux/reducers/index.js.map +1 -1
  157. package/dist/redux/reducers/sessionWrapper.js +1 -1
  158. package/dist/redux/reducers/sessionWrapper.js.map +1 -1
  159. package/dist/redux/selectors.d.ts +1 -0
  160. package/dist/redux/selectors.d.ts.map +1 -1
  161. package/dist/redux/selectors.js +22 -18
  162. package/dist/redux/selectors.js.map +1 -1
  163. package/dist/tsconfig.tsbuildinfo +1 -1
  164. package/package.json +27 -54
  165. package/dist/MatPlotLibPlugin.d.ts +0 -5
  166. package/dist/MatPlotLibPlugin.d.ts.map +0 -1
  167. package/dist/MatPlotLibPlugin.js +0 -45
  168. package/dist/MatPlotLibPlugin.js.map +0 -1
  169. package/dist/events/MatPlotLibEvent.d.ts +0 -5
  170. package/dist/events/MatPlotLibEvent.d.ts.map +0 -1
  171. package/dist/events/MatPlotLibEvent.js +0 -12
  172. package/dist/events/MatPlotLibEvent.js.map +0 -1
  173. package/dist/panels/MatPlotLibPanel.d.ts +0 -22
  174. package/dist/panels/MatPlotLibPanel.d.ts.map +0 -1
  175. package/dist/panels/MatPlotLibPanel.js +0 -123
  176. package/dist/panels/MatPlotLibPanel.js.map +0 -1
@@ -0,0 +1,732 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
2
+
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
4
+
5
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+
7
+ /* eslint-disable jsx-a11y/click-events-have-key-events */
8
+
9
+ /* eslint-disable jsx-a11y/no-static-element-interactions */
10
+ // background click is just a convenience method, not an actual a11y issue
11
+ import React, { Component } from 'react';
12
+ import memoizeOne from 'memoize-one';
13
+ import shortid from 'shortid';
14
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
15
+ import { vsGear, vsSave, vsCircleSlash, vsTrash, vsDeviceCamera, dhICursor, dhRefresh, dhNewCircleLargeFilled, vsCircleLargeFilled, vsArrowSmallUp } from '@deephaven/icons';
16
+ import Log from '@deephaven/log';
17
+ import { Button, CardFlip } from '@deephaven/components';
18
+ import "./FilterSetManager.css";
19
+ var log = Log.module('FilterSetManager');
20
+ var NAME_INPUT_PLACEHOLDER = 'Enter name...';
21
+ var EMPTY_LIST_PLACEHOLDER = 'No Available Filter Sets';
22
+
23
+ class FilterSetManager extends Component {
24
+ static animateScreenFlash() {
25
+ var _document$querySelect;
26
+
27
+ var overlay = document.createElement('div');
28
+ overlay.classList.add('screen-flash-overlay');
29
+ overlay.addEventListener('animationend', () => {
30
+ // Removing the element removes its event listeners
31
+ overlay.remove();
32
+ });
33
+ (_document$querySelect = document.querySelector('body')) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.appendChild(overlay);
34
+ }
35
+
36
+ constructor(props) {
37
+ super(props);
38
+
39
+ _defineProperty(this, "renameInputRef", /*#__PURE__*/React.createRef());
40
+
41
+ _defineProperty(this, "dropdownRef", /*#__PURE__*/React.createRef());
42
+
43
+ _defineProperty(this, "editDropdownRef", /*#__PURE__*/React.createRef());
44
+
45
+ _defineProperty(this, "isRenamingExistingSet", memoizeOne((filterSets, renameSet) => renameSet !== undefined && filterSets.some((_ref) => {
46
+ var {
47
+ id
48
+ } = _ref;
49
+ return id === renameSet.id;
50
+ })));
51
+
52
+ this.handleSettingsCancel = this.handleSettingsCancel.bind(this);
53
+ this.handleSettingsClick = this.handleSettingsClick.bind(this);
54
+ this.handleSettingsSave = this.handleSettingsSave.bind(this);
55
+ this.handleBackgroundClick = this.handleBackgroundClick.bind(this);
56
+ this.handleEditDropdownChange = this.handleEditDropdownChange.bind(this);
57
+ this.handleFilterChange = this.handleFilterChange.bind(this);
58
+ this.handleFilterApply = this.handleFilterApply.bind(this);
59
+ this.handleCaptureNewSet = this.handleCaptureNewSet.bind(this);
60
+ this.handleNameInputChange = this.handleNameInputChange.bind(this);
61
+ this.handleNameInputKeyPress = this.handleNameInputKeyPress.bind(this);
62
+ this.handleRenameConfirm = this.handleRenameConfirm.bind(this);
63
+ this.handleRenameCancel = this.handleRenameCancel.bind(this);
64
+ this.handleSetDelete = this.handleSetDelete.bind(this);
65
+ this.handleSetRename = this.handleSetRename.bind(this);
66
+ this.handleSetUpdate = this.handleSetUpdate.bind(this);
67
+ this.state = {
68
+ editId: undefined,
69
+ renameSet: undefined,
70
+ nameInputValue: '',
71
+ nameInputError: undefined,
72
+ modifiedFilterSets: []
73
+ };
74
+ }
75
+
76
+ componentDidMount() {
77
+ var {
78
+ isValueShown
79
+ } = this.props;
80
+
81
+ if (isValueShown) {
82
+ this.updateSelectedId();
83
+ } else {
84
+ this.initSettingsScreen();
85
+ }
86
+ }
87
+
88
+ componentDidUpdate(prevProps, prevState) {
89
+ var {
90
+ isValueShown,
91
+ filterSets
92
+ } = this.props;
93
+ var {
94
+ modifiedFilterSets
95
+ } = this.state;
96
+
97
+ if (prevProps.isValueShown && !isValueShown) {
98
+ this.initSettingsScreen();
99
+ }
100
+
101
+ if (this.isNameInputScreen() && !this.isNameInputScreen(prevState)) {
102
+ this.focusRenameInput();
103
+ }
104
+
105
+ if (filterSets !== prevProps.filterSets) {
106
+ if (!isValueShown && filterSets.length > 0 && prevProps.filterSets.length === 0 && modifiedFilterSets.length === 0) {
107
+ // Filter set added from another panel, flip from the settings side/initial screen to the value side
108
+ var {
109
+ onChange: _onChange
110
+ } = this.props;
111
+
112
+ _onChange({
113
+ isValueShown: true,
114
+ selectedId: filterSets[0].id
115
+ });
116
+ } else {
117
+ this.updateSelectedId();
118
+ }
119
+ }
120
+ }
121
+
122
+ initSettingsScreen() {
123
+ var {
124
+ filterSets,
125
+ selectedId
126
+ } = this.props;
127
+ log.debug('initSettingsScreen', filterSets, selectedId);
128
+ this.setState({
129
+ modifiedFilterSets: [...filterSets],
130
+ editId: selectedId
131
+ });
132
+ } // Update selected id without applying the new set on filterSets change
133
+
134
+
135
+ updateSelectedId() {
136
+ var {
137
+ isValueShown,
138
+ filterSets,
139
+ selectedId,
140
+ onChange
141
+ } = this.props;
142
+ log.debug('updateSelectedId', filterSets, selectedId);
143
+
144
+ if (!isValueShown) {
145
+ return;
146
+ }
147
+
148
+ if (!filterSets.some((_ref2) => {
149
+ var {
150
+ id
151
+ } = _ref2;
152
+ return id === selectedId;
153
+ })) {
154
+ // Update the selection if selectedId doesn't exist in the list
155
+ // Flip to the settings side for empty list to show the initial screen
156
+ var isEmptyList = filterSets.length === 0;
157
+ onChange({
158
+ isValueShown: !isEmptyList,
159
+ selectedId: isEmptyList ? undefined : filterSets[0].id
160
+ });
161
+ }
162
+ }
163
+
164
+ handleEditDropdownChange(event) {
165
+ var {
166
+ value: editId
167
+ } = event.target;
168
+ this.setState({
169
+ editId
170
+ });
171
+ }
172
+
173
+ handleFilterChange(event) {
174
+ var {
175
+ value: selectedId
176
+ } = event.target;
177
+ var {
178
+ isValueShown,
179
+ onChange
180
+ } = this.props;
181
+ this.applyFilterSet(selectedId);
182
+ onChange({
183
+ isValueShown,
184
+ selectedId
185
+ });
186
+ }
187
+
188
+ handleFilterApply() {
189
+ var {
190
+ selectedId
191
+ } = this.props;
192
+ this.applyFilterSet(selectedId);
193
+ }
194
+
195
+ handleSettingsCancel() {
196
+ var {
197
+ onChange,
198
+ selectedId,
199
+ filterSets
200
+ } = this.props;
201
+ this.setState({
202
+ modifiedFilterSets: []
203
+ }); // Flip the card to the filter set selection screen if the sets list isn't empty
204
+ // Otherwise show the initial screen
205
+
206
+ if (filterSets.length > 0) {
207
+ onChange({
208
+ isValueShown: true,
209
+ selectedId
210
+ });
211
+ }
212
+ }
213
+
214
+ handleSettingsSave() {
215
+ var {
216
+ onChange,
217
+ onUpdateSets,
218
+ selectedId
219
+ } = this.props;
220
+ var {
221
+ modifiedFilterSets,
222
+ editId
223
+ } = this.state;
224
+ this.setState({
225
+ modifiedFilterSets: []
226
+ });
227
+ log.debug('Update sets', modifiedFilterSets, editId);
228
+ onUpdateSets(modifiedFilterSets, editId); // Don't flip the card to the filter set selection screen if the updated sets list is empty
229
+
230
+ if (modifiedFilterSets.length > 0) {
231
+ onChange({
232
+ isValueShown: true,
233
+ selectedId
234
+ });
235
+ }
236
+ }
237
+
238
+ handleCaptureNewSet() {
239
+ var {
240
+ getFilterState
241
+ } = this.props;
242
+ FilterSetManager.animateScreenFlash();
243
+ var id = shortid();
244
+ var panels = getFilterState();
245
+ var renameSet = {
246
+ id,
247
+ title: '',
248
+ panels
249
+ };
250
+ log.debug('handleSetCreate', renameSet);
251
+ this.setState({
252
+ nameInputValue: '',
253
+ nameInputError: undefined,
254
+ renameSet
255
+ });
256
+ }
257
+
258
+ handleRenameCancel() {
259
+ this.setState({
260
+ renameSet: undefined
261
+ });
262
+ }
263
+
264
+ getNameError(nameInputValue) {
265
+ var _nameInputValue$trim;
266
+
267
+ var {
268
+ renameSet,
269
+ modifiedFilterSets
270
+ } = this.state;
271
+ var trimmedName = (_nameInputValue$trim = nameInputValue === null || nameInputValue === void 0 ? void 0 : nameInputValue.trim()) !== null && _nameInputValue$trim !== void 0 ? _nameInputValue$trim : '';
272
+
273
+ if (trimmedName.length === 0) {
274
+ log.debug('Name cannot be empty', trimmedName);
275
+ return 'Name cannot be empty';
276
+ }
277
+
278
+ if (renameSet !== undefined && modifiedFilterSets.some((_ref3) => {
279
+ var {
280
+ title,
281
+ id
282
+ } = _ref3;
283
+ return title === trimmedName && id !== renameSet.id;
284
+ })) {
285
+ log.debug('Set with this name already exists', trimmedName);
286
+ return 'Set with this name already exists';
287
+ }
288
+
289
+ return undefined;
290
+ }
291
+
292
+ handleRenameConfirm() {
293
+ var _nameInputValue$trim2;
294
+
295
+ var {
296
+ nameInputValue,
297
+ renameSet,
298
+ modifiedFilterSets
299
+ } = this.state;
300
+
301
+ if (renameSet === undefined) {
302
+ log.error('Renamed set undefined.');
303
+ return;
304
+ }
305
+
306
+ var nameInputError = this.getNameError(nameInputValue);
307
+ log.debug('handleRenameConfirm', nameInputValue, nameInputError);
308
+
309
+ if (nameInputError !== undefined) {
310
+ this.setState({
311
+ nameInputError
312
+ });
313
+ return;
314
+ }
315
+
316
+ var trimmedName = (_nameInputValue$trim2 = nameInputValue === null || nameInputValue === void 0 ? void 0 : nameInputValue.trim()) !== null && _nameInputValue$trim2 !== void 0 ? _nameInputValue$trim2 : '';
317
+
318
+ var namedFilterSet = _objectSpread(_objectSpread({}, renameSet), {}, {
319
+ title: trimmedName
320
+ });
321
+
322
+ var selectedIndex = modifiedFilterSets.findIndex((_ref4) => {
323
+ var {
324
+ id
325
+ } = _ref4;
326
+ return id === renameSet.id;
327
+ });
328
+ var updatedModifiedFilterSets = [...modifiedFilterSets];
329
+
330
+ if (selectedIndex >= 0) {
331
+ updatedModifiedFilterSets[selectedIndex] = namedFilterSet;
332
+ log.debug('Renamed existing set', updatedModifiedFilterSets);
333
+ } else {
334
+ updatedModifiedFilterSets.push(namedFilterSet);
335
+ log.debug('Added new set to modified sets', updatedModifiedFilterSets);
336
+ }
337
+
338
+ this.setState({
339
+ editId: namedFilterSet.id,
340
+ modifiedFilterSets: updatedModifiedFilterSets,
341
+ renameSet: undefined
342
+ });
343
+ }
344
+
345
+ handleSetDelete() {
346
+ this.setState(state => {
347
+ var {
348
+ editId,
349
+ modifiedFilterSets: prevFilterSets
350
+ } = state;
351
+ var selectedIndex = prevFilterSets.findIndex((_ref5) => {
352
+ var {
353
+ id
354
+ } = _ref5;
355
+ return id === editId;
356
+ });
357
+
358
+ if (selectedIndex < 0) {
359
+ log.error('Unable to find selected filterSet index', prevFilterSets, editId);
360
+ return null;
361
+ }
362
+
363
+ var modifiedFilterSets = prevFilterSets.filter((_ref6) => {
364
+ var {
365
+ id
366
+ } = _ref6;
367
+ return id !== editId;
368
+ });
369
+ var newSelectedIndex = Math.max(0, Math.min(modifiedFilterSets.length - 1, selectedIndex - 1));
370
+ var newSelectedId = modifiedFilterSets.length > 0 ? modifiedFilterSets[newSelectedIndex].id : undefined;
371
+ log.debug('Deleted selected set', editId, prevFilterSets, modifiedFilterSets);
372
+ log.debug('New selection', newSelectedIndex, newSelectedId);
373
+ return {
374
+ modifiedFilterSets,
375
+ editId: newSelectedId
376
+ };
377
+ });
378
+ }
379
+
380
+ handleSetUpdate() {
381
+ var {
382
+ getFilterState
383
+ } = this.props;
384
+ FilterSetManager.animateScreenFlash();
385
+ var panels = getFilterState();
386
+ this.setState((_ref7) => {
387
+ var {
388
+ modifiedFilterSets: prevFilterSets,
389
+ editId
390
+ } = _ref7;
391
+
392
+ if (editId === undefined) {
393
+ log.error('Filter for update not selected.');
394
+ return null;
395
+ }
396
+
397
+ var modifiedFilterSets = [...prevFilterSets];
398
+ var selectedSetIndex = modifiedFilterSets.findIndex((_ref8) => {
399
+ var {
400
+ id
401
+ } = _ref8;
402
+ return id === editId;
403
+ });
404
+
405
+ if (selectedSetIndex < 0) {
406
+ log.error('Selected set for update not found.');
407
+ return null;
408
+ } // Clone selected set to avoid mutation of the props
409
+
410
+
411
+ modifiedFilterSets[selectedSetIndex] = _objectSpread(_objectSpread({}, modifiedFilterSets[selectedSetIndex]), {}, {
412
+ panels
413
+ });
414
+ log.debug('Update set', modifiedFilterSets, panels);
415
+ return {
416
+ modifiedFilterSets
417
+ };
418
+ });
419
+ }
420
+
421
+ handleSetRename() {
422
+ this.setState((_ref9) => {
423
+ var {
424
+ editId,
425
+ modifiedFilterSets
426
+ } = _ref9;
427
+ var selectedSet = modifiedFilterSets.find((_ref10) => {
428
+ var {
429
+ id
430
+ } = _ref10;
431
+ return id === editId;
432
+ });
433
+
434
+ if (selectedSet === undefined) {
435
+ log.error('Could not find selected set', editId, modifiedFilterSets);
436
+ return null;
437
+ }
438
+
439
+ var {
440
+ title
441
+ } = selectedSet;
442
+ return {
443
+ nameInputValue: title,
444
+ nameInputError: undefined,
445
+ renameSet: selectedSet
446
+ };
447
+ });
448
+ }
449
+
450
+ handleSettingsClick(event) {
451
+ event.stopPropagation();
452
+ var {
453
+ onChange,
454
+ selectedId
455
+ } = this.props;
456
+ onChange({
457
+ isValueShown: false,
458
+ selectedId
459
+ });
460
+ }
461
+
462
+ handleBackgroundClick(event) {
463
+ log.debug('handleBackgroundClick'); // allow clicking anywhere in the background to select and focus the input
464
+
465
+ if (event.target !== this.dropdownRef.current) {
466
+ this.focusInput();
467
+ }
468
+ }
469
+
470
+ handleNameInputChange(event) {
471
+ var {
472
+ value: nameInputValue
473
+ } = event.target;
474
+ var nameInputError = this.getNameError(nameInputValue);
475
+ this.setState({
476
+ nameInputValue,
477
+ nameInputError
478
+ });
479
+ }
480
+
481
+ handleNameInputKeyPress(event) {
482
+ var {
483
+ key
484
+ } = event;
485
+
486
+ if (key === 'Enter') {
487
+ event.preventDefault();
488
+ this.handleRenameConfirm();
489
+ }
490
+ }
491
+
492
+ isNameInputScreen() {
493
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;
494
+ var {
495
+ renameSet
496
+ } = state;
497
+ return renameSet !== undefined;
498
+ }
499
+
500
+ applyFilterSet(selectedId) {
501
+ var {
502
+ onApply,
503
+ filterSets
504
+ } = this.props;
505
+
506
+ if (selectedId === undefined) {
507
+ log.debug('No filter selected');
508
+ return;
509
+ }
510
+
511
+ var filterSet = filterSets.find((_ref11) => {
512
+ var {
513
+ id
514
+ } = _ref11;
515
+ return id === selectedId;
516
+ });
517
+
518
+ if (filterSet === undefined) {
519
+ log.debug('Selected id not found in filterSets', selectedId, filterSets);
520
+ return;
521
+ }
522
+
523
+ log.debug('Apply filterSet', filterSet);
524
+ onApply(filterSet);
525
+ }
526
+
527
+ focusInput() {
528
+ var _this$dropdownRef$cur;
529
+
530
+ (_this$dropdownRef$cur = this.dropdownRef.current) === null || _this$dropdownRef$cur === void 0 ? void 0 : _this$dropdownRef$cur.focus();
531
+ }
532
+
533
+ focusRenameInput() {
534
+ var _this$renameInputRef$;
535
+
536
+ (_this$renameInputRef$ = this.renameInputRef.current) === null || _this$renameInputRef$ === void 0 ? void 0 : _this$renameInputRef$.focus();
537
+ }
538
+
539
+ render() {
540
+ var {
541
+ nameInputValue,
542
+ nameInputError,
543
+ editId,
544
+ renameSet,
545
+ modifiedFilterSets
546
+ } = this.state;
547
+ var {
548
+ isValueShown,
549
+ filterSets,
550
+ selectedId
551
+ } = this.props;
552
+ var isNameInputScreen = this.isNameInputScreen();
553
+ var isRenamingExistingSet = this.isRenamingExistingSet(modifiedFilterSets, renameSet);
554
+ var isEmptyEditList = modifiedFilterSets.length === 0;
555
+ var isInitialScreen = !isNameInputScreen && isEmptyEditList && filterSets.length === 0;
556
+ var isEditListScreen = !isNameInputScreen && !isInitialScreen;
557
+ var captureSetIcon = /*#__PURE__*/React.createElement("div", {
558
+ className: "fa-layers mr-3"
559
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
560
+ icon: vsCircleLargeFilled,
561
+ mask: vsDeviceCamera,
562
+ transform: "shrink-1 down-5 right-7"
563
+ }), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
564
+ icon: dhNewCircleLargeFilled,
565
+ className: "text-primary",
566
+ transform: "shrink-6 down-5 right-7"
567
+ }));
568
+ var updateSetIcon = /*#__PURE__*/React.createElement("div", {
569
+ className: "fa-layers"
570
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
571
+ icon: vsCircleLargeFilled,
572
+ mask: vsDeviceCamera,
573
+ transform: "shrink-1 down-5 right-7"
574
+ }), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
575
+ icon: vsArrowSmallUp,
576
+ transform: "shrink-1 down-5 right-7"
577
+ }));
578
+ return /*#__PURE__*/React.createElement("div", {
579
+ className: "filter-set-manager fill-parent-absolute"
580
+ }, /*#__PURE__*/React.createElement(CardFlip, {
581
+ className: "w-100 h-100",
582
+ isFlipped: isValueShown
583
+ }, /*#__PURE__*/React.createElement("div", {
584
+ className: "filter-set-manager-settings-card fill-parent-absolute",
585
+ key: "front"
586
+ }, /*#__PURE__*/React.createElement("div", {
587
+ className: "filter-set-manager-card-content"
588
+ }, isInitialScreen && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
589
+ kind: "ghost",
590
+ className: "btn btn-link no-underline",
591
+ onClick: this.handleCaptureNewSet,
592
+ icon: captureSetIcon
593
+ }, "Capture filter set"), /*#__PURE__*/React.createElement("div", {
594
+ className: "py-3 text-muted small"
595
+ }, "Takes a snapshot of the currently applied filters on all panels, allowing you to restore saved filter sets later.")), isNameInputScreen && /*#__PURE__*/React.createElement("div", {
596
+ className: "d-flex flex-column justify-content-center"
597
+ }, /*#__PURE__*/React.createElement("div", {
598
+ className: "form-group"
599
+ }, /*#__PURE__*/React.createElement("label", null, isRenamingExistingSet ? 'Rename set' : 'Name captured set'), /*#__PURE__*/React.createElement("div", {
600
+ className: "name-input-container"
601
+ }, /*#__PURE__*/React.createElement("input", {
602
+ type: "text",
603
+ className: "input-set-name form-control",
604
+ placeholder: NAME_INPUT_PLACEHOLDER,
605
+ value: nameInputValue,
606
+ ref: this.renameInputRef,
607
+ onChange: this.handleNameInputChange,
608
+ onKeyPress: this.handleNameInputKeyPress,
609
+ spellCheck: "false"
610
+ }), /*#__PURE__*/React.createElement(Button, {
611
+ kind: "ghost",
612
+ className: "btn btn-link no-underline pt-2 pb-2",
613
+ onClick: this.handleRenameConfirm,
614
+ tooltip: "Save",
615
+ icon: vsSave
616
+ }), /*#__PURE__*/React.createElement(Button, {
617
+ kind: "ghost",
618
+ className: "btn btn-link no-underline pt-2 pb-2",
619
+ onClick: this.handleRenameCancel,
620
+ tooltip: "Cancel",
621
+ icon: vsCircleSlash
622
+ })), nameInputError && /*#__PURE__*/React.createElement("div", {
623
+ className: "error-message"
624
+ }, nameInputError))), isEditListScreen && /*#__PURE__*/React.createElement("div", {
625
+ className: "filter-set-manager-settings-grid-1"
626
+ }, /*#__PURE__*/React.createElement("div", {
627
+ className: "form-group"
628
+ }, /*#__PURE__*/React.createElement("label", null, "Edit filter sets"), /*#__PURE__*/React.createElement("div", {
629
+ className: "filter-select-container"
630
+ }, /*#__PURE__*/React.createElement("select", {
631
+ ref: this.editDropdownRef,
632
+ value: editId !== null && editId !== void 0 ? editId : '-1',
633
+ className: "custom-select filter-value-select",
634
+ onChange: this.handleEditDropdownChange,
635
+ disabled: isEmptyEditList
636
+ }, isEmptyEditList && /*#__PURE__*/React.createElement("option", {
637
+ value: "-1",
638
+ disabled: true
639
+ }, EMPTY_LIST_PLACEHOLDER), modifiedFilterSets.map((_ref12) => {
640
+ var {
641
+ id,
642
+ title
643
+ } = _ref12;
644
+ return /*#__PURE__*/React.createElement("option", {
645
+ key: id,
646
+ value: id
647
+ }, title);
648
+ })), /*#__PURE__*/React.createElement(Button, {
649
+ kind: "ghost",
650
+ onClick: this.handleSetUpdate,
651
+ disabled: isEmptyEditList,
652
+ icon: updateSetIcon,
653
+ tooltip: "Update"
654
+ }), /*#__PURE__*/React.createElement(Button, {
655
+ kind: "ghost",
656
+ onClick: this.handleSetRename,
657
+ disabled: isEmptyEditList,
658
+ icon: dhICursor,
659
+ tooltip: "Rename"
660
+ }), /*#__PURE__*/React.createElement(Button, {
661
+ kind: "ghost",
662
+ onClick: this.handleSetDelete,
663
+ disabled: isEmptyEditList,
664
+ icon: vsTrash,
665
+ tooltip: "Delete"
666
+ }))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
667
+ kind: "ghost",
668
+ className: "btn btn-link no-underline",
669
+ onClick: this.handleCaptureNewSet,
670
+ icon: captureSetIcon
671
+ }, "Capture new filter set")), /*#__PURE__*/React.createElement("div", {
672
+ className: "py-3 text-right"
673
+ }, /*#__PURE__*/React.createElement(Button, {
674
+ kind: "secondary",
675
+ onClick: this.handleSettingsCancel
676
+ }, "Cancel"), "\xA0", /*#__PURE__*/React.createElement(Button, {
677
+ kind: "primary",
678
+ onClick: this.handleSettingsSave
679
+ }, "Save"))))), /*#__PURE__*/React.createElement("div", {
680
+ className: "filter-set-manager-value-card fill-parent-absolute",
681
+ key: "back",
682
+ onClick: this.handleBackgroundClick
683
+ }, /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
684
+ className: "filter-set-manager-column"
685
+ }, /*#__PURE__*/React.createElement("div", {
686
+ className: "filter-set-manager-column-title"
687
+ }, "Filter sets")), /*#__PURE__*/React.createElement("div", {
688
+ className: "filter-set-manager-card-content"
689
+ }, /*#__PURE__*/React.createElement("div", {
690
+ className: "filter-set-manager-value-input"
691
+ }, /*#__PURE__*/React.createElement("div", {
692
+ className: "filter-select-container"
693
+ }, /*#__PURE__*/React.createElement("select", {
694
+ ref: this.dropdownRef,
695
+ value: selectedId,
696
+ className: "custom-select filter-value-select",
697
+ onChange: this.handleFilterChange
698
+ }, filterSets.length === 0 && /*#__PURE__*/React.createElement("option", {
699
+ value: "-1",
700
+ disabled: true
701
+ }, EMPTY_LIST_PLACEHOLDER), filterSets.map((_ref13) => {
702
+ var {
703
+ id,
704
+ title
705
+ } = _ref13;
706
+ return /*#__PURE__*/React.createElement("option", {
707
+ key: id,
708
+ value: id
709
+ }, title);
710
+ })), /*#__PURE__*/React.createElement(Button, {
711
+ kind: "ghost",
712
+ onClick: this.handleFilterApply,
713
+ icon: dhRefresh,
714
+ tooltip: "Apply Filter Set"
715
+ })))), /*#__PURE__*/React.createElement("div", {
716
+ className: "filter-set-manager-menu"
717
+ }, /*#__PURE__*/React.createElement(Button, {
718
+ kind: "ghost",
719
+ className: "btn btn-link btn-link-icon m-2 px-2",
720
+ onClick: this.handleSettingsClick,
721
+ tooltip: "Settings",
722
+ icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
723
+ icon: vsGear,
724
+ transform: "grow-4"
725
+ })
726
+ }))))));
727
+ }
728
+
729
+ }
730
+
731
+ export default FilterSetManager;
732
+ //# sourceMappingURL=FilterSetManager.js.map