@deephaven/dashboard-core-plugins 0.85.29 → 0.85.31

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 (72) hide show
  1. package/dist/FilterEvents.d.ts +86 -0
  2. package/dist/FilterEvents.d.ts.map +1 -0
  3. package/dist/FilterEvents.js +78 -0
  4. package/dist/FilterEvents.js.map +1 -0
  5. package/dist/FilterPlugin.d.ts +0 -9
  6. package/dist/FilterPlugin.d.ts.map +1 -1
  7. package/dist/FilterPlugin.js +37 -24
  8. package/dist/FilterPlugin.js.map +1 -1
  9. package/dist/GridWidgetPlugin.d.ts.map +1 -1
  10. package/dist/GridWidgetPlugin.js +23 -4
  11. package/dist/GridWidgetPlugin.js.map +1 -1
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +2 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/linker/ColumnSelectionValidator.d.ts +3 -3
  17. package/dist/linker/ColumnSelectionValidator.d.ts.map +1 -1
  18. package/dist/linker/ColumnSelectionValidator.js.map +1 -1
  19. package/dist/linker/Linker.d.ts +17 -9
  20. package/dist/linker/Linker.d.ts.map +1 -1
  21. package/dist/linker/Linker.js +147 -81
  22. package/dist/linker/Linker.js.map +1 -1
  23. package/dist/linker/LinkerEvent.d.ts +52 -0
  24. package/dist/linker/LinkerEvent.d.ts.map +1 -0
  25. package/dist/linker/LinkerEvent.js +28 -0
  26. package/dist/linker/LinkerEvent.js.map +1 -0
  27. package/dist/linker/LinkerOverlayContent.d.ts +2 -0
  28. package/dist/linker/LinkerOverlayContent.d.ts.map +1 -1
  29. package/dist/linker/LinkerOverlayContent.js +13 -3
  30. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  31. package/dist/linker/LinkerUtils.d.ts +12 -7
  32. package/dist/linker/LinkerUtils.d.ts.map +1 -1
  33. package/dist/linker/LinkerUtils.js +8 -30
  34. package/dist/linker/LinkerUtils.js.map +1 -1
  35. package/dist/panels/ChartPanel.d.ts +11 -3
  36. package/dist/panels/ChartPanel.d.ts.map +1 -1
  37. package/dist/panels/ChartPanel.js +24 -6
  38. package/dist/panels/ChartPanel.js.map +1 -1
  39. package/dist/panels/DropdownFilterPanel.d.ts +3 -3
  40. package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
  41. package/dist/panels/DropdownFilterPanel.js +19 -8
  42. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  43. package/dist/panels/FileExplorerPanel.d.ts +1 -1
  44. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  45. package/dist/panels/InputFilterPanel.d.ts +1 -1
  46. package/dist/panels/InputFilterPanel.d.ts.map +1 -1
  47. package/dist/panels/InputFilterPanel.js +8 -4
  48. package/dist/panels/InputFilterPanel.js.map +1 -1
  49. package/dist/panels/IrisGridPanel.d.ts +5 -5
  50. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  51. package/dist/panels/IrisGridPanel.js +28 -9
  52. package/dist/panels/IrisGridPanel.js.map +1 -1
  53. package/dist/panels/WidgetPanelTypes.d.ts +22 -0
  54. package/dist/panels/WidgetPanelTypes.d.ts.map +1 -0
  55. package/dist/panels/WidgetPanelTypes.js +2 -0
  56. package/dist/panels/WidgetPanelTypes.js.map +1 -0
  57. package/dist/panels/index.d.ts +1 -0
  58. package/dist/panels/index.d.ts.map +1 -1
  59. package/dist/panels/index.js +1 -0
  60. package/dist/panels/index.js.map +1 -1
  61. package/dist/redux/selectors.d.ts +6 -6
  62. package/dist/redux/selectors.d.ts.map +1 -1
  63. package/dist/redux/selectors.js.map +1 -1
  64. package/dist/useDashboardColumnFilters.d.ts +19 -0
  65. package/dist/useDashboardColumnFilters.d.ts.map +1 -0
  66. package/dist/useDashboardColumnFilters.js +61 -0
  67. package/dist/useDashboardColumnFilters.js.map +1 -0
  68. package/dist/useGridLinker.d.ts +4 -0
  69. package/dist/useGridLinker.d.ts.map +1 -0
  70. package/dist/useGridLinker.js +107 -0
  71. package/dist/useGridLinker.js.map +1 -0
  72. package/package.json +19 -19
@@ -0,0 +1,86 @@
1
+ import { type dh } from '@deephaven/jsapi-types';
2
+ import type { PanelId } from '@deephaven/dashboard';
3
+ import type { WidgetId } from './panels';
4
+ export type FilterColumnSourceId = PanelId | WidgetId;
5
+ export type FilterColumn = {
6
+ name: string;
7
+ type: string;
8
+ };
9
+ export type FilterChangeEvent = FilterColumn & {
10
+ value: string;
11
+ timestamp: number;
12
+ excludePanelIds?: string[];
13
+ };
14
+ /**
15
+ * Listen for filter column changes
16
+ * @param eventEmitter The event emitter to emit the event on
17
+ * @param sourceId The source ID for the columns
18
+ * @param columns The columns available for filtering or null to remove the filter for the sourceId
19
+ */
20
+ export declare const listenForFilterColumnsChanged: import("@deephaven/golden-layout").EventListenFunction<[sourceId: FilterColumnSourceId, columns: readonly {
21
+ name: string;
22
+ type: string;
23
+ }[] | null]>;
24
+ /**
25
+ * Emit a filter columns changed event
26
+ * @param eventEmitter The event emitter to emit the event on
27
+ * @param sourceId The source ID for the columns
28
+ * @param columns The columns available for filtering or null to remove the filter for the sourceId
29
+ */
30
+ export declare const emitFilterColumnsChanged: import("@deephaven/golden-layout").EventEmitFunction<[sourceId: FilterColumnSourceId, columns: readonly {
31
+ name: string;
32
+ type: string;
33
+ }[] | null]>;
34
+ /**
35
+ * Use a filter columns change event listener
36
+ * @param eventEmitter The event emitter to emit the event on
37
+ * @param sourceId The source ID for the columns
38
+ * @param columns The columns available for filtering or null to remove the filter for the sourceId
39
+ */
40
+ export declare const useFilterColumnsChangedListener: import("@deephaven/golden-layout").EventListenerHook<[sourceId: FilterColumnSourceId, columns: readonly {
41
+ name: string;
42
+ type: string;
43
+ }[] | null]>;
44
+ /**
45
+ * Listen for filter table changes
46
+ * @param eventEmitter The event emitter to emit the event on
47
+ * @param sourceId The source ID for the table
48
+ * @param table The table available for filtering or null to remove the table for the sourceId
49
+ */
50
+ export declare const listenForFilterTableChanged: import("@deephaven/golden-layout").EventListenFunction<[sourceId: FilterColumnSourceId, table: dh.Table | null]>;
51
+ /**
52
+ * Emit a filter table changed event
53
+ * @param eventEmitter The event emitter to emit the event on
54
+ * @param sourceId The source ID for the table
55
+ * @param table The table available for filtering or null to remove the table for the sourceId
56
+ */
57
+ export declare const emitFilterTableChanged: import("@deephaven/golden-layout").EventEmitFunction<[sourceId: FilterColumnSourceId, table: dh.Table | null]>;
58
+ /**
59
+ * Use a filter table change event listener
60
+ * @param eventEmitter The event emitter to emit the event on
61
+ * @param sourceId The source ID for the table
62
+ * @param table The table available for filtering or null to remove the table for the sourceId
63
+ */
64
+ export declare const useFilterTableChangedListener: import("@deephaven/golden-layout").EventListenerHook<[sourceId: FilterColumnSourceId, table: dh.Table | null]>;
65
+ /**
66
+ * Listen for filter changes
67
+ * @param eventEmitter The event emitter to emit the event on
68
+ * @param sourceId The source ID for the filter
69
+ * @param filterChange The filter change event or null to remove the filter for the sourceId
70
+ */
71
+ export declare const listenForFilterChanged: import("@deephaven/golden-layout").EventListenFunction<[sourceId: FilterColumnSourceId, filterChange: FilterChangeEvent | FilterChangeEvent[] | null]>;
72
+ /**
73
+ * Emit a filter change event
74
+ * @param eventEmitter The event emitter to emit the event on
75
+ * @param sourceId The source ID for the filter
76
+ * @param filterChange The filter change event or null to remove the filter for the sourceId
77
+ */
78
+ export declare const emitFilterChanged: import("@deephaven/golden-layout").EventEmitFunction<[sourceId: FilterColumnSourceId, filterChange: FilterChangeEvent | FilterChangeEvent[] | null]>;
79
+ /**
80
+ * Use a filter change event listener
81
+ * @param eventEmitter The event emitter to emit the event on
82
+ * @param sourceId The source ID for the filter
83
+ * @param filterChange The filter change event or null to remove the filter for the sourceId
84
+ */
85
+ export declare const useFilterChangedListener: import("@deephaven/golden-layout").EventListenerHook<[sourceId: FilterColumnSourceId, filterChange: FilterChangeEvent | FilterChangeEvent[] | null]>;
86
+ //# sourceMappingURL=FilterEvents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterEvents.d.ts","sourceRoot":"","sources":["../src/FilterEvents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AASF;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B;UAVZ,MAAM;UAAQ,MAAM;YAUyB,CAAC;AAE5E;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;UAlBP,MAAM;UAAQ,MAAM;YAkBkB,CAAC;AAErE;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B;UA1Bd,MAAM;UAAQ,MAAM;YA2Bb,CAAC;AAMtC;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,kHAA+B,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,gHAA6B,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,gHAAoC,CAAC;AAS/E;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,wJAA0B,CAAC;AAE9D;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,sJAAwB,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,sJAA+B,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { makeEventFunctions } from '@deephaven/golden-layout';
2
+ import { InputFilterEvent } from "./events/index.js";
3
+ var filterColumnsChangedFns = makeEventFunctions(InputFilterEvent.COLUMNS_CHANGED);
4
+
5
+ /**
6
+ * Listen for filter column changes
7
+ * @param eventEmitter The event emitter to emit the event on
8
+ * @param sourceId The source ID for the columns
9
+ * @param columns The columns available for filtering or null to remove the filter for the sourceId
10
+ */
11
+ export var listenForFilterColumnsChanged = filterColumnsChangedFns.listen;
12
+
13
+ /**
14
+ * Emit a filter columns changed event
15
+ * @param eventEmitter The event emitter to emit the event on
16
+ * @param sourceId The source ID for the columns
17
+ * @param columns The columns available for filtering or null to remove the filter for the sourceId
18
+ */
19
+ export var emitFilterColumnsChanged = filterColumnsChangedFns.emit;
20
+
21
+ /**
22
+ * Use a filter columns change event listener
23
+ * @param eventEmitter The event emitter to emit the event on
24
+ * @param sourceId The source ID for the columns
25
+ * @param columns The columns available for filtering or null to remove the filter for the sourceId
26
+ */
27
+ export var useFilterColumnsChangedListener = filterColumnsChangedFns.useListener;
28
+ var filterTableChangedFns = makeEventFunctions(InputFilterEvent.TABLE_CHANGED);
29
+
30
+ /**
31
+ * Listen for filter table changes
32
+ * @param eventEmitter The event emitter to emit the event on
33
+ * @param sourceId The source ID for the table
34
+ * @param table The table available for filtering or null to remove the table for the sourceId
35
+ */
36
+ export var listenForFilterTableChanged = filterTableChangedFns.listen;
37
+
38
+ /**
39
+ * Emit a filter table changed event
40
+ * @param eventEmitter The event emitter to emit the event on
41
+ * @param sourceId The source ID for the table
42
+ * @param table The table available for filtering or null to remove the table for the sourceId
43
+ */
44
+ export var emitFilterTableChanged = filterTableChangedFns.emit;
45
+
46
+ /**
47
+ * Use a filter table change event listener
48
+ * @param eventEmitter The event emitter to emit the event on
49
+ * @param sourceId The source ID for the table
50
+ * @param table The table available for filtering or null to remove the table for the sourceId
51
+ */
52
+ export var useFilterTableChangedListener = filterTableChangedFns.useListener;
53
+ var filterChangedFns = makeEventFunctions(InputFilterEvent.FILTERS_CHANGED);
54
+
55
+ /**
56
+ * Listen for filter changes
57
+ * @param eventEmitter The event emitter to emit the event on
58
+ * @param sourceId The source ID for the filter
59
+ * @param filterChange The filter change event or null to remove the filter for the sourceId
60
+ */
61
+ export var listenForFilterChanged = filterChangedFns.listen;
62
+
63
+ /**
64
+ * Emit a filter change event
65
+ * @param eventEmitter The event emitter to emit the event on
66
+ * @param sourceId The source ID for the filter
67
+ * @param filterChange The filter change event or null to remove the filter for the sourceId
68
+ */
69
+ export var emitFilterChanged = filterChangedFns.emit;
70
+
71
+ /**
72
+ * Use a filter change event listener
73
+ * @param eventEmitter The event emitter to emit the event on
74
+ * @param sourceId The source ID for the filter
75
+ * @param filterChange The filter change event or null to remove the filter for the sourceId
76
+ */
77
+ export var useFilterChangedListener = filterChangedFns.useListener; // A panel or widget can have columns for filters
78
+ //# sourceMappingURL=FilterEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterEvents.js","names":["makeEventFunctions","InputFilterEvent","filterColumnsChangedFns","COLUMNS_CHANGED","listenForFilterColumnsChanged","listen","emitFilterColumnsChanged","emit","useFilterColumnsChangedListener","useListener","filterTableChangedFns","TABLE_CHANGED","listenForFilterTableChanged","emitFilterTableChanged","useFilterTableChangedListener","filterChangedFns","FILTERS_CHANGED","listenForFilterChanged","emitFilterChanged","useFilterChangedListener"],"sources":["../src/FilterEvents.ts"],"sourcesContent":["import { makeEventFunctions } from '@deephaven/golden-layout';\nimport { type dh } from '@deephaven/jsapi-types';\nimport type { PanelId } from '@deephaven/dashboard';\nimport { InputFilterEvent } from './events';\nimport type { WidgetId } from './panels';\n\nexport type FilterColumnSourceId = PanelId | WidgetId;\n\nexport type FilterColumn = {\n name: string;\n type: string;\n};\n\nexport type FilterChangeEvent = FilterColumn & {\n value: string;\n timestamp: number;\n excludePanelIds?: string[];\n};\n\nconst filterColumnsChangedFns = makeEventFunctions<\n [\n sourceId: FilterColumnSourceId,\n columns: readonly { name: string; type: string }[] | null,\n ]\n>(InputFilterEvent.COLUMNS_CHANGED);\n\n/**\n * Listen for filter column changes\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the columns\n * @param columns The columns available for filtering or null to remove the filter for the sourceId\n */\nexport const listenForFilterColumnsChanged = filterColumnsChangedFns.listen;\n\n/**\n * Emit a filter columns changed event\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the columns\n * @param columns The columns available for filtering or null to remove the filter for the sourceId\n */\nexport const emitFilterColumnsChanged = filterColumnsChangedFns.emit;\n\n/**\n * Use a filter columns change event listener\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the columns\n * @param columns The columns available for filtering or null to remove the filter for the sourceId\n */\nexport const useFilterColumnsChangedListener =\n filterColumnsChangedFns.useListener;\n\nconst filterTableChangedFns = makeEventFunctions<\n [sourceId: FilterColumnSourceId, table: dh.Table | null]\n>(InputFilterEvent.TABLE_CHANGED);\n\n/**\n * Listen for filter table changes\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the table\n * @param table The table available for filtering or null to remove the table for the sourceId\n */\nexport const listenForFilterTableChanged = filterTableChangedFns.listen;\n\n/**\n * Emit a filter table changed event\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the table\n * @param table The table available for filtering or null to remove the table for the sourceId\n */\nexport const emitFilterTableChanged = filterTableChangedFns.emit;\n\n/**\n * Use a filter table change event listener\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the table\n * @param table The table available for filtering or null to remove the table for the sourceId\n */\nexport const useFilterTableChangedListener = filterTableChangedFns.useListener;\n\nconst filterChangedFns = makeEventFunctions<\n [\n sourceId: FilterColumnSourceId,\n filterChange: FilterChangeEvent | FilterChangeEvent[] | null,\n ]\n>(InputFilterEvent.FILTERS_CHANGED);\n\n/**\n * Listen for filter changes\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the filter\n * @param filterChange The filter change event or null to remove the filter for the sourceId\n */\nexport const listenForFilterChanged = filterChangedFns.listen;\n\n/**\n * Emit a filter change event\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the filter\n * @param filterChange The filter change event or null to remove the filter for the sourceId\n */\nexport const emitFilterChanged = filterChangedFns.emit;\n\n/**\n * Use a filter change event listener\n * @param eventEmitter The event emitter to emit the event on\n * @param sourceId The source ID for the filter\n * @param filterChange The filter change event or null to remove the filter for the sourceId\n */\nexport const useFilterChangedListener = filterChangedFns.useListener; // A panel or widget can have columns for filters\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,0BAA0B;AAAC,SAGrDC,gBAAgB;AAgBzB,IAAMC,uBAAuB,GAAGF,kBAAkB,CAKhDC,gBAAgB,CAACE,eAAe,CAAC;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,6BAA6B,GAAGF,uBAAuB,CAACG,MAAM;;AAE3E;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,wBAAwB,GAAGJ,uBAAuB,CAACK,IAAI;;AAEpE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,+BAA+B,GAC1CN,uBAAuB,CAACO,WAAW;AAErC,IAAMC,qBAAqB,GAAGV,kBAAkB,CAE9CC,gBAAgB,CAACU,aAAa,CAAC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,2BAA2B,GAAGF,qBAAqB,CAACL,MAAM;;AAEvE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMQ,sBAAsB,GAAGH,qBAAqB,CAACH,IAAI;;AAEhE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMO,6BAA6B,GAAGJ,qBAAqB,CAACD,WAAW;AAE9E,IAAMM,gBAAgB,GAAGf,kBAAkB,CAKzCC,gBAAgB,CAACe,eAAe,CAAC;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,sBAAsB,GAAGF,gBAAgB,CAACV,MAAM;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMa,iBAAiB,GAAGH,gBAAgB,CAACR,IAAI;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMY,wBAAwB,GAAGJ,gBAAgB,CAACN,WAAW,CAAC,CAAC"}
@@ -1,14 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { DashboardPluginComponentProps } from '@deephaven/dashboard';
3
- type Column = {
4
- name: string;
5
- type: string;
6
- };
7
- export type FilterChangeEvent = Column & {
8
- value: string;
9
- timestamp: number;
10
- excludePanelIds?: string[];
11
- };
12
3
  export type FilterPluginProps = Partial<DashboardPluginComponentProps>;
13
4
  export declare function FilterPlugin(props: FilterPluginProps): JSX.Element | null;
14
5
  export default FilterPlugin;
@@ -1 +1 @@
1
- {"version":3,"file":"FilterPlugin.d.ts","sourceRoot":"","sources":["../src/FilterPlugin.tsx"],"names":[],"mappings":";AAGA,OAAO,EAEL,6BAA6B,EAK9B,MAAM,sBAAsB,CAAC;AAY9B,KAAK,MAAM,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAMvE,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CA8OzE;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"FilterPlugin.d.ts","sourceRoot":"","sources":["../src/FilterPlugin.tsx"],"names":[],"mappings":";AAGA,OAAO,EAEL,6BAA6B,EAM9B,MAAM,sBAAsB,CAAC;AAqB9B,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAEvE,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CA8PzE;AAED,eAAe,YAAY,CAAC"}
@@ -6,10 +6,8 @@ import Log from '@deephaven/log';
6
6
  import { TextUtils } from '@deephaven/utils';
7
7
  import { InputFilterEvent } from "./events/index.js";
8
8
  import { DropdownFilterPanel, FilterSetManagerPanel, InputFilterPanel } from "./panels/index.js";
9
+ import { useFilterChangedListener, useFilterColumnsChangedListener, useFilterTableChangedListener } from "./FilterEvents.js";
9
10
  var log = Log.module('FilterPlugin');
10
- function flattenArray(accumulator, currentValue) {
11
- return accumulator.concat(currentValue);
12
- }
13
11
  export function FilterPlugin(props) {
14
12
  assertIsDashboardPluginProps(props);
15
13
  var {
@@ -22,7 +20,7 @@ export function FilterPlugin(props) {
22
20
  var [panelFilters] = useState(() => new Map());
23
21
  var [panelTables] = useState(() => new Map());
24
22
  var sendUpdate = useCallback(() => {
25
- var columns = Array.from(panelColumns.values()).reduce(flattenArray, []).sort((a, b) => {
23
+ var columns = Array.from(panelColumns.values()).flat().sort((a, b) => {
26
24
  var aName = TextUtils.toLower(a.name);
27
25
  var bName = TextUtils.toLower(b.name);
28
26
  if (aName !== bName) {
@@ -40,7 +38,7 @@ export function FilterPlugin(props) {
40
38
  }
41
39
  return array;
42
40
  }, []);
43
- var filters = Array.from(panelFilters.values()).reduce(flattenArray, []).sort((a, b) => a.timestamp - b.timestamp);
41
+ var filters = Array.from(panelFilters.values()).flat().sort((a, b) => a.timestamp - b.timestamp);
44
42
  var tableMap = new Map(panelTables);
45
43
  log.debug('sendUpdate', {
46
44
  columns,
@@ -56,35 +54,50 @@ export function FilterPlugin(props) {
56
54
 
57
55
  /**
58
56
  * Handler for the COLUMNS_CHANGED event.
59
- * @param panel The component that's emitting the filter change
60
- * @param columns The columns in this panel
57
+ * @param sourceId The id of the component that's emitting the filter change
58
+ * @param columns The columns in this panel. Null to clear the columns.
61
59
  */
62
- var handleColumnsChanged = useCallback((panel, columns) => {
63
- log.debug2('handleColumnsChanged', panel, columns);
64
- panelColumns.set(panel, [].concat(columns));
60
+ var handleColumnsChanged = useCallback((sourceId, columns) => {
61
+ log.debug2('handleColumnsChanged', sourceId, columns);
62
+ if (columns == null) {
63
+ panelColumns.delete(sourceId);
64
+ } else {
65
+ panelColumns.set(sourceId, [].concat(columns));
66
+ }
65
67
  sendUpdate();
66
68
  }, [panelColumns, sendUpdate]);
67
69
 
68
70
  /**
69
71
  * Handler for the FILTERS_CHANGED event.
70
- * @param {Component} panel The component that's emitting the filter change
71
- * @param {FilterChangeEvent|Array<FilterChangeEvent>} filters The input filters set by the panel
72
+ * @param sourceId The id of the component that's emitting the filter change
73
+ * @param filters The input filters set by the panel
72
74
  */
73
- var handleFiltersChanged = useCallback((panel, filters) => {
74
- log.debug2('handleFiltersChanged', panel, filters);
75
- panelFilters.set(panel, [].concat(filters));
75
+ var handleFiltersChanged = useCallback((sourceId, filters) => {
76
+ log.debug2('handleFiltersChanged', sourceId, filters);
77
+ if (filters == null) {
78
+ panelFilters.delete(sourceId);
79
+ } else {
80
+ panelFilters.set(sourceId, [].concat(filters !== null && filters !== void 0 ? filters : []));
81
+ }
76
82
  sendUpdate();
77
83
  }, [panelFilters, sendUpdate]);
78
- var handleTableChanged = useCallback((panel, table) => {
79
- log.debug2('handleTableChanged', panel, table);
80
- panelTables.set(LayoutUtils.getIdFromPanel(panel), table);
84
+ var handleTableChanged = useCallback((sourceId, table) => {
85
+ log.debug2('handleTableChanged', sourceId, table);
86
+ if (table == null) {
87
+ panelTables.delete(sourceId);
88
+ } else {
89
+ panelTables.set(sourceId, table);
90
+ }
81
91
  sendUpdate();
82
92
  }, [panelTables, sendUpdate]);
83
93
  var handlePanelUnmount = useCallback(panel => {
84
94
  log.debug2('handlePanelUnmount', panel);
85
- panelColumns.delete(panel);
86
- panelFilters.delete(panel);
87
- panelTables.delete(LayoutUtils.getIdFromPanel(panel));
95
+ var panelId = LayoutUtils.getIdFromPanel(panel);
96
+ if (panelId != null) {
97
+ panelColumns.delete(panelId);
98
+ panelTables.delete(panelId);
99
+ panelFilters.delete(panelId);
100
+ }
88
101
  sendUpdate();
89
102
  }, [panelColumns, panelFilters, panelTables, sendUpdate]);
90
103
  var handleOpenDropdown = useCallback(_ref => {
@@ -192,9 +205,9 @@ export function FilterPlugin(props) {
192
205
  cleanups.forEach(cleanup => cleanup());
193
206
  };
194
207
  }, [registerComponent]);
195
- useListener(layout.eventHub, InputFilterEvent.COLUMNS_CHANGED, handleColumnsChanged);
196
- useListener(layout.eventHub, InputFilterEvent.FILTERS_CHANGED, handleFiltersChanged);
197
- useListener(layout.eventHub, InputFilterEvent.TABLE_CHANGED, handleTableChanged);
208
+ useFilterColumnsChangedListener(layout.eventHub, handleColumnsChanged);
209
+ useFilterChangedListener(layout.eventHub, handleFiltersChanged);
210
+ useFilterTableChangedListener(layout.eventHub, handleTableChanged);
198
211
  useListener(layout.eventHub, InputFilterEvent.OPEN_DROPDOWN, handleOpenDropdown);
199
212
  useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);
200
213
  useListener(layout.eventHub, InputFilterEvent.OPEN_FILTER_SET_MANAGER, handleOpenFilterSetManager);
@@ -1 +1 @@
1
- {"version":3,"file":"FilterPlugin.js","names":["useCallback","useEffect","useState","useDispatch","nanoid","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","updateDashboardData","useListener","Log","TextUtils","InputFilterEvent","DropdownFilterPanel","FilterSetManagerPanel","InputFilterPanel","log","module","flattenArray","accumulator","currentValue","concat","FilterPlugin","props","id","localDashboardId","layout","registerComponent","dispatch","panelColumns","Map","panelFilters","panelTables","sendUpdate","columns","Array","from","values","reduce","sort","a","b","aName","toLower","name","bName","aType","type","bType","array","column","length","push","filters","timestamp","tableMap","debug","handleColumnsChanged","panel","debug2","set","handleFiltersChanged","handleTableChanged","table","getIdFromPanel","handlePanelUnmount","delete","handleOpenDropdown","_ref","title","metadata","panelState","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","config","component","COMPONENT","root","openComponent","handleOpenInput","_ref2","undefined","handleOpenFilterSetManager","_ref3","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","COLUMNS_CHANGED","FILTERS_CHANGED","TABLE_CHANGED","OPEN_DROPDOWN","OPEN_INPUT","OPEN_FILTER_SET_MANAGER","UNMOUNT"],"sources":["../src/FilterPlugin.tsx"],"sourcesContent":["import { Component, useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n updateDashboardData,\n useListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { TextUtils } from '@deephaven/utils';\nimport { InputFilterEvent } from './events';\nimport {\n DropdownFilterPanel,\n FilterSetManagerPanel,\n InputFilterPanel,\n} from './panels';\n\nconst log = Log.module('FilterPlugin');\n\ntype Column = {\n name: string;\n type: string;\n};\n\nexport type FilterChangeEvent = Column & {\n value: string;\n timestamp: number;\n excludePanelIds?: string[];\n};\n\nexport type FilterPluginProps = Partial<DashboardPluginComponentProps>;\n\nfunction flattenArray<T>(accumulator: T[], currentValue: T | T[]): T[] {\n return accumulator.concat(currentValue);\n}\n\nexport function FilterPlugin(props: FilterPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const { id: localDashboardId, layout, registerComponent } = props;\n const dispatch = useDispatch();\n const [panelColumns] = useState(() => new Map<Component, Column[]>());\n const [panelFilters] = useState(\n () => new Map<Component, FilterChangeEvent[]>()\n );\n const [panelTables] = useState(() => new Map());\n\n const sendUpdate = useCallback(() => {\n const columns = Array.from(panelColumns.values())\n .reduce(flattenArray, [] as Column[])\n .sort((a, b) => {\n const aName = TextUtils.toLower(a.name);\n const bName = TextUtils.toLower(b.name);\n if (aName !== bName) {\n return aName > bName ? 1 : -1;\n }\n\n const aType = TextUtils.toLower(a.type);\n const bType = TextUtils.toLower(b.type);\n if (aType !== bType) {\n return aType > bType ? 1 : -1;\n }\n\n return 0;\n })\n .reduce((array, column) => {\n if (\n array.length === 0 ||\n TextUtils.toLower(array[array.length - 1].name) !==\n TextUtils.toLower(column.name) ||\n TextUtils.toLower(array[array.length - 1].type) !==\n TextUtils.toLower(column.type)\n ) {\n array.push(column);\n }\n\n return array;\n }, [] as Column[]);\n\n const filters = Array.from(panelFilters.values())\n .reduce(flattenArray, [] as FilterChangeEvent[])\n .sort((a, b) => a.timestamp - b.timestamp);\n const tableMap = new Map(panelTables);\n\n log.debug('sendUpdate', { columns, filters, tableMap });\n dispatch(\n updateDashboardData(localDashboardId, { columns, filters, tableMap })\n );\n }, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);\n\n /**\n * Handler for the COLUMNS_CHANGED event.\n * @param panel The component that's emitting the filter change\n * @param columns The columns in this panel\n */\n const handleColumnsChanged = useCallback(\n (panel: Component, columns: Column | Column[]) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, ([] as Column[]).concat(columns));\n sendUpdate();\n },\n [panelColumns, sendUpdate]\n );\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param {Component} panel The component that's emitting the filter change\n * @param {FilterChangeEvent|Array<FilterChangeEvent>} filters The input filters set by the panel\n */\n const handleFiltersChanged = useCallback(\n (panel, filters) => {\n log.debug2('handleFiltersChanged', panel, filters);\n panelFilters.set(panel, [].concat(filters) as FilterChangeEvent[]);\n sendUpdate();\n },\n [panelFilters, sendUpdate]\n );\n\n const handleTableChanged = useCallback(\n (panel, table) => {\n log.debug2('handleTableChanged', panel, table);\n panelTables.set(LayoutUtils.getIdFromPanel(panel), table);\n sendUpdate();\n },\n [panelTables, sendUpdate]\n );\n\n const handlePanelUnmount = useCallback(\n panel => {\n log.debug2('handlePanelUnmount', panel);\n panelColumns.delete(panel);\n panelFilters.delete(panel);\n panelTables.delete(LayoutUtils.getIdFromPanel(panel));\n sendUpdate();\n },\n [panelColumns, panelFilters, panelTables, sendUpdate]\n );\n\n const handleOpenDropdown = useCallback(\n ({\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: DropdownFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenInput = useCallback(\n ({\n title = 'InputFilter',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: InputFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenFilterSetManager = useCallback(\n ({\n title = 'FilterSets',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: FilterSetManagerPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel),\n registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel),\n registerComponent(\n FilterSetManagerPanel.COMPONENT,\n FilterSetManagerPanel\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent]\n );\n\n useListener(\n layout.eventHub,\n InputFilterEvent.COLUMNS_CHANGED,\n handleColumnsChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.FILTERS_CHANGED,\n handleFiltersChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.TABLE_CHANGED,\n handleTableChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_DROPDOWN,\n handleOpenDropdown\n );\n useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_FILTER_SET_MANAGER,\n handleOpenFilterSetManager\n );\n useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);\n\n return null;\n}\n\nexport default FilterPlugin;\n"],"mappings":"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"}
1
+ {"version":3,"file":"FilterPlugin.js","names":["useCallback","useEffect","useState","useDispatch","nanoid","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","updateDashboardData","useListener","Log","TextUtils","InputFilterEvent","DropdownFilterPanel","FilterSetManagerPanel","InputFilterPanel","useFilterChangedListener","useFilterColumnsChangedListener","useFilterTableChangedListener","log","module","FilterPlugin","props","id","localDashboardId","layout","registerComponent","dispatch","panelColumns","Map","panelFilters","panelTables","sendUpdate","columns","Array","from","values","flat","sort","a","b","aName","toLower","name","bName","aType","type","bType","reduce","array","column","length","push","filters","timestamp","tableMap","debug","handleColumnsChanged","sourceId","debug2","delete","set","concat","handleFiltersChanged","handleTableChanged","table","handlePanelUnmount","panel","panelId","getIdFromPanel","handleOpenDropdown","_ref","title","metadata","panelState","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","config","component","COMPONENT","root","openComponent","handleOpenInput","_ref2","undefined","handleOpenFilterSetManager","_ref3","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN_DROPDOWN","OPEN_INPUT","OPEN_FILTER_SET_MANAGER","UNMOUNT"],"sources":["../src/FilterPlugin.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n type PanelComponent,\n PanelEvent,\n updateDashboardData,\n useListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { TextUtils } from '@deephaven/utils';\nimport { type dh } from '@deephaven/jsapi-types';\nimport { InputFilterEvent } from './events';\nimport {\n DropdownFilterPanel,\n FilterSetManagerPanel,\n InputFilterPanel,\n} from './panels';\nimport {\n type FilterColumn,\n type FilterChangeEvent,\n type FilterColumnSourceId,\n useFilterChangedListener,\n useFilterColumnsChangedListener,\n useFilterTableChangedListener,\n} from './FilterEvents';\n\nconst log = Log.module('FilterPlugin');\n\nexport type FilterPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport function FilterPlugin(props: FilterPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const { id: localDashboardId, layout, registerComponent } = props;\n const dispatch = useDispatch();\n const [panelColumns] = useState(\n () => new Map<FilterColumnSourceId, FilterColumn[]>()\n );\n const [panelFilters] = useState(\n () => new Map<FilterColumnSourceId, FilterChangeEvent[]>()\n );\n const [panelTables] = useState(\n () => new Map<FilterColumnSourceId, dh.Table>()\n );\n\n const sendUpdate = useCallback(() => {\n const columns = Array.from(panelColumns.values())\n .flat()\n .sort((a, b) => {\n const aName = TextUtils.toLower(a.name);\n const bName = TextUtils.toLower(b.name);\n if (aName !== bName) {\n return aName > bName ? 1 : -1;\n }\n\n const aType = TextUtils.toLower(a.type);\n const bType = TextUtils.toLower(b.type);\n if (aType !== bType) {\n return aType > bType ? 1 : -1;\n }\n\n return 0;\n })\n .reduce((array, column) => {\n if (\n array.length === 0 ||\n TextUtils.toLower(array[array.length - 1].name) !==\n TextUtils.toLower(column.name) ||\n TextUtils.toLower(array[array.length - 1].type) !==\n TextUtils.toLower(column.type)\n ) {\n array.push(column);\n }\n\n return array;\n }, [] as FilterColumn[]);\n\n const filters = Array.from(panelFilters.values())\n .flat()\n .sort((a, b) => a.timestamp - b.timestamp);\n const tableMap = new Map(panelTables);\n\n log.debug('sendUpdate', { columns, filters, tableMap });\n dispatch(\n updateDashboardData(localDashboardId, { columns, filters, tableMap })\n );\n }, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);\n\n /**\n * Handler for the COLUMNS_CHANGED event.\n * @param sourceId The id of the component that's emitting the filter change\n * @param columns The columns in this panel. Null to clear the columns.\n */\n const handleColumnsChanged = useCallback(\n (\n sourceId: FilterColumnSourceId,\n columns: readonly FilterColumn[] | null\n ) => {\n log.debug2('handleColumnsChanged', sourceId, columns);\n if (columns == null) {\n panelColumns.delete(sourceId);\n } else {\n panelColumns.set(sourceId, ([] as FilterColumn[]).concat(columns));\n }\n sendUpdate();\n },\n [panelColumns, sendUpdate]\n );\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param sourceId The id of the component that's emitting the filter change\n * @param filters The input filters set by the panel\n */\n const handleFiltersChanged = useCallback(\n (\n sourceId: FilterColumnSourceId,\n filters: FilterChangeEvent | FilterChangeEvent[] | null\n ) => {\n log.debug2('handleFiltersChanged', sourceId, filters);\n if (filters == null) {\n panelFilters.delete(sourceId);\n } else {\n panelFilters.set(\n sourceId,\n ([] as FilterChangeEvent[]).concat(filters ?? [])\n );\n }\n sendUpdate();\n },\n [panelFilters, sendUpdate]\n );\n\n const handleTableChanged = useCallback(\n (sourceId: FilterColumnSourceId, table: dh.Table | null) => {\n log.debug2('handleTableChanged', sourceId, table);\n if (table == null) {\n panelTables.delete(sourceId);\n } else {\n panelTables.set(sourceId, table);\n }\n sendUpdate();\n },\n [panelTables, sendUpdate]\n );\n\n const handlePanelUnmount = useCallback(\n (panel: PanelComponent) => {\n log.debug2('handlePanelUnmount', panel);\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId != null) {\n panelColumns.delete(panelId);\n panelTables.delete(panelId);\n panelFilters.delete(panelId);\n }\n sendUpdate();\n },\n [panelColumns, panelFilters, panelTables, sendUpdate]\n );\n\n const handleOpenDropdown = useCallback(\n ({\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: DropdownFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenInput = useCallback(\n ({\n title = 'InputFilter',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: InputFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenFilterSetManager = useCallback(\n ({\n title = 'FilterSets',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: FilterSetManagerPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel),\n registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel),\n registerComponent(\n FilterSetManagerPanel.COMPONENT,\n FilterSetManagerPanel\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent]\n );\n\n useFilterColumnsChangedListener(layout.eventHub, handleColumnsChanged);\n useFilterChangedListener(layout.eventHub, handleFiltersChanged);\n useFilterTableChangedListener(layout.eventHub, handleTableChanged);\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_DROPDOWN,\n handleOpenDropdown\n );\n useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_FILTER_SET_MANAGER,\n handleOpenFilterSetManager\n );\n useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);\n\n return null;\n}\n\nexport default FilterPlugin;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"GridWidgetPlugin.d.ts","sourceRoot":"","sources":["../src/GridWidgetPlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAiB3D,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,GACN,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAmFzD;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"GridWidgetPlugin.d.ts","sourceRoot":"","sources":["../src/GridWidgetPlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAuB3D,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,GACN,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAqHzD;AAED,eAAe,gBAAgB,CAAC"}
@@ -5,19 +5,26 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typ
5
5
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
6
  import { useCallback, useMemo, useRef } from 'react';
7
7
  import { usePersistentState } from '@deephaven/plugin';
8
- import { IrisGrid, IrisGridCacheUtils, IrisGridUtils } from '@deephaven/iris-grid';
8
+ import { IrisGrid, IrisGridCacheUtils, IrisGridUtils, isIrisGridTableModelTemplate } from '@deephaven/iris-grid';
9
9
  import { useSelector } from 'react-redux';
10
10
  import { getSettings } from '@deephaven/redux';
11
11
  import { LoadingOverlay } from '@deephaven/components';
12
+ import { useLayoutManager, useListener } from '@deephaven/dashboard';
12
13
  import { getErrorMessage } from '@deephaven/utils';
13
14
  import { useApi } from '@deephaven/jsapi-bootstrap';
14
15
  import { useIrisGridModel } from "./useIrisGridModel.js";
16
+ import useDashboardColumnFilters from "./useDashboardColumnFilters.js";
17
+ import { InputFilterEvent } from "./events/index.js";
18
+ import useGridLinker from "./useGridLinker.js";
15
19
  import { jsx as _jsx } from "react/jsx-runtime";
16
20
  export function GridWidgetPlugin(_ref) {
17
21
  var {
18
22
  fetch
19
23
  } = _ref;
20
24
  var settings = useSelector(getSettings);
25
+ var {
26
+ eventHub
27
+ } = useLayoutManager();
21
28
  var fetchResult = useIrisGridModel(fetch);
22
29
  var dh = useApi();
23
30
  var irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);
@@ -40,6 +47,16 @@ export function GridWidgetPlugin(_ref) {
40
47
  var newState = dehydrateIrisGridState(fetchResult.model, irisGridState, gridState);
41
48
  setState(newState);
42
49
  }, [fetchResult, setState, dehydrateIrisGridState]);
50
+ var inputFilters = useDashboardColumnFilters(fetchResult.status === 'success' ? fetchResult.model.columns : null, fetchResult.status === 'success' && isIrisGridTableModelTemplate(fetchResult.model) ? fetchResult.model.table : undefined);
51
+ var irisGridRef = useRef(null);
52
+ var linkerProps = useGridLinker(fetchResult.status === 'success' ? fetchResult.model : null, irisGridRef.current);
53
+ var handleClearAllFilters = useCallback(() => {
54
+ if (irisGridRef.current == null) {
55
+ return;
56
+ }
57
+ irisGridRef.current.clearAllFilters();
58
+ }, []);
59
+ useListener(eventHub, InputFilterEvent.CLEAR_ALL_FILTERS, handleClearAllFilters);
43
60
  if (fetchResult.status === 'loading') {
44
61
  return /*#__PURE__*/_jsx(LoadingOverlay, {
45
62
  isLoading: true
@@ -54,12 +71,14 @@ export function GridWidgetPlugin(_ref) {
54
71
  var {
55
72
  model
56
73
  } = fetchResult;
57
- return /*#__PURE__*/_jsx(IrisGrid, _objectSpread({
74
+ return /*#__PURE__*/_jsx(IrisGrid, _objectSpread(_objectSpread({
75
+ ref: irisGridRef,
58
76
  model: model,
59
77
  settings: settings,
60
- onStateChange: handleIrisGridChange
78
+ onStateChange: handleIrisGridChange,
79
+ inputFilters: inputFilters
61
80
  // eslint-disable-next-line react/jsx-props-no-spreading
62
- }, hydratedState));
81
+ }, linkerProps), hydratedState));
63
82
  }
64
83
  export default GridWidgetPlugin;
65
84
  //# sourceMappingURL=GridWidgetPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GridWidgetPlugin.js","names":["useCallback","useMemo","useRef","usePersistentState","IrisGrid","IrisGridCacheUtils","IrisGridUtils","useSelector","getSettings","LoadingOverlay","getErrorMessage","useApi","useIrisGridModel","jsx","_jsx","GridWidgetPlugin","_ref","fetch","settings","fetchResult","dh","irisGridUtils","state","setState","undefined","version","type","initialState","hydratedState","status","current","_objectSpread","hydrateIrisGridState","model","hydrateGridState","dehydrateIrisGridState","makeMemoizedCombinedGridStateDehydrator","handleIrisGridChange","irisGridState","gridState","newState","isLoading","errorMessage","error","onStateChange"],"sources":["../src/GridWidgetPlugin.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef } from 'react';\nimport {\n type WidgetComponentProps,\n usePersistentState,\n} from '@deephaven/plugin';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type DehydratedGridState,\n type DehydratedIrisGridState,\n IrisGrid,\n IrisGridCacheUtils,\n type IrisGridState,\n IrisGridUtils,\n} from '@deephaven/iris-grid';\nimport { useSelector } from 'react-redux';\nimport { getSettings, RootState } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { getErrorMessage } from '@deephaven/utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { type GridState } from '@deephaven/grid';\nimport { useIrisGridModel } from './useIrisGridModel';\n\nexport function GridWidgetPlugin({\n fetch,\n}: WidgetComponentProps<DhType.Table>): JSX.Element | null {\n const settings = useSelector(getSettings<RootState>);\n\n const fetchResult = useIrisGridModel(fetch);\n\n const dh = useApi();\n const irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);\n\n const [state, setState] = usePersistentState<\n (DehydratedIrisGridState & DehydratedGridState) | undefined\n >(undefined, {\n version: 1,\n type: 'GridWidgetPlugin',\n });\n const initialState = useRef(state);\n const hydratedState = useMemo(() => {\n if (\n fetchResult.status !== 'success' ||\n initialState.current === undefined\n ) {\n return;\n }\n return {\n ...irisGridUtils.hydrateIrisGridState(\n fetchResult.model,\n initialState.current\n ),\n ...IrisGridUtils.hydrateGridState(\n fetchResult.model,\n initialState.current\n ),\n };\n }, [fetchResult, irisGridUtils]);\n\n const dehydrateIrisGridState = useMemo(\n () => IrisGridCacheUtils.makeMemoizedCombinedGridStateDehydrator(),\n []\n );\n\n const handleIrisGridChange = useCallback(\n (irisGridState: IrisGridState, gridState: GridState) => {\n if (\n fetchResult.status !== 'success' ||\n irisGridState == null ||\n gridState == null\n ) {\n return;\n }\n\n const newState = dehydrateIrisGridState(\n fetchResult.model,\n irisGridState,\n gridState\n );\n\n setState(newState);\n },\n [fetchResult, setState, dehydrateIrisGridState]\n );\n\n if (fetchResult.status === 'loading') {\n return <LoadingOverlay isLoading />;\n }\n\n if (fetchResult.status === 'error') {\n return (\n <LoadingOverlay\n errorMessage={getErrorMessage(fetchResult.error)}\n isLoading={false}\n />\n );\n }\n\n const { model } = fetchResult;\n return (\n <IrisGrid\n model={model}\n settings={settings}\n onStateChange={handleIrisGridChange}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...hydratedState}\n />\n );\n}\n\nexport default GridWidgetPlugin;\n"],"mappings":";;;;;AAAA,SAASA,WAAW,EAAEC,OAAO,EAAEC,MAAM,QAAQ,OAAO;AACpD,SAEEC,kBAAkB,QACb,mBAAmB;AAE1B,SAGEC,QAAQ,EACRC,kBAAkB,EAElBC,aAAa,QACR,sBAAsB;AAC7B,SAASC,WAAW,QAAQ,aAAa;AACzC,SAASC,WAAW,QAAmB,kBAAkB;AACzD,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,eAAe,QAAQ,kBAAkB;AAClD,SAASC,MAAM,QAAQ,4BAA4B;AAAC,SAE3CC,gBAAgB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAEzB,OAAO,SAASC,gBAAgBA,CAAAC,IAAA,EAE2B;EAAA,IAF1B;IAC/BC;EACkC,CAAC,GAAAD,IAAA;EACnC,IAAME,QAAQ,GAAGX,WAAW,CAACC,WAAsB,CAAC;EAEpD,IAAMW,WAAW,GAAGP,gBAAgB,CAACK,KAAK,CAAC;EAE3C,IAAMG,EAAE,GAAGT,MAAM,CAAC,CAAC;EACnB,IAAMU,aAAa,GAAGpB,OAAO,CAAC,MAAM,IAAIK,aAAa,CAACc,EAAE,CAAC,EAAE,CAACA,EAAE,CAAC,CAAC;EAEhE,IAAM,CAACE,KAAK,EAAEC,QAAQ,CAAC,GAAGpB,kBAAkB,CAE1CqB,SAAS,EAAE;IACXC,OAAO,EAAE,CAAC;IACVC,IAAI,EAAE;EACR,CAAC,CAAC;EACF,IAAMC,YAAY,GAAGzB,MAAM,CAACoB,KAAK,CAAC;EAClC,IAAMM,aAAa,GAAG3B,OAAO,CAAC,MAAM;IAClC,IACEkB,WAAW,CAACU,MAAM,KAAK,SAAS,IAChCF,YAAY,CAACG,OAAO,KAAKN,SAAS,EAClC;MACA;IACF;IACA,OAAAO,aAAA,CAAAA,aAAA,KACKV,aAAa,CAACW,oBAAoB,CACnCb,WAAW,CAACc,KAAK,EACjBN,YAAY,CAACG,OACf,CAAC,GACExB,aAAa,CAAC4B,gBAAgB,CAC/Bf,WAAW,CAACc,KAAK,EACjBN,YAAY,CAACG,OACf,CAAC;EAEL,CAAC,EAAE,CAACX,WAAW,EAAEE,aAAa,CAAC,CAAC;EAEhC,IAAMc,sBAAsB,GAAGlC,OAAO,CACpC,MAAMI,kBAAkB,CAAC+B,uCAAuC,CAAC,CAAC,EAClE,EACF,CAAC;EAED,IAAMC,oBAAoB,GAAGrC,WAAW,CACtC,CAACsC,aAA4B,EAAEC,SAAoB,KAAK;IACtD,IACEpB,WAAW,CAACU,MAAM,KAAK,SAAS,IAChCS,aAAa,IAAI,IAAI,IACrBC,SAAS,IAAI,IAAI,EACjB;MACA;IACF;IAEA,IAAMC,QAAQ,GAAGL,sBAAsB,CACrChB,WAAW,CAACc,KAAK,EACjBK,aAAa,EACbC,SACF,CAAC;IAEDhB,QAAQ,CAACiB,QAAQ,CAAC;EACpB,CAAC,EACD,CAACrB,WAAW,EAAEI,QAAQ,EAAEY,sBAAsB,CAChD,CAAC;EAED,IAAIhB,WAAW,CAACU,MAAM,KAAK,SAAS,EAAE;IACpC,oBAAOf,IAAA,CAACL,cAAc;MAACgC,SAAS;IAAA,CAAE,CAAC;EACrC;EAEA,IAAItB,WAAW,CAACU,MAAM,KAAK,OAAO,EAAE;IAClC,oBACEf,IAAA,CAACL,cAAc;MACbiC,YAAY,EAAEhC,eAAe,CAACS,WAAW,CAACwB,KAAK,CAAE;MACjDF,SAAS,EAAE;IAAM,CAClB,CAAC;EAEN;EAEA,IAAM;IAAER;EAAM,CAAC,GAAGd,WAAW;EAC7B,oBACEL,IAAA,CAACV,QAAQ,EAAA2B,aAAA;IACPE,KAAK,EAAEA,KAAM;IACbf,QAAQ,EAAEA,QAAS;IACnB0B,aAAa,EAAEP;IACf;EAAA,GACIT,aAAa,CAClB,CAAC;AAEN;AAEA,eAAeb,gBAAgB"}
1
+ {"version":3,"file":"GridWidgetPlugin.js","names":["useCallback","useMemo","useRef","usePersistentState","IrisGrid","IrisGridCacheUtils","IrisGridUtils","isIrisGridTableModelTemplate","useSelector","getSettings","LoadingOverlay","useLayoutManager","useListener","getErrorMessage","useApi","useIrisGridModel","useDashboardColumnFilters","InputFilterEvent","useGridLinker","jsx","_jsx","GridWidgetPlugin","_ref","fetch","settings","eventHub","fetchResult","dh","irisGridUtils","state","setState","undefined","version","type","initialState","hydratedState","status","current","_objectSpread","hydrateIrisGridState","model","hydrateGridState","dehydrateIrisGridState","makeMemoizedCombinedGridStateDehydrator","handleIrisGridChange","irisGridState","gridState","newState","inputFilters","columns","table","irisGridRef","linkerProps","handleClearAllFilters","clearAllFilters","CLEAR_ALL_FILTERS","isLoading","errorMessage","error","ref","onStateChange"],"sources":["../src/GridWidgetPlugin.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef } from 'react';\nimport {\n type WidgetComponentProps,\n usePersistentState,\n} from '@deephaven/plugin';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type DehydratedGridState,\n type DehydratedIrisGridState,\n IrisGrid,\n IrisGridCacheUtils,\n type IrisGridState,\n type IrisGridType,\n IrisGridUtils,\n isIrisGridTableModelTemplate,\n} from '@deephaven/iris-grid';\nimport { useSelector } from 'react-redux';\nimport { getSettings, RootState } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useLayoutManager, useListener } from '@deephaven/dashboard';\nimport { getErrorMessage } from '@deephaven/utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { type GridState } from '@deephaven/grid';\nimport { useIrisGridModel } from './useIrisGridModel';\nimport useDashboardColumnFilters from './useDashboardColumnFilters';\nimport { InputFilterEvent } from './events';\nimport useGridLinker from './useGridLinker';\n\nexport function GridWidgetPlugin({\n fetch,\n}: WidgetComponentProps<DhType.Table>): JSX.Element | null {\n const settings = useSelector(getSettings<RootState>);\n const { eventHub } = useLayoutManager();\n\n const fetchResult = useIrisGridModel(fetch);\n\n const dh = useApi();\n const irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);\n\n const [state, setState] = usePersistentState<\n (DehydratedIrisGridState & DehydratedGridState) | undefined\n >(undefined, {\n version: 1,\n type: 'GridWidgetPlugin',\n });\n const initialState = useRef(state);\n const hydratedState = useMemo(() => {\n if (\n fetchResult.status !== 'success' ||\n initialState.current === undefined\n ) {\n return;\n }\n return {\n ...irisGridUtils.hydrateIrisGridState(\n fetchResult.model,\n initialState.current\n ),\n ...IrisGridUtils.hydrateGridState(\n fetchResult.model,\n initialState.current\n ),\n };\n }, [fetchResult, irisGridUtils]);\n\n const dehydrateIrisGridState = useMemo(\n () => IrisGridCacheUtils.makeMemoizedCombinedGridStateDehydrator(),\n []\n );\n\n const handleIrisGridChange = useCallback(\n (irisGridState: IrisGridState, gridState: GridState) => {\n if (\n fetchResult.status !== 'success' ||\n irisGridState == null ||\n gridState == null\n ) {\n return;\n }\n\n const newState = dehydrateIrisGridState(\n fetchResult.model,\n irisGridState,\n gridState\n );\n\n setState(newState);\n },\n [fetchResult, setState, dehydrateIrisGridState]\n );\n\n const inputFilters = useDashboardColumnFilters(\n fetchResult.status === 'success' ? fetchResult.model.columns : null,\n fetchResult.status === 'success' &&\n isIrisGridTableModelTemplate(fetchResult.model)\n ? fetchResult.model.table\n : undefined\n );\n\n const irisGridRef = useRef<IrisGridType | null>(null);\n\n const linkerProps = useGridLinker(\n fetchResult.status === 'success' ? fetchResult.model : null,\n irisGridRef.current\n );\n\n const handleClearAllFilters = useCallback(() => {\n if (irisGridRef.current == null) {\n return;\n }\n irisGridRef.current.clearAllFilters();\n }, []);\n\n useListener(\n eventHub,\n InputFilterEvent.CLEAR_ALL_FILTERS,\n handleClearAllFilters\n );\n\n if (fetchResult.status === 'loading') {\n return <LoadingOverlay isLoading />;\n }\n\n if (fetchResult.status === 'error') {\n return (\n <LoadingOverlay\n errorMessage={getErrorMessage(fetchResult.error)}\n isLoading={false}\n />\n );\n }\n\n const { model } = fetchResult;\n\n return (\n <IrisGrid\n ref={irisGridRef}\n model={model}\n settings={settings}\n onStateChange={handleIrisGridChange}\n inputFilters={inputFilters}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...linkerProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...hydratedState}\n />\n );\n}\n\nexport default GridWidgetPlugin;\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -22,6 +22,8 @@ export { default as ControlType } from './controls/ControlType';
22
22
  export { default as LinkerUtils } from './linker/LinkerUtils';
23
23
  export type { Link } from './linker/LinkerUtils';
24
24
  export { default as ToolType } from './linker/ToolType';
25
+ export * from './useDashboardColumnFilters';
26
+ export * from './useGridLinker';
25
27
  export * from './useLoadTablePlugin';
26
28
  export * from './events';
27
29
  export * from './panels';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,cAAc,sBAAsB,CAAC;AAErC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AAErC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -21,6 +21,8 @@ export { default as WidgetLoaderPluginConfig } from "./WidgetLoaderPluginConfig.
21
21
  export { default as ControlType } from "./controls/ControlType.js";
22
22
  export { default as LinkerUtils } from "./linker/LinkerUtils.js";
23
23
  export { default as ToolType } from "./linker/ToolType.js";
24
+ export * from "./useDashboardColumnFilters.js";
25
+ export * from "./useGridLinker.js";
24
26
  export * from "./useLoadTablePlugin.js";
25
27
  export * from "./events/index.js";
26
28
  export * from "./panels/index.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","ChartPanelPlugin","ChartWidgetPlugin","ChartPluginConfig","ChartBuilderPlugin","ChartBuilderPluginConfig","ConsolePlugin","FilterPlugin","FilterPluginConfig","GridPanelPlugin","GridWidgetPlugin","GridPluginConfig","LinkerPlugin","LinkerPluginConfig","MarkdownPlugin","MarkdownPluginConfig","PandasPanelPlugin","PandasWidgetPlugin","PandasPluginConfig","WidgetLoaderPlugin","WidgetLoaderPluginConfig","ControlType","LinkerUtils","ToolType"],"sources":["../src/index.ts"],"sourcesContent":["export { default as ChartPanelPlugin } from './ChartPanelPlugin';\nexport { default as ChartWidgetPlugin } from './ChartWidgetPlugin';\nexport { default as ChartPluginConfig } from './ChartPluginConfig';\nexport { default as ChartBuilderPlugin } from './ChartBuilderPlugin';\nexport { default as ChartBuilderPluginConfig } from './ChartBuilderPluginConfig';\nexport { default as ConsolePlugin } from './ConsolePlugin';\nexport { default as FilterPlugin } from './FilterPlugin';\nexport { default as FilterPluginConfig } from './FilterPluginConfig';\nexport { default as GridPanelPlugin } from './GridPanelPlugin';\nexport { default as GridWidgetPlugin } from './GridWidgetPlugin';\nexport { default as GridPluginConfig } from './GridPluginConfig';\nexport { default as LinkerPlugin } from './LinkerPlugin';\nexport { default as LinkerPluginConfig } from './LinkerPluginConfig';\nexport { default as MarkdownPlugin } from './MarkdownPlugin';\nexport { default as MarkdownPluginConfig } from './MarkdownPluginConfig';\nexport { default as PandasPanelPlugin } from './PandasPanelPlugin';\nexport { default as PandasWidgetPlugin } from './PandasWidgetPlugin';\nexport { default as PandasPluginConfig } from './PandasPluginConfig';\nexport { default as WidgetLoaderPlugin } from './WidgetLoaderPlugin';\nexport { default as WidgetLoaderPluginConfig } from './WidgetLoaderPluginConfig';\nexport { default as ControlType } from './controls/ControlType';\nexport { default as LinkerUtils } from './linker/LinkerUtils';\nexport type { Link } from './linker/LinkerUtils';\nexport { default as ToolType } from './linker/ToolType';\nexport * from './useLoadTablePlugin';\n\nexport * from './events';\nexport * from './panels';\nexport * from './redux';\nexport * from './prop-types';\nexport * from './linker';\n"],"mappings":"SAASA,OAAO,IAAIC,gBAAgB;AAAA,SAC3BD,OAAO,IAAIE,iBAAiB;AAAA,SAC5BF,OAAO,IAAIG,iBAAiB;AAAA,SAC5BH,OAAO,IAAII,kBAAkB;AAAA,SAC7BJ,OAAO,IAAIK,wBAAwB;AAAA,SACnCL,OAAO,IAAIM,aAAa;AAAA,SACxBN,OAAO,IAAIO,YAAY;AAAA,SACvBP,OAAO,IAAIQ,kBAAkB;AAAA,SAC7BR,OAAO,IAAIS,eAAe;AAAA,SAC1BT,OAAO,IAAIU,gBAAgB;AAAA,SAC3BV,OAAO,IAAIW,gBAAgB;AAAA,SAC3BX,OAAO,IAAIY,YAAY;AAAA,SACvBZ,OAAO,IAAIa,kBAAkB;AAAA,SAC7Bb,OAAO,IAAIc,cAAc;AAAA,SACzBd,OAAO,IAAIe,oBAAoB;AAAA,SAC/Bf,OAAO,IAAIgB,iBAAiB;AAAA,SAC5BhB,OAAO,IAAIiB,kBAAkB;AAAA,SAC7BjB,OAAO,IAAIkB,kBAAkB;AAAA,SAC7BlB,OAAO,IAAImB,kBAAkB;AAAA,SAC7BnB,OAAO,IAAIoB,wBAAwB;AAAA,SACnCpB,OAAO,IAAIqB,WAAW;AAAA,SACtBrB,OAAO,IAAIsB,WAAW;AAAA,SAEtBtB,OAAO,IAAIuB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA"}
1
+ {"version":3,"file":"index.js","names":["default","ChartPanelPlugin","ChartWidgetPlugin","ChartPluginConfig","ChartBuilderPlugin","ChartBuilderPluginConfig","ConsolePlugin","FilterPlugin","FilterPluginConfig","GridPanelPlugin","GridWidgetPlugin","GridPluginConfig","LinkerPlugin","LinkerPluginConfig","MarkdownPlugin","MarkdownPluginConfig","PandasPanelPlugin","PandasWidgetPlugin","PandasPluginConfig","WidgetLoaderPlugin","WidgetLoaderPluginConfig","ControlType","LinkerUtils","ToolType"],"sources":["../src/index.ts"],"sourcesContent":["export { default as ChartPanelPlugin } from './ChartPanelPlugin';\nexport { default as ChartWidgetPlugin } from './ChartWidgetPlugin';\nexport { default as ChartPluginConfig } from './ChartPluginConfig';\nexport { default as ChartBuilderPlugin } from './ChartBuilderPlugin';\nexport { default as ChartBuilderPluginConfig } from './ChartBuilderPluginConfig';\nexport { default as ConsolePlugin } from './ConsolePlugin';\nexport { default as FilterPlugin } from './FilterPlugin';\nexport { default as FilterPluginConfig } from './FilterPluginConfig';\nexport { default as GridPanelPlugin } from './GridPanelPlugin';\nexport { default as GridWidgetPlugin } from './GridWidgetPlugin';\nexport { default as GridPluginConfig } from './GridPluginConfig';\nexport { default as LinkerPlugin } from './LinkerPlugin';\nexport { default as LinkerPluginConfig } from './LinkerPluginConfig';\nexport { default as MarkdownPlugin } from './MarkdownPlugin';\nexport { default as MarkdownPluginConfig } from './MarkdownPluginConfig';\nexport { default as PandasPanelPlugin } from './PandasPanelPlugin';\nexport { default as PandasWidgetPlugin } from './PandasWidgetPlugin';\nexport { default as PandasPluginConfig } from './PandasPluginConfig';\nexport { default as WidgetLoaderPlugin } from './WidgetLoaderPlugin';\nexport { default as WidgetLoaderPluginConfig } from './WidgetLoaderPluginConfig';\nexport { default as ControlType } from './controls/ControlType';\nexport { default as LinkerUtils } from './linker/LinkerUtils';\nexport type { Link } from './linker/LinkerUtils';\nexport { default as ToolType } from './linker/ToolType';\nexport * from './useDashboardColumnFilters';\nexport * from './useGridLinker';\nexport * from './useLoadTablePlugin';\n\nexport * from './events';\nexport * from './panels';\nexport * from './redux';\nexport * from './prop-types';\nexport * from './linker';\n"],"mappings":"SAASA,OAAO,IAAIC,gBAAgB;AAAA,SAC3BD,OAAO,IAAIE,iBAAiB;AAAA,SAC5BF,OAAO,IAAIG,iBAAiB;AAAA,SAC5BH,OAAO,IAAII,kBAAkB;AAAA,SAC7BJ,OAAO,IAAIK,wBAAwB;AAAA,SACnCL,OAAO,IAAIM,aAAa;AAAA,SACxBN,OAAO,IAAIO,YAAY;AAAA,SACvBP,OAAO,IAAIQ,kBAAkB;AAAA,SAC7BR,OAAO,IAAIS,eAAe;AAAA,SAC1BT,OAAO,IAAIU,gBAAgB;AAAA,SAC3BV,OAAO,IAAIW,gBAAgB;AAAA,SAC3BX,OAAO,IAAIY,YAAY;AAAA,SACvBZ,OAAO,IAAIa,kBAAkB;AAAA,SAC7Bb,OAAO,IAAIc,cAAc;AAAA,SACzBd,OAAO,IAAIe,oBAAoB;AAAA,SAC/Bf,OAAO,IAAIgB,iBAAiB;AAAA,SAC5BhB,OAAO,IAAIiB,kBAAkB;AAAA,SAC7BjB,OAAO,IAAIkB,kBAAkB;AAAA,SAC7BlB,OAAO,IAAImB,kBAAkB;AAAA,SAC7BnB,OAAO,IAAIoB,wBAAwB;AAAA,SACnCpB,OAAO,IAAIqB,WAAW;AAAA,SACtBrB,OAAO,IAAIsB,WAAW;AAAA,SAEtBtB,OAAO,IAAIuB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA"}
@@ -1,4 +1,4 @@
1
- import { PanelComponent } from '@deephaven/dashboard';
2
- import { LinkColumn } from './LinkerUtils';
3
- export type ColumnSelectionValidator = (panel: PanelComponent, tableColumn?: LinkColumn) => boolean;
1
+ import { type PanelComponent } from '@deephaven/dashboard';
2
+ import { type LinkPointOptions, type LinkColumn } from './LinkerUtils';
3
+ export type ColumnSelectionValidator = (panelOrId: PanelComponent | string, tableColumn: LinkColumn | undefined, options: LinkPointOptions) => boolean;
4
4
  //# sourceMappingURL=ColumnSelectionValidator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnSelectionValidator.d.ts","sourceRoot":"","sources":["../../src/linker/ColumnSelectionValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,MAAM,wBAAwB,GAAG,CACrC,KAAK,EAAE,cAAc,EACrB,WAAW,CAAC,EAAE,UAAU,KACrB,OAAO,CAAC"}
1
+ {"version":3,"file":"ColumnSelectionValidator.d.ts","sourceRoot":"","sources":["../../src/linker/ColumnSelectionValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,MAAM,wBAAwB,GAAG,CACrC,SAAS,EAAE,cAAc,GAAG,MAAM,EAClC,WAAW,EAAE,UAAU,GAAG,SAAS,EACnC,OAAO,EAAE,gBAAgB,KACtB,OAAO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnSelectionValidator.js","names":[],"sources":["../../src/linker/ColumnSelectionValidator.ts"],"sourcesContent":["import { PanelComponent } from '@deephaven/dashboard';\nimport { LinkColumn } from './LinkerUtils';\n\nexport type ColumnSelectionValidator = (\n panel: PanelComponent,\n tableColumn?: LinkColumn\n) => boolean;\n"],"mappings":""}
1
+ {"version":3,"file":"ColumnSelectionValidator.js","names":[],"sources":["../../src/linker/ColumnSelectionValidator.ts"],"sourcesContent":["import { type PanelComponent } from '@deephaven/dashboard';\nimport { type LinkPointOptions, type LinkColumn } from './LinkerUtils';\n\nexport type ColumnSelectionValidator = (\n panelOrId: PanelComponent | string,\n tableColumn: LinkColumn | undefined,\n options: LinkPointOptions\n) => boolean;\n"],"mappings":""}