@deephaven/dashboard-core-plugins 0.85.30 → 0.85.32

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
@@ -4,7 +4,9 @@ import { PanelComponent, PanelManager } from '@deephaven/dashboard';
4
4
  import type GoldenLayout from '@deephaven/golden-layout';
5
5
  import { RowDataMap } from '@deephaven/jsapi-utils';
6
6
  import type { dh as DhType } from '@deephaven/jsapi-types';
7
- import { Link, LinkColumn, LinkFilterMap, LinkType } from './LinkerUtils';
7
+ import { Link, LinkColumn, LinkFilterMap, LinkType, type LinkPointOptions } from './LinkerUtils';
8
+ import { type FilterColumnSourceId } from '../FilterEvents';
9
+ import { type LinkTargetProps } from './LinkerEvent';
8
10
  interface StateProps {
9
11
  activeTool: string;
10
12
  dh: typeof DhType;
@@ -27,7 +29,9 @@ declare const connector: import("react-redux").InferableComponentEnhancerWithPro
27
29
  }, OwnProps>;
28
30
  export type LinkerProps = OwnProps & StateProps & ConnectedProps<typeof connector>;
29
31
  export type LinkerState = {
30
- linkInProgress?: Link;
32
+ linkInProgress?: Link & {
33
+ endType?: LinkType;
34
+ };
31
35
  selectedIds: Set<string>;
32
36
  isDraggingPanel: boolean;
33
37
  };
@@ -37,23 +41,26 @@ export declare class Linker extends Component<LinkerProps, LinkerState> {
37
41
  componentDidUpdate(prevProps: LinkerProps): void;
38
42
  componentDidCatch(error: Error, info: ErrorInfo): void;
39
43
  componentWillUnmount(): void;
44
+ private linkTargetPropMap;
45
+ private removerFns;
40
46
  startListening(layout: GoldenLayout): void;
41
47
  stopListening(layout: GoldenLayout): void;
42
48
  reset(): void;
43
49
  handleCancel(): void;
44
50
  handleDone(): void;
45
51
  handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void;
46
- handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void;
47
- handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void;
52
+ handleColumnsChanged(sourceId: FilterColumnSourceId, columns: readonly LinkColumn[] | null): void;
48
53
  handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void;
54
+ handleLinkPointSelected(sourceId: string, column: LinkColumn, options: LinkPointOptions): void;
49
55
  /**
50
56
  * Track a column selection and build the link from it.
51
- * @param panel The panel component that is the source for the column selection
57
+ * @param sourceId The ID of the source for the column selection
52
58
  * @param column The column that was selected
59
+ * @param type The type of the link point
53
60
  * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.
54
61
  * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate
55
62
  */
56
- columnSelected(panel: PanelComponent, column: LinkColumn, isAlwaysEndPoint?: boolean, overrideIsolatedLinkerPanelId?: string | string[]): void;
63
+ columnSelected(sourceId: string, column: LinkColumn, type: LinkType, isAlwaysEndPoint?: boolean, overrideIsolatedLinkerPanelId?: string | string[]): void;
57
64
  unsetFilterValueForLink(link: Link): void;
58
65
  /**
59
66
  * Set filters for a given panel ID
@@ -65,7 +72,8 @@ export declare class Linker extends Component<LinkerProps, LinkerState> {
65
72
  deleteLinks(links: Link[], clearAll?: boolean): void;
66
73
  handleAllLinksDeleted(): void;
67
74
  handleLinkDeleted(linkId: string): void;
68
- handleUpdateValues(panel: PanelComponent, dataMap: RowDataMap): void;
75
+ handleTargetRegistered(sourceId: string, handlers: LinkTargetProps | null): void;
76
+ handleUpdateValues(sourceId: string, dataMap: RowDataMap): void;
69
77
  handlePanelCloned(panel: PanelComponent, cloneConfig: {
70
78
  id: string;
71
79
  }): void;
@@ -86,7 +94,7 @@ export declare class Linker extends Component<LinkerProps, LinkerState> {
86
94
  isOverlayShown(): boolean;
87
95
  updateSelectionValidators(): void;
88
96
  updateLinkInProgressType(type?: LinkType): void;
89
- isColumnSelectionValid(panel: PanelComponent, tableColumn?: LinkColumn): boolean;
97
+ isColumnSelectionValid(panelOrId: PanelComponent | string, tableColumn: LinkColumn | undefined, options: LinkPointOptions): boolean;
90
98
  render(): JSX.Element | null;
91
99
  }
92
100
  declare const ConnectedLinker: import("react-redux").ConnectedComponent<typeof Linker, import("react-redux").Omit<React.ClassAttributes<Linker> & OwnProps & StateProps & {
@@ -96,6 +104,6 @@ declare const ConnectedLinker: import("react-redux").ConnectedComponent<typeof L
96
104
  deleteDashboardLinks: (id: string, linkIds: string[]) => unknown;
97
105
  setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | string[] | undefined) => unknown;
98
106
  setDashboardColumnSelectionValidator: (id: string, columnSelectionValidator: import("./ColumnSelectionValidator").ColumnSelectionValidator | undefined) => unknown;
99
- }, "links" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId" | "timeZone" | "dh" | "activeTool" | "isolatedLinkerPanelId" | "setDashboardLinks" | "addDashboardLinks" | "deleteDashboardLinks" | "setDashboardColumnSelectionValidator"> & OwnProps>;
107
+ }, "links" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId" | "dh" | "timeZone" | "activeTool" | "isolatedLinkerPanelId" | "setDashboardLinks" | "addDashboardLinks" | "deleteDashboardLinks" | "setDashboardColumnSelectionValidator"> & OwnProps>;
100
108
  export default ConnectedLinker;
101
109
  //# sourceMappingURL=Linker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Linker.d.ts","sourceRoot":"","sources":["../../src/linker/Linker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Linker.d.ts","sourceRoot":"","sources":["../../src/linker/Linker.tsx"],"names":[],"mappings":"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"}
@@ -13,11 +13,14 @@ import { DateTimeColumnFormatter, DateUtils, TableUtils } from '@deephaven/jsapi
13
13
  import Log from '@deephaven/log';
14
14
  import { Type as FilterType } from '@deephaven/filters';
15
15
  import { getActiveTool, getApi, getTimeZone, setActiveTool as setActiveToolAction } from '@deephaven/redux';
16
+ import { assertNotNull } from '@deephaven/utils';
16
17
  import { getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, setDashboardLinks as setDashboardLinksAction, addDashboardLinks as addDashboardLinksAction, deleteDashboardLinks as deleteDashboardLinksAction, setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction, setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction } from "../redux/index.js";
17
18
  import ToolType from "./ToolType.js";
18
- import { ChartEvent, IrisGridEvent, InputFilterEvent } from "../events/index.js";
19
+ import { ChartEvent, IrisGridEvent } from "../events/index.js";
19
20
  import LinkerOverlayContent from "./LinkerOverlayContent.js";
20
21
  import LinkerUtils, { isLinkablePanel, isLinkableColumn } from "./LinkerUtils.js";
22
+ import { listenForFilterColumnsChanged } from "../FilterEvents.js";
23
+ import { listenForLinkPointSelected, listenForLinkSourceDataSelected, listenForRegisterLinkTarget } from "./LinkerEvent.js";
21
24
  import { jsx as _jsx } from "react/jsx-runtime";
22
25
  var log = Log.module('Linker');
23
26
  var mapState = (state, ownProps) => ({
@@ -38,6 +41,8 @@ var connector = connect(mapState, {
38
41
  export class Linker extends Component {
39
42
  constructor(props) {
40
43
  super(props);
44
+ _defineProperty(this, "linkTargetPropMap", new Map());
45
+ _defineProperty(this, "removerFns", []);
41
46
  _defineProperty(this, "getCachedLinks", memoize((links, linkInProgress, isolateForPanelId) => {
42
47
  var combinedLinks = [...links];
43
48
  if (linkInProgress != null && linkInProgress.start != null) {
@@ -55,7 +60,6 @@ export class Linker extends Component {
55
60
  this.handleCancel = this.handleCancel.bind(this);
56
61
  this.handleDone = this.handleDone.bind(this);
57
62
  this.handlePanelCloned = this.handlePanelCloned.bind(this);
58
- this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);
59
63
  this.handleColumnsChanged = this.handleColumnsChanged.bind(this);
60
64
  this.handlePanelClosed = this.handlePanelClosed.bind(this);
61
65
  this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);
@@ -67,6 +71,8 @@ export class Linker extends Component {
67
71
  this.handleUpdateValues = this.handleUpdateValues.bind(this);
68
72
  this.handleStateChange = this.handleStateChange.bind(this);
69
73
  this.handleExited = this.handleExited.bind(this);
74
+ this.handleLinkPointSelected = this.handleLinkPointSelected.bind(this);
75
+ this.handleTargetRegistered = this.handleTargetRegistered.bind(this);
70
76
  this.handleLinkSelected = this.handleLinkSelected.bind(this);
71
77
  this.handlePanelDragging = this.handlePanelDragging.bind(this);
72
78
  this.handlePanelDropped = this.handlePanelDropped.bind(this);
@@ -119,8 +125,7 @@ export class Linker extends Component {
119
125
  eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);
120
126
  eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);
121
127
  eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);
122
- eventHub.on(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);
123
- eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);
128
+ this.removerFns = [listenForFilterColumnsChanged(eventHub, this.handleColumnsChanged), listenForLinkPointSelected(eventHub, this.handleLinkPointSelected), listenForLinkSourceDataSelected(eventHub, this.handleUpdateValues), listenForRegisterLinkTarget(eventHub, this.handleTargetRegistered)];
124
129
  eventHub.on(PanelEvent.CLOSE, this.handlePanelClosed);
125
130
  eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);
126
131
  eventHub.on(PanelEvent.DRAGGING, this.handlePanelDragging);
@@ -136,12 +141,12 @@ export class Linker extends Component {
136
141
  eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);
137
142
  eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);
138
143
  eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);
139
- eventHub.off(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);
140
- eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);
141
144
  eventHub.off(PanelEvent.CLOSE, this.handlePanelClosed);
142
145
  eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);
143
146
  eventHub.off(PanelEvent.DRAGGING, this.handlePanelDragging);
144
147
  eventHub.off(PanelEvent.DROPPED, this.handlePanelDropped);
148
+ this.removerFns.forEach(remove => remove());
149
+ this.removerFns = [];
145
150
  }
146
151
  reset() {
147
152
  this.setState({
@@ -170,55 +175,33 @@ export class Linker extends Component {
170
175
  setActiveTool(ToolType.DEFAULT);
171
176
  }
172
177
  handleChartColumnSelect(panel, column) {
173
- this.columnSelected(panel, column, true);
178
+ var panelId = LayoutUtils.getIdFromPanel(panel);
179
+ assertNotNull(panelId);
180
+ this.columnSelected(panelId, column, 'chartLink', true);
174
181
  }
175
- handleFilterColumnSelect(panel, column) {
176
- log.debug('handleFilterColumnSelect', this.isOverlayShown());
182
+ handleColumnsChanged(sourceId, columns) {
183
+ log.debug('handleColumnsChanged', sourceId, columns);
177
184
  var {
178
- links,
179
- localDashboardId,
180
- setActiveTool,
181
- setDashboardIsolatedLinkerPanelId
185
+ links
182
186
  } = this.props;
183
- var panelId = LayoutUtils.getIdFromPanel(panel);
184
- var panelLinks = links.filter(link => {
185
- var _link$start2, _link$end2;
186
- return ((_link$start2 = link.start) === null || _link$start2 === void 0 ? void 0 : _link$start2.panelId) === panelId || ((_link$end2 = link.end) === null || _link$end2 === void 0 ? void 0 : _link$end2.panelId) === panelId;
187
- });
188
- if (!this.isOverlayShown() && panelId != null) {
189
- // Initial click on the filter source button with linker inactive
190
- // Show linker in isolated mode for panel
191
- setActiveTool(ToolType.LINKER);
192
- setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);
193
- if (panelLinks.length === 0) {
194
- // Source not linked - start new link in isolated linker mode
195
- // Need to pass panelId for overrideIsolatedLinkerPanelId
196
- // as redux prop update at this point not yet propagated
197
- this.columnSelected(panel, column, true, panelId);
198
- }
187
+ if (sourceId == null) {
188
+ log.error('Invalid filter columns source id', sourceId);
199
189
  return;
200
190
  }
201
191
 
202
- // Filter source clicked with linker active
203
- this.columnSelected(panel, column, true);
204
- }
205
- handleColumnsChanged(panel, columns) {
206
- log.debug('handleColumnsChanged', panel, columns);
207
- var {
208
- links
209
- } = this.props;
210
- var panelId = LayoutUtils.getIdFromPanel(panel);
211
- if (panelId == null) {
212
- log.error('Invalid panelId', panel);
192
+ // Columns is null when dh.ui widgets with linker capability are closed
193
+ if (columns == null) {
194
+ this.deleteLinksForPanelId(sourceId);
213
195
  return;
214
196
  }
197
+ // NOTE: links need to be updated to use sourceId instead of panelId. This will be done when we implement linker for dh.ui widgets DH-18840
215
198
  // Delete links that start or end on non-existent column in the updated panel
216
199
  var linksToDelete = links.filter(_ref => {
217
200
  var {
218
201
  start,
219
202
  end
220
203
  } = _ref;
221
- return start.panelId === panelId && LinkerUtils.findColumn(columns, start) == null || end != null && end.panelId === panelId && LinkerUtils.findColumn(columns, end) == null;
204
+ return start.panelId === sourceId && LinkerUtils.findColumn(columns, start) == null || end != null && end.panelId === sourceId && LinkerUtils.findColumn(columns, end) == null;
222
205
  });
223
206
  this.deleteLinks(linksToDelete);
224
207
  }
@@ -227,19 +210,56 @@ export class Linker extends Component {
227
210
  log.debug2('Column is not filterable');
228
211
  return;
229
212
  }
230
- this.columnSelected(panel, column);
213
+ var panelId = LayoutUtils.getIdFromPanel(panel);
214
+ assertNotNull(panelId);
215
+ this.columnSelected(panelId, column, 'tableLink');
216
+ }
217
+ handleLinkPointSelected(sourceId, column, options) {
218
+ var {
219
+ type
220
+ } = options;
221
+ var isIsolatedLinker = type === 'filterSource';
222
+ var isAlwaysEnd = type === 'chartLink' || type === 'filterSource';
223
+
224
+ // filterSource type should open in isolated linker mode
225
+ if (!this.isOverlayShown() && sourceId != null && isIsolatedLinker) {
226
+ var {
227
+ links,
228
+ localDashboardId,
229
+ setActiveTool,
230
+ setDashboardIsolatedLinkerPanelId
231
+ } = this.props;
232
+ var panelLinks = links.filter(link => {
233
+ var _link$start2, _link$end2;
234
+ return ((_link$start2 = link.start) === null || _link$start2 === void 0 ? void 0 : _link$start2.panelId) === sourceId || ((_link$end2 = link.end) === null || _link$end2 === void 0 ? void 0 : _link$end2.panelId) === sourceId;
235
+ });
236
+
237
+ // Initial click on the filter source button with linker inactive
238
+ // Show linker in isolated mode for panel
239
+ setActiveTool(ToolType.LINKER);
240
+ setDashboardIsolatedLinkerPanelId(localDashboardId, sourceId);
241
+ if (panelLinks.length === 0) {
242
+ // Source not linked - start new link in isolated linker mode
243
+ // Need to pass panelId for overrideIsolatedLinkerPanelId
244
+ // as redux prop update at this point not yet propagated
245
+ this.columnSelected(sourceId, column, type, isAlwaysEnd, sourceId);
246
+ }
247
+ return;
248
+ }
249
+ this.columnSelected(sourceId, column, type, isAlwaysEnd);
231
250
  }
232
251
 
233
252
  /**
234
253
  * Track a column selection and build the link from it.
235
- * @param panel The panel component that is the source for the column selection
254
+ * @param sourceId The ID of the source for the column selection
236
255
  * @param column The column that was selected
256
+ * @param type The type of the link point
237
257
  * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.
238
258
  * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate
239
259
  */
240
- columnSelected(panel, column) {
241
- var isAlwaysEndPoint = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
242
- var overrideIsolatedLinkerPanelId = arguments.length > 3 ? arguments[3] : undefined;
260
+ columnSelected(sourceId, column, type) {
261
+ var isAlwaysEndPoint = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
262
+ var overrideIsolatedLinkerPanelId = arguments.length > 4 ? arguments[4] : undefined;
243
263
  if (overrideIsolatedLinkerPanelId === undefined && !this.isOverlayShown()) {
244
264
  return;
245
265
  }
@@ -249,11 +269,6 @@ export class Linker extends Component {
249
269
  var {
250
270
  linkInProgress
251
271
  } = this.state;
252
- var panelId = LayoutUtils.getIdFromPanel(panel);
253
- if (panelId == null) {
254
- return;
255
- }
256
- var panelComponent = LayoutUtils.getComponentNameFromPanel(panel);
257
272
  var {
258
273
  name: columnName,
259
274
  type: columnType
@@ -262,36 +277,47 @@ export class Linker extends Component {
262
277
  var newLink = {
263
278
  id: nanoid(),
264
279
  start: {
265
- panelId,
266
- panelComponent,
280
+ panelId: sourceId,
267
281
  columnName,
268
282
  columnType
269
283
  },
270
- // Link starts with type Invalid as linking a source to itself is not allowed
271
284
  type: 'invalid',
272
285
  isReversed: isAlwaysEndPoint
273
286
  };
287
+ if (isAlwaysEndPoint) {
288
+ newLink.endType = type;
289
+ }
274
290
  log.debug('starting link', newLink);
275
291
  this.setState({
276
292
  linkInProgress: newLink
277
293
  });
278
294
  } else {
295
+ var _linkInProgress$endTy;
279
296
  var {
280
297
  links
281
298
  } = this.props;
282
299
  var {
283
300
  start,
284
301
  id,
285
- isReversed
302
+ isReversed = false
286
303
  } = linkInProgress;
287
304
  var end = {
288
- panelId,
289
- panelComponent,
305
+ panelId: sourceId,
290
306
  columnName,
291
307
  columnType
292
308
  };
293
- var type = LinkerUtils.getLinkType(isReversed !== undefined && isReversed ? end : start, isReversed !== undefined && isReversed ? start : end, overrideIsolatedLinkerPanelId !== null && overrideIsolatedLinkerPanelId !== void 0 ? overrideIsolatedLinkerPanelId : isolatedLinkerPanelId);
294
- switch (type) {
309
+ var isValid = !(isReversed && isAlwaysEndPoint) &&
310
+ // Cannot add a point which is only an end when we already have an end
311
+ LinkerUtils.isLinkValid(isReversed ? end : start, isReversed ? start : end, overrideIsolatedLinkerPanelId !== null && overrideIsolatedLinkerPanelId !== void 0 ? overrideIsolatedLinkerPanelId : isolatedLinkerPanelId);
312
+ if (!isValid) {
313
+ log.debug('Ignore invalid link connection', linkInProgress, end);
314
+ return;
315
+ }
316
+
317
+ // The end point is what determines the type
318
+ // If the link is reversed, we already set the type on the linkInProgress
319
+ var finalType = (_linkInProgress$endTy = linkInProgress.endType) !== null && _linkInProgress$endTy !== void 0 ? _linkInProgress$endTy : type;
320
+ switch (finalType) {
295
321
  case 'invalid':
296
322
  log.debug('Ignore invalid link connection', linkInProgress, end);
297
323
  return;
@@ -338,10 +364,10 @@ export class Linker extends Component {
338
364
 
339
365
  // Create a completed link from link in progress
340
366
  var _newLink = {
341
- start: isReversed !== undefined && isReversed ? end : start,
342
- end: isReversed !== undefined && isReversed ? start : end,
367
+ start: isReversed ? end : start,
368
+ end: isReversed ? start : end,
343
369
  id,
344
- type,
370
+ type: finalType,
345
371
  operator: FilterType.eq
346
372
  };
347
373
  log.info('creating link', _newLink);
@@ -361,6 +387,7 @@ export class Linker extends Component {
361
387
  panelManager
362
388
  } = this.props;
363
389
  if (link.end) {
390
+ var _linkTargetPropMap$ge;
364
391
  var {
365
392
  end
366
393
  } = link;
@@ -369,9 +396,17 @@ export class Linker extends Component {
369
396
  columnName,
370
397
  columnType
371
398
  } = end;
399
+ var {
400
+ linkTargetPropMap
401
+ } = this;
402
+ var unsetFilterValue = (_linkTargetPropMap$ge = linkTargetPropMap.get(panelId)) === null || _linkTargetPropMap$ge === void 0 ? void 0 : _linkTargetPropMap$ge.unsetFilterValue;
403
+ if (unsetFilterValue) {
404
+ unsetFilterValue(columnName, columnType);
405
+ return;
406
+ }
372
407
  var endPanel = panelManager.getOpenedPanelById(panelId);
373
408
  if (!endPanel) {
374
- log.debug('endPanel no longer exists, ignoring unsetFilterValue', panelId);
409
+ log.debug('endPanel no longer exists or target is not a panel. Ignoring unsetFilterValue', panelId);
375
410
  } else if (isLinkablePanel(endPanel)) {
376
411
  endPanel.unsetFilterValue(columnName, columnType);
377
412
  } else {
@@ -386,13 +421,22 @@ export class Linker extends Component {
386
421
  * @param filterMap Map of column name to column type, text, and value
387
422
  */
388
423
  setPanelFilterMap(panelId, filterMap) {
424
+ var _linkTargetPropMap$ge2;
389
425
  log.debug('Set filter data for panel:', panelId, filterMap);
390
426
  var {
391
427
  panelManager
392
428
  } = this.props;
429
+ var {
430
+ linkTargetPropMap
431
+ } = this;
432
+ var setFilterValues = (_linkTargetPropMap$ge2 = linkTargetPropMap.get(panelId)) === null || _linkTargetPropMap$ge2 === void 0 ? void 0 : _linkTargetPropMap$ge2.setFilterValues;
433
+ if (setFilterValues) {
434
+ setFilterValues(filterMap);
435
+ return;
436
+ }
393
437
  var panel = panelManager.getOpenedPanelById(panelId);
394
438
  if (!panel) {
395
- log.debug('panel no longer exists, ignoring setFilterMap', panelId);
439
+ log.debug('panel no longer exists or target is not a panel. Ignoring setFilterMap', panelId);
396
440
  } else if (isLinkablePanel(panel)) {
397
441
  panel.setFilterMap(filterMap);
398
442
  } else {
@@ -456,8 +500,17 @@ export class Linker extends Component {
456
500
  log.error('Unable to find link to delete', linkId);
457
501
  }
458
502
  }
459
- handleUpdateValues(panel, dataMap) {
460
- var panelId = LayoutUtils.getIdFromPanel(panel);
503
+ handleTargetRegistered(sourceId, handlers) {
504
+ var {
505
+ linkTargetPropMap
506
+ } = this;
507
+ if (handlers == null) {
508
+ linkTargetPropMap.delete(sourceId);
509
+ } else {
510
+ linkTargetPropMap.set(sourceId, handlers);
511
+ }
512
+ }
513
+ handleUpdateValues(sourceId, dataMap) {
461
514
  var {
462
515
  dh,
463
516
  links,
@@ -473,15 +526,17 @@ export class Linker extends Component {
473
526
  end,
474
527
  operator
475
528
  } = links[i];
476
- if (start.panelId === panelId && end != null) {
529
+ if (start.panelId === sourceId && end != null && operator != null) {
530
+ var _filterMap$get$filter, _filterMap$get;
477
531
  var {
478
532
  panelId: endPanelId,
479
533
  columnName,
480
534
  columnType
481
535
  } = end;
482
536
  // Map of column name to column type and filter value
483
- var filterMap = panelFilterMap.has(endPanelId) ? panelFilterMap.get(endPanelId) : new Map();
484
- var filterList = filterMap.has(columnName) === true ? filterMap.get(columnName).filterList : [];
537
+ var existingFilterMap = panelFilterMap.get(endPanelId);
538
+ var filterMap = existingFilterMap !== null && existingFilterMap !== void 0 ? existingFilterMap : new Map();
539
+ var filterList = (_filterMap$get$filter = (_filterMap$get = filterMap.get(columnName)) === null || _filterMap$get === void 0 ? void 0 : _filterMap$get.filterList) !== null && _filterMap$get$filter !== void 0 ? _filterMap$get$filter : [];
485
540
  var {
486
541
  visibleIndex: startColumnIndex,
487
542
  isExpandable,
@@ -505,13 +560,12 @@ export class Linker extends Component {
505
560
  // The values are Dates for dateType values, not string like everything else
506
561
  text = dateFilterFormatter.format(value);
507
562
  }
508
- var filter = {
563
+ filterList.push({
509
564
  operator,
510
565
  text,
511
566
  value,
512
567
  startColumnIndex
513
- };
514
- filterList.push(filter);
568
+ });
515
569
  filterMap.set(columnName, {
516
570
  columnType,
517
571
  filterList
@@ -649,17 +703,23 @@ export class Linker extends Component {
649
703
  return null;
650
704
  });
651
705
  }
652
- isColumnSelectionValid(panel, tableColumn) {
706
+ isColumnSelectionValid(panelOrId, tableColumn, options) {
707
+ var _linkInProgress$endTy2;
653
708
  var {
654
709
  linkInProgress
655
710
  } = this.state;
656
711
  var {
657
712
  isolatedLinkerPanelId
658
713
  } = this.props;
714
+ // This is backwards compatibility for Grizzly Enterprise panels
715
+ // IrisGridPanel is the only allowed start point for a link
716
+ // The enterprise panels will not call this method with options
717
+ // They are also JS and removed in sanluis, so figure this is best for now
718
+ var isAlwaysEnd = typeof panelOrId === 'string' ? options.type === 'filterSource' || options.type === 'chartLink' : LayoutUtils.getComponentNameFromPanel(panelOrId) !== 'IrisGridPanel';
659
719
  if (tableColumn == null) {
660
720
  if ((linkInProgress === null || linkInProgress === void 0 ? void 0 : linkInProgress.start) != null) {
661
721
  // Link started, end point is not a valid target
662
- this.updateLinkInProgressType();
722
+ this.updateLinkInProgressType('invalid');
663
723
  }
664
724
  return false;
665
725
  }
@@ -678,22 +738,27 @@ export class Linker extends Component {
678
738
  return true;
679
739
  }
680
740
  var {
681
- isReversed,
741
+ isReversed = false,
682
742
  start
683
743
  } = linkInProgress;
684
- var panelId = LayoutUtils.getIdFromPanel(panel);
744
+ var panelId = typeof panelOrId === 'string' ? panelOrId : LayoutUtils.getIdFromPanel(panelOrId);
685
745
  if (panelId == null) {
686
746
  return false;
687
747
  }
748
+
749
+ // We've already selected an end point, so we can't select another one
750
+ if (isReversed && isAlwaysEnd) {
751
+ this.updateLinkInProgressType('invalid');
752
+ return false;
753
+ }
688
754
  var end = {
689
755
  panelId,
690
- panelComponent: LayoutUtils.getComponentNameFromPanel(panel),
691
756
  columnName: tableColumn.name,
692
757
  columnType: tableColumn.type
693
758
  };
694
- var type = isReversed !== undefined && isReversed ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId) : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);
695
- this.updateLinkInProgressType(type);
696
- return type !== 'invalid';
759
+ var isValid = isReversed ? LinkerUtils.isLinkValid(end, start, isolatedLinkerPanelId) : LinkerUtils.isLinkValid(start, end, isolatedLinkerPanelId);
760
+ this.updateLinkInProgressType(isValid ? (_linkInProgress$endTy2 = linkInProgress.endType) !== null && _linkInProgress$endTy2 !== void 0 ? _linkInProgress$endTy2 : options.type : 'invalid');
761
+ return isValid;
697
762
  }
698
763
  render() {
699
764
  var {
@@ -725,7 +790,8 @@ export class Linker extends Component {
725
790
  onAllLinksDeleted: this.handleAllLinksDeleted,
726
791
  onLinksUpdated: this.handleLinksUpdated,
727
792
  onDone: this.handleDone,
728
- onCancel: this.handleCancel
793
+ onCancel: this.handleCancel,
794
+ linkTargetPropMap: this.linkTargetPropMap
729
795
  })
730
796
  }) : null;
731
797
  }