@deephaven/dashboard-core-plugins 0.38.0 → 0.38.1-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/ChartBuilderPlugin.d.ts.map +1 -1
  2. package/dist/ChartBuilderPlugin.js +6 -2
  3. package/dist/ChartBuilderPlugin.js.map +1 -1
  4. package/dist/ChartPlugin.d.ts.map +1 -1
  5. package/dist/ChartPlugin.js +6 -2
  6. package/dist/ChartPlugin.js.map +1 -1
  7. package/dist/GridPlugin.d.ts.map +1 -1
  8. package/dist/GridPlugin.js +9 -5
  9. package/dist/GridPlugin.js.map +1 -1
  10. package/dist/PandasPlugin.d.ts.map +1 -1
  11. package/dist/PandasPlugin.js +4 -2
  12. package/dist/PandasPlugin.js.map +1 -1
  13. package/dist/controls/dropdown-filter/DropdownFilter.d.ts +1 -1
  14. package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
  15. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  16. package/dist/controls/input-filter/InputFilter.d.ts +1 -1
  17. package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
  18. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  19. package/dist/linker/Linker.d.ts +3 -1
  20. package/dist/linker/Linker.d.ts.map +1 -1
  21. package/dist/linker/Linker.js +4 -2
  22. package/dist/linker/Linker.js.map +1 -1
  23. package/dist/panels/ChartPanel.d.ts +4 -2
  24. package/dist/panels/ChartPanel.d.ts.map +1 -1
  25. package/dist/panels/ChartPanel.js +32 -7
  26. package/dist/panels/ChartPanel.js.map +1 -1
  27. package/dist/panels/CommandHistoryPanel.d.ts +1 -1
  28. package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
  29. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  30. package/dist/panels/ConsolePanel.d.ts +1 -1
  31. package/dist/panels/ConsolePanel.d.ts.map +1 -1
  32. package/dist/panels/ConsolePanel.js.map +1 -1
  33. package/dist/panels/DropdownFilterPanel.d.ts +4 -3
  34. package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
  35. package/dist/panels/DropdownFilterPanel.js +25 -12
  36. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  37. package/dist/panels/FileExplorerPanel.d.ts +1 -1
  38. package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
  39. package/dist/panels/FileExplorerPanel.js.map +1 -1
  40. package/dist/panels/FilterSetManagerPanel.d.ts +1 -1
  41. package/dist/panels/FilterSetManagerPanel.d.ts.map +1 -1
  42. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  43. package/dist/panels/IrisGridPanel.d.ts +5 -2
  44. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  45. package/dist/panels/IrisGridPanel.js +49 -30
  46. package/dist/panels/IrisGridPanel.js.map +1 -1
  47. package/dist/panels/LogPanel.d.ts +1 -1
  48. package/dist/panels/LogPanel.d.ts.map +1 -1
  49. package/dist/panels/LogPanel.js.map +1 -1
  50. package/dist/panels/NotebookPanel.d.ts +1 -1
  51. package/dist/panels/NotebookPanel.d.ts.map +1 -1
  52. package/dist/panels/NotebookPanel.js.map +1 -1
  53. package/dist/panels/Panel.d.ts +1 -1
  54. package/dist/panels/Panel.d.ts.map +1 -1
  55. package/dist/panels/Panel.js.map +1 -1
  56. package/dist/redux/actions.d.ts +1 -1
  57. package/dist/redux/actions.d.ts.map +1 -1
  58. package/dist/redux/actions.js.map +1 -1
  59. package/dist/redux/selectors.d.ts +1 -1
  60. package/dist/redux/selectors.d.ts.map +1 -1
  61. package/dist/redux/selectors.js.map +1 -1
  62. package/package.json +23 -21
@@ -3,9 +3,11 @@ import { ConnectedProps } from 'react-redux';
3
3
  import { PanelComponent, PanelManager } from '@deephaven/dashboard';
4
4
  import type GoldenLayout from '@deephaven/golden-layout';
5
5
  import { RowDataMap } from '@deephaven/jsapi-utils';
6
+ import type { dh as DhType } from '@deephaven/jsapi-types';
6
7
  import { Link, LinkColumn, LinkFilterMap, LinkType } from './LinkerUtils';
7
8
  interface StateProps {
8
9
  activeTool: string;
10
+ dh: DhType;
9
11
  isolatedLinkerPanelId?: string;
10
12
  links: Link[];
11
13
  timeZone: string;
@@ -94,6 +96,6 @@ declare const ConnectedLinker: import("react-redux").ConnectedComponent<typeof L
94
96
  deleteDashboardLinks: (id: string, linkIds: string[]) => unknown;
95
97
  setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | string[] | undefined) => unknown;
96
98
  setDashboardColumnSelectionValidator: (id: string, columnSelectionValidator: import("./ColumnSelectionValidator").ColumnSelectionValidator | undefined) => unknown;
97
- }, "links" | "activeTool" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId" | "timeZone" | "isolatedLinkerPanelId" | "setDashboardLinks" | "addDashboardLinks" | "deleteDashboardLinks" | "setDashboardColumnSelectionValidator"> & OwnProps>;
99
+ }, "dh" | "links" | "activeTool" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId" | "timeZone" | "isolatedLinkerPanelId" | "setDashboardLinks" | "addDashboardLinks" | "deleteDashboardLinks" | "setDashboardColumnSelectionValidator"> & OwnProps>;
98
100
  export default ConnectedLinker;
99
101
  //# sourceMappingURL=Linker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Linker.d.ts","sourceRoot":"","sources":["../../src/linker/Linker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Linker.d.ts","sourceRoot":"","sources":["../../src/linker/Linker.tsx"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ import { LayoutUtils, PanelEvent } from '@deephaven/dashboard';
13
13
  import { DateTimeColumnFormatter, DateUtils, TableUtils } from '@deephaven/jsapi-utils';
14
14
  import Log from '@deephaven/log';
15
15
  import { Type as FilterType } from '@deephaven/filters';
16
- import { getActiveTool, getTimeZone, setActiveTool as setActiveToolAction } from '@deephaven/redux';
16
+ import { getActiveTool, getApi, getTimeZone, setActiveTool as setActiveToolAction } from '@deephaven/redux';
17
17
  import { getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, setDashboardLinks as setDashboardLinksAction, addDashboardLinks as addDashboardLinksAction, deleteDashboardLinks as deleteDashboardLinksAction, setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction, setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction } from "../redux/index.js";
18
18
  import ToolType from "./ToolType.js";
19
19
  import { ChartEvent, IrisGridEvent, InputFilterEvent } from "../events/index.js";
@@ -22,6 +22,7 @@ import LinkerUtils, { isLinkablePanel, isLinkableColumn } from "./LinkerUtils.js
22
22
  var log = Log.module('Linker');
23
23
  var mapState = (state, ownProps) => ({
24
24
  activeTool: getActiveTool(state),
25
+ dh: getApi(state),
25
26
  isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(state, ownProps.localDashboardId),
26
27
  links: getLinksForDashboard(state, ownProps.localDashboardId),
27
28
  timeZone: getTimeZone(state)
@@ -458,6 +459,7 @@ export class Linker extends Component {
458
459
  handleUpdateValues(panel, dataMap) {
459
460
  var panelId = LayoutUtils.getIdFromPanel(panel);
460
461
  var {
462
+ dh,
461
463
  links,
462
464
  timeZone
463
465
  } = this.props;
@@ -494,7 +496,7 @@ export class Linker extends Component {
494
496
  value = undefined;
495
497
  }
496
498
  if (columnType != null && TableUtils.isDateType(columnType)) {
497
- var dateFilterFormatter = new DateTimeColumnFormatter({
499
+ var dateFilterFormatter = new DateTimeColumnFormatter(dh, {
498
500
  timeZone,
499
501
  showTimeZone: false,
500
502
  showTSeparator: true,
@@ -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","isLinkableColumn","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","debug2","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","existingLinkEnd","existingLinkStart","panelLinkStart","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","description","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks","ConnectedLinker"],"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 isLinkableColumn,\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 if (!isLinkableColumn(column)) {\n log.debug2('Column is not filterable');\n return;\n }\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 'chartLink': {\n const existingLinkEnd = isReversed === true ? start : end;\n const existingLinkStart = isReversed === true ? end : start;\n log.debug('creating chartlink', { existingLinkEnd, start, end });\n // Don't allow linking more than one column per source to each chart column\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd, start: panelLinkStart }) =>\n panelLinkStart?.panelId === existingLinkStart.panelId &&\n panelLinkEnd?.panelId === existingLinkEnd.panelId &&\n panelLinkEnd?.columnName === existingLinkEnd.columnName &&\n panelLinkEnd?.columnType === existingLinkEnd.columnType\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(type: LinkType = 'invalid'): void {\n this.setState(({ linkInProgress }) => {\n if (linkInProgress !== undefined) {\n return {\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n };\n }\n return null;\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 if (tableColumn == null) {\n if (linkInProgress?.start != null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType();\n }\n return false;\n }\n\n // TODO: Use preview/original type property when core/#3358 is completed\n if (!isLinkableColumn(tableColumn)) {\n log.debug2('Column is not filterable', tableColumn.description);\n if (linkInProgress?.start != null) {\n this.updateLinkInProgressType('invalid');\n }\n return false;\n }\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\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(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\nconst ConnectedLinker = connector(Linker);\n\nexport default ConnectedLinker;\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","getApi","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","isLinkableColumn","log","module","mapState","state","ownProps","activeTool","dh","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","debug2","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","existingLinkEnd","existingLinkStart","panelLinkStart","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","description","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks","ConnectedLinker"],"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 type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { Type as FilterType } from '@deephaven/filters';\nimport {\n getActiveTool,\n getApi,\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 isLinkableColumn,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n dh: DhType;\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 dh: getApi(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 if (!isLinkableColumn(column)) {\n log.debug2('Column is not filterable');\n return;\n }\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 'chartLink': {\n const existingLinkEnd = isReversed === true ? start : end;\n const existingLinkStart = isReversed === true ? end : start;\n log.debug('creating chartlink', { existingLinkEnd, start, end });\n // Don't allow linking more than one column per source to each chart column\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd, start: panelLinkStart }) =>\n panelLinkStart?.panelId === existingLinkStart.panelId &&\n panelLinkEnd?.panelId === existingLinkEnd.panelId &&\n panelLinkEnd?.columnName === existingLinkEnd.columnName &&\n panelLinkEnd?.columnType === existingLinkEnd.columnType\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 { dh, 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(dh, {\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(type: LinkType = 'invalid'): void {\n this.setState(({ linkInProgress }) => {\n if (linkInProgress !== undefined) {\n return {\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n };\n }\n return null;\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 if (tableColumn == null) {\n if (linkInProgress?.start != null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType();\n }\n return false;\n }\n\n // TODO: Use preview/original type property when core/#3358 is completed\n if (!isLinkableColumn(tableColumn)) {\n log.debug2('Column is not filterable', tableColumn.description);\n if (linkInProgress?.start != null) {\n this.updateLinkInProgressType('invalid');\n }\n return false;\n }\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\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(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\nconst ConnectedLinker = connector(Linker);\n\nexport default ConnectedLinker;\n"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { Component, ReactElement, RefObject } from 'react';
2
2
  import { Chart, ChartModel, ChartModelSettings, FilterMap } from '@deephaven/chart';
3
3
  import { PanelComponent } from '@deephaven/dashboard';
4
4
  import { InputFilter, ColumnName, DehydratedSort, DehydratedAdvancedFilter, DehydratedQuickFilter, LegacyDehydratedSort } from '@deephaven/iris-grid';
5
- import { SeriesPlotStyle, TableTemplate } from '@deephaven/jsapi-shim';
5
+ import type { dh as DhType, SeriesPlotStyle, TableTemplate } from '@deephaven/jsapi-types';
6
6
  import { WorkspaceSettings } from '@deephaven/redux';
7
7
  import { Pending } from '@deephaven/utils';
8
8
  import type { Container, EventEmitter } from '@deephaven/golden-layout';
@@ -58,6 +58,7 @@ export interface GLChartPanelState {
58
58
  figure?: string;
59
59
  }
60
60
  export interface ChartPanelProps {
61
+ makeApi: () => Promise<DhType>;
61
62
  glContainer: Container;
62
63
  glEventHub: EventEmitter;
63
64
  metadata: ChartPanelMetadata;
@@ -76,6 +77,7 @@ export interface ChartPanelProps {
76
77
  settings: Partial<WorkspaceSettings>;
77
78
  }
78
79
  interface ChartPanelState {
80
+ dh: DhType | undefined;
79
81
  settings: Partial<ChartModelSettings>;
80
82
  error?: unknown;
81
83
  isActive: boolean;
@@ -177,7 +179,7 @@ export declare class ChartPanel extends Component<ChartPanelProps, ChartPanelSta
177
179
  updateChart(): void;
178
180
  render(): ReactElement;
179
181
  }
180
- declare const ConnectedChartPanel: import("react-redux").ConnectedComponent<typeof ChartPanel, import("react-redux").Omit<Pick<ChartPanelProps, "glContainer" | "metadata" | "glEventHub" | "localDashboardId" | "inputFilters" | "links" | "makeModel" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId"> & Partial<Pick<ChartPanelProps, "source" | "panelState" | "columnSelectionValidator" | "isLinkerActive" | "settings" | "sourcePanel">> & Partial<Pick<{
182
+ declare const ConnectedChartPanel: import("react-redux").ConnectedComponent<typeof ChartPanel, import("react-redux").Omit<Pick<ChartPanelProps, "glContainer" | "metadata" | "glEventHub" | "localDashboardId" | "inputFilters" | "links" | "makeApi" | "makeModel" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId"> & Partial<Pick<ChartPanelProps, "source" | "panelState" | "columnSelectionValidator" | "isLinkerActive" | "settings" | "sourcePanel">> & Partial<Pick<{
181
183
  columnSelectionValidator: null;
182
184
  isLinkerActive: boolean;
183
185
  source: null;
@@ -1 +1 @@
1
- {"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMlE,OAAO,EACL,KAAK,EACL,UAAU,EACV,kBAAkB,EAElB,SAAS,EAEV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,WAAW,EACX,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAW,EAET,eAAe,EACf,aAAa,EACd,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAKL,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,OAAO,EAGR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAYxE,OAA2B,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAmC,EACjC,cAAc,EACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,mBAAmB,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAK9E,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEtD,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE1E,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QACR,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,EAAE,MAAM,eAAe,CAAC;KAC7B,CAAC;IACF,aAAa,EAAE,uBAAuB,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,wBAAwB,GACxB,uBAAuB,CAAC;AAE5B,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExC,MAAM,WAAW,uBAAuB;IACtC,YAAY,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChD,eAAe,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACtD,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC,cAAc,GAAG,oBAAoB,CAAC,EAAE,CAAC;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AACD,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtC,aAAa,EAAE,uBAAuB,CAAC;IACvC,aAAa,CAAC,EAAE;QACd,eAAe,EAAE,OAAO,CAAC;QACzB,YAAY,EAAE,OAAO,CAAC;QACtB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,kBAAkB,CAAC,EAAE;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IAEzB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,sFAAsF;IACtF,SAAS,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,iCAAiC,EAAE,CACjC,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,SAAS,KACnB,IAAI,CAAC;IAEV,UAAU,EAAE,iBAAiB,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACtC;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAIlB,SAAS,EAAE,SAAS,CAAC;IAGrB,cAAc,EAAE,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IAGrB,UAAU,EAAE,iBAAiB,CAAC;CAC/B;AAgBD,qBAAa,UAAW,SAAQ,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IACzE,MAAM,CAAC,YAAY;;;;;;;MAOjB;IAEF,MAAM,CAAC,WAAW,SAAgB;IAElC,MAAM,CAAC,SAAS,SAAgB;gBAEpB,KAAK,EAAE,eAAe;IA8DlC,iBAAiB,IAAI,IAAI;IAOzB,kBAAkB,CAChB,SAAS,EAAE,eAAe,EAC1B,SAAS,EAAE,eAAe,GACzB,IAAI;IAsDP,oBAAoB,IAAI,IAAI;IAS5B,cAAc,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAE1C,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAExB,OAAO,EAAE,OAAO,CAAC;IAEjB,SAAS,IAAI,IAAI;IAWjB,kBAAkB,qBAEI,OAAO,iDAGxB,IAAI,MAAM,EAAE;QAAE,MAAM,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAU9C;IAEF,mBAAmB,qBAEG,OAAO,iIAsB3B;IAEF,uBAAuB,uCACgB,WAAW,EAAE,8BAYlD;IAEF,kBAAkB,gCAAyC,IAAI,EAAE;cACf,MAAM;cAAQ,MAAM;OA0BnE;IAEH,kBAAkB,sFAIa,wBAAwB;;;;;QAUrD;IAEF,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAiBlD,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAiBjD,oBAAoB,IAAI,IAAI;IAO5B,QAAQ,IAAI,OAAO;IAMnB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAU9C,sBAAsB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,cAAc,GAAG,IAAI;IAS5D,sBAAsB,IAAI,IAAI;IAS9B,gBAAgB,IAAI,IAAI;IAOxB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI;IAM7C,gBAAgB,IAAI,IAAI;IAUxB,eAAe,IAAI,IAAI;IAMvB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IA4B1C,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IASrC,wBAAwB,IAAI,IAAI;IAIhC,wBAAwB,IAAI,IAAI;IAIhC,sBAAsB,IAAI,IAAI;IAI9B,qBAAqB,IAAI,IAAI;IAgC7B,gBAAgB,IAAI,IAAI;IAgCxB,WAAW,IAAI,IAAI;IAMnB,YAAY,IAAI,IAAI;IAIpB,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IAWtD,UAAU,IAAI,IAAI;IAIlB,UAAU,IAAI,IAAI;IAIlB,aAAa,IAAI,IAAI;IAIrB,cAAc,IAAI,IAAI;IAKtB,YAAY,IAAI,IAAI;IAIpB,qBAAqB,IAAI,IAAI;IAU7B;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAe1C,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IASlC,gBAAgB,IAAI,IAAI;IAaxB,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAmBvE;;;OAGG;IACH,YAAY,CAAC,cAAc,EAAE,aAAa,GAAG,IAAI;IAgCjD,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAuC9C,yBAAyB,CACvB,YAAY,EAAE,WAAW,EAAE,EAC3B,gBAAgB,EAAE,WAAW,EAAE,GAC9B,IAAI;IAqBP,kBAAkB,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,WAAW,UAAQ,GAAG,IAAI;IAiC1E,kBAAkB,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,WAAW,UAAQ,GAAG,IAAI;IA+B1E,mBAAmB,IAAI,IAAI;IAU3B,aAAa,IAAI,IAAI;IAoCrB;;OAEG;IACH,eAAe,IAAI,IAAI;IA0BvB,WAAW,IAAI,IAAI;IAMnB,MAAM,IAAI,YAAY;CAqIvB;AAqCD,QAAA,MAAM,mBAAmB;;;;;;;;sBAjCO,MAAM;cAAY;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE;EAyC9D,CAAC;AAEd,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"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"}
@@ -12,7 +12,6 @@ import debounce from 'lodash.debounce';
12
12
  import { Chart, ChartUtils, isFigureChartModel } from '@deephaven/chart';
13
13
  import { getOpenedPanelMapForDashboard, LayoutUtils } from '@deephaven/dashboard';
14
14
  import { IrisGridUtils } from '@deephaven/iris-grid';
15
- import dh from '@deephaven/jsapi-shim';
16
15
  import { ThemeExport } from '@deephaven/components';
17
16
  import Log from '@deephaven/log';
18
17
  import { getActiveTool, getSettings, setActiveTool as setActiveToolAction } from '@deephaven/redux';
@@ -139,6 +138,7 @@ export class ChartPanel extends Component {
139
138
  settings = {}
140
139
  } = panelState !== null && panelState !== void 0 ? panelState : {};
141
140
  this.state = {
141
+ dh: undefined,
142
142
  settings,
143
143
  error: undefined,
144
144
  isActive: false,
@@ -218,10 +218,13 @@ export class ChartPanel extends Component {
218
218
  }
219
219
  componentWillUnmount() {
220
220
  this.pending.cancel();
221
+ var {
222
+ dh
223
+ } = this.state;
221
224
  var {
222
225
  source
223
226
  } = this.props;
224
- if (source) {
227
+ if (dh != null && source) {
225
228
  this.stopListeningToSource(source);
226
229
  }
227
230
  }
@@ -232,20 +235,39 @@ export class ChartPanel extends Component {
232
235
  error: undefined
233
236
  });
234
237
  var {
238
+ makeApi,
235
239
  makeModel
236
240
  } = this.props;
237
- this.pending.add(makeModel(), resolved => {
241
+ this.pending.add(makeApi()).then(dh => {
242
+ this.setState({
243
+ dh
244
+ });
245
+ }).then(() => this.pending.add(makeModel(), resolved => {
238
246
  resolved.close();
239
- }).then(this.handleLoadSuccess, this.handleLoadError);
247
+ })).then(this.handleLoadSuccess, this.handleLoadError);
240
248
  }
241
249
  startListeningToSource(table) {
242
250
  log.debug('startListeningToSource', table);
251
+ var {
252
+ dh
253
+ } = this.state;
254
+ if (dh == null) {
255
+ log.error('API is not defined');
256
+ return;
257
+ }
243
258
  table.addEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleSourceColumnChange);
244
259
  table.addEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);
245
260
  table.addEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);
246
261
  }
247
262
  stopListeningToSource(table) {
248
263
  log.debug('stopListeningToSource', table);
264
+ var {
265
+ dh
266
+ } = this.state;
267
+ if (dh == null) {
268
+ log.error('API is not defined');
269
+ return;
270
+ }
249
271
  table.removeEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleSourceColumnChange);
250
272
  table.removeEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);
251
273
  table.removeEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);
@@ -386,10 +408,11 @@ export class ChartPanel extends Component {
386
408
  source
387
409
  } = this.props;
388
410
  var {
411
+ dh,
389
412
  isLinked,
390
413
  model
391
414
  } = this.state;
392
- if (!isLinked || !model || !source) {
415
+ if (!dh || !isLinked || !model || !source) {
393
416
  log.debug2('updateModelFromSource ignoring', isLinked, model, source);
394
417
  return;
395
418
  }
@@ -400,7 +423,7 @@ export class ChartPanel extends Component {
400
423
  var {
401
424
  settings
402
425
  } = metadata;
403
- this.pending.add(dh.plot.Figure.create(ChartUtils.makeFigureSettings(settings, source))).then(figure => {
426
+ this.pending.add(dh.plot.Figure.create(new ChartUtils(dh).makeFigureSettings(settings, source))).then(figure => {
404
427
  if (isFigureChartModel(model)) {
405
428
  model.setFigure(figure);
406
429
  }
@@ -824,6 +847,7 @@ export class ChartPanel extends Component {
824
847
  } = this.props;
825
848
  var {
826
849
  columnMap,
850
+ dh,
827
851
  filterMap,
828
852
  error,
829
853
  model,
@@ -869,7 +893,8 @@ export class ChartPanel extends Component {
869
893
  className: "chart-panel-container h-100 w-100"
870
894
  }, /*#__PURE__*/React.createElement("div", {
871
895
  className: "chart-container h-100 w-100"
872
- }, isLoaded && model && /*#__PURE__*/React.createElement(Chart, {
896
+ }, isLoaded && model && dh && /*#__PURE__*/React.createElement(Chart, {
897
+ dh: dh,
873
898
  isActive: isActive,
874
899
  model: model,
875
900
  settings: settings,