@deephaven/dashboard-core-plugins 0.23.1-beta.8 → 0.24.1-beta.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.
@@ -27,6 +27,7 @@ export type LinkerProps = OwnProps & StateProps & ConnectedProps<typeof connecto
27
27
  export type LinkerState = {
28
28
  linkInProgress?: Link;
29
29
  selectedIds: Set<string>;
30
+ isDraggingPanel: boolean;
30
31
  };
31
32
  export declare class Linker extends Component<LinkerProps, LinkerState> {
32
33
  constructor(props: LinkerProps);
@@ -36,6 +37,7 @@ export declare class Linker extends Component<LinkerProps, LinkerState> {
36
37
  componentWillUnmount(): void;
37
38
  startListening(layout: GoldenLayout): void;
38
39
  stopListening(layout: GoldenLayout): void;
40
+ reset(): void;
39
41
  handleCancel(): void;
40
42
  handleDone(): void;
41
43
  handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void;
@@ -65,6 +67,8 @@ export declare class Linker extends Component<LinkerProps, LinkerState> {
65
67
  handlePanelCloned(panel: PanelComponent, cloneConfig: {
66
68
  id: string;
67
69
  }): void;
70
+ handlePanelDragging(componentId: string): void;
71
+ handlePanelDropped(): void;
68
72
  handlePanelClosed(panelId: string): void;
69
73
  handleLinkSelected(linkId: string): void;
70
74
  handleLinksUpdated(newLinks: Link[]): void;
@@ -81,7 +85,7 @@ export declare class Linker extends Component<LinkerProps, LinkerState> {
81
85
  updateSelectionValidators(): void;
82
86
  updateLinkInProgressType(linkInProgress: Link, type?: LinkType): void;
83
87
  isColumnSelectionValid(panel: PanelComponent, tableColumn?: LinkColumn): boolean;
84
- render(): JSX.Element;
88
+ render(): JSX.Element | null;
85
89
  }
86
90
  declare const _default: import("react-redux").ConnectedComponent<typeof Linker, import("react-redux").Omit<React.ClassAttributes<Linker> & OwnProps & StateProps & {
87
91
  setActiveTool: import("@deephaven/redux").PayloadActionCreator<string>;
@@ -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":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAW,cAAc,EAAE,MAAM,aAAa,CAAC;AAKtD,OAAO,EAEL,cAAc,EAEd,YAAY,EACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,YAAY,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAGL,UAAU,EAEX,MAAM,wBAAwB,CAAC;AAqBhC,OAAoB,EAElB,IAAI,EACJ,UAAU,EACV,aAAa,EACb,QAAQ,EACT,MAAM,eAAe,CAAC;AAIvB,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAYD,QAAA,MAAM,SAAS;;;;;;;YAOb,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAChC,UAAU,GACV,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC;AAEnC,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,qBAAa,MAAO,SAAQ,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;gBACjD,KAAK,EAAE,WAAW;IA8B9B,iBAAiB,IAAI,IAAI;IAMzB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAchD,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAItD,oBAAoB,IAAI,IAAI;IAK5B,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAoB1C,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAoBzC,KAAK,IAAI,IAAI;IAOb,YAAY,IAAI,IAAI;IASpB,UAAU,IAAI,IAAI;IAKlB,uBAAuB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAIxE,wBAAwB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAiCzE,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAoBxE,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAIvE;;;;;;OAMG;IACH,cAAc,CACZ,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,UAAU,EAClB,gBAAgB,UAAQ,EACxB,6BAA6B,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAChD,IAAI;IA4FP,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAmBzC;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI;IAalE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAK7B,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,UAAQ,GAAG,IAAI;IAelD,qBAAqB,IAAI,IAAI;IAe7B,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUvC,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAwDpE,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAc3E,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAY9C,kBAAkB,IAAI,IAAI;IAI1B,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOxC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI;IAK1C,wBAAwB,IAAI,IAAI;IAIhC,iBAAiB,IAAI,IAAI;IAIzB,YAAY,IAAI,IAAI;IAMpB;;;OAGG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAW5C,cAAc,UAEH,IAAI,EAAE,kBACG,IAAI,GAAG,SAAS,qBACb,MAAM,GAAG,SAAS,YAmBvC;IAEF,cAAc,IAAI,OAAO;IAKzB,yBAAyB,IAAI,IAAI;IAmBjC,wBAAwB,CACtB,cAAc,EAAE,IAAI,EACpB,IAAI,GAAE,QAAoB,GACzB,IAAI;IASP,sBAAsB,CACpB,KAAK,EAAE,cAAc,EACrB,WAAW,CAAC,EAAE,UAAU,GACvB,OAAO;IAsCV,MAAM,IAAI,GAAG,CAAC,OAAO,GAAG,IAAI;CAwC7B;;;;;;;;;AAED,wBAAiC"}
@@ -65,10 +65,13 @@ export class Linker extends Component {
65
65
  this.handleStateChange = this.handleStateChange.bind(this);
66
66
  this.handleExited = this.handleExited.bind(this);
67
67
  this.handleLinkSelected = this.handleLinkSelected.bind(this);
68
+ this.handlePanelDragging = this.handlePanelDragging.bind(this);
69
+ this.handlePanelDropped = this.handlePanelDropped.bind(this);
68
70
  this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);
69
71
  this.state = {
70
72
  linkInProgress: undefined,
71
- selectedIds: new Set()
73
+ selectedIds: new Set(),
74
+ isDraggingPanel: false
72
75
  };
73
76
  }
74
77
  componentDidMount() {
@@ -89,6 +92,9 @@ export class Linker extends Component {
89
92
  }
90
93
  if (activeTool !== prevProps.activeTool) {
91
94
  this.updateSelectionValidators();
95
+ if (activeTool === ToolType.DEFAULT) {
96
+ this.reset();
97
+ }
92
98
  }
93
99
  }
94
100
  componentDidCatch(error, info) {
@@ -114,6 +120,8 @@ export class Linker extends Component {
114
120
  eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);
115
121
  eventHub.on(PanelEvent.CLOSE, this.handlePanelClosed);
116
122
  eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);
123
+ eventHub.on(PanelEvent.DRAGGING, this.handlePanelDragging);
124
+ eventHub.on(PanelEvent.DROPPED, this.handlePanelDropped);
117
125
  }
118
126
  stopListening(layout) {
119
127
  layout.off('stateChanged', this.handleLayoutStateChanged);
@@ -129,6 +137,14 @@ export class Linker extends Component {
129
137
  eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);
130
138
  eventHub.off(PanelEvent.CLOSE, this.handlePanelClosed);
131
139
  eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);
140
+ eventHub.off(PanelEvent.DRAGGING, this.handlePanelDragging);
141
+ eventHub.off(PanelEvent.DROPPED, this.handlePanelDropped);
142
+ }
143
+ reset() {
144
+ this.setState({
145
+ linkInProgress: undefined,
146
+ selectedIds: new Set()
147
+ });
132
148
  }
133
149
  handleCancel() {
134
150
  var {
@@ -149,10 +165,6 @@ export class Linker extends Component {
149
165
  setActiveTool
150
166
  } = this.props;
151
167
  setActiveTool(ToolType.DEFAULT);
152
- this.setState({
153
- linkInProgress: undefined,
154
- selectedIds: new Set()
155
- });
156
168
  }
157
169
  handleChartColumnSelect(panel, column) {
158
170
  this.columnSelected(panel, column, true);
@@ -404,9 +416,7 @@ export class Linker extends Component {
404
416
  });
405
417
  this.deleteLinks(isolatedLinks);
406
418
  }
407
- this.setState({
408
- linkInProgress: undefined
409
- });
419
+ this.reset();
410
420
  }
411
421
  handleLinkDeleted(linkId) {
412
422
  var {
@@ -498,6 +508,29 @@ export class Linker extends Component {
498
508
  this.addLinks(linksToAdd);
499
509
  }
500
510
  }
511
+ handlePanelDragging(componentId) {
512
+ var {
513
+ links
514
+ } = this.props;
515
+ for (var i = 0; i < links.length; i += 1) {
516
+ var link = links[i];
517
+ var {
518
+ start,
519
+ end
520
+ } = link;
521
+ if (start.panelId === componentId || (end === null || end === void 0 ? void 0 : end.panelId) === componentId) {
522
+ this.setState({
523
+ isDraggingPanel: true
524
+ });
525
+ return;
526
+ }
527
+ }
528
+ }
529
+ handlePanelDropped() {
530
+ this.setState({
531
+ isDraggingPanel: false
532
+ });
533
+ }
501
534
  handlePanelClosed(panelId) {
502
535
  // Delete links on PanelEvent.CLOSE and PanelEvent.CLOSED instead of UNMOUNT
503
536
  // because the panels can get unmounted on errors and we want to keep the links if that happens
@@ -623,12 +656,13 @@ export class Linker extends Component {
623
656
  } = this.props;
624
657
  var {
625
658
  linkInProgress,
626
- selectedIds
659
+ selectedIds,
660
+ isDraggingPanel
627
661
  } = this.state;
628
662
  var isLinkOverlayShown = this.isOverlayShown();
629
663
  var disabled = linkInProgress != null && linkInProgress.start != null;
630
664
  var linkerOverlayMessage = isolatedLinkerPanelId === undefined ? 'Click a column source, then click a column target to create a filter link. The filter comparison operator used by a selected link can be changed. Delete a filter link by clicking the delete button or with alt+click. Click done when finished.' : 'Create a link between the source column button and a table column by clicking on one, then the other. Delete a filter link by clicking the delete button or with alt+click. Click done when finished.';
631
- return /*#__PURE__*/React.createElement(CSSTransition, {
665
+ return !isDraggingPanel ? /*#__PURE__*/React.createElement(CSSTransition, {
632
666
  in: isLinkOverlayShown,
633
667
  timeout: ThemeExport.transitionMs,
634
668
  classNames: "fade",
@@ -647,7 +681,7 @@ export class Linker extends Component {
647
681
  onLinksUpdated: this.handleLinksUpdated,
648
682
  onDone: this.handleDone,
649
683
  onCancel: this.handleCancel
650
- }));
684
+ })) : null;
651
685
  }
652
686
  }
653
687
  export default connector(Linker);
@@ -1 +1 @@
1
- {"version":3,"file":"Linker.js","names":["React","Component","connect","shortid","memoize","CSSTransition","ThemeExport","LayoutUtils","PanelEvent","DateTimeColumnFormatter","DateUtils","TableUtils","Log","Type","FilterType","getActiveTool","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","log","module","mapState","state","ownProps","activeTool","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","linkInProgress","isolateForPanelId","combinedLinks","start","push","undefined","filter","link","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleFilterColumnSelect","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleLinksUpdated","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","handleLinkSelected","isColumnSelectionValid","selectedIds","Set","componentDidMount","layout","startListening","updateSelectionValidators","componentDidUpdate","prevProps","stopListening","componentDidCatch","error","info","componentWillUnmount","on","eventHub","COLUMN_SELECTED","DATA_SELECTED","STATE_CHANGED","CLONED","COLUMNS_CHANGED","CLOSE","CLOSED","off","DEFAULT","setState","panel","column","columnSelected","debug","isOverlayShown","getIdFromPanel","panelLinks","LINKER","length","columns","linksToDelete","findColumn","deleteLinks","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","operator","eq","addLinks","unsetFilterValueForLink","panelManager","endPanel","getOpenedPanelById","unsetFilterValue","setPanelFilterMap","filterMap","setFilterMap","clearAll","forEach","map","isolatedLinks","linkId","find","l","dataMap","panelFilterMap","Map","i","endPanelId","has","get","filterList","visibleIndex","startColumnIndex","isExpandable","isGrouped","value","text","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","set","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","deleteLinksForPanelId","newLinks","forceUpdate","updateLinkInProgressType","tableColumn","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks"],"sources":["../../src/linker/Linker.tsx"],"sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport {\n LayoutUtils,\n PanelComponent,\n PanelEvent,\n PanelManager,\n} from '@deephaven/dashboard';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport {\n DateTimeColumnFormatter,\n DateUtils,\n RowDataMap,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { Type as FilterType } from '@deephaven/filters';\nimport {\n getActiveTool,\n getTimeZone,\n setActiveTool as setActiveToolAction,\n RootState,\n} from '@deephaven/redux';\nimport {\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n setDashboardLinks as setDashboardLinksAction,\n addDashboardLinks as addDashboardLinksAction,\n deleteDashboardLinks as deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction,\n} from '../redux';\nimport ToolType from './ToolType';\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkFilterMap,\n LinkType,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n isolatedLinkerPanelId?: string;\n links: Link[];\n timeZone: string;\n}\n\ninterface OwnProps {\n layout: GoldenLayout;\n panelManager: PanelManager;\n localDashboardId: string;\n}\n\nconst mapState = (state: RootState, ownProps: OwnProps): StateProps => ({\n activeTool: getActiveTool(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(\n state,\n ownProps.localDashboardId\n ),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n});\n\nconst connector = connect(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link;\n selectedIds: Set<string>;\n};\n\nexport class Linker extends Component<LinkerProps, LinkerState> {\n constructor(props: LinkerProps) {\n super(props);\n\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleLinksUpdated = this.handleLinksUpdated.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.handleLinkSelected = this.handleLinkSelected.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n\n this.state = { linkInProgress: undefined, selectedIds: new Set<string>() };\n }\n\n componentDidMount(): void {\n const { layout } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n\n componentDidUpdate(prevProps: LinkerProps): void {\n const { activeTool, layout } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n const { layout } = this.props;\n this.stopListening(layout);\n }\n\n startListening(layout: GoldenLayout): void {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSE, this.handlePanelClosed);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n stopListening(layout: GoldenLayout): void {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSE, this.handlePanelClosed);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n handleCancel(): void {\n const { linkInProgress } = this.state;\n if (linkInProgress == null) {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleDone(): void {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n this.setState({\n linkInProgress: undefined,\n selectedIds: new Set<string>(),\n });\n }\n\n handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column, true);\n }\n\n handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const panelLinks = links.filter(\n link => link.start?.panelId === panelId || link.end?.panelId === panelId\n );\n\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n\n handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void {\n log.debug('handleColumnsChanged', panel, columns);\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n const linksToDelete = links.filter(\n ({ start, end }) =>\n (start.panelId === panelId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === panelId &&\n LinkerUtils.findColumn(columns, end) == null)\n );\n this.deleteLinks(linksToDelete);\n }\n\n handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(\n panel: PanelComponent,\n column: LinkColumn,\n isAlwaysEndPoint = false,\n overrideIsolatedLinkerPanelId?: string | string[]\n ): void {\n if (overrideIsolatedLinkerPanelId === undefined && !this.isOverlayShown()) {\n return;\n }\n const { isolatedLinkerPanelId } = this.props;\n const { linkInProgress } = this.state;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n const panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n const { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType,\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n log.debug('starting link', newLink);\n\n this.setState({ linkInProgress: newLink });\n } else {\n const { links } = this.props;\n const { start, id, isReversed } = linkInProgress;\n const end = {\n panelId,\n panelComponent,\n columnName,\n columnType,\n };\n\n const type = LinkerUtils.getLinkType(\n isReversed !== undefined && isReversed ? end : start,\n isReversed !== undefined && isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource': {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n const existingLinkPanelId =\n isReversed !== undefined && isReversed\n ? start.panelId\n : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd }) =>\n panelLinkEnd?.panelId === existingLinkPanelId\n );\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n const newLink: Link = {\n start: isReversed !== undefined && isReversed ? end : start,\n end: isReversed !== undefined && isReversed ? start : end,\n id,\n type,\n operator: FilterType.eq,\n };\n log.info('creating link', newLink);\n\n this.setState(\n { linkInProgress: undefined, selectedIds: new Set<string>([id]) },\n () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([newLink]);\n }\n );\n }\n }\n\n unsetFilterValueForLink(link: Link): void {\n const { panelManager } = this.props;\n if (link.end) {\n const { end } = link;\n const { panelId, columnName, columnType } = end;\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists, ignoring unsetFilterValue',\n panelId\n );\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId: string, filterMap: LinkFilterMap): void {\n log.debug('Set filter data for panel:', panelId, filterMap);\n const { panelManager } = this.props;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n\n addLinks(links: Link[]): void {\n const { addDashboardLinks, localDashboardId } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n\n deleteLinks(links: Link[], clearAll = false): void {\n const { localDashboardId } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n const { setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n const { deleteDashboardLinks } = this.props;\n deleteDashboardLinks(\n localDashboardId,\n links.map(({ id }) => id)\n );\n }\n }\n\n handleAllLinksDeleted(): void {\n const { links, isolatedLinkerPanelId } = this.props;\n if (isolatedLinkerPanelId === undefined) {\n this.deleteLinks(links, true);\n } else {\n const isolatedLinks = links.filter(\n link =>\n link?.start?.panelId === isolatedLinkerPanelId ||\n link?.end?.panelId === isolatedLinkerPanelId\n );\n this.deleteLinks(isolatedLinks);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleLinkDeleted(linkId: string): void {\n const { links } = this.props;\n const link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n\n handleUpdateValues(panel: PanelComponent, dataMap: RowDataMap): void {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const { links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (let i = 0; i < links.length; i += 1) {\n const { start, end, operator } = links[i];\n if (start.panelId === panelId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const filterMap = panelFilterMap.has(endPanelId)\n ? panelFilterMap.get(endPanelId)\n : new Map();\n const filterList =\n filterMap.has(columnName) === true\n ? filterMap.get(columnName).filterList\n : [];\n const {\n visibleIndex: startColumnIndex,\n isExpandable,\n isGrouped,\n } = dataMap[start.columnName];\n let { value } = dataMap[start.columnName];\n let text = `${value}`;\n if (value === null && isExpandable && isGrouped) {\n // Clear filter on empty rollup grouping columns\n value = undefined;\n }\n if (columnType != null && TableUtils.isDateType(columnType)) {\n const dateFilterFormatter = new DateTimeColumnFormatter({\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT,\n });\n // The values are Dates for dateType values, not string like everything else\n text = dateFilterFormatter.format(value as Date);\n }\n const filter = { operator, text, value, startColumnIndex };\n filterList.push(filter);\n filterMap.set(columnName, {\n columnType,\n filterList,\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n\n handlePanelCloned(panel: PanelComponent, cloneConfig: { id: string }): void {\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const cloneId = cloneConfig.id;\n if (panelId != null) {\n const linksToAdd = LinkerUtils.cloneLinksForPanel(\n links,\n panelId,\n cloneId\n );\n this.addLinks(linksToAdd);\n }\n }\n\n handlePanelClosed(panelId: string): void {\n // Delete links on PanelEvent.CLOSE and PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(`Panel ${panelId} closed, deleting links.`);\n this.deleteLinksForPanelId(panelId);\n }\n\n handleLinkSelected(linkId: string): void {\n this.setState({ selectedIds: new Set<string>([linkId]) });\n }\n\n handleLinksUpdated(newLinks: Link[]): void {\n const { localDashboardId, setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, newLinks);\n }\n\n handleLayoutStateChanged(): void {\n this.forceUpdate();\n }\n\n handleStateChange(): void {\n this.forceUpdate();\n }\n\n handleExited(): void {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n const { localDashboardId, setDashboardIsolatedLinkerPanelId } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end, id } = link;\n if (start.panelId === panelId || end?.panelId === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n\n getCachedLinks = memoize(\n (\n links: Link[],\n linkInProgress: Link | undefined,\n isolateForPanelId: string | undefined\n ) => {\n const combinedLinks = [...links];\n\n if (linkInProgress != null && linkInProgress.start != null) {\n combinedLinks.push(linkInProgress);\n }\n\n if (isolateForPanelId !== undefined) {\n return combinedLinks.filter(\n link =>\n link?.start?.panelId === isolateForPanelId ||\n link?.end?.panelId === isolateForPanelId ||\n link?.end == null\n );\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n }\n );\n\n isOverlayShown(): boolean {\n const { activeTool } = this.props;\n return activeTool === ToolType.LINKER;\n }\n\n updateSelectionValidators(): void {\n const {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId,\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(\n localDashboardId,\n this.isColumnSelectionValid\n );\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n\n updateLinkInProgressType(\n linkInProgress: Link,\n type: LinkType = 'invalid'\n ): void {\n this.setState({\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n });\n }\n\n isColumnSelectionValid(\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\n }\n\n if (tableColumn == null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType(linkInProgress);\n return false;\n }\n\n const { isReversed, start } = linkInProgress;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n\n const end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const type =\n isReversed !== undefined && isReversed\n ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId)\n : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(linkInProgress, type);\n\n return type !== 'invalid';\n }\n\n render(): JSX.Element {\n const { links, isolatedLinkerPanelId, panelManager } = this.props;\n const { linkInProgress, selectedIds } = this.state;\n\n const isLinkOverlayShown = this.isOverlayShown();\n const disabled = linkInProgress != null && linkInProgress.start != null;\n const linkerOverlayMessage =\n isolatedLinkerPanelId === undefined\n ? 'Click a column source, then click a column target to create a filter link. The filter comparison operator used by a selected link can be changed. Delete a filter link by clicking the delete button or with alt+click. Click done when finished.'\n : 'Create a link between the source column button and a table column by clicking on one, then the other. Delete a filter link by clicking the delete button or with alt+click. Click done when finished.';\n\n return (\n <CSSTransition\n in={isLinkOverlayShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n onExited={this.handleExited}\n >\n <LinkerOverlayContent\n disabled={disabled}\n panelManager={panelManager}\n links={this.getCachedLinks(\n links,\n linkInProgress,\n isolatedLinkerPanelId\n )}\n selectedIds={selectedIds}\n messageText={linkerOverlayMessage}\n onLinkSelected={this.handleLinkSelected}\n onLinkDeleted={this.handleLinkDeleted}\n onAllLinksDeleted={this.handleAllLinksDeleted}\n onLinksUpdated={this.handleLinksUpdated}\n onDone={this.handleDone}\n onCancel={this.handleCancel}\n />\n </CSSTransition>\n );\n }\n}\n\nexport default connector(Linker);\n"],"mappings":"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"}
1
+ {"version":3,"file":"Linker.js","names":["React","Component","connect","shortid","memoize","CSSTransition","ThemeExport","LayoutUtils","PanelEvent","DateTimeColumnFormatter","DateUtils","TableUtils","Log","Type","FilterType","getActiveTool","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","log","module","mapState","state","ownProps","activeTool","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","linkInProgress","isolateForPanelId","combinedLinks","start","push","undefined","filter","link","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleFilterColumnSelect","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleLinksUpdated","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","handleLinkSelected","handlePanelDragging","handlePanelDropped","isColumnSelectionValid","selectedIds","Set","isDraggingPanel","componentDidMount","layout","startListening","updateSelectionValidators","componentDidUpdate","prevProps","stopListening","DEFAULT","reset","componentDidCatch","error","info","componentWillUnmount","on","eventHub","COLUMN_SELECTED","DATA_SELECTED","STATE_CHANGED","CLONED","COLUMNS_CHANGED","CLOSE","CLOSED","DRAGGING","DROPPED","off","setState","panel","column","columnSelected","debug","isOverlayShown","getIdFromPanel","panelLinks","LINKER","length","columns","linksToDelete","findColumn","deleteLinks","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","operator","eq","addLinks","unsetFilterValueForLink","panelManager","endPanel","getOpenedPanelById","unsetFilterValue","setPanelFilterMap","filterMap","setFilterMap","clearAll","forEach","map","isolatedLinks","linkId","find","l","dataMap","panelFilterMap","Map","i","endPanelId","has","get","filterList","visibleIndex","startColumnIndex","isExpandable","isGrouped","value","text","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","set","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","componentId","deleteLinksForPanelId","newLinks","forceUpdate","updateLinkInProgressType","tableColumn","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks"],"sources":["../../src/linker/Linker.tsx"],"sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport {\n LayoutUtils,\n PanelComponent,\n PanelEvent,\n PanelManager,\n} from '@deephaven/dashboard';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport {\n DateTimeColumnFormatter,\n DateUtils,\n RowDataMap,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { Type as FilterType } from '@deephaven/filters';\nimport {\n getActiveTool,\n getTimeZone,\n setActiveTool as setActiveToolAction,\n RootState,\n} from '@deephaven/redux';\nimport {\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n setDashboardLinks as setDashboardLinksAction,\n addDashboardLinks as addDashboardLinksAction,\n deleteDashboardLinks as deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction,\n} from '../redux';\nimport ToolType from './ToolType';\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkFilterMap,\n LinkType,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n isolatedLinkerPanelId?: string;\n links: Link[];\n timeZone: string;\n}\n\ninterface OwnProps {\n layout: GoldenLayout;\n panelManager: PanelManager;\n localDashboardId: string;\n}\n\nconst mapState = (state: RootState, ownProps: OwnProps): StateProps => ({\n activeTool: getActiveTool(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(\n state,\n ownProps.localDashboardId\n ),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n});\n\nconst connector = connect(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link;\n selectedIds: Set<string>;\n isDraggingPanel: boolean;\n};\n\nexport class Linker extends Component<LinkerProps, LinkerState> {\n constructor(props: LinkerProps) {\n super(props);\n\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleLinksUpdated = this.handleLinksUpdated.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.handleLinkSelected = this.handleLinkSelected.bind(this);\n this.handlePanelDragging = this.handlePanelDragging.bind(this);\n this.handlePanelDropped = this.handlePanelDropped.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n\n this.state = {\n linkInProgress: undefined,\n selectedIds: new Set<string>(),\n isDraggingPanel: false,\n };\n }\n\n componentDidMount(): void {\n const { layout } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n\n componentDidUpdate(prevProps: LinkerProps): void {\n const { activeTool, layout } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n if (activeTool === ToolType.DEFAULT) {\n this.reset();\n }\n }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n const { layout } = this.props;\n this.stopListening(layout);\n }\n\n startListening(layout: GoldenLayout): void {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSE, this.handlePanelClosed);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n eventHub.on(PanelEvent.DRAGGING, this.handlePanelDragging);\n eventHub.on(PanelEvent.DROPPED, this.handlePanelDropped);\n }\n\n stopListening(layout: GoldenLayout): void {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSE, this.handlePanelClosed);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n eventHub.off(PanelEvent.DRAGGING, this.handlePanelDragging);\n eventHub.off(PanelEvent.DROPPED, this.handlePanelDropped);\n }\n\n reset(): void {\n this.setState({\n linkInProgress: undefined,\n selectedIds: new Set<string>(),\n });\n }\n\n handleCancel(): void {\n const { linkInProgress } = this.state;\n if (linkInProgress == null) {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleDone(): void {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n\n handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column, true);\n }\n\n handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const panelLinks = links.filter(\n link => link.start?.panelId === panelId || link.end?.panelId === panelId\n );\n\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n\n handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void {\n log.debug('handleColumnsChanged', panel, columns);\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n const linksToDelete = links.filter(\n ({ start, end }) =>\n (start.panelId === panelId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === panelId &&\n LinkerUtils.findColumn(columns, end) == null)\n );\n this.deleteLinks(linksToDelete);\n }\n\n handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(\n panel: PanelComponent,\n column: LinkColumn,\n isAlwaysEndPoint = false,\n overrideIsolatedLinkerPanelId?: string | string[]\n ): void {\n if (overrideIsolatedLinkerPanelId === undefined && !this.isOverlayShown()) {\n return;\n }\n const { isolatedLinkerPanelId } = this.props;\n const { linkInProgress } = this.state;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n const panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n const { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType,\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n log.debug('starting link', newLink);\n\n this.setState({ linkInProgress: newLink });\n } else {\n const { links } = this.props;\n const { start, id, isReversed } = linkInProgress;\n const end = {\n panelId,\n panelComponent,\n columnName,\n columnType,\n };\n\n const type = LinkerUtils.getLinkType(\n isReversed !== undefined && isReversed ? end : start,\n isReversed !== undefined && isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource': {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n const existingLinkPanelId =\n isReversed !== undefined && isReversed\n ? start.panelId\n : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd }) =>\n panelLinkEnd?.panelId === existingLinkPanelId\n );\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n const newLink: Link = {\n start: isReversed !== undefined && isReversed ? end : start,\n end: isReversed !== undefined && isReversed ? start : end,\n id,\n type,\n operator: FilterType.eq,\n };\n log.info('creating link', newLink);\n\n this.setState(\n { linkInProgress: undefined, selectedIds: new Set<string>([id]) },\n () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([newLink]);\n }\n );\n }\n }\n\n unsetFilterValueForLink(link: Link): void {\n const { panelManager } = this.props;\n if (link.end) {\n const { end } = link;\n const { panelId, columnName, columnType } = end;\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists, ignoring unsetFilterValue',\n panelId\n );\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId: string, filterMap: LinkFilterMap): void {\n log.debug('Set filter data for panel:', panelId, filterMap);\n const { panelManager } = this.props;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n\n addLinks(links: Link[]): void {\n const { addDashboardLinks, localDashboardId } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n\n deleteLinks(links: Link[], clearAll = false): void {\n const { localDashboardId } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n const { setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n const { deleteDashboardLinks } = this.props;\n deleteDashboardLinks(\n localDashboardId,\n links.map(({ id }) => id)\n );\n }\n }\n\n handleAllLinksDeleted(): void {\n const { links, isolatedLinkerPanelId } = this.props;\n if (isolatedLinkerPanelId === undefined) {\n this.deleteLinks(links, true);\n } else {\n const isolatedLinks = links.filter(\n link =>\n link?.start?.panelId === isolatedLinkerPanelId ||\n link?.end?.panelId === isolatedLinkerPanelId\n );\n this.deleteLinks(isolatedLinks);\n }\n this.reset();\n }\n\n handleLinkDeleted(linkId: string): void {\n const { links } = this.props;\n const link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n\n handleUpdateValues(panel: PanelComponent, dataMap: RowDataMap): void {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const { links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (let i = 0; i < links.length; i += 1) {\n const { start, end, operator } = links[i];\n if (start.panelId === panelId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const filterMap = panelFilterMap.has(endPanelId)\n ? panelFilterMap.get(endPanelId)\n : new Map();\n const filterList =\n filterMap.has(columnName) === true\n ? filterMap.get(columnName).filterList\n : [];\n const {\n visibleIndex: startColumnIndex,\n isExpandable,\n isGrouped,\n } = dataMap[start.columnName];\n let { value } = dataMap[start.columnName];\n let text = `${value}`;\n if (value === null && isExpandable && isGrouped) {\n // Clear filter on empty rollup grouping columns\n value = undefined;\n }\n if (columnType != null && TableUtils.isDateType(columnType)) {\n const dateFilterFormatter = new DateTimeColumnFormatter({\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT,\n });\n // The values are Dates for dateType values, not string like everything else\n text = dateFilterFormatter.format(value as Date);\n }\n const filter = { operator, text, value, startColumnIndex };\n filterList.push(filter);\n filterMap.set(columnName, {\n columnType,\n filterList,\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n\n handlePanelCloned(panel: PanelComponent, cloneConfig: { id: string }): void {\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const cloneId = cloneConfig.id;\n if (panelId != null) {\n const linksToAdd = LinkerUtils.cloneLinksForPanel(\n links,\n panelId,\n cloneId\n );\n this.addLinks(linksToAdd);\n }\n }\n\n handlePanelDragging(componentId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end } = link;\n if (start.panelId === componentId || end?.panelId === componentId) {\n this.setState({ isDraggingPanel: true });\n return;\n }\n }\n }\n\n handlePanelDropped(): void {\n this.setState({ isDraggingPanel: false });\n }\n\n handlePanelClosed(panelId: string): void {\n // Delete links on PanelEvent.CLOSE and PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(`Panel ${panelId} closed, deleting links.`);\n this.deleteLinksForPanelId(panelId);\n }\n\n handleLinkSelected(linkId: string): void {\n this.setState({ selectedIds: new Set<string>([linkId]) });\n }\n\n handleLinksUpdated(newLinks: Link[]): void {\n const { localDashboardId, setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, newLinks);\n }\n\n handleLayoutStateChanged(): void {\n this.forceUpdate();\n }\n\n handleStateChange(): void {\n this.forceUpdate();\n }\n\n handleExited(): void {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n const { localDashboardId, setDashboardIsolatedLinkerPanelId } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end, id } = link;\n if (start.panelId === panelId || end?.panelId === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n\n getCachedLinks = memoize(\n (\n links: Link[],\n linkInProgress: Link | undefined,\n isolateForPanelId: string | undefined\n ) => {\n const combinedLinks = [...links];\n\n if (linkInProgress != null && linkInProgress.start != null) {\n combinedLinks.push(linkInProgress);\n }\n\n if (isolateForPanelId !== undefined) {\n return combinedLinks.filter(\n link =>\n link?.start?.panelId === isolateForPanelId ||\n link?.end?.panelId === isolateForPanelId ||\n link?.end == null\n );\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n }\n );\n\n isOverlayShown(): boolean {\n const { activeTool } = this.props;\n return activeTool === ToolType.LINKER;\n }\n\n updateSelectionValidators(): void {\n const {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId,\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(\n localDashboardId,\n this.isColumnSelectionValid\n );\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n\n updateLinkInProgressType(\n linkInProgress: Link,\n type: LinkType = 'invalid'\n ): void {\n this.setState({\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n });\n }\n\n isColumnSelectionValid(\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\n }\n\n if (tableColumn == null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType(linkInProgress);\n return false;\n }\n\n const { isReversed, start } = linkInProgress;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n\n const end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const type =\n isReversed !== undefined && isReversed\n ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId)\n : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(linkInProgress, type);\n\n return type !== 'invalid';\n }\n\n render(): JSX.Element | null {\n const { links, isolatedLinkerPanelId, panelManager } = this.props;\n const { linkInProgress, selectedIds, isDraggingPanel } = this.state;\n\n const isLinkOverlayShown = this.isOverlayShown();\n const disabled = linkInProgress != null && linkInProgress.start != null;\n const linkerOverlayMessage =\n isolatedLinkerPanelId === undefined\n ? 'Click a column source, then click a column target to create a filter link. The filter comparison operator used by a selected link can be changed. Delete a filter link by clicking the delete button or with alt+click. Click done when finished.'\n : 'Create a link between the source column button and a table column by clicking on one, then the other. Delete a filter link by clicking the delete button or with alt+click. Click done when finished.';\n\n return !isDraggingPanel ? (\n <CSSTransition\n in={isLinkOverlayShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n onExited={this.handleExited}\n >\n <LinkerOverlayContent\n disabled={disabled}\n panelManager={panelManager}\n links={this.getCachedLinks(\n links,\n linkInProgress,\n isolatedLinkerPanelId\n )}\n selectedIds={selectedIds}\n messageText={linkerOverlayMessage}\n onLinkSelected={this.handleLinkSelected}\n onLinkDeleted={this.handleLinkDeleted}\n onAllLinksDeleted={this.handleAllLinksDeleted}\n onLinksUpdated={this.handleLinksUpdated}\n onDone={this.handleDone}\n onCancel={this.handleCancel}\n />\n </CSSTransition>\n ) : null;\n }\n}\n\nexport default connector(Linker);\n"],"mappings":"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"}
@@ -259,7 +259,7 @@ export class LinkerOverlayContent extends Component {
259
259
  startColumnType
260
260
  };
261
261
  } catch (error) {
262
- log.error('Unable to get point for link', link, error);
262
+ log.warn('Unable to get point for link', link, error);
263
263
  return null;
264
264
  }
265
265
  }).filter(item => item != null);
@@ -1 +1 @@
1
- {"version":3,"file":"LinkerOverlayContent.js","names":["React","Component","classNames","Button","ContextActions","GLOBAL_SHORTCUTS","Tooltip","LayoutUtils","Log","vsGripper","clamp","isLinkableFromPanel","LinkerLink","log","module","LinkerOverlayContent","constructor","props","handleBlur","bind","handleResize","handleMouseMove","handleMouseDown","handleMouseUp","handleKeyDown","handleKeyUp","handleEscapePressed","handleOperatorChanged","dialogRef","createRef","state","mouse","undefined","dialog","offset","x","y","isDragging","mode","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","panelId","columnName","panel","getOpenedPanelById","Error","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","linkId","type","links","onLinksUpdated","newLinks","map","link","id","operator","setState","current","rect","getBoundingClientRect","dialogX","innerWidth","width","dialogY","innerHeight","height","event","clientX","clientY","right","bottom","key","preventDefault","selectedIds","onLinkDeleted","forEach","onCancel","render","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","visibleLinks","isReversed","start","end","startColumnType","columnType","x1","y1","x2","y2","tmpX","tmpY","className","interactive","has","filter","item","dragging","action","shortcut","LINKER_CLOSE","isGlobal"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n ContextActions,\n GLOBAL_SHORTCUTS,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { Container } from '@deephaven/golden-layout';\nimport { vsGripper } from '@deephaven/icons';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport clamp from 'lodash.clamp';\nimport {\n isLinkableFromPanel,\n Link,\n LinkerCoordinate,\n LinkPoint,\n} from './LinkerUtils';\nimport LinkerLink from './LinkerLink';\nimport './LinkerOverlayContent.scss';\n\nconst log = Log.module('LinkerOverlayContent');\n\nexport type VisibleLink = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n operator: FilterTypeValue;\n startColumnType: string | null;\n};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n selectedIds: Set<string>;\n messageText: string;\n onLinkSelected: (linkId: string) => void;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onLinksUpdated: (newLinks: Link[]) => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n};\n\ntype Point = { x: number; y: number };\n\nexport type LinkerOverlayContentState = {\n mouse?: Point;\n dialog?: Point;\n offset: Point;\n isDragging: boolean;\n mode: 'select' | 'delete';\n};\n\nexport class LinkerOverlayContent extends Component<\n LinkerOverlayContentProps,\n LinkerOverlayContentState\n> {\n static defaultProps = {\n disabled: 'false',\n };\n\n constructor(props: LinkerOverlayContentProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.handleOperatorChanged = this.handleOperatorChanged.bind(this);\n\n this.dialogRef = React.createRef();\n\n this.state = {\n mouse: undefined,\n dialog: undefined,\n offset: { x: 0, y: 0 },\n isDragging: false,\n mode: 'select',\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('blur', this.handleBlur, true);\n window.addEventListener('mousemove', this.handleMouseMove, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n window.addEventListener('keydown', this.handleKeyDown, true);\n window.addEventListener('keyup', this.handleKeyUp, true);\n window.addEventListener('resize', this.handleResize, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('blur', this.handleBlur, true);\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('keydown', this.handleKeyDown, true);\n window.removeEventListener('keyup', this.handleKeyUp, true);\n window.removeEventListener('resize', this.handleResize, true);\n }\n\n dialogRef: React.RefObject<HTMLInputElement>;\n\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint: LinkPoint): LinkerCoordinate {\n const { panelManager } = this.props;\n const { panelId, columnName } = linkPoint;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\n `Panel does not have getCoordinateForColumn method: ${panelId}`\n );\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n const coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n const glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(`Unable to find panel container for id: ${panelId}`);\n }\n return LayoutUtils.getTabPoint((glContainer as unknown) as Container);\n }\n\n handleOperatorChanged(linkId: string, type: FilterTypeValue): void {\n const { links, onLinksUpdated } = this.props;\n const newLinks: Link[] = links.map(link =>\n link.id === linkId ? { ...link, operator: type } : link\n );\n onLinksUpdated(newLinks);\n }\n\n handleBlur(): void {\n this.setState({ mode: 'select' });\n }\n\n handleResize(): void {\n const { dialog } = this.state;\n if (dialog && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);\n const dialogY = clamp(dialog.y, 0, window.innerHeight - rect.height);\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n const { offset, isDragging } = this.state;\n this.setState({\n mouse: { x: event.clientX, y: event.clientY },\n });\n\n if (isDragging && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(\n window.innerWidth - (event.clientX + rect.width + offset.x),\n 0,\n window.innerWidth - rect.width\n );\n\n const dialogY = clamp(\n window.innerHeight - (event.clientY + rect.height + offset.y),\n 0,\n window.innerHeight - rect.height\n );\n\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseDown(event: React.MouseEvent): void {\n const offset: Point = { x: 0, y: 0 };\n if (this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n offset.x = rect.right - (rect.width + event.clientX);\n offset.y = rect.bottom - (rect.height + event.clientY);\n }\n this.setState({\n isDragging: true,\n offset,\n });\n }\n\n handleMouseUp(): void {\n this.setState({\n isDragging: false,\n });\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'delete',\n });\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n const { selectedIds, onLinkDeleted } = this.props;\n event.preventDefault();\n selectedIds.forEach(id => onLinkDeleted(id));\n }\n }\n\n handleKeyUp(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'select',\n });\n }\n }\n\n handleEscapePressed(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n render(): JSX.Element {\n const {\n disabled,\n links,\n selectedIds,\n messageText,\n onLinkSelected,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouse, dialog, isDragging, mode } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end, operator } = link;\n const startColumnType = start.columnType;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouse?.x ?? x1;\n let y2 = mouse?.y ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed != null && isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null },\n { 'link-is-selected': selectedIds.has(id) },\n { 'danger-delete': mode === 'delete' }\n );\n return {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n };\n } catch (error) {\n log.error('Unable to get point for link', link, error);\n return null;\n }\n })\n .filter(item => item != null) as VisibleLink[];\n\n return (\n <div\n className={classNames('linker-overlay', {\n 'danger-delete': mode === 'delete',\n })}\n >\n {visibleLinks.map(\n ({ x1, y1, x2, y2, id, className, operator, startColumnType }) => (\n <LinkerLink\n className={className}\n id={id}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n key={id}\n onClick={onLinkSelected}\n onDelete={onLinkDeleted}\n isSelected={selectedIds.has(id)}\n operator={operator}\n startColumnType={startColumnType}\n onOperatorChanged={this.handleOperatorChanged}\n />\n )\n )}\n <div\n className={classNames('linker-toast-dialog', {\n dragging: isDragging,\n })}\n ref={this.dialogRef}\n style={{ bottom: dialog?.y, right: dialog?.x }}\n >\n <Button\n draggable\n kind=\"inline\"\n className=\"btn-drag-handle\"\n icon={vsGripper}\n onClick={() => {\n // no-op\n }}\n onMouseDown={this.handleMouseDown}\n >\n {!isDragging && <Tooltip>Drag to reposition</Tooltip>}\n </Button>\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <Button kind=\"secondary\" onClick={onAllLinksDeleted}>\n Clear All\n </Button>\n <Button kind=\"primary\" onClick={onDone}>\n Done\n </Button>\n </div>\n </div>\n <ContextActions\n actions={[\n {\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true,\n },\n ]}\n />\n </div>\n );\n }\n}\n\nexport default LinkerOverlayContent;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAmB,OAAO;AACnD,OAAOC,UAAU,MAAM,YAAY;AACnC,SACEC,MAAM,EACNC,cAAc,EACdC,gBAAgB,EAChBC,OAAO,QACF,uBAAuB;AAC9B,SAASC,WAAW,QAAsB,sBAAsB;AAChE,OAAOC,GAAG,MAAM,gBAAgB;AAEhC,SAASC,SAAS,QAAQ,kBAAkB;AAE5C,OAAOC,KAAK,MAAM,cAAc;AAAC,SAE/BC,mBAAmB;AAAA,OAKdC,UAAU;AAAA;AAGjB,IAAMC,GAAG,GAAGL,GAAG,CAACM,MAAM,CAAC,sBAAsB,CAAC;AAqC9C,OAAO,MAAMC,oBAAoB,SAASd,SAAS,CAGjD;EAKAe,WAAW,CAACC,KAAgC,EAAE;IAC5C,KAAK,CAACA,KAAK,CAAC;IAAC;IAEb,IAAI,CAACC,UAAU,GAAG,IAAI,CAACA,UAAU,CAACC,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACC,YAAY,GAAG,IAAI,CAACA,YAAY,CAACD,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACE,eAAe,GAAG,IAAI,CAACA,eAAe,CAACF,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACG,eAAe,GAAG,IAAI,CAACA,eAAe,CAACH,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACI,aAAa,GAAG,IAAI,CAACA,aAAa,CAACJ,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACK,aAAa,GAAG,IAAI,CAACA,aAAa,CAACL,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACM,WAAW,GAAG,IAAI,CAACA,WAAW,CAACN,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACO,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACP,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACQ,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACR,IAAI,CAAC,IAAI,CAAC;IAElE,IAAI,CAACS,SAAS,gBAAG5B,KAAK,CAAC6B,SAAS,EAAE;IAElC,IAAI,CAACC,KAAK,GAAG;MACXC,KAAK,EAAEC,SAAS;MAChBC,MAAM,EAAED,SAAS;MACjBE,MAAM,EAAE;QAAEC,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAE;MAAE,CAAC;MACtBC,UAAU,EAAE,KAAK;MACjBC,IAAI,EAAE;IACR,CAAC;EACH;EAEAC,iBAAiB,GAAS;IACxBC,MAAM,CAACC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAACvB,UAAU,EAAE,IAAI,CAAC;IACtDsB,MAAM,CAACC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAACpB,eAAe,EAAE,IAAI,CAAC;IAChEmB,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAClB,aAAa,EAAE,IAAI,CAAC;IAC5DiB,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAACjB,aAAa,EAAE,IAAI,CAAC;IAC5DgB,MAAM,CAACC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAChB,WAAW,EAAE,IAAI,CAAC;IACxDe,MAAM,CAACC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAACrB,YAAY,EAAE,IAAI,CAAC;EAC5D;;EAEA;EACAsB,iBAAiB,CAACC,KAAY,EAAEC,IAAe,EAAQ;IACrD/B,GAAG,CAAC8B,KAAK,CAAC,mBAAmB,EAAEA,KAAK,EAAEC,IAAI,CAAC;EAC7C;EAEAC,oBAAoB,GAAS;IAC3BL,MAAM,CAACM,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC5B,UAAU,EAAE,IAAI,CAAC;IACzDsB,MAAM,CAACM,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAACzB,eAAe,EAAE,IAAI,CAAC;IACnEmB,MAAM,CAACM,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAACvB,aAAa,EAAE,IAAI,CAAC;IAC/DiB,MAAM,CAACM,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAACtB,aAAa,EAAE,IAAI,CAAC;IAC/DgB,MAAM,CAACM,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAACrB,WAAW,EAAE,IAAI,CAAC;IAC3De,MAAM,CAACM,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC1B,YAAY,EAAE,IAAI,CAAC;EAC/D;EAIA;EACA2B,qBAAqB,CAACC,SAAoB,EAAoB;IAC5D,IAAM;MAAEC;IAAa,CAAC,GAAG,IAAI,CAAChC,KAAK;IACnC,IAAM;MAAEiC,OAAO;MAAEC;IAAW,CAAC,GAAGH,SAAS;IACzC,IAAMI,KAAK,GAAGH,YAAY,CAACI,kBAAkB,CAACH,OAAO,CAAC;IACtD,IAAIE,KAAK,IAAI,IAAI,EAAE;MACjB,IAAI,CAACzC,mBAAmB,CAACyC,KAAK,CAAC,EAAE;QAC/B,MAAM,IAAIE,KAAK,8DACyCJ,OAAO,EAC9D;MACH;MACA,IAAI;QACF;QACA;QACA;QACA,IAAMK,UAAU,GAAGH,KAAK,CAACI,sBAAsB,CAACL,UAAU,CAAC;QAC3D,IAAII,UAAU,IAAI,IAAI,EAAE;UACtB,OAAOA,UAAU;QACnB;MACF,CAAC,CAAC,OAAOE,CAAC,EAAE;QACV5C,GAAG,CAAC8B,KAAK,CAAC,qCAAqC,EAAEQ,UAAU,EAAEC,KAAK,CAAC;MACrE;IACF;IACA;IACA;IACA,IAAMM,WAAW,GAAGT,YAAY,CAACU,qBAAqB,CAACT,OAAO,CAAC;IAC/D,IAAIQ,WAAW,IAAI,IAAI,EAAE;MACvB,MAAM,IAAIJ,KAAK,kDAA2CJ,OAAO,EAAG;IACtE;IACA,OAAO3C,WAAW,CAACqD,WAAW,CAAEF,WAAW,CAA0B;EACvE;EAEA/B,qBAAqB,CAACkC,MAAc,EAAEC,IAAqB,EAAQ;IACjE,IAAM;MAAEC,KAAK;MAAEC;IAAe,CAAC,GAAG,IAAI,CAAC/C,KAAK;IAC5C,IAAMgD,QAAgB,GAAGF,KAAK,CAACG,GAAG,CAACC,IAAI,IACrCA,IAAI,CAACC,EAAE,KAAKP,MAAM,mCAAQM,IAAI;MAAEE,QAAQ,EAAEP;IAAI,KAAKK,IAAI,CACxD;IACDH,cAAc,CAACC,QAAQ,CAAC;EAC1B;EAEA/C,UAAU,GAAS;IACjB,IAAI,CAACoD,QAAQ,CAAC;MAAEhC,IAAI,EAAE;IAAS,CAAC,CAAC;EACnC;EAEAlB,YAAY,GAAS;IACnB,IAAM;MAAEa;IAAO,CAAC,GAAG,IAAI,CAACH,KAAK;IAC7B,IAAIG,MAAM,IAAI,IAAI,CAACL,SAAS,CAAC2C,OAAO,EAAE;MACpC,IAAMC,IAAI,GAAG,IAAI,CAAC5C,SAAS,CAAC2C,OAAO,CAACE,qBAAqB,EAAE;MAC3D,IAAMC,OAAO,GAAGhE,KAAK,CAACuB,MAAM,CAACE,CAAC,EAAE,CAAC,EAAEK,MAAM,CAACmC,UAAU,GAAGH,IAAI,CAACI,KAAK,CAAC;MAClE,IAAMC,OAAO,GAAGnE,KAAK,CAACuB,MAAM,CAACG,CAAC,EAAE,CAAC,EAAEI,MAAM,CAACsC,WAAW,GAAGN,IAAI,CAACO,MAAM,CAAC;MACpE,IAAI,CAACT,QAAQ,CAAC;QACZrC,MAAM,EAAE;UAAEE,CAAC,EAAEuC,OAAO;UAAEtC,CAAC,EAAEyC;QAAQ;MACnC,CAAC,CAAC;IACJ;EACF;EAEAxD,eAAe,CAAC2D,KAAiB,EAAQ;IACvC,IAAM;MAAE9C,MAAM;MAAEG;IAAW,CAAC,GAAG,IAAI,CAACP,KAAK;IACzC,IAAI,CAACwC,QAAQ,CAAC;MACZvC,KAAK,EAAE;QAAEI,CAAC,EAAE6C,KAAK,CAACC,OAAO;QAAE7C,CAAC,EAAE4C,KAAK,CAACE;MAAQ;IAC9C,CAAC,CAAC;IAEF,IAAI7C,UAAU,IAAI,IAAI,CAACT,SAAS,CAAC2C,OAAO,EAAE;MACxC,IAAMC,IAAI,GAAG,IAAI,CAAC5C,SAAS,CAAC2C,OAAO,CAACE,qBAAqB,EAAE;MAC3D,IAAMC,OAAO,GAAGhE,KAAK,CACnB8B,MAAM,CAACmC,UAAU,IAAIK,KAAK,CAACC,OAAO,GAAGT,IAAI,CAACI,KAAK,GAAG1C,MAAM,CAACC,CAAC,CAAC,EAC3D,CAAC,EACDK,MAAM,CAACmC,UAAU,GAAGH,IAAI,CAACI,KAAK,CAC/B;MAED,IAAMC,OAAO,GAAGnE,KAAK,CACnB8B,MAAM,CAACsC,WAAW,IAAIE,KAAK,CAACE,OAAO,GAAGV,IAAI,CAACO,MAAM,GAAG7C,MAAM,CAACE,CAAC,CAAC,EAC7D,CAAC,EACDI,MAAM,CAACsC,WAAW,GAAGN,IAAI,CAACO,MAAM,CACjC;MAED,IAAI,CAACT,QAAQ,CAAC;QACZrC,MAAM,EAAE;UAAEE,CAAC,EAAEuC,OAAO;UAAEtC,CAAC,EAAEyC;QAAQ;MACnC,CAAC,CAAC;IACJ;EACF;EAEAvD,eAAe,CAAC0D,KAAuB,EAAQ;IAC7C,IAAM9C,MAAa,GAAG;MAAEC,CAAC,EAAE,CAAC;MAAEC,CAAC,EAAE;IAAE,CAAC;IACpC,IAAI,IAAI,CAACR,SAAS,CAAC2C,OAAO,EAAE;MAC1B,IAAMC,IAAI,GAAG,IAAI,CAAC5C,SAAS,CAAC2C,OAAO,CAACE,qBAAqB,EAAE;MAC3DvC,MAAM,CAACC,CAAC,GAAGqC,IAAI,CAACW,KAAK,IAAIX,IAAI,CAACI,KAAK,GAAGI,KAAK,CAACC,OAAO,CAAC;MACpD/C,MAAM,CAACE,CAAC,GAAGoC,IAAI,CAACY,MAAM,IAAIZ,IAAI,CAACO,MAAM,GAAGC,KAAK,CAACE,OAAO,CAAC;IACxD;IACA,IAAI,CAACZ,QAAQ,CAAC;MACZjC,UAAU,EAAE,IAAI;MAChBH;IACF,CAAC,CAAC;EACJ;EAEAX,aAAa,GAAS;IACpB,IAAI,CAAC+C,QAAQ,CAAC;MACZjC,UAAU,EAAE;IACd,CAAC,CAAC;EACJ;EAEAb,aAAa,CAACwD,KAAoB,EAAQ;IACxC,IAAIA,KAAK,CAACK,GAAG,KAAK,KAAK,EAAE;MACvBL,KAAK,CAACM,cAAc,EAAE;MACtB,IAAI,CAAChB,QAAQ,CAAC;QACZhC,IAAI,EAAE;MACR,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI0C,KAAK,CAACK,GAAG,KAAK,QAAQ,IAAIL,KAAK,CAACK,GAAG,KAAK,WAAW,EAAE;MAC9D,IAAM;QAAEE,WAAW;QAAEC;MAAc,CAAC,GAAG,IAAI,CAACvE,KAAK;MACjD+D,KAAK,CAACM,cAAc,EAAE;MACtBC,WAAW,CAACE,OAAO,CAACrB,EAAE,IAAIoB,aAAa,CAACpB,EAAE,CAAC,CAAC;IAC9C;EACF;EAEA3C,WAAW,CAACuD,KAAoB,EAAQ;IACtC,IAAIA,KAAK,CAACK,GAAG,KAAK,KAAK,EAAE;MACvBL,KAAK,CAACM,cAAc,EAAE;MACtB,IAAI,CAAChB,QAAQ,CAAC;QACZhC,IAAI,EAAE;MACR,CAAC,CAAC;IACJ;EACF;EAEAZ,mBAAmB,GAAS;IAC1B,IAAM;MAAEgE;IAAS,CAAC,GAAG,IAAI,CAACzE,KAAK;IAC/ByE,QAAQ,EAAE;EACZ;EAEAC,MAAM,GAAgB;IACpB,IAAM;MACJC,QAAQ;MACR7B,KAAK;MACLwB,WAAW;MACXM,WAAW;MACXC,cAAc;MACdN,aAAa;MACbO,iBAAiB;MACjBC;IACF,CAAC,GAAG,IAAI,CAAC/E,KAAK;IAEd,IAAM;MAAEc,KAAK;MAAEE,MAAM;MAAEI,UAAU;MAAEC;IAAK,CAAC,GAAG,IAAI,CAACR,KAAK;IACtD,IAAMmE,YAAY,GAAGlC,KAAK,CACvBG,GAAG,CAACC,IAAI,IAAI;MACX,IAAI;QAAA;QACF,IAAM;UAAEC,EAAE;UAAEN,IAAI;UAAEoC,UAAU;UAAEC,KAAK;UAAEC,GAAG;UAAE/B;QAAS,CAAC,GAAGF,IAAI;QAC3D,IAAMkC,eAAe,GAAGF,KAAK,CAACG,UAAU;QACxC,IAAI,CAACC,EAAE,EAAEC,EAAE,CAAC,GAAG,IAAI,CAACzD,qBAAqB,CAACoD,KAAK,CAAC;QAChD,IAAIM,EAAE,eAAG1E,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEI,CAAC,+CAAIoE,EAAE;QACvB,IAAIG,EAAE,eAAG3E,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEK,CAAC,+CAAIoE,EAAE;QACvB,IAAIJ,GAAG,IAAI,IAAI,EAAE;UACf,CAACK,EAAE,EAAEC,EAAE,CAAC,GAAG,IAAI,CAAC3D,qBAAqB,CAACqD,GAAG,CAAC;QAC5C;QACA,IAAIF,UAAU,IAAI,IAAI,IAAIA,UAAU,EAAE;UACpC,IAAM,CAACS,IAAI,EAAEC,IAAI,CAAC,GAAG,CAACL,EAAE,EAAEC,EAAE,CAAC;UAC7B,CAACD,EAAE,EAAEC,EAAE,CAAC,GAAG,CAACC,EAAE,EAAEC,EAAE,CAAC;UACnB,CAACD,EAAE,EAAEC,EAAE,CAAC,GAAG,CAACC,IAAI,EAAEC,IAAI,CAAC;QACzB;QACA,IAAMC,SAAS,GAAG3G,UAAU,CAC1B,aAAa,EACb;UAAE0F;QAAS,CAAC,EACZ;UAAE,oBAAoB,EAAE9B,IAAI,KAAK;QAAe,CAAC,EACjD;UAAE,cAAc,EAAEA,IAAI,KAAK;QAAU,CAAC,EACtC;UAAEgD,WAAW,EAAE3C,IAAI,CAACiC,GAAG,IAAI;QAAK,CAAC,EACjC;UAAE,kBAAkB,EAAEb,WAAW,CAACwB,GAAG,CAAC3C,EAAE;QAAE,CAAC,EAC3C;UAAE,eAAe,EAAE9B,IAAI,KAAK;QAAS,CAAC,CACvC;QACD,OAAO;UACLiE,EAAE;UACFC,EAAE;UACFC,EAAE;UACFC,EAAE;UACFtC,EAAE;UACFyC,SAAS;UACTxC,QAAQ;UACRgC;QACF,CAAC;MACH,CAAC,CAAC,OAAO1D,KAAK,EAAE;QACd9B,GAAG,CAAC8B,KAAK,CAAC,8BAA8B,EAAEwB,IAAI,EAAExB,KAAK,CAAC;QACtD,OAAO,IAAI;MACb;IACF,CAAC,CAAC,CACDqE,MAAM,CAACC,IAAI,IAAIA,IAAI,IAAI,IAAI,CAAkB;IAEhD,oBACE;MACE,SAAS,EAAE/G,UAAU,CAAC,gBAAgB,EAAE;QACtC,eAAe,EAAEoC,IAAI,KAAK;MAC5B,CAAC;IAAE,GAEF2D,YAAY,CAAC/B,GAAG,CACf;MAAA,IAAC;QAAEqC,EAAE;QAAEC,EAAE;QAAEC,EAAE;QAAEC,EAAE;QAAEtC,EAAE;QAAEyC,SAAS;QAAExC,QAAQ;QAAEgC;MAAgB,CAAC;MAAA,oBAC3D,oBAAC,UAAU;QACT,SAAS,EAAEQ,SAAU;QACrB,EAAE,EAAEzC,EAAG;QACP,EAAE,EAAEmC,EAAG;QACP,EAAE,EAAEC,EAAG;QACP,EAAE,EAAEC,EAAG;QACP,EAAE,EAAEC,EAAG;QACP,GAAG,EAAEtC,EAAG;QACR,OAAO,EAAE0B,cAAe;QACxB,QAAQ,EAAEN,aAAc;QACxB,UAAU,EAAED,WAAW,CAACwB,GAAG,CAAC3C,EAAE,CAAE;QAChC,QAAQ,EAAEC,QAAS;QACnB,eAAe,EAAEgC,eAAgB;QACjC,iBAAiB,EAAE,IAAI,CAAC1E;MAAsB,EAC9C;IAAA,CACH,CACF,eACD;MACE,SAAS,EAAEzB,UAAU,CAAC,qBAAqB,EAAE;QAC3CgH,QAAQ,EAAE7E;MACZ,CAAC,CAAE;MACH,GAAG,EAAE,IAAI,CAACT,SAAU;MACpB,KAAK,EAAE;QAAEwD,MAAM,EAAEnD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG,CAAC;QAAE+C,KAAK,EAAElD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEE;MAAE;IAAE,gBAE/C,oBAAC,MAAM;MACL,SAAS;MACT,IAAI,EAAC,QAAQ;MACb,SAAS,EAAC,iBAAiB;MAC3B,IAAI,EAAE1B,SAAU;MAChB,OAAO,EAAE,MAAM;QACb;MAAA,CACA;MACF,WAAW,EAAE,IAAI,CAACa;IAAgB,GAEjC,CAACe,UAAU,iBAAI,oBAAC,OAAO,6BAA6B,CAC9C,eACT;MAAK,SAAS,EAAC;IAAY,GAAEwD,WAAW,CAAO,eAC/C;MAAK,SAAS,EAAC;IAAc,gBAC3B,oBAAC,MAAM;MAAC,IAAI,EAAC,WAAW;MAAC,OAAO,EAAEE;IAAkB,eAE3C,eACT,oBAAC,MAAM;MAAC,IAAI,EAAC,SAAS;MAAC,OAAO,EAAEC;IAAO,UAE9B,CACL,CACF,eACN,oBAAC,cAAc;MACb,OAAO,EAAE,CACP;QACEmB,MAAM,EAAE,IAAI,CAACzF,mBAAmB;QAChC0F,QAAQ,EAAE/G,gBAAgB,CAACgH,YAAY;QACvCC,QAAQ,EAAE;MACZ,CAAC;IACD,EACF,CACE;EAEV;AACF;AAAC,gBAlTYvG,oBAAoB,kBAIT;EACpB6E,QAAQ,EAAE;AACZ,CAAC;AA8SH,eAAe7E,oBAAoB"}
1
+ {"version":3,"file":"LinkerOverlayContent.js","names":["React","Component","classNames","Button","ContextActions","GLOBAL_SHORTCUTS","Tooltip","LayoutUtils","Log","vsGripper","clamp","isLinkableFromPanel","LinkerLink","log","module","LinkerOverlayContent","constructor","props","handleBlur","bind","handleResize","handleMouseMove","handleMouseDown","handleMouseUp","handleKeyDown","handleKeyUp","handleEscapePressed","handleOperatorChanged","dialogRef","createRef","state","mouse","undefined","dialog","offset","x","y","isDragging","mode","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","panelId","columnName","panel","getOpenedPanelById","Error","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","linkId","type","links","onLinksUpdated","newLinks","map","link","id","operator","setState","current","rect","getBoundingClientRect","dialogX","innerWidth","width","dialogY","innerHeight","height","event","clientX","clientY","right","bottom","key","preventDefault","selectedIds","onLinkDeleted","forEach","onCancel","render","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","visibleLinks","isReversed","start","end","startColumnType","columnType","x1","y1","x2","y2","tmpX","tmpY","className","interactive","has","warn","filter","item","dragging","action","shortcut","LINKER_CLOSE","isGlobal"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n ContextActions,\n GLOBAL_SHORTCUTS,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { Container } from '@deephaven/golden-layout';\nimport { vsGripper } from '@deephaven/icons';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport clamp from 'lodash.clamp';\nimport {\n isLinkableFromPanel,\n Link,\n LinkerCoordinate,\n LinkPoint,\n} from './LinkerUtils';\nimport LinkerLink from './LinkerLink';\nimport './LinkerOverlayContent.scss';\n\nconst log = Log.module('LinkerOverlayContent');\n\nexport type VisibleLink = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n operator: FilterTypeValue;\n startColumnType: string | null;\n};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n selectedIds: Set<string>;\n messageText: string;\n onLinkSelected: (linkId: string) => void;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onLinksUpdated: (newLinks: Link[]) => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n};\n\ntype Point = { x: number; y: number };\n\nexport type LinkerOverlayContentState = {\n mouse?: Point;\n dialog?: Point;\n offset: Point;\n isDragging: boolean;\n mode: 'select' | 'delete';\n};\n\nexport class LinkerOverlayContent extends Component<\n LinkerOverlayContentProps,\n LinkerOverlayContentState\n> {\n static defaultProps = {\n disabled: 'false',\n };\n\n constructor(props: LinkerOverlayContentProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.handleOperatorChanged = this.handleOperatorChanged.bind(this);\n\n this.dialogRef = React.createRef();\n\n this.state = {\n mouse: undefined,\n dialog: undefined,\n offset: { x: 0, y: 0 },\n isDragging: false,\n mode: 'select',\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('blur', this.handleBlur, true);\n window.addEventListener('mousemove', this.handleMouseMove, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n window.addEventListener('keydown', this.handleKeyDown, true);\n window.addEventListener('keyup', this.handleKeyUp, true);\n window.addEventListener('resize', this.handleResize, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('blur', this.handleBlur, true);\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('keydown', this.handleKeyDown, true);\n window.removeEventListener('keyup', this.handleKeyUp, true);\n window.removeEventListener('resize', this.handleResize, true);\n }\n\n dialogRef: React.RefObject<HTMLInputElement>;\n\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint: LinkPoint): LinkerCoordinate {\n const { panelManager } = this.props;\n const { panelId, columnName } = linkPoint;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\n `Panel does not have getCoordinateForColumn method: ${panelId}`\n );\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n const coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n const glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(`Unable to find panel container for id: ${panelId}`);\n }\n return LayoutUtils.getTabPoint((glContainer as unknown) as Container);\n }\n\n handleOperatorChanged(linkId: string, type: FilterTypeValue): void {\n const { links, onLinksUpdated } = this.props;\n const newLinks: Link[] = links.map(link =>\n link.id === linkId ? { ...link, operator: type } : link\n );\n onLinksUpdated(newLinks);\n }\n\n handleBlur(): void {\n this.setState({ mode: 'select' });\n }\n\n handleResize(): void {\n const { dialog } = this.state;\n if (dialog && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);\n const dialogY = clamp(dialog.y, 0, window.innerHeight - rect.height);\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n const { offset, isDragging } = this.state;\n this.setState({\n mouse: { x: event.clientX, y: event.clientY },\n });\n\n if (isDragging && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(\n window.innerWidth - (event.clientX + rect.width + offset.x),\n 0,\n window.innerWidth - rect.width\n );\n\n const dialogY = clamp(\n window.innerHeight - (event.clientY + rect.height + offset.y),\n 0,\n window.innerHeight - rect.height\n );\n\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseDown(event: React.MouseEvent): void {\n const offset: Point = { x: 0, y: 0 };\n if (this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n offset.x = rect.right - (rect.width + event.clientX);\n offset.y = rect.bottom - (rect.height + event.clientY);\n }\n this.setState({\n isDragging: true,\n offset,\n });\n }\n\n handleMouseUp(): void {\n this.setState({\n isDragging: false,\n });\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'delete',\n });\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n const { selectedIds, onLinkDeleted } = this.props;\n event.preventDefault();\n selectedIds.forEach(id => onLinkDeleted(id));\n }\n }\n\n handleKeyUp(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'select',\n });\n }\n }\n\n handleEscapePressed(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n render(): JSX.Element {\n const {\n disabled,\n links,\n selectedIds,\n messageText,\n onLinkSelected,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouse, dialog, isDragging, mode } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end, operator } = link;\n const startColumnType = start.columnType;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouse?.x ?? x1;\n let y2 = mouse?.y ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed != null && isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null },\n { 'link-is-selected': selectedIds.has(id) },\n { 'danger-delete': mode === 'delete' }\n );\n return {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n };\n } catch (error) {\n log.warn('Unable to get point for link', link, error);\n return null;\n }\n })\n .filter(item => item != null) as VisibleLink[];\n\n return (\n <div\n className={classNames('linker-overlay', {\n 'danger-delete': mode === 'delete',\n })}\n >\n {visibleLinks.map(\n ({ x1, y1, x2, y2, id, className, operator, startColumnType }) => (\n <LinkerLink\n className={className}\n id={id}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n key={id}\n onClick={onLinkSelected}\n onDelete={onLinkDeleted}\n isSelected={selectedIds.has(id)}\n operator={operator}\n startColumnType={startColumnType}\n onOperatorChanged={this.handleOperatorChanged}\n />\n )\n )}\n <div\n className={classNames('linker-toast-dialog', {\n dragging: isDragging,\n })}\n ref={this.dialogRef}\n style={{ bottom: dialog?.y, right: dialog?.x }}\n >\n <Button\n draggable\n kind=\"inline\"\n className=\"btn-drag-handle\"\n icon={vsGripper}\n onClick={() => {\n // no-op\n }}\n onMouseDown={this.handleMouseDown}\n >\n {!isDragging && <Tooltip>Drag to reposition</Tooltip>}\n </Button>\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <Button kind=\"secondary\" onClick={onAllLinksDeleted}>\n Clear All\n </Button>\n <Button kind=\"primary\" onClick={onDone}>\n Done\n </Button>\n </div>\n </div>\n <ContextActions\n actions={[\n {\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true,\n },\n ]}\n />\n </div>\n );\n }\n}\n\nexport default LinkerOverlayContent;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAmB,OAAO;AACnD,OAAOC,UAAU,MAAM,YAAY;AACnC,SACEC,MAAM,EACNC,cAAc,EACdC,gBAAgB,EAChBC,OAAO,QACF,uBAAuB;AAC9B,SAASC,WAAW,QAAsB,sBAAsB;AAChE,OAAOC,GAAG,MAAM,gBAAgB;AAEhC,SAASC,SAAS,QAAQ,kBAAkB;AAE5C,OAAOC,KAAK,MAAM,cAAc;AAAC,SAE/BC,mBAAmB;AAAA,OAKdC,UAAU;AAAA;AAGjB,IAAMC,GAAG,GAAGL,GAAG,CAACM,MAAM,CAAC,sBAAsB,CAAC;AAqC9C,OAAO,MAAMC,oBAAoB,SAASd,SAAS,CAGjD;EAKAe,WAAW,CAACC,KAAgC,EAAE;IAC5C,KAAK,CAACA,KAAK,CAAC;IAAC;IAEb,IAAI,CAACC,UAAU,GAAG,IAAI,CAACA,UAAU,CAACC,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACC,YAAY,GAAG,IAAI,CAACA,YAAY,CAACD,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACE,eAAe,GAAG,IAAI,CAACA,eAAe,CAACF,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACG,eAAe,GAAG,IAAI,CAACA,eAAe,CAACH,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACI,aAAa,GAAG,IAAI,CAACA,aAAa,CAACJ,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACK,aAAa,GAAG,IAAI,CAACA,aAAa,CAACL,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACM,WAAW,GAAG,IAAI,CAACA,WAAW,CAACN,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACO,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACP,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACQ,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACR,IAAI,CAAC,IAAI,CAAC;IAElE,IAAI,CAACS,SAAS,gBAAG5B,KAAK,CAAC6B,SAAS,EAAE;IAElC,IAAI,CAACC,KAAK,GAAG;MACXC,KAAK,EAAEC,SAAS;MAChBC,MAAM,EAAED,SAAS;MACjBE,MAAM,EAAE;QAAEC,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAE;MAAE,CAAC;MACtBC,UAAU,EAAE,KAAK;MACjBC,IAAI,EAAE;IACR,CAAC;EACH;EAEAC,iBAAiB,GAAS;IACxBC,MAAM,CAACC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAACvB,UAAU,EAAE,IAAI,CAAC;IACtDsB,MAAM,CAACC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAACpB,eAAe,EAAE,IAAI,CAAC;IAChEmB,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAClB,aAAa,EAAE,IAAI,CAAC;IAC5DiB,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAACjB,aAAa,EAAE,IAAI,CAAC;IAC5DgB,MAAM,CAACC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAChB,WAAW,EAAE,IAAI,CAAC;IACxDe,MAAM,CAACC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAACrB,YAAY,EAAE,IAAI,CAAC;EAC5D;;EAEA;EACAsB,iBAAiB,CAACC,KAAY,EAAEC,IAAe,EAAQ;IACrD/B,GAAG,CAAC8B,KAAK,CAAC,mBAAmB,EAAEA,KAAK,EAAEC,IAAI,CAAC;EAC7C;EAEAC,oBAAoB,GAAS;IAC3BL,MAAM,CAACM,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC5B,UAAU,EAAE,IAAI,CAAC;IACzDsB,MAAM,CAACM,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAACzB,eAAe,EAAE,IAAI,CAAC;IACnEmB,MAAM,CAACM,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAACvB,aAAa,EAAE,IAAI,CAAC;IAC/DiB,MAAM,CAACM,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAACtB,aAAa,EAAE,IAAI,CAAC;IAC/DgB,MAAM,CAACM,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAACrB,WAAW,EAAE,IAAI,CAAC;IAC3De,MAAM,CAACM,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC1B,YAAY,EAAE,IAAI,CAAC;EAC/D;EAIA;EACA2B,qBAAqB,CAACC,SAAoB,EAAoB;IAC5D,IAAM;MAAEC;IAAa,CAAC,GAAG,IAAI,CAAChC,KAAK;IACnC,IAAM;MAAEiC,OAAO;MAAEC;IAAW,CAAC,GAAGH,SAAS;IACzC,IAAMI,KAAK,GAAGH,YAAY,CAACI,kBAAkB,CAACH,OAAO,CAAC;IACtD,IAAIE,KAAK,IAAI,IAAI,EAAE;MACjB,IAAI,CAACzC,mBAAmB,CAACyC,KAAK,CAAC,EAAE;QAC/B,MAAM,IAAIE,KAAK,8DACyCJ,OAAO,EAC9D;MACH;MACA,IAAI;QACF;QACA;QACA;QACA,IAAMK,UAAU,GAAGH,KAAK,CAACI,sBAAsB,CAACL,UAAU,CAAC;QAC3D,IAAII,UAAU,IAAI,IAAI,EAAE;UACtB,OAAOA,UAAU;QACnB;MACF,CAAC,CAAC,OAAOE,CAAC,EAAE;QACV5C,GAAG,CAAC8B,KAAK,CAAC,qCAAqC,EAAEQ,UAAU,EAAEC,KAAK,CAAC;MACrE;IACF;IACA;IACA;IACA,IAAMM,WAAW,GAAGT,YAAY,CAACU,qBAAqB,CAACT,OAAO,CAAC;IAC/D,IAAIQ,WAAW,IAAI,IAAI,EAAE;MACvB,MAAM,IAAIJ,KAAK,kDAA2CJ,OAAO,EAAG;IACtE;IACA,OAAO3C,WAAW,CAACqD,WAAW,CAAEF,WAAW,CAA0B;EACvE;EAEA/B,qBAAqB,CAACkC,MAAc,EAAEC,IAAqB,EAAQ;IACjE,IAAM;MAAEC,KAAK;MAAEC;IAAe,CAAC,GAAG,IAAI,CAAC/C,KAAK;IAC5C,IAAMgD,QAAgB,GAAGF,KAAK,CAACG,GAAG,CAACC,IAAI,IACrCA,IAAI,CAACC,EAAE,KAAKP,MAAM,mCAAQM,IAAI;MAAEE,QAAQ,EAAEP;IAAI,KAAKK,IAAI,CACxD;IACDH,cAAc,CAACC,QAAQ,CAAC;EAC1B;EAEA/C,UAAU,GAAS;IACjB,IAAI,CAACoD,QAAQ,CAAC;MAAEhC,IAAI,EAAE;IAAS,CAAC,CAAC;EACnC;EAEAlB,YAAY,GAAS;IACnB,IAAM;MAAEa;IAAO,CAAC,GAAG,IAAI,CAACH,KAAK;IAC7B,IAAIG,MAAM,IAAI,IAAI,CAACL,SAAS,CAAC2C,OAAO,EAAE;MACpC,IAAMC,IAAI,GAAG,IAAI,CAAC5C,SAAS,CAAC2C,OAAO,CAACE,qBAAqB,EAAE;MAC3D,IAAMC,OAAO,GAAGhE,KAAK,CAACuB,MAAM,CAACE,CAAC,EAAE,CAAC,EAAEK,MAAM,CAACmC,UAAU,GAAGH,IAAI,CAACI,KAAK,CAAC;MAClE,IAAMC,OAAO,GAAGnE,KAAK,CAACuB,MAAM,CAACG,CAAC,EAAE,CAAC,EAAEI,MAAM,CAACsC,WAAW,GAAGN,IAAI,CAACO,MAAM,CAAC;MACpE,IAAI,CAACT,QAAQ,CAAC;QACZrC,MAAM,EAAE;UAAEE,CAAC,EAAEuC,OAAO;UAAEtC,CAAC,EAAEyC;QAAQ;MACnC,CAAC,CAAC;IACJ;EACF;EAEAxD,eAAe,CAAC2D,KAAiB,EAAQ;IACvC,IAAM;MAAE9C,MAAM;MAAEG;IAAW,CAAC,GAAG,IAAI,CAACP,KAAK;IACzC,IAAI,CAACwC,QAAQ,CAAC;MACZvC,KAAK,EAAE;QAAEI,CAAC,EAAE6C,KAAK,CAACC,OAAO;QAAE7C,CAAC,EAAE4C,KAAK,CAACE;MAAQ;IAC9C,CAAC,CAAC;IAEF,IAAI7C,UAAU,IAAI,IAAI,CAACT,SAAS,CAAC2C,OAAO,EAAE;MACxC,IAAMC,IAAI,GAAG,IAAI,CAAC5C,SAAS,CAAC2C,OAAO,CAACE,qBAAqB,EAAE;MAC3D,IAAMC,OAAO,GAAGhE,KAAK,CACnB8B,MAAM,CAACmC,UAAU,IAAIK,KAAK,CAACC,OAAO,GAAGT,IAAI,CAACI,KAAK,GAAG1C,MAAM,CAACC,CAAC,CAAC,EAC3D,CAAC,EACDK,MAAM,CAACmC,UAAU,GAAGH,IAAI,CAACI,KAAK,CAC/B;MAED,IAAMC,OAAO,GAAGnE,KAAK,CACnB8B,MAAM,CAACsC,WAAW,IAAIE,KAAK,CAACE,OAAO,GAAGV,IAAI,CAACO,MAAM,GAAG7C,MAAM,CAACE,CAAC,CAAC,EAC7D,CAAC,EACDI,MAAM,CAACsC,WAAW,GAAGN,IAAI,CAACO,MAAM,CACjC;MAED,IAAI,CAACT,QAAQ,CAAC;QACZrC,MAAM,EAAE;UAAEE,CAAC,EAAEuC,OAAO;UAAEtC,CAAC,EAAEyC;QAAQ;MACnC,CAAC,CAAC;IACJ;EACF;EAEAvD,eAAe,CAAC0D,KAAuB,EAAQ;IAC7C,IAAM9C,MAAa,GAAG;MAAEC,CAAC,EAAE,CAAC;MAAEC,CAAC,EAAE;IAAE,CAAC;IACpC,IAAI,IAAI,CAACR,SAAS,CAAC2C,OAAO,EAAE;MAC1B,IAAMC,IAAI,GAAG,IAAI,CAAC5C,SAAS,CAAC2C,OAAO,CAACE,qBAAqB,EAAE;MAC3DvC,MAAM,CAACC,CAAC,GAAGqC,IAAI,CAACW,KAAK,IAAIX,IAAI,CAACI,KAAK,GAAGI,KAAK,CAACC,OAAO,CAAC;MACpD/C,MAAM,CAACE,CAAC,GAAGoC,IAAI,CAACY,MAAM,IAAIZ,IAAI,CAACO,MAAM,GAAGC,KAAK,CAACE,OAAO,CAAC;IACxD;IACA,IAAI,CAACZ,QAAQ,CAAC;MACZjC,UAAU,EAAE,IAAI;MAChBH;IACF,CAAC,CAAC;EACJ;EAEAX,aAAa,GAAS;IACpB,IAAI,CAAC+C,QAAQ,CAAC;MACZjC,UAAU,EAAE;IACd,CAAC,CAAC;EACJ;EAEAb,aAAa,CAACwD,KAAoB,EAAQ;IACxC,IAAIA,KAAK,CAACK,GAAG,KAAK,KAAK,EAAE;MACvBL,KAAK,CAACM,cAAc,EAAE;MACtB,IAAI,CAAChB,QAAQ,CAAC;QACZhC,IAAI,EAAE;MACR,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI0C,KAAK,CAACK,GAAG,KAAK,QAAQ,IAAIL,KAAK,CAACK,GAAG,KAAK,WAAW,EAAE;MAC9D,IAAM;QAAEE,WAAW;QAAEC;MAAc,CAAC,GAAG,IAAI,CAACvE,KAAK;MACjD+D,KAAK,CAACM,cAAc,EAAE;MACtBC,WAAW,CAACE,OAAO,CAACrB,EAAE,IAAIoB,aAAa,CAACpB,EAAE,CAAC,CAAC;IAC9C;EACF;EAEA3C,WAAW,CAACuD,KAAoB,EAAQ;IACtC,IAAIA,KAAK,CAACK,GAAG,KAAK,KAAK,EAAE;MACvBL,KAAK,CAACM,cAAc,EAAE;MACtB,IAAI,CAAChB,QAAQ,CAAC;QACZhC,IAAI,EAAE;MACR,CAAC,CAAC;IACJ;EACF;EAEAZ,mBAAmB,GAAS;IAC1B,IAAM;MAAEgE;IAAS,CAAC,GAAG,IAAI,CAACzE,KAAK;IAC/ByE,QAAQ,EAAE;EACZ;EAEAC,MAAM,GAAgB;IACpB,IAAM;MACJC,QAAQ;MACR7B,KAAK;MACLwB,WAAW;MACXM,WAAW;MACXC,cAAc;MACdN,aAAa;MACbO,iBAAiB;MACjBC;IACF,CAAC,GAAG,IAAI,CAAC/E,KAAK;IAEd,IAAM;MAAEc,KAAK;MAAEE,MAAM;MAAEI,UAAU;MAAEC;IAAK,CAAC,GAAG,IAAI,CAACR,KAAK;IACtD,IAAMmE,YAAY,GAAGlC,KAAK,CACvBG,GAAG,CAACC,IAAI,IAAI;MACX,IAAI;QAAA;QACF,IAAM;UAAEC,EAAE;UAAEN,IAAI;UAAEoC,UAAU;UAAEC,KAAK;UAAEC,GAAG;UAAE/B;QAAS,CAAC,GAAGF,IAAI;QAC3D,IAAMkC,eAAe,GAAGF,KAAK,CAACG,UAAU;QACxC,IAAI,CAACC,EAAE,EAAEC,EAAE,CAAC,GAAG,IAAI,CAACzD,qBAAqB,CAACoD,KAAK,CAAC;QAChD,IAAIM,EAAE,eAAG1E,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEI,CAAC,+CAAIoE,EAAE;QACvB,IAAIG,EAAE,eAAG3E,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEK,CAAC,+CAAIoE,EAAE;QACvB,IAAIJ,GAAG,IAAI,IAAI,EAAE;UACf,CAACK,EAAE,EAAEC,EAAE,CAAC,GAAG,IAAI,CAAC3D,qBAAqB,CAACqD,GAAG,CAAC;QAC5C;QACA,IAAIF,UAAU,IAAI,IAAI,IAAIA,UAAU,EAAE;UACpC,IAAM,CAACS,IAAI,EAAEC,IAAI,CAAC,GAAG,CAACL,EAAE,EAAEC,EAAE,CAAC;UAC7B,CAACD,EAAE,EAAEC,EAAE,CAAC,GAAG,CAACC,EAAE,EAAEC,EAAE,CAAC;UACnB,CAACD,EAAE,EAAEC,EAAE,CAAC,GAAG,CAACC,IAAI,EAAEC,IAAI,CAAC;QACzB;QACA,IAAMC,SAAS,GAAG3G,UAAU,CAC1B,aAAa,EACb;UAAE0F;QAAS,CAAC,EACZ;UAAE,oBAAoB,EAAE9B,IAAI,KAAK;QAAe,CAAC,EACjD;UAAE,cAAc,EAAEA,IAAI,KAAK;QAAU,CAAC,EACtC;UAAEgD,WAAW,EAAE3C,IAAI,CAACiC,GAAG,IAAI;QAAK,CAAC,EACjC;UAAE,kBAAkB,EAAEb,WAAW,CAACwB,GAAG,CAAC3C,EAAE;QAAE,CAAC,EAC3C;UAAE,eAAe,EAAE9B,IAAI,KAAK;QAAS,CAAC,CACvC;QACD,OAAO;UACLiE,EAAE;UACFC,EAAE;UACFC,EAAE;UACFC,EAAE;UACFtC,EAAE;UACFyC,SAAS;UACTxC,QAAQ;UACRgC;QACF,CAAC;MACH,CAAC,CAAC,OAAO1D,KAAK,EAAE;QACd9B,GAAG,CAACmG,IAAI,CAAC,8BAA8B,EAAE7C,IAAI,EAAExB,KAAK,CAAC;QACrD,OAAO,IAAI;MACb;IACF,CAAC,CAAC,CACDsE,MAAM,CAACC,IAAI,IAAIA,IAAI,IAAI,IAAI,CAAkB;IAEhD,oBACE;MACE,SAAS,EAAEhH,UAAU,CAAC,gBAAgB,EAAE;QACtC,eAAe,EAAEoC,IAAI,KAAK;MAC5B,CAAC;IAAE,GAEF2D,YAAY,CAAC/B,GAAG,CACf;MAAA,IAAC;QAAEqC,EAAE;QAAEC,EAAE;QAAEC,EAAE;QAAEC,EAAE;QAAEtC,EAAE;QAAEyC,SAAS;QAAExC,QAAQ;QAAEgC;MAAgB,CAAC;MAAA,oBAC3D,oBAAC,UAAU;QACT,SAAS,EAAEQ,SAAU;QACrB,EAAE,EAAEzC,EAAG;QACP,EAAE,EAAEmC,EAAG;QACP,EAAE,EAAEC,EAAG;QACP,EAAE,EAAEC,EAAG;QACP,EAAE,EAAEC,EAAG;QACP,GAAG,EAAEtC,EAAG;QACR,OAAO,EAAE0B,cAAe;QACxB,QAAQ,EAAEN,aAAc;QACxB,UAAU,EAAED,WAAW,CAACwB,GAAG,CAAC3C,EAAE,CAAE;QAChC,QAAQ,EAAEC,QAAS;QACnB,eAAe,EAAEgC,eAAgB;QACjC,iBAAiB,EAAE,IAAI,CAAC1E;MAAsB,EAC9C;IAAA,CACH,CACF,eACD;MACE,SAAS,EAAEzB,UAAU,CAAC,qBAAqB,EAAE;QAC3CiH,QAAQ,EAAE9E;MACZ,CAAC,CAAE;MACH,GAAG,EAAE,IAAI,CAACT,SAAU;MACpB,KAAK,EAAE;QAAEwD,MAAM,EAAEnD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG,CAAC;QAAE+C,KAAK,EAAElD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEE;MAAE;IAAE,gBAE/C,oBAAC,MAAM;MACL,SAAS;MACT,IAAI,EAAC,QAAQ;MACb,SAAS,EAAC,iBAAiB;MAC3B,IAAI,EAAE1B,SAAU;MAChB,OAAO,EAAE,MAAM;QACb;MAAA,CACA;MACF,WAAW,EAAE,IAAI,CAACa;IAAgB,GAEjC,CAACe,UAAU,iBAAI,oBAAC,OAAO,6BAA6B,CAC9C,eACT;MAAK,SAAS,EAAC;IAAY,GAAEwD,WAAW,CAAO,eAC/C;MAAK,SAAS,EAAC;IAAc,gBAC3B,oBAAC,MAAM;MAAC,IAAI,EAAC,WAAW;MAAC,OAAO,EAAEE;IAAkB,eAE3C,eACT,oBAAC,MAAM;MAAC,IAAI,EAAC,SAAS;MAAC,OAAO,EAAEC;IAAO,UAE9B,CACL,CACF,eACN,oBAAC,cAAc;MACb,OAAO,EAAE,CACP;QACEoB,MAAM,EAAE,IAAI,CAAC1F,mBAAmB;QAChC2F,QAAQ,EAAEhH,gBAAgB,CAACiH,YAAY;QACvCC,QAAQ,EAAE;MACZ,CAAC;IACD,EACF,CACE;EAEV;AACF;AAAC,gBAlTYxG,oBAAoB,kBAIT;EACpB6E,QAAQ,EAAE;AACZ,CAAC;AA8SH,eAAe7E,oBAAoB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "0.23.1-beta.8+40bedaa",
3
+ "version": "0.24.1-beta.0+dcde307",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,23 +22,23 @@
22
22
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
23
23
  },
24
24
  "dependencies": {
25
- "@deephaven/chart": "^0.23.1-beta.8+40bedaa",
26
- "@deephaven/components": "^0.23.1-beta.8+40bedaa",
27
- "@deephaven/console": "^0.23.1-beta.8+40bedaa",
28
- "@deephaven/dashboard": "^0.23.1-beta.8+40bedaa",
29
- "@deephaven/file-explorer": "^0.23.1-beta.8+40bedaa",
30
- "@deephaven/filters": "^0.23.1-beta.8+40bedaa",
31
- "@deephaven/golden-layout": "^0.23.1-beta.8+40bedaa",
32
- "@deephaven/grid": "^0.23.1-beta.8+40bedaa",
33
- "@deephaven/icons": "^0.23.1-beta.8+40bedaa",
34
- "@deephaven/iris-grid": "^0.23.1-beta.8+40bedaa",
35
- "@deephaven/jsapi-shim": "^0.23.1-beta.8+40bedaa",
36
- "@deephaven/jsapi-utils": "^0.23.1-beta.8+40bedaa",
37
- "@deephaven/log": "^0.23.1-beta.8+40bedaa",
38
- "@deephaven/react-hooks": "^0.23.1-beta.8+40bedaa",
39
- "@deephaven/redux": "^0.23.1-beta.8+40bedaa",
40
- "@deephaven/storage": "^0.23.1-beta.8+40bedaa",
41
- "@deephaven/utils": "^0.23.1-beta.8+40bedaa",
25
+ "@deephaven/chart": "^0.24.1-beta.0+dcde307",
26
+ "@deephaven/components": "^0.24.1-beta.0+dcde307",
27
+ "@deephaven/console": "^0.24.1-beta.0+dcde307",
28
+ "@deephaven/dashboard": "^0.24.1-beta.0+dcde307",
29
+ "@deephaven/file-explorer": "^0.24.1-beta.0+dcde307",
30
+ "@deephaven/filters": "^0.24.1-beta.0+dcde307",
31
+ "@deephaven/golden-layout": "^0.24.1-beta.0+dcde307",
32
+ "@deephaven/grid": "^0.24.1-beta.0+dcde307",
33
+ "@deephaven/icons": "^0.24.1-beta.0+dcde307",
34
+ "@deephaven/iris-grid": "^0.24.1-beta.0+dcde307",
35
+ "@deephaven/jsapi-shim": "^0.24.1-beta.0+dcde307",
36
+ "@deephaven/jsapi-utils": "^0.24.1-beta.0+dcde307",
37
+ "@deephaven/log": "^0.24.1-beta.0+dcde307",
38
+ "@deephaven/react-hooks": "^0.24.1-beta.0+dcde307",
39
+ "@deephaven/redux": "^0.24.1-beta.0+dcde307",
40
+ "@deephaven/storage": "^0.24.1-beta.0+dcde307",
41
+ "@deephaven/utils": "^0.24.1-beta.0+dcde307",
42
42
  "@fortawesome/react-fontawesome": "^0.2.0",
43
43
  "classnames": "^2.3.1",
44
44
  "deep-equal": "^2.0.5",
@@ -61,8 +61,8 @@
61
61
  "react-redux": "^7.2.4"
62
62
  },
63
63
  "devDependencies": {
64
- "@deephaven/mocks": "^0.23.1-beta.8+40bedaa",
65
- "@deephaven/tsconfig": "^0.23.1-beta.8+40bedaa"
64
+ "@deephaven/mocks": "^0.24.1-beta.0+dcde307",
65
+ "@deephaven/tsconfig": "^0.24.1-beta.0+dcde307"
66
66
  },
67
67
  "files": [
68
68
  "dist"
@@ -70,5 +70,5 @@
70
70
  "publishConfig": {
71
71
  "access": "public"
72
72
  },
73
- "gitHead": "40bedaa3d81ab47a2b626466395194595c531bbc"
73
+ "gitHead": "dcde3072e63dd6580b8018643b8a78366ecace08"
74
74
  }