@deephaven/dashboard-core-plugins 1.0.1-beta.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/GridWidgetPlugin.d.ts.map +1 -1
- package/dist/GridWidgetPlugin.js +7 -6
- package/dist/GridWidgetPlugin.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/linker/ColumnSelectionValidator.d.ts +2 -2
- package/dist/linker/ColumnSelectionValidator.d.ts.map +1 -1
- package/dist/linker/ColumnSelectionValidator.js.map +1 -1
- package/dist/linker/Linker.d.ts +14 -8
- package/dist/linker/Linker.d.ts.map +1 -1
- package/dist/linker/Linker.js +132 -75
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerEvent.d.ts +52 -0
- package/dist/linker/LinkerEvent.d.ts.map +1 -0
- package/dist/linker/LinkerEvent.js +28 -0
- package/dist/linker/LinkerEvent.js.map +1 -0
- package/dist/linker/LinkerOverlayContent.d.ts +2 -0
- package/dist/linker/LinkerOverlayContent.d.ts.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +13 -3
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.d.ts +9 -4
- package/dist/linker/LinkerUtils.d.ts.map +1 -1
- package/dist/linker/LinkerUtils.js +8 -31
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +10 -2
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +20 -5
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +12 -4
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.d.ts +1 -1
- package/dist/panels/FilterSetManagerPanel.d.ts +2 -2
- package/dist/panels/IrisGridPanel.d.ts +6 -6
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +17 -5
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/LogPanel.d.ts +1 -1
- package/dist/panels/NotebookPanel.d.ts +1 -1
- package/dist/useChartLinker.d.ts +1 -0
- package/dist/useChartLinker.d.ts.map +1 -0
- package/dist/useChartLinker.js +2 -0
- package/dist/useChartLinker.js.map +1 -0
- package/dist/useDashboardColumnFilters.d.ts +4 -2
- package/dist/useDashboardColumnFilters.d.ts.map +1 -1
- package/dist/useDashboardColumnFilters.js +5 -3
- package/dist/useDashboardColumnFilters.js.map +1 -1
- package/dist/useGridLinker.d.ts +4 -0
- package/dist/useGridLinker.d.ts.map +1 -0
- package/dist/useGridLinker.js +107 -0
- package/dist/useGridLinker.js.map +1 -0
- package/package.json +25 -25
package/dist/linker/Linker.js
CHANGED
|
@@ -13,12 +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
|
|
19
|
+
import { ChartEvent, IrisGridEvent } from "../events/index.js";
|
|
19
20
|
import LinkerOverlayContent from "./LinkerOverlayContent.js";
|
|
20
21
|
import LinkerUtils, { isLinkablePanel, isLinkableColumn } from "./LinkerUtils.js";
|
|
21
22
|
import { listenForFilterColumnsChanged } from "../FilterEvents.js";
|
|
23
|
+
import { listenForLinkPointSelected, listenForLinkSourceDataSelected, listenForRegisterLinkTarget } from "./LinkerEvent.js";
|
|
22
24
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
25
|
var log = Log.module('Linker');
|
|
24
26
|
var mapState = (state, ownProps) => ({
|
|
@@ -39,6 +41,7 @@ var connector = connect(mapState, {
|
|
|
39
41
|
export class Linker extends Component {
|
|
40
42
|
constructor(props) {
|
|
41
43
|
super(props);
|
|
44
|
+
_defineProperty(this, "linkTargetPropMap", new Map());
|
|
42
45
|
_defineProperty(this, "removerFns", []);
|
|
43
46
|
_defineProperty(this, "getCachedLinks", memoize((links, linkInProgress, isolateForPanelId) => {
|
|
44
47
|
var combinedLinks = [...links];
|
|
@@ -57,7 +60,6 @@ export class Linker extends Component {
|
|
|
57
60
|
this.handleCancel = this.handleCancel.bind(this);
|
|
58
61
|
this.handleDone = this.handleDone.bind(this);
|
|
59
62
|
this.handlePanelCloned = this.handlePanelCloned.bind(this);
|
|
60
|
-
this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);
|
|
61
63
|
this.handleColumnsChanged = this.handleColumnsChanged.bind(this);
|
|
62
64
|
this.handlePanelClosed = this.handlePanelClosed.bind(this);
|
|
63
65
|
this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);
|
|
@@ -69,6 +71,8 @@ export class Linker extends Component {
|
|
|
69
71
|
this.handleUpdateValues = this.handleUpdateValues.bind(this);
|
|
70
72
|
this.handleStateChange = this.handleStateChange.bind(this);
|
|
71
73
|
this.handleExited = this.handleExited.bind(this);
|
|
74
|
+
this.handleLinkPointSelected = this.handleLinkPointSelected.bind(this);
|
|
75
|
+
this.handleTargetRegistered = this.handleTargetRegistered.bind(this);
|
|
72
76
|
this.handleLinkSelected = this.handleLinkSelected.bind(this);
|
|
73
77
|
this.handlePanelDragging = this.handlePanelDragging.bind(this);
|
|
74
78
|
this.handlePanelDropped = this.handlePanelDropped.bind(this);
|
|
@@ -121,8 +125,7 @@ export class Linker extends Component {
|
|
|
121
125
|
eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);
|
|
122
126
|
eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);
|
|
123
127
|
eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);
|
|
124
|
-
eventHub.
|
|
125
|
-
this.removerFns.push(listenForFilterColumnsChanged(eventHub, this.handleColumnsChanged));
|
|
128
|
+
this.removerFns = [listenForFilterColumnsChanged(eventHub, this.handleColumnsChanged), listenForLinkPointSelected(eventHub, this.handleLinkPointSelected), listenForLinkSourceDataSelected(eventHub, this.handleUpdateValues), listenForRegisterLinkTarget(eventHub, this.handleTargetRegistered)];
|
|
126
129
|
eventHub.on(PanelEvent.CLOSE, this.handlePanelClosed);
|
|
127
130
|
eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);
|
|
128
131
|
eventHub.on(PanelEvent.DRAGGING, this.handlePanelDragging);
|
|
@@ -138,7 +141,6 @@ export class Linker extends Component {
|
|
|
138
141
|
eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);
|
|
139
142
|
eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);
|
|
140
143
|
eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);
|
|
141
|
-
eventHub.off(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);
|
|
142
144
|
eventHub.off(PanelEvent.CLOSE, this.handlePanelClosed);
|
|
143
145
|
eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);
|
|
144
146
|
eventHub.off(PanelEvent.DRAGGING, this.handlePanelDragging);
|
|
@@ -173,37 +175,9 @@ export class Linker extends Component {
|
|
|
173
175
|
setActiveTool(ToolType.DEFAULT);
|
|
174
176
|
}
|
|
175
177
|
handleChartColumnSelect(panel, column) {
|
|
176
|
-
this.columnSelected(panel, column, true);
|
|
177
|
-
}
|
|
178
|
-
handleFilterColumnSelect(panel, column) {
|
|
179
|
-
log.debug('handleFilterColumnSelect', this.isOverlayShown());
|
|
180
|
-
var {
|
|
181
|
-
links,
|
|
182
|
-
localDashboardId,
|
|
183
|
-
setActiveTool,
|
|
184
|
-
setDashboardIsolatedLinkerPanelId
|
|
185
|
-
} = this.props;
|
|
186
178
|
var panelId = LayoutUtils.getIdFromPanel(panel);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
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;
|
|
190
|
-
});
|
|
191
|
-
if (!this.isOverlayShown() && panelId != null) {
|
|
192
|
-
// Initial click on the filter source button with linker inactive
|
|
193
|
-
// Show linker in isolated mode for panel
|
|
194
|
-
setActiveTool(ToolType.LINKER);
|
|
195
|
-
setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);
|
|
196
|
-
if (panelLinks.length === 0) {
|
|
197
|
-
// Source not linked - start new link in isolated linker mode
|
|
198
|
-
// Need to pass panelId for overrideIsolatedLinkerPanelId
|
|
199
|
-
// as redux prop update at this point not yet propagated
|
|
200
|
-
this.columnSelected(panel, column, true, panelId);
|
|
201
|
-
}
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// Filter source clicked with linker active
|
|
206
|
-
this.columnSelected(panel, column, true);
|
|
179
|
+
assertNotNull(panelId);
|
|
180
|
+
this.columnSelected(panelId, column, 'chartLink', true);
|
|
207
181
|
}
|
|
208
182
|
handleColumnsChanged(sourceId, columns) {
|
|
209
183
|
log.debug('handleColumnsChanged', sourceId, columns);
|
|
@@ -236,19 +210,56 @@ export class Linker extends Component {
|
|
|
236
210
|
log.debug2('Column is not filterable');
|
|
237
211
|
return;
|
|
238
212
|
}
|
|
239
|
-
|
|
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);
|
|
240
250
|
}
|
|
241
251
|
|
|
242
252
|
/**
|
|
243
253
|
* Track a column selection and build the link from it.
|
|
244
|
-
* @param
|
|
254
|
+
* @param sourceId The ID of the source for the column selection
|
|
245
255
|
* @param column The column that was selected
|
|
256
|
+
* @param type The type of the link point
|
|
246
257
|
* @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.
|
|
247
258
|
* @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate
|
|
248
259
|
*/
|
|
249
|
-
columnSelected(
|
|
250
|
-
var isAlwaysEndPoint = arguments.length >
|
|
251
|
-
var overrideIsolatedLinkerPanelId = arguments.length >
|
|
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;
|
|
252
263
|
if (overrideIsolatedLinkerPanelId === undefined && !this.isOverlayShown()) {
|
|
253
264
|
return;
|
|
254
265
|
}
|
|
@@ -258,11 +269,6 @@ export class Linker extends Component {
|
|
|
258
269
|
var {
|
|
259
270
|
linkInProgress
|
|
260
271
|
} = this.state;
|
|
261
|
-
var panelId = LayoutUtils.getIdFromPanel(panel);
|
|
262
|
-
if (panelId == null) {
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
var panelComponent = LayoutUtils.getComponentNameFromPanel(panel);
|
|
266
272
|
var {
|
|
267
273
|
name: columnName,
|
|
268
274
|
type: columnType
|
|
@@ -271,36 +277,47 @@ export class Linker extends Component {
|
|
|
271
277
|
var newLink = {
|
|
272
278
|
id: nanoid(),
|
|
273
279
|
start: {
|
|
274
|
-
panelId,
|
|
275
|
-
panelComponent,
|
|
280
|
+
panelId: sourceId,
|
|
276
281
|
columnName,
|
|
277
282
|
columnType
|
|
278
283
|
},
|
|
279
|
-
// Link starts with type Invalid as linking a source to itself is not allowed
|
|
280
284
|
type: 'invalid',
|
|
281
285
|
isReversed: isAlwaysEndPoint
|
|
282
286
|
};
|
|
287
|
+
if (isAlwaysEndPoint) {
|
|
288
|
+
newLink.endType = type;
|
|
289
|
+
}
|
|
283
290
|
log.debug('starting link', newLink);
|
|
284
291
|
this.setState({
|
|
285
292
|
linkInProgress: newLink
|
|
286
293
|
});
|
|
287
294
|
} else {
|
|
295
|
+
var _linkInProgress$endTy;
|
|
288
296
|
var {
|
|
289
297
|
links
|
|
290
298
|
} = this.props;
|
|
291
299
|
var {
|
|
292
300
|
start,
|
|
293
301
|
id,
|
|
294
|
-
isReversed
|
|
302
|
+
isReversed = false
|
|
295
303
|
} = linkInProgress;
|
|
296
304
|
var end = {
|
|
297
|
-
panelId,
|
|
298
|
-
panelComponent,
|
|
305
|
+
panelId: sourceId,
|
|
299
306
|
columnName,
|
|
300
307
|
columnType
|
|
301
308
|
};
|
|
302
|
-
var
|
|
303
|
-
|
|
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) {
|
|
304
321
|
case 'invalid':
|
|
305
322
|
log.debug('Ignore invalid link connection', linkInProgress, end);
|
|
306
323
|
return;
|
|
@@ -347,10 +364,10 @@ export class Linker extends Component {
|
|
|
347
364
|
|
|
348
365
|
// Create a completed link from link in progress
|
|
349
366
|
var _newLink = {
|
|
350
|
-
start: isReversed
|
|
351
|
-
end: isReversed
|
|
367
|
+
start: isReversed ? end : start,
|
|
368
|
+
end: isReversed ? start : end,
|
|
352
369
|
id,
|
|
353
|
-
type,
|
|
370
|
+
type: finalType,
|
|
354
371
|
operator: FilterType.eq
|
|
355
372
|
};
|
|
356
373
|
log.info('creating link', _newLink);
|
|
@@ -370,6 +387,7 @@ export class Linker extends Component {
|
|
|
370
387
|
panelManager
|
|
371
388
|
} = this.props;
|
|
372
389
|
if (link.end) {
|
|
390
|
+
var _linkTargetPropMap$ge;
|
|
373
391
|
var {
|
|
374
392
|
end
|
|
375
393
|
} = link;
|
|
@@ -378,9 +396,17 @@ export class Linker extends Component {
|
|
|
378
396
|
columnName,
|
|
379
397
|
columnType
|
|
380
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
|
+
}
|
|
381
407
|
var endPanel = panelManager.getOpenedPanelById(panelId);
|
|
382
408
|
if (!endPanel) {
|
|
383
|
-
log.debug('endPanel no longer exists
|
|
409
|
+
log.debug('endPanel no longer exists or target is not a panel. Ignoring unsetFilterValue', panelId);
|
|
384
410
|
} else if (isLinkablePanel(endPanel)) {
|
|
385
411
|
endPanel.unsetFilterValue(columnName, columnType);
|
|
386
412
|
} else {
|
|
@@ -395,13 +421,22 @@ export class Linker extends Component {
|
|
|
395
421
|
* @param filterMap Map of column name to column type, text, and value
|
|
396
422
|
*/
|
|
397
423
|
setPanelFilterMap(panelId, filterMap) {
|
|
424
|
+
var _linkTargetPropMap$ge2;
|
|
398
425
|
log.debug('Set filter data for panel:', panelId, filterMap);
|
|
399
426
|
var {
|
|
400
427
|
panelManager
|
|
401
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
|
+
}
|
|
402
437
|
var panel = panelManager.getOpenedPanelById(panelId);
|
|
403
438
|
if (!panel) {
|
|
404
|
-
log.debug('panel no longer exists
|
|
439
|
+
log.debug('panel no longer exists or target is not a panel. Ignoring setFilterMap', panelId);
|
|
405
440
|
} else if (isLinkablePanel(panel)) {
|
|
406
441
|
panel.setFilterMap(filterMap);
|
|
407
442
|
} else {
|
|
@@ -465,8 +500,17 @@ export class Linker extends Component {
|
|
|
465
500
|
log.error('Unable to find link to delete', linkId);
|
|
466
501
|
}
|
|
467
502
|
}
|
|
468
|
-
|
|
469
|
-
var
|
|
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) {
|
|
470
514
|
var {
|
|
471
515
|
dh,
|
|
472
516
|
links,
|
|
@@ -482,15 +526,17 @@ export class Linker extends Component {
|
|
|
482
526
|
end,
|
|
483
527
|
operator
|
|
484
528
|
} = links[i];
|
|
485
|
-
if (start.panelId ===
|
|
529
|
+
if (start.panelId === sourceId && end != null && operator != null) {
|
|
530
|
+
var _filterMap$get$filter, _filterMap$get;
|
|
486
531
|
var {
|
|
487
532
|
panelId: endPanelId,
|
|
488
533
|
columnName,
|
|
489
534
|
columnType
|
|
490
535
|
} = end;
|
|
491
536
|
// Map of column name to column type and filter value
|
|
492
|
-
var
|
|
493
|
-
var
|
|
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 : [];
|
|
494
540
|
var {
|
|
495
541
|
visibleIndex: startColumnIndex,
|
|
496
542
|
isExpandable,
|
|
@@ -514,13 +560,12 @@ export class Linker extends Component {
|
|
|
514
560
|
// The values are Dates for dateType values, not string like everything else
|
|
515
561
|
text = dateFilterFormatter.format(value);
|
|
516
562
|
}
|
|
517
|
-
|
|
563
|
+
filterList.push({
|
|
518
564
|
operator,
|
|
519
565
|
text,
|
|
520
566
|
value,
|
|
521
567
|
startColumnIndex
|
|
522
|
-
};
|
|
523
|
-
filterList.push(filter);
|
|
568
|
+
});
|
|
524
569
|
filterMap.set(columnName, {
|
|
525
570
|
columnType,
|
|
526
571
|
filterList
|
|
@@ -658,17 +703,23 @@ export class Linker extends Component {
|
|
|
658
703
|
return null;
|
|
659
704
|
});
|
|
660
705
|
}
|
|
661
|
-
isColumnSelectionValid(
|
|
706
|
+
isColumnSelectionValid(panelOrId, tableColumn, options) {
|
|
707
|
+
var _linkInProgress$endTy2;
|
|
662
708
|
var {
|
|
663
709
|
linkInProgress
|
|
664
710
|
} = this.state;
|
|
665
711
|
var {
|
|
666
712
|
isolatedLinkerPanelId
|
|
667
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';
|
|
668
719
|
if (tableColumn == null) {
|
|
669
720
|
if ((linkInProgress === null || linkInProgress === void 0 ? void 0 : linkInProgress.start) != null) {
|
|
670
721
|
// Link started, end point is not a valid target
|
|
671
|
-
this.updateLinkInProgressType();
|
|
722
|
+
this.updateLinkInProgressType('invalid');
|
|
672
723
|
}
|
|
673
724
|
return false;
|
|
674
725
|
}
|
|
@@ -687,22 +738,27 @@ export class Linker extends Component {
|
|
|
687
738
|
return true;
|
|
688
739
|
}
|
|
689
740
|
var {
|
|
690
|
-
isReversed,
|
|
741
|
+
isReversed = false,
|
|
691
742
|
start
|
|
692
743
|
} = linkInProgress;
|
|
693
|
-
var panelId = LayoutUtils.getIdFromPanel(
|
|
744
|
+
var panelId = typeof panelOrId === 'string' ? panelOrId : LayoutUtils.getIdFromPanel(panelOrId);
|
|
694
745
|
if (panelId == null) {
|
|
695
746
|
return false;
|
|
696
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
|
+
}
|
|
697
754
|
var end = {
|
|
698
755
|
panelId,
|
|
699
|
-
panelComponent: LayoutUtils.getComponentNameFromPanel(panel),
|
|
700
756
|
columnName: tableColumn.name,
|
|
701
757
|
columnType: tableColumn.type
|
|
702
758
|
};
|
|
703
|
-
var
|
|
704
|
-
this.updateLinkInProgressType(type);
|
|
705
|
-
return
|
|
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;
|
|
706
762
|
}
|
|
707
763
|
render() {
|
|
708
764
|
var {
|
|
@@ -734,7 +790,8 @@ export class Linker extends Component {
|
|
|
734
790
|
onAllLinksDeleted: this.handleAllLinksDeleted,
|
|
735
791
|
onLinksUpdated: this.handleLinksUpdated,
|
|
736
792
|
onDone: this.handleDone,
|
|
737
|
-
onCancel: this.handleCancel
|
|
793
|
+
onCancel: this.handleCancel,
|
|
794
|
+
linkTargetPropMap: this.linkTargetPropMap
|
|
738
795
|
})
|
|
739
796
|
}) : null;
|
|
740
797
|
}
|