@deephaven/dashboard-core-plugins 0.38.1-beta.7 → 0.38.1-beta.9

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.
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"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"}
@@ -847,6 +847,7 @@ export class ChartPanel extends Component {
847
847
  } = this.props;
848
848
  var {
849
849
  columnMap,
850
+ dh,
850
851
  filterMap,
851
852
  error,
852
853
  model,
@@ -892,7 +893,8 @@ export class ChartPanel extends Component {
892
893
  className: "chart-panel-container h-100 w-100"
893
894
  }, /*#__PURE__*/React.createElement("div", {
894
895
  className: "chart-container h-100 w-100"
895
- }, isLoaded && model && /*#__PURE__*/React.createElement(Chart, {
896
+ }, isLoaded && model && dh && /*#__PURE__*/React.createElement(Chart, {
897
+ dh: dh,
896
898
  isActive: isActive,
897
899
  model: model,
898
900
  settings: settings,
@@ -1 +1 @@
1
- {"version":3,"file":"ChartPanel.js","names":["React","Component","classNames","memoize","connect","CSSTransition","debounce","Chart","ChartUtils","isFigureChartModel","getOpenedPanelMapForDashboard","LayoutUtils","IrisGridUtils","ThemeExport","Log","getActiveTool","getSettings","setActiveTool","setActiveToolAction","assertNotNull","Pending","PromiseUtils","TextUtils","WidgetPanel","ToolType","InputFilterEvent","ChartEvent","getColumnSelectionValidatorForDashboard","getInputFiltersForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","ChartFilterOverlay","ChartColumnSelectorOverlay","isChartPanelTableMetadata","log","module","UPDATE_MODEL_DEBOUNCE","hasInputFilter","panel","inputFilters","hasPanelState","panelState","ChartPanel","constructor","props","isFilterRequired","columnMap","filterMap","Map","waitingInputMap","forEach","filter","name","delete","linkedColumnMap","inputFilterMap","waitingFilterMap","value","column","i","length","inputFilter","type","get","set","links","panelId","getIdFromPanel","link","columnName","start","has","end","columnSelectionValidator","Array","from","values","map","isValid","isActive","handleColumnSelected","bind","handleColumnMouseEnter","handleColumnMouseLeave","handleDisconnect","handleReconnect","handleFilterAdd","handleHide","handleError","handleLoadError","handleLoadSuccess","handleResize","handleSettingsChanged","handleOpenLinker","handleShow","handleSourceColumnChange","handleSourceFilterChange","handleSourceSortChange","handleTabBlur","handleTabFocus","handleUpdate","updateModelFromSource","handleClearAllFilters","panelContainer","createRef","chart","pending","metadata","filterValueMap","settings","state","dh","undefined","error","isDisconnected","isLoading","isLoaded","isLinked","model","componentDidMount","isHidden","setState","initModel","componentDidUpdate","prevProps","prevState","source","pruneFilterMaps","updateChangedInputFilters","updateFilters","updatePanelState","updateSettings","startListeningToSource","stopListeningToSource","componentWillUnmount","cancel","makeApi","makeModel","add","then","resolved","close","table","debug","addEventListener","Table","EVENT_CUSTOMCOLUMNSCHANGED","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","removeEventListener","loadModelIfNecessary","glContainer","glEventHub","emit","COLUMN_SELECTED","Error","columns","openInputFilter","localDashboardId","LINKER","sendColumnChange","updateColumnFilters","prevModel","updateInputFilters","size","isCanceled","debug2","plot","Figure","create","makeFigureSettings","figure","setFigure","catch","sourcePanel","tableSettings","sourcePanelState","extractTableSettings","updateChart","update","prevSettings","setActive","OPEN_INPUT","title","isValueShown","createNewStack","focusElement","COLUMNS_CHANGED","getFilterColumnMap","getCoordinateForColumn","className","makeButtonClassName","current","element","querySelector","rect","getBoundingClientRect","width","height","x","left","y","bottom","setFilterMap","filterMapParam","updatedFilterMap","columnType","filterList","unsetFilterValue","getInputFilterColumnMap","filterValue","inputFilterValue","prevInputFilters","deletedInputFilters","prevInputFilter","find","deleteInputFilters","changedInputFilters","includes","forceUpdate","needsUpdate","linkValue","getWaitingInputMap","setFilter","defaultTitle","getDefaultTitle","filterTitle","join","entries","setTitle","newState","updateDimensions","render","isLinkerActive","getLinkedColumnMap","getWaitingFilterMap","errorMessage","isWaitingForFilter","isSelectingColumn","transitionMs","getSelectorColumns","mapStateToProps","ownProps","sourcePanelId","panelTableMap","openedPanelMap","activeTool","isolatedLinkerPanelId","ConnectedChartPanel","forwardRef"],"sources":["../../src/panels/ChartPanel.tsx"],"sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { CSSTransition } from 'react-transition-group';\nimport debounce from 'lodash.debounce';\nimport {\n Chart,\n ChartModel,\n ChartModelSettings,\n ChartUtils,\n FilterMap,\n isFigureChartModel,\n} from '@deephaven/chart';\nimport {\n getOpenedPanelMapForDashboard,\n LayoutUtils,\n PanelComponent,\n PanelProps,\n} from '@deephaven/dashboard';\nimport {\n IrisGridUtils,\n InputFilter,\n ColumnName,\n DehydratedSort,\n DehydratedAdvancedFilter,\n DehydratedQuickFilter,\n LegacyDehydratedSort,\n} from '@deephaven/iris-grid';\nimport type {\n dh as DhType,\n FigureDescriptor,\n SeriesPlotStyle,\n TableTemplate,\n} from '@deephaven/jsapi-types';\nimport { ThemeExport } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getSettings,\n RootState,\n setActiveTool as setActiveToolAction,\n WorkspaceSettings,\n} from '@deephaven/redux';\nimport {\n assertNotNull,\n Pending,\n PromiseUtils,\n TextUtils,\n} from '@deephaven/utils';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport WidgetPanel from './WidgetPanel';\nimport ToolType from '../linker/ToolType';\nimport { InputFilterEvent, ChartEvent } from '../events';\nimport {\n getColumnSelectionValidatorForDashboard,\n getInputFiltersForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n} from '../redux';\nimport ChartFilterOverlay, { ColumnMap } from './ChartFilterOverlay';\nimport ChartColumnSelectorOverlay, {\n SelectorColumn,\n} from './ChartColumnSelectorOverlay';\nimport './ChartPanel.scss';\nimport { Link, LinkFilterMap } from '../linker/LinkerUtils';\nimport { PanelState as IrisGridPanelState } from './IrisGridPanel';\nimport { isChartPanelTableMetadata } from './ChartPanelUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst log = Log.module('ChartPanel');\nconst UPDATE_MODEL_DEBOUNCE = 150;\n\nexport type InputFilterMap = Map<string, InputFilter>;\n\nexport type LinkedColumnMap = Map<string, { name: string; type: string }>;\n\nexport type ChartPanelFigureMetadata = {\n figure: string;\n};\n\nexport type ChartPanelTableMetadata = {\n table: string;\n sourcePanelId: string;\n settings: {\n isLinked: boolean;\n title: string;\n xAxis: string;\n series: string[];\n type: keyof SeriesPlotStyle;\n };\n tableSettings: ChartPanelTableSettings;\n};\n\nexport type ChartPanelMetadata =\n | ChartPanelFigureMetadata\n | ChartPanelTableMetadata;\n\ntype Settings = Record<string, unknown>;\n\nexport interface ChartPanelTableSettings {\n quickFilters?: readonly DehydratedQuickFilter[];\n advancedFilters?: readonly DehydratedAdvancedFilter[];\n inputFilters?: readonly InputFilter[];\n sorts?: readonly (DehydratedSort | LegacyDehydratedSort)[];\n partition?: unknown;\n partitionColumn?: string;\n}\nexport interface GLChartPanelState {\n filterValueMap: [string, unknown][];\n settings: Partial<ChartModelSettings>;\n tableSettings: ChartPanelTableSettings;\n irisGridState?: {\n advancedFilters: unknown;\n quickFilters: unknown;\n sorts: unknown;\n };\n irisGridPanelState?: {\n partitionColumn: string;\n partition: unknown;\n };\n table?: string;\n figure?: string;\n}\nexport interface ChartPanelProps {\n makeApi: () => Promise<DhType>;\n glContainer: Container;\n glEventHub: EventEmitter;\n metadata: ChartPanelMetadata;\n /** Function to build the ChartModel used by this ChartPanel. Can return a promise. */\n makeModel: () => Promise<ChartModel>;\n inputFilters: InputFilter[];\n links: Link[];\n localDashboardId: string;\n isLinkerActive: boolean;\n source?: TableTemplate;\n sourcePanel?: PanelComponent;\n columnSelectionValidator?: ColumnSelectionValidator;\n setActiveTool: (tool: string) => void;\n setDashboardIsolatedLinkerPanelId: (\n id: string,\n secondParam: undefined\n ) => void;\n\n panelState: GLChartPanelState;\n settings: Partial<WorkspaceSettings>;\n}\n\ninterface ChartPanelState {\n dh: DhType | undefined;\n settings: Partial<ChartModelSettings>;\n error?: unknown;\n isActive: boolean;\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isLinked: boolean;\n\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: FilterMap;\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: FilterMap;\n model?: ChartModel;\n columnMap: ColumnMap;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: GLChartPanelState;\n}\n\nfunction hasInputFilter(\n panel: PanelProps\n): panel is PanelProps & { inputFilters: InputFilter[] } {\n return (\n (panel as PanelProps & { inputFilters: InputFilter[] }).inputFilters != null\n );\n}\n\nfunction hasPanelState(\n panel: unknown\n): panel is { panelState: IrisGridPanelState } {\n return (panel as { panelState: IrisGridPanelState }).panelState != null;\n}\n\nexport class ChartPanel extends Component<ChartPanelProps, ChartPanelState> {\n static defaultProps = {\n columnSelectionValidator: null,\n isLinkerActive: false,\n source: null,\n sourcePanel: null,\n panelState: null,\n settings: {},\n };\n\n static displayName = 'ChartPanel';\n\n static COMPONENT = 'ChartPanel';\n\n constructor(props: ChartPanelProps) {\n super(props);\n\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleColumnMouseEnter = this.handleColumnMouseEnter.bind(this);\n this.handleColumnMouseLeave = this.handleColumnMouseLeave.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleFilterAdd = this.handleFilterAdd.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSettingsChanged = this.handleSettingsChanged.bind(this);\n this.handleOpenLinker = this.handleOpenLinker.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleSourceColumnChange = this.handleSourceColumnChange.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.updateModelFromSource = debounce(\n this.updateModelFromSource.bind(this),\n UPDATE_MODEL_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n\n this.panelContainer = React.createRef();\n this.chart = React.createRef();\n this.pending = new Pending();\n\n const { metadata, panelState } = props;\n const { filterValueMap = [], settings = {} } = panelState ?? {};\n\n this.state = {\n dh: undefined,\n settings,\n error: undefined,\n isActive: false,\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n isLinked:\n metadata != null &&\n isChartPanelTableMetadata(metadata) &&\n metadata.settings.isLinked,\n\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: new Map(filterValueMap),\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: new Map(filterValueMap),\n model: undefined,\n columnMap: new Map(),\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n }\n\n componentDidMount(): void {\n if (!this.isHidden()) {\n this.setState({ isActive: true });\n this.initModel();\n }\n }\n\n componentDidUpdate(\n prevProps: ChartPanelProps,\n prevState: ChartPanelState\n ): void {\n const { inputFilters, source } = this.props;\n const {\n columnMap,\n model,\n filterMap,\n filterValueMap,\n isLinked,\n settings,\n } = this.state;\n\n if (!model) {\n return;\n }\n\n if (columnMap !== prevState.columnMap) {\n this.pruneFilterMaps();\n }\n\n if (inputFilters !== prevProps.inputFilters) {\n this.updateChangedInputFilters(inputFilters, prevProps.inputFilters);\n }\n\n if (filterMap !== prevState.filterMap) {\n this.updateFilters();\n } else if (filterValueMap !== prevState.filterValueMap) {\n this.updatePanelState();\n }\n\n if (settings !== prevState.settings && isFigureChartModel(model)) {\n model.updateSettings(settings);\n this.updatePanelState();\n }\n\n if (isLinked !== prevState.isLinked) {\n if (source) {\n if (isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n } else {\n this.stopListeningToSource(source);\n }\n }\n } else if (isLinked && source !== prevProps.source) {\n if (prevProps.source) {\n this.stopListeningToSource(prevProps.source);\n }\n if (source) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n\n const { dh } = this.state;\n const { source } = this.props;\n if (dh != null && source) {\n this.stopListeningToSource(source);\n }\n }\n\n panelContainer: RefObject<HTMLDivElement>;\n\n chart: RefObject<Chart>;\n\n pending: Pending;\n\n initModel(): void {\n this.setState({ isLoading: true, isLoaded: false, error: undefined });\n\n const { makeApi, makeModel } = this.props;\n this.pending\n .add(makeApi())\n .then(dh => {\n this.setState({ dh });\n })\n .then(() =>\n this.pending.add(makeModel(), resolved => {\n resolved.close();\n })\n )\n .then(this.handleLoadSuccess, this.handleLoadError);\n }\n\n getWaitingInputMap = memoize(\n (\n isFilterRequired: boolean,\n columnMap: ColumnMap,\n filterMap: FilterMap\n ): Map<string, { name: string; type: string }> => {\n if (!isFilterRequired) {\n return new Map();\n }\n const waitingInputMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingInputMap.delete(name);\n });\n return waitingInputMap;\n }\n );\n\n getWaitingFilterMap = memoize(\n (\n isFilterRequired: boolean,\n columnMap: ColumnMap,\n filterMap: FilterMap,\n linkedColumnMap: LinkedColumnMap,\n inputFilterMap: InputFilterMap\n ) => {\n if (!isFilterRequired) {\n return new Map();\n }\n\n const waitingFilterMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingFilterMap.delete(name);\n });\n inputFilterMap.forEach((value, name) => {\n waitingFilterMap.delete(name);\n });\n linkedColumnMap.forEach((column, name) => {\n waitingFilterMap.delete(name);\n });\n return waitingFilterMap;\n }\n );\n\n getInputFilterColumnMap = memoize(\n (columnMap: ColumnMap, inputFilters: InputFilter[]) => {\n const inputFilterMap = new Map<string, InputFilter>();\n for (let i = 0; i < inputFilters.length; i += 1) {\n const inputFilter = inputFilters[i];\n const { name, type } = inputFilter;\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n inputFilterMap.set(name, inputFilter);\n }\n }\n return inputFilterMap;\n }\n );\n\n getLinkedColumnMap = memoize((columnMap: ColumnMap, links: Link[]) => {\n const linkedColumnMap = new Map<string, { name: string; type: string }>();\n const panelId = LayoutUtils.getIdFromPanel(this);\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n let columnName = null;\n if (\n link.start != null &&\n link.start.panelId === panelId &&\n columnMap.has(link.start.columnName)\n ) {\n columnName = link.start.columnName;\n } else if (\n link.end &&\n link.end.panelId === panelId &&\n columnMap.has(link.end.columnName)\n ) {\n columnName = link.end.columnName;\n }\n\n if (columnName != null && columnMap.has(columnName)) {\n const column = columnMap.get(columnName);\n assertNotNull(column);\n linkedColumnMap.set(columnName, column);\n }\n }\n return linkedColumnMap;\n });\n\n getSelectorColumns = memoize(\n (\n columnMap: ColumnMap,\n linkedColumnMap: LinkedColumnMap,\n columnSelectionValidator?: ColumnSelectionValidator\n ) =>\n Array.from(columnMap.values()).map(column => ({\n name: column.name,\n type: column.type,\n isValid: columnSelectionValidator\n ? columnSelectionValidator(this, column)\n : false,\n isActive: linkedColumnMap.has(column.name),\n }))\n );\n\n startListeningToSource(table: TableTemplate): void {\n log.debug('startListeningToSource', table);\n const { dh } = this.state;\n if (dh == null) {\n log.error('API is not defined');\n return;\n }\n table.addEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleSourceColumnChange\n );\n table.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n table.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n }\n\n stopListeningToSource(table: TableTemplate): void {\n log.debug('stopListeningToSource', table);\n const { dh } = this.state;\n if (dh == null) {\n log.error('API is not defined');\n return;\n }\n table.removeEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleSourceColumnChange\n );\n table.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n table.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n }\n\n loadModelIfNecessary(): void {\n const { isActive, isLoaded, isLoading } = this.state;\n if (isActive && !isLoaded && !isLoading) {\n this.initModel();\n }\n }\n\n isHidden(): boolean {\n const { glContainer } = this.props;\n const { isHidden } = glContainer;\n return isHidden;\n }\n\n handleColumnSelected(columnName: string): void {\n const { glEventHub } = this.props;\n const { columnMap } = this.state;\n glEventHub.emit(\n ChartEvent.COLUMN_SELECTED,\n this,\n columnMap.get(columnName)\n );\n }\n\n handleColumnMouseEnter({ type, name }: SelectorColumn): void {\n const { columnSelectionValidator } = this.props;\n log.debug('handleColumnMouseEnter', columnSelectionValidator, type, name);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, { type, name });\n }\n\n handleColumnMouseLeave(): void {\n const { columnSelectionValidator } = this.props;\n log.debug('handleColumnMouseLeave', columnSelectionValidator);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n handleDisconnect(): void {\n this.setState({\n error: new Error('Figure disconnected'),\n isDisconnected: true,\n });\n }\n\n handleFilterAdd(columns: InputFilter[]): void {\n for (let i = 0; i < columns.length; i += 1) {\n this.openInputFilter(columns[i]);\n }\n }\n\n handleOpenLinker(): void {\n const {\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n setActiveTool(ToolType.LINKER);\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: undefined });\n this.sendColumnChange();\n this.updateColumnFilters();\n }\n\n handleLoadSuccess(model: ChartModel): void {\n log.debug('handleLoadSuccess');\n\n const { model: prevModel } = this.state;\n this.setState(\n {\n model,\n isLoaded: true,\n },\n () => {\n const { inputFilters, source } = this.props;\n const { filterMap, isLinked } = this.state;\n if (model !== prevModel) {\n this.sendColumnChange();\n this.updateColumnFilters();\n this.updateInputFilters(\n inputFilters,\n filterMap.size > 0 || model.isFilterRequired()\n );\n if (source && isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n );\n }\n\n handleLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error('handleLoadError', error);\n this.setState({ error, isLoading: false });\n }\n\n handleSourceColumnChange(): void {\n this.updateModelFromSource();\n }\n\n handleSourceFilterChange(): void {\n this.updateModelFromSource();\n }\n\n handleSourceSortChange(): void {\n this.updateModelFromSource();\n }\n\n updateModelFromSource(): void {\n const { metadata, source } = this.props;\n const { dh, isLinked, model } = this.state;\n if (!dh || !isLinked || !model || !source) {\n log.debug2('updateModelFromSource ignoring', isLinked, model, source);\n return;\n }\n\n // By now the model has already been loaded, which is the only other cancelable thing in pending\n this.pending.cancel();\n if (isChartPanelTableMetadata(metadata)) {\n const { settings } = metadata;\n this.pending\n .add(\n dh.plot.Figure.create(\n (new ChartUtils(dh).makeFigureSettings(\n settings,\n source\n ) as unknown) as FigureDescriptor\n )\n )\n .then(figure => {\n if (isFigureChartModel(model)) {\n model.setFigure(figure);\n }\n })\n .catch(this.handleLoadError);\n }\n\n this.updatePanelState();\n }\n\n updatePanelState(): void {\n const { sourcePanel } = this.props;\n const { panelState, filterValueMap, settings } = this.state;\n let { tableSettings } = panelState ?? {};\n if (sourcePanel) {\n // Right now just update the panel state from the source\n // If the source isn't available, just keep the state that's already saved\n if (\n hasInputFilter(sourcePanel.props) &&\n hasPanelState(sourcePanel.state)\n ) {\n const { inputFilters } = sourcePanel.props;\n const { panelState: sourcePanelState } = sourcePanel.state;\n if (sourcePanelState != null) {\n tableSettings = IrisGridUtils.extractTableSettings(\n sourcePanelState,\n inputFilters\n );\n }\n }\n }\n\n // eslint-disable-next-line react/no-unused-state\n this.setState({\n panelState: {\n settings,\n tableSettings,\n filterValueMap: Array.from(filterValueMap),\n },\n });\n }\n\n handleError(): void {\n // Don't want to set an error state, because the user can fix a chart error within the chart itself.\n // We're not loading anymore either so stop showing the spinner so the user can actually click those buttons.\n this.setState({ isLoading: false });\n }\n\n handleResize(): void {\n this.updateChart();\n }\n\n handleSettingsChanged(update: Partial<Settings>): void {\n this.setState(({ settings: prevSettings }) => {\n const settings = {\n ...prevSettings,\n ...update,\n };\n log.debug('Updated settings', settings);\n return { settings };\n });\n }\n\n handleHide(): void {\n this.setActive(false);\n }\n\n handleShow(): void {\n this.setActive(true);\n }\n\n handleTabBlur(): void {\n this.setActive(false);\n }\n\n handleTabFocus(): void {\n const isHidden = this.isHidden();\n this.setActive(!isHidden);\n }\n\n handleUpdate(): void {\n this.setState({ isLoading: false });\n }\n\n handleClearAllFilters(): void {\n // nuke link filter and input filter map\n // input filters only clear themselves if they are not yet empty\n this.setState({\n filterValueMap: new Map(),\n filterMap: new Map(),\n });\n this.updatePanelState();\n }\n\n /**\n * Create an input filter panel for the provided column\n * @param column The column to create the input filter for\n */\n openInputFilter(column: InputFilter): void {\n const { glEventHub } = this.props;\n const { name, type } = column;\n glEventHub.emit(InputFilterEvent.OPEN_INPUT, {\n title: `${name} Filter`,\n panelState: {\n name,\n type,\n isValueShown: true,\n },\n createNewStack: true,\n focusElement: 'input',\n });\n }\n\n setActive(isActive: boolean): void {\n this.setState({ isActive }, () => {\n if (isActive) {\n this.loadModelIfNecessary();\n this.updateChart();\n }\n });\n }\n\n sendColumnChange(): void {\n const { model } = this.state;\n if (!model) {\n return;\n }\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMNS_CHANGED,\n this,\n Array.from(model.getFilterColumnMap().values())\n );\n }\n\n getCoordinateForColumn(columnName: ColumnName): [number, number] | null {\n const className = ChartColumnSelectorOverlay.makeButtonClassName(\n columnName\n );\n\n if (!this.panelContainer.current) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(`.${className}`);\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n /**\n * Set chart filters based on the filter map\n * @param filterMapParam Filter map\n */\n setFilterMap(filterMapParam: LinkFilterMap): void {\n log.debug('setFilterMap', filterMapParam);\n this.setState(state => {\n const { columnMap, filterMap } = state;\n let updatedFilterMap: null | FilterMap = null;\n const filterValueMap = new Map(state.filterValueMap);\n filterMapParam.forEach(({ columnType, filterList }, columnName) => {\n const column = columnMap.get(columnName);\n if (column == null || column.type !== columnType) {\n return;\n }\n if (filterList.length < 1) {\n log.debug('Ignoring empty filterList for column', columnName);\n return;\n }\n const { value } = filterList[0];\n filterValueMap.set(columnName, value);\n if (filterMap.get(columnName) !== value) {\n if (updatedFilterMap === null) {\n updatedFilterMap = new Map(filterMap);\n }\n updatedFilterMap.set(columnName, value);\n }\n });\n\n // Don't update filterMap unless the filters actually changed.\n // Otherwise the chart gets stuck on a spinner\n // because it never gets an update event for unchanged filters.\n return { filterValueMap, filterMap: updatedFilterMap ?? filterMap };\n });\n }\n\n unsetFilterValue(columnName: ColumnName): void {\n this.setState(state => {\n // We want to unset a value unless there's an input filter for it\n // If there's an input filter, then we want to just set it to that value\n // This way if the user has an input filter and a link, when they delete the link the input filter value takes effect\n const { inputFilters } = this.props;\n const { columnMap } = state;\n let { filterMap, filterValueMap } = state;\n if (!filterValueMap.has(columnName)) {\n return null;\n }\n\n filterValueMap = new Map(state.filterValueMap);\n filterValueMap.delete(columnName);\n\n const inputFilterMap = this.getInputFilterColumnMap(\n columnMap,\n inputFilters\n );\n\n if (inputFilterMap.has(columnName)) {\n const filterValue = filterMap.get(columnName);\n const inputFilterValue = inputFilterMap.get(columnName)?.value;\n if (inputFilterValue != null && filterValue !== inputFilterValue) {\n filterMap = new Map(state.filterMap);\n if (inputFilterValue.length > 0) {\n filterMap.set(columnName, inputFilterValue);\n } else {\n filterMap.delete(columnName);\n }\n }\n } else {\n filterMap = new Map(state.filterMap);\n filterMap.delete(columnName);\n }\n return { filterMap, filterValueMap };\n });\n }\n\n updateChangedInputFilters(\n inputFilters: InputFilter[],\n prevInputFilters: InputFilter[]\n ): void {\n const deletedInputFilters = prevInputFilters.filter(\n prevInputFilter =>\n inputFilters.find(\n inputFilter =>\n inputFilter.name === prevInputFilter.name &&\n inputFilter.type === prevInputFilter.type\n ) === undefined\n );\n if (deletedInputFilters.length > 0) {\n this.deleteInputFilters(deletedInputFilters);\n }\n\n const changedInputFilters = inputFilters.filter(\n inputFilter => !prevInputFilters.includes(inputFilter)\n );\n if (changedInputFilters.length > 0) {\n this.updateInputFilters(changedInputFilters);\n }\n }\n\n updateInputFilters(inputFilters: InputFilter[], forceUpdate = false): void {\n this.setState(state => {\n const { columnMap } = state;\n const filterValueMap = new Map(state.filterValueMap);\n const filterMap = new Map(state.filterMap);\n const update = forceUpdate ? { filterMap, filterValueMap } : {};\n\n for (let i = 0; i < inputFilters.length; i += 1) {\n const { name, type, value } = inputFilters[i];\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (value != null && filterMap.get(name) !== value) {\n if (value === '') {\n filterMap.delete(name);\n } else {\n filterMap.set(name, value);\n }\n update.filterMap = filterMap;\n }\n\n if (filterValueMap.has(name)) {\n // Need to unset whatever the linked value was - if they want that value again, they need to double click the link again\n filterValueMap.delete(name);\n update.filterValueMap = filterValueMap;\n }\n }\n }\n\n log.debug('updateInputFilters', update);\n return update as unknown;\n });\n }\n\n deleteInputFilters(inputFilters: InputFilter[], forceUpdate = false): void {\n this.setState(state => {\n const { columnMap, filterValueMap } = state;\n const filterMap = new Map(state.filterMap);\n let needsUpdate = forceUpdate;\n\n for (let i = 0; i < inputFilters.length; i += 1) {\n const { name, type } = inputFilters[i];\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (filterMap.has(name)) {\n const filterValue = filterMap.get(name);\n if (filterValueMap.has(name)) {\n const linkValue = filterValueMap.get(name);\n if (linkValue !== filterValue && linkValue != null) {\n needsUpdate = true;\n filterMap.set(name, linkValue);\n }\n } else {\n needsUpdate = true;\n filterMap.delete(name);\n }\n }\n }\n }\n\n log.debug('deleteInputFilters', needsUpdate);\n return needsUpdate ? { filterMap } : null;\n });\n }\n\n updateColumnFilters(): void {\n this.setState(({ model }) => {\n if (!model) {\n return null;\n }\n\n return { columnMap: model.getFilterColumnMap() };\n });\n }\n\n updateFilters(): void {\n const { columnMap, filterMap, model } = this.state;\n assertNotNull(model);\n const waitingInputMap = this.getWaitingInputMap(\n model.isFilterRequired(),\n columnMap,\n filterMap\n );\n model.setFilter(filterMap);\n\n if (filterMap.size > 0 && waitingInputMap.size === 0) {\n const defaultTitle = model.getDefaultTitle();\n const filterTitle = TextUtils.join(\n Array.from(filterMap.entries()).map(\n ([name, value]) => `${name}: ${value}`\n )\n );\n if (defaultTitle) {\n model.setTitle(\n `${defaultTitle}<br><span style=\"font-size: smaller\">${filterTitle}</span>`\n );\n } else {\n model.setTitle(filterTitle);\n }\n\n log.debug2('updateFilters filters set', filterMap);\n this.setState({ isLoading: true });\n } else {\n log.debug2('updateFilters waiting on inputs', waitingInputMap);\n model.setTitle(model.getDefaultTitle());\n this.setState({ isLoading: false });\n }\n\n this.updatePanelState();\n }\n\n /**\n * Removes any set filter values that are no longer part of the model\n */\n pruneFilterMaps(): void {\n this.setState(state => {\n const { columnMap } = state;\n const filterMap = new Map(state.filterMap);\n const filterValueMap = new Map(state.filterValueMap);\n const newState: Pick<\n Partial<ChartPanelState>,\n 'filterMap' | 'filterValueMap'\n > = {};\n\n state.filterValueMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterValueMap.delete(name);\n newState.filterValueMap = filterValueMap;\n }\n });\n state.filterMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterMap.delete(name);\n newState.filterMap = filterMap;\n }\n });\n return newState as unknown;\n });\n }\n\n updateChart(): void {\n if (this.chart.current) {\n this.chart.current.updateDimensions();\n }\n }\n\n render(): ReactElement {\n const {\n columnSelectionValidator,\n glContainer,\n glEventHub,\n inputFilters,\n isLinkerActive,\n links,\n metadata,\n settings,\n } = this.props;\n const {\n columnMap,\n filterMap,\n error,\n model,\n isActive,\n isDisconnected,\n isLoaded,\n isLoading,\n } = this.state;\n let name;\n if (isChartPanelTableMetadata(metadata)) {\n name = metadata.table;\n } else {\n name = metadata.figure;\n }\n const inputFilterMap = this.getInputFilterColumnMap(\n columnMap,\n inputFilters\n );\n const linkedColumnMap = this.getLinkedColumnMap(columnMap, links);\n const waitingInputMap =\n model != null\n ? this.getWaitingInputMap(\n model.isFilterRequired(),\n columnMap,\n filterMap\n )\n : new Map();\n const waitingFilterMap =\n model != null\n ? this.getWaitingFilterMap(\n model.isFilterRequired(),\n columnMap,\n filterMap,\n linkedColumnMap,\n inputFilterMap\n )\n : new Map();\n const errorMessage =\n error != null ? `Unable to open chart. ${error}` : undefined;\n const isWaitingForFilter = waitingInputMap.size > 0;\n const isSelectingColumn = columnMap.size > 0 && isLinkerActive;\n return (\n <WidgetPanel\n className={classNames('iris-chart-panel', {\n 'input-required': isWaitingForFilter,\n })}\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onHide={this.handleHide}\n onClearAllFilters={this.handleClearAllFilters}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabBlur={this.handleTabBlur}\n onTabFocus={this.handleTabFocus}\n errorMessage={errorMessage}\n isDisconnected={isDisconnected}\n isLoading={isLoading}\n isLoaded={isLoaded}\n widgetName={name}\n widgetType=\"Chart\"\n >\n <div\n ref={this.panelContainer}\n className=\"chart-panel-container h-100 w-100\"\n >\n <div className=\"chart-container h-100 w-100\">\n {isLoaded && model && (\n <Chart\n isActive={isActive}\n model={model}\n settings={settings}\n ref={this.chart}\n onDisconnect={this.handleDisconnect}\n onReconnect={this.handleReconnect}\n onUpdate={this.handleUpdate}\n onError={this.handleError}\n onSettingsChanged={this.handleSettingsChanged}\n />\n )}\n </div>\n <CSSTransition\n in={isWaitingForFilter && !isSelectingColumn && !isLoading}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <ChartFilterOverlay\n inputFilterMap={inputFilterMap}\n linkedColumnMap={linkedColumnMap}\n onAdd={this.handleFilterAdd}\n onOpenLinker={this.handleOpenLinker}\n columnMap={columnMap}\n waitingFilterMap={waitingFilterMap}\n waitingInputMap={waitingInputMap}\n />\n </CSSTransition>\n <CSSTransition\n in={isSelectingColumn}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <ChartColumnSelectorOverlay\n columns={this.getSelectorColumns(\n columnMap,\n linkedColumnMap,\n columnSelectionValidator\n )}\n onColumnSelected={this.handleColumnSelected}\n onMouseEnter={this.handleColumnMouseEnter}\n onMouseLeave={this.handleColumnMouseLeave}\n />\n </CSSTransition>\n </div>\n </WidgetPanel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string; metadata: { sourcePanelId: string } }\n) => {\n const { localDashboardId, metadata } = ownProps;\n\n let sourcePanelId;\n if (metadata != null) {\n sourcePanelId = metadata.sourcePanelId;\n }\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const openedPanelMap = getOpenedPanelMapForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER && isolatedLinkerPanelId === undefined;\n return {\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n isLinkerActive,\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n source:\n sourcePanelId != null ? panelTableMap.get(sourcePanelId) : undefined,\n sourcePanel:\n sourcePanelId != null ? openedPanelMap.get(sourcePanelId) : undefined,\n settings: getSettings(state),\n };\n};\n\nconst ConnectedChartPanel = connect(\n mapStateToProps,\n {\n setActiveTool: setActiveToolAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n },\n null,\n { forwardRef: true }\n)(ChartPanel);\n\nexport default ConnectedChartPanel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ChartPanel.js","names":["React","Component","classNames","memoize","connect","CSSTransition","debounce","Chart","ChartUtils","isFigureChartModel","getOpenedPanelMapForDashboard","LayoutUtils","IrisGridUtils","ThemeExport","Log","getActiveTool","getSettings","setActiveTool","setActiveToolAction","assertNotNull","Pending","PromiseUtils","TextUtils","WidgetPanel","ToolType","InputFilterEvent","ChartEvent","getColumnSelectionValidatorForDashboard","getInputFiltersForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","ChartFilterOverlay","ChartColumnSelectorOverlay","isChartPanelTableMetadata","log","module","UPDATE_MODEL_DEBOUNCE","hasInputFilter","panel","inputFilters","hasPanelState","panelState","ChartPanel","constructor","props","isFilterRequired","columnMap","filterMap","Map","waitingInputMap","forEach","filter","name","delete","linkedColumnMap","inputFilterMap","waitingFilterMap","value","column","i","length","inputFilter","type","get","set","links","panelId","getIdFromPanel","link","columnName","start","has","end","columnSelectionValidator","Array","from","values","map","isValid","isActive","handleColumnSelected","bind","handleColumnMouseEnter","handleColumnMouseLeave","handleDisconnect","handleReconnect","handleFilterAdd","handleHide","handleError","handleLoadError","handleLoadSuccess","handleResize","handleSettingsChanged","handleOpenLinker","handleShow","handleSourceColumnChange","handleSourceFilterChange","handleSourceSortChange","handleTabBlur","handleTabFocus","handleUpdate","updateModelFromSource","handleClearAllFilters","panelContainer","createRef","chart","pending","metadata","filterValueMap","settings","state","dh","undefined","error","isDisconnected","isLoading","isLoaded","isLinked","model","componentDidMount","isHidden","setState","initModel","componentDidUpdate","prevProps","prevState","source","pruneFilterMaps","updateChangedInputFilters","updateFilters","updatePanelState","updateSettings","startListeningToSource","stopListeningToSource","componentWillUnmount","cancel","makeApi","makeModel","add","then","resolved","close","table","debug","addEventListener","Table","EVENT_CUSTOMCOLUMNSCHANGED","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","removeEventListener","loadModelIfNecessary","glContainer","glEventHub","emit","COLUMN_SELECTED","Error","columns","openInputFilter","localDashboardId","LINKER","sendColumnChange","updateColumnFilters","prevModel","updateInputFilters","size","isCanceled","debug2","plot","Figure","create","makeFigureSettings","figure","setFigure","catch","sourcePanel","tableSettings","sourcePanelState","extractTableSettings","updateChart","update","prevSettings","setActive","OPEN_INPUT","title","isValueShown","createNewStack","focusElement","COLUMNS_CHANGED","getFilterColumnMap","getCoordinateForColumn","className","makeButtonClassName","current","element","querySelector","rect","getBoundingClientRect","width","height","x","left","y","bottom","setFilterMap","filterMapParam","updatedFilterMap","columnType","filterList","unsetFilterValue","getInputFilterColumnMap","filterValue","inputFilterValue","prevInputFilters","deletedInputFilters","prevInputFilter","find","deleteInputFilters","changedInputFilters","includes","forceUpdate","needsUpdate","linkValue","getWaitingInputMap","setFilter","defaultTitle","getDefaultTitle","filterTitle","join","entries","setTitle","newState","updateDimensions","render","isLinkerActive","getLinkedColumnMap","getWaitingFilterMap","errorMessage","isWaitingForFilter","isSelectingColumn","transitionMs","getSelectorColumns","mapStateToProps","ownProps","sourcePanelId","panelTableMap","openedPanelMap","activeTool","isolatedLinkerPanelId","ConnectedChartPanel","forwardRef"],"sources":["../../src/panels/ChartPanel.tsx"],"sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { CSSTransition } from 'react-transition-group';\nimport debounce from 'lodash.debounce';\nimport {\n Chart,\n ChartModel,\n ChartModelSettings,\n ChartUtils,\n FilterMap,\n isFigureChartModel,\n} from '@deephaven/chart';\nimport {\n getOpenedPanelMapForDashboard,\n LayoutUtils,\n PanelComponent,\n PanelProps,\n} from '@deephaven/dashboard';\nimport {\n IrisGridUtils,\n InputFilter,\n ColumnName,\n DehydratedSort,\n DehydratedAdvancedFilter,\n DehydratedQuickFilter,\n LegacyDehydratedSort,\n} from '@deephaven/iris-grid';\nimport type {\n dh as DhType,\n FigureDescriptor,\n SeriesPlotStyle,\n TableTemplate,\n} from '@deephaven/jsapi-types';\nimport { ThemeExport } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getSettings,\n RootState,\n setActiveTool as setActiveToolAction,\n WorkspaceSettings,\n} from '@deephaven/redux';\nimport {\n assertNotNull,\n Pending,\n PromiseUtils,\n TextUtils,\n} from '@deephaven/utils';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport WidgetPanel from './WidgetPanel';\nimport ToolType from '../linker/ToolType';\nimport { InputFilterEvent, ChartEvent } from '../events';\nimport {\n getColumnSelectionValidatorForDashboard,\n getInputFiltersForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n} from '../redux';\nimport ChartFilterOverlay, { ColumnMap } from './ChartFilterOverlay';\nimport ChartColumnSelectorOverlay, {\n SelectorColumn,\n} from './ChartColumnSelectorOverlay';\nimport './ChartPanel.scss';\nimport { Link, LinkFilterMap } from '../linker/LinkerUtils';\nimport { PanelState as IrisGridPanelState } from './IrisGridPanel';\nimport { isChartPanelTableMetadata } from './ChartPanelUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst log = Log.module('ChartPanel');\nconst UPDATE_MODEL_DEBOUNCE = 150;\n\nexport type InputFilterMap = Map<string, InputFilter>;\n\nexport type LinkedColumnMap = Map<string, { name: string; type: string }>;\n\nexport type ChartPanelFigureMetadata = {\n figure: string;\n};\n\nexport type ChartPanelTableMetadata = {\n table: string;\n sourcePanelId: string;\n settings: {\n isLinked: boolean;\n title: string;\n xAxis: string;\n series: string[];\n type: keyof SeriesPlotStyle;\n };\n tableSettings: ChartPanelTableSettings;\n};\n\nexport type ChartPanelMetadata =\n | ChartPanelFigureMetadata\n | ChartPanelTableMetadata;\n\ntype Settings = Record<string, unknown>;\n\nexport interface ChartPanelTableSettings {\n quickFilters?: readonly DehydratedQuickFilter[];\n advancedFilters?: readonly DehydratedAdvancedFilter[];\n inputFilters?: readonly InputFilter[];\n sorts?: readonly (DehydratedSort | LegacyDehydratedSort)[];\n partition?: unknown;\n partitionColumn?: string;\n}\nexport interface GLChartPanelState {\n filterValueMap: [string, unknown][];\n settings: Partial<ChartModelSettings>;\n tableSettings: ChartPanelTableSettings;\n irisGridState?: {\n advancedFilters: unknown;\n quickFilters: unknown;\n sorts: unknown;\n };\n irisGridPanelState?: {\n partitionColumn: string;\n partition: unknown;\n };\n table?: string;\n figure?: string;\n}\nexport interface ChartPanelProps {\n makeApi: () => Promise<DhType>;\n glContainer: Container;\n glEventHub: EventEmitter;\n metadata: ChartPanelMetadata;\n /** Function to build the ChartModel used by this ChartPanel. Can return a promise. */\n makeModel: () => Promise<ChartModel>;\n inputFilters: InputFilter[];\n links: Link[];\n localDashboardId: string;\n isLinkerActive: boolean;\n source?: TableTemplate;\n sourcePanel?: PanelComponent;\n columnSelectionValidator?: ColumnSelectionValidator;\n setActiveTool: (tool: string) => void;\n setDashboardIsolatedLinkerPanelId: (\n id: string,\n secondParam: undefined\n ) => void;\n\n panelState: GLChartPanelState;\n settings: Partial<WorkspaceSettings>;\n}\n\ninterface ChartPanelState {\n dh: DhType | undefined;\n settings: Partial<ChartModelSettings>;\n error?: unknown;\n isActive: boolean;\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isLinked: boolean;\n\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: FilterMap;\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: FilterMap;\n model?: ChartModel;\n columnMap: ColumnMap;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: GLChartPanelState;\n}\n\nfunction hasInputFilter(\n panel: PanelProps\n): panel is PanelProps & { inputFilters: InputFilter[] } {\n return (\n (panel as PanelProps & { inputFilters: InputFilter[] }).inputFilters != null\n );\n}\n\nfunction hasPanelState(\n panel: unknown\n): panel is { panelState: IrisGridPanelState } {\n return (panel as { panelState: IrisGridPanelState }).panelState != null;\n}\n\nexport class ChartPanel extends Component<ChartPanelProps, ChartPanelState> {\n static defaultProps = {\n columnSelectionValidator: null,\n isLinkerActive: false,\n source: null,\n sourcePanel: null,\n panelState: null,\n settings: {},\n };\n\n static displayName = 'ChartPanel';\n\n static COMPONENT = 'ChartPanel';\n\n constructor(props: ChartPanelProps) {\n super(props);\n\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleColumnMouseEnter = this.handleColumnMouseEnter.bind(this);\n this.handleColumnMouseLeave = this.handleColumnMouseLeave.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleFilterAdd = this.handleFilterAdd.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSettingsChanged = this.handleSettingsChanged.bind(this);\n this.handleOpenLinker = this.handleOpenLinker.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleSourceColumnChange = this.handleSourceColumnChange.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.updateModelFromSource = debounce(\n this.updateModelFromSource.bind(this),\n UPDATE_MODEL_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n\n this.panelContainer = React.createRef();\n this.chart = React.createRef();\n this.pending = new Pending();\n\n const { metadata, panelState } = props;\n const { filterValueMap = [], settings = {} } = panelState ?? {};\n\n this.state = {\n dh: undefined,\n settings,\n error: undefined,\n isActive: false,\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n isLinked:\n metadata != null &&\n isChartPanelTableMetadata(metadata) &&\n metadata.settings.isLinked,\n\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: new Map(filterValueMap),\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: new Map(filterValueMap),\n model: undefined,\n columnMap: new Map(),\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n }\n\n componentDidMount(): void {\n if (!this.isHidden()) {\n this.setState({ isActive: true });\n this.initModel();\n }\n }\n\n componentDidUpdate(\n prevProps: ChartPanelProps,\n prevState: ChartPanelState\n ): void {\n const { inputFilters, source } = this.props;\n const {\n columnMap,\n model,\n filterMap,\n filterValueMap,\n isLinked,\n settings,\n } = this.state;\n\n if (!model) {\n return;\n }\n\n if (columnMap !== prevState.columnMap) {\n this.pruneFilterMaps();\n }\n\n if (inputFilters !== prevProps.inputFilters) {\n this.updateChangedInputFilters(inputFilters, prevProps.inputFilters);\n }\n\n if (filterMap !== prevState.filterMap) {\n this.updateFilters();\n } else if (filterValueMap !== prevState.filterValueMap) {\n this.updatePanelState();\n }\n\n if (settings !== prevState.settings && isFigureChartModel(model)) {\n model.updateSettings(settings);\n this.updatePanelState();\n }\n\n if (isLinked !== prevState.isLinked) {\n if (source) {\n if (isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n } else {\n this.stopListeningToSource(source);\n }\n }\n } else if (isLinked && source !== prevProps.source) {\n if (prevProps.source) {\n this.stopListeningToSource(prevProps.source);\n }\n if (source) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n\n const { dh } = this.state;\n const { source } = this.props;\n if (dh != null && source) {\n this.stopListeningToSource(source);\n }\n }\n\n panelContainer: RefObject<HTMLDivElement>;\n\n chart: RefObject<Chart>;\n\n pending: Pending;\n\n initModel(): void {\n this.setState({ isLoading: true, isLoaded: false, error: undefined });\n\n const { makeApi, makeModel } = this.props;\n this.pending\n .add(makeApi())\n .then(dh => {\n this.setState({ dh });\n })\n .then(() =>\n this.pending.add(makeModel(), resolved => {\n resolved.close();\n })\n )\n .then(this.handleLoadSuccess, this.handleLoadError);\n }\n\n getWaitingInputMap = memoize(\n (\n isFilterRequired: boolean,\n columnMap: ColumnMap,\n filterMap: FilterMap\n ): Map<string, { name: string; type: string }> => {\n if (!isFilterRequired) {\n return new Map();\n }\n const waitingInputMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingInputMap.delete(name);\n });\n return waitingInputMap;\n }\n );\n\n getWaitingFilterMap = memoize(\n (\n isFilterRequired: boolean,\n columnMap: ColumnMap,\n filterMap: FilterMap,\n linkedColumnMap: LinkedColumnMap,\n inputFilterMap: InputFilterMap\n ) => {\n if (!isFilterRequired) {\n return new Map();\n }\n\n const waitingFilterMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingFilterMap.delete(name);\n });\n inputFilterMap.forEach((value, name) => {\n waitingFilterMap.delete(name);\n });\n linkedColumnMap.forEach((column, name) => {\n waitingFilterMap.delete(name);\n });\n return waitingFilterMap;\n }\n );\n\n getInputFilterColumnMap = memoize(\n (columnMap: ColumnMap, inputFilters: InputFilter[]) => {\n const inputFilterMap = new Map<string, InputFilter>();\n for (let i = 0; i < inputFilters.length; i += 1) {\n const inputFilter = inputFilters[i];\n const { name, type } = inputFilter;\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n inputFilterMap.set(name, inputFilter);\n }\n }\n return inputFilterMap;\n }\n );\n\n getLinkedColumnMap = memoize((columnMap: ColumnMap, links: Link[]) => {\n const linkedColumnMap = new Map<string, { name: string; type: string }>();\n const panelId = LayoutUtils.getIdFromPanel(this);\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n let columnName = null;\n if (\n link.start != null &&\n link.start.panelId === panelId &&\n columnMap.has(link.start.columnName)\n ) {\n columnName = link.start.columnName;\n } else if (\n link.end &&\n link.end.panelId === panelId &&\n columnMap.has(link.end.columnName)\n ) {\n columnName = link.end.columnName;\n }\n\n if (columnName != null && columnMap.has(columnName)) {\n const column = columnMap.get(columnName);\n assertNotNull(column);\n linkedColumnMap.set(columnName, column);\n }\n }\n return linkedColumnMap;\n });\n\n getSelectorColumns = memoize(\n (\n columnMap: ColumnMap,\n linkedColumnMap: LinkedColumnMap,\n columnSelectionValidator?: ColumnSelectionValidator\n ) =>\n Array.from(columnMap.values()).map(column => ({\n name: column.name,\n type: column.type,\n isValid: columnSelectionValidator\n ? columnSelectionValidator(this, column)\n : false,\n isActive: linkedColumnMap.has(column.name),\n }))\n );\n\n startListeningToSource(table: TableTemplate): void {\n log.debug('startListeningToSource', table);\n const { dh } = this.state;\n if (dh == null) {\n log.error('API is not defined');\n return;\n }\n table.addEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleSourceColumnChange\n );\n table.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n table.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n }\n\n stopListeningToSource(table: TableTemplate): void {\n log.debug('stopListeningToSource', table);\n const { dh } = this.state;\n if (dh == null) {\n log.error('API is not defined');\n return;\n }\n table.removeEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleSourceColumnChange\n );\n table.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n table.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n }\n\n loadModelIfNecessary(): void {\n const { isActive, isLoaded, isLoading } = this.state;\n if (isActive && !isLoaded && !isLoading) {\n this.initModel();\n }\n }\n\n isHidden(): boolean {\n const { glContainer } = this.props;\n const { isHidden } = glContainer;\n return isHidden;\n }\n\n handleColumnSelected(columnName: string): void {\n const { glEventHub } = this.props;\n const { columnMap } = this.state;\n glEventHub.emit(\n ChartEvent.COLUMN_SELECTED,\n this,\n columnMap.get(columnName)\n );\n }\n\n handleColumnMouseEnter({ type, name }: SelectorColumn): void {\n const { columnSelectionValidator } = this.props;\n log.debug('handleColumnMouseEnter', columnSelectionValidator, type, name);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, { type, name });\n }\n\n handleColumnMouseLeave(): void {\n const { columnSelectionValidator } = this.props;\n log.debug('handleColumnMouseLeave', columnSelectionValidator);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n handleDisconnect(): void {\n this.setState({\n error: new Error('Figure disconnected'),\n isDisconnected: true,\n });\n }\n\n handleFilterAdd(columns: InputFilter[]): void {\n for (let i = 0; i < columns.length; i += 1) {\n this.openInputFilter(columns[i]);\n }\n }\n\n handleOpenLinker(): void {\n const {\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n setActiveTool(ToolType.LINKER);\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: undefined });\n this.sendColumnChange();\n this.updateColumnFilters();\n }\n\n handleLoadSuccess(model: ChartModel): void {\n log.debug('handleLoadSuccess');\n\n const { model: prevModel } = this.state;\n this.setState(\n {\n model,\n isLoaded: true,\n },\n () => {\n const { inputFilters, source } = this.props;\n const { filterMap, isLinked } = this.state;\n if (model !== prevModel) {\n this.sendColumnChange();\n this.updateColumnFilters();\n this.updateInputFilters(\n inputFilters,\n filterMap.size > 0 || model.isFilterRequired()\n );\n if (source && isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n );\n }\n\n handleLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error('handleLoadError', error);\n this.setState({ error, isLoading: false });\n }\n\n handleSourceColumnChange(): void {\n this.updateModelFromSource();\n }\n\n handleSourceFilterChange(): void {\n this.updateModelFromSource();\n }\n\n handleSourceSortChange(): void {\n this.updateModelFromSource();\n }\n\n updateModelFromSource(): void {\n const { metadata, source } = this.props;\n const { dh, isLinked, model } = this.state;\n if (!dh || !isLinked || !model || !source) {\n log.debug2('updateModelFromSource ignoring', isLinked, model, source);\n return;\n }\n\n // By now the model has already been loaded, which is the only other cancelable thing in pending\n this.pending.cancel();\n if (isChartPanelTableMetadata(metadata)) {\n const { settings } = metadata;\n this.pending\n .add(\n dh.plot.Figure.create(\n (new ChartUtils(dh).makeFigureSettings(\n settings,\n source\n ) as unknown) as FigureDescriptor\n )\n )\n .then(figure => {\n if (isFigureChartModel(model)) {\n model.setFigure(figure);\n }\n })\n .catch(this.handleLoadError);\n }\n\n this.updatePanelState();\n }\n\n updatePanelState(): void {\n const { sourcePanel } = this.props;\n const { panelState, filterValueMap, settings } = this.state;\n let { tableSettings } = panelState ?? {};\n if (sourcePanel) {\n // Right now just update the panel state from the source\n // If the source isn't available, just keep the state that's already saved\n if (\n hasInputFilter(sourcePanel.props) &&\n hasPanelState(sourcePanel.state)\n ) {\n const { inputFilters } = sourcePanel.props;\n const { panelState: sourcePanelState } = sourcePanel.state;\n if (sourcePanelState != null) {\n tableSettings = IrisGridUtils.extractTableSettings(\n sourcePanelState,\n inputFilters\n );\n }\n }\n }\n\n // eslint-disable-next-line react/no-unused-state\n this.setState({\n panelState: {\n settings,\n tableSettings,\n filterValueMap: Array.from(filterValueMap),\n },\n });\n }\n\n handleError(): void {\n // Don't want to set an error state, because the user can fix a chart error within the chart itself.\n // We're not loading anymore either so stop showing the spinner so the user can actually click those buttons.\n this.setState({ isLoading: false });\n }\n\n handleResize(): void {\n this.updateChart();\n }\n\n handleSettingsChanged(update: Partial<Settings>): void {\n this.setState(({ settings: prevSettings }) => {\n const settings = {\n ...prevSettings,\n ...update,\n };\n log.debug('Updated settings', settings);\n return { settings };\n });\n }\n\n handleHide(): void {\n this.setActive(false);\n }\n\n handleShow(): void {\n this.setActive(true);\n }\n\n handleTabBlur(): void {\n this.setActive(false);\n }\n\n handleTabFocus(): void {\n const isHidden = this.isHidden();\n this.setActive(!isHidden);\n }\n\n handleUpdate(): void {\n this.setState({ isLoading: false });\n }\n\n handleClearAllFilters(): void {\n // nuke link filter and input filter map\n // input filters only clear themselves if they are not yet empty\n this.setState({\n filterValueMap: new Map(),\n filterMap: new Map(),\n });\n this.updatePanelState();\n }\n\n /**\n * Create an input filter panel for the provided column\n * @param column The column to create the input filter for\n */\n openInputFilter(column: InputFilter): void {\n const { glEventHub } = this.props;\n const { name, type } = column;\n glEventHub.emit(InputFilterEvent.OPEN_INPUT, {\n title: `${name} Filter`,\n panelState: {\n name,\n type,\n isValueShown: true,\n },\n createNewStack: true,\n focusElement: 'input',\n });\n }\n\n setActive(isActive: boolean): void {\n this.setState({ isActive }, () => {\n if (isActive) {\n this.loadModelIfNecessary();\n this.updateChart();\n }\n });\n }\n\n sendColumnChange(): void {\n const { model } = this.state;\n if (!model) {\n return;\n }\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMNS_CHANGED,\n this,\n Array.from(model.getFilterColumnMap().values())\n );\n }\n\n getCoordinateForColumn(columnName: ColumnName): [number, number] | null {\n const className = ChartColumnSelectorOverlay.makeButtonClassName(\n columnName\n );\n\n if (!this.panelContainer.current) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(`.${className}`);\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n /**\n * Set chart filters based on the filter map\n * @param filterMapParam Filter map\n */\n setFilterMap(filterMapParam: LinkFilterMap): void {\n log.debug('setFilterMap', filterMapParam);\n this.setState(state => {\n const { columnMap, filterMap } = state;\n let updatedFilterMap: null | FilterMap = null;\n const filterValueMap = new Map(state.filterValueMap);\n filterMapParam.forEach(({ columnType, filterList }, columnName) => {\n const column = columnMap.get(columnName);\n if (column == null || column.type !== columnType) {\n return;\n }\n if (filterList.length < 1) {\n log.debug('Ignoring empty filterList for column', columnName);\n return;\n }\n const { value } = filterList[0];\n filterValueMap.set(columnName, value);\n if (filterMap.get(columnName) !== value) {\n if (updatedFilterMap === null) {\n updatedFilterMap = new Map(filterMap);\n }\n updatedFilterMap.set(columnName, value);\n }\n });\n\n // Don't update filterMap unless the filters actually changed.\n // Otherwise the chart gets stuck on a spinner\n // because it never gets an update event for unchanged filters.\n return { filterValueMap, filterMap: updatedFilterMap ?? filterMap };\n });\n }\n\n unsetFilterValue(columnName: ColumnName): void {\n this.setState(state => {\n // We want to unset a value unless there's an input filter for it\n // If there's an input filter, then we want to just set it to that value\n // This way if the user has an input filter and a link, when they delete the link the input filter value takes effect\n const { inputFilters } = this.props;\n const { columnMap } = state;\n let { filterMap, filterValueMap } = state;\n if (!filterValueMap.has(columnName)) {\n return null;\n }\n\n filterValueMap = new Map(state.filterValueMap);\n filterValueMap.delete(columnName);\n\n const inputFilterMap = this.getInputFilterColumnMap(\n columnMap,\n inputFilters\n );\n\n if (inputFilterMap.has(columnName)) {\n const filterValue = filterMap.get(columnName);\n const inputFilterValue = inputFilterMap.get(columnName)?.value;\n if (inputFilterValue != null && filterValue !== inputFilterValue) {\n filterMap = new Map(state.filterMap);\n if (inputFilterValue.length > 0) {\n filterMap.set(columnName, inputFilterValue);\n } else {\n filterMap.delete(columnName);\n }\n }\n } else {\n filterMap = new Map(state.filterMap);\n filterMap.delete(columnName);\n }\n return { filterMap, filterValueMap };\n });\n }\n\n updateChangedInputFilters(\n inputFilters: InputFilter[],\n prevInputFilters: InputFilter[]\n ): void {\n const deletedInputFilters = prevInputFilters.filter(\n prevInputFilter =>\n inputFilters.find(\n inputFilter =>\n inputFilter.name === prevInputFilter.name &&\n inputFilter.type === prevInputFilter.type\n ) === undefined\n );\n if (deletedInputFilters.length > 0) {\n this.deleteInputFilters(deletedInputFilters);\n }\n\n const changedInputFilters = inputFilters.filter(\n inputFilter => !prevInputFilters.includes(inputFilter)\n );\n if (changedInputFilters.length > 0) {\n this.updateInputFilters(changedInputFilters);\n }\n }\n\n updateInputFilters(inputFilters: InputFilter[], forceUpdate = false): void {\n this.setState(state => {\n const { columnMap } = state;\n const filterValueMap = new Map(state.filterValueMap);\n const filterMap = new Map(state.filterMap);\n const update = forceUpdate ? { filterMap, filterValueMap } : {};\n\n for (let i = 0; i < inputFilters.length; i += 1) {\n const { name, type, value } = inputFilters[i];\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (value != null && filterMap.get(name) !== value) {\n if (value === '') {\n filterMap.delete(name);\n } else {\n filterMap.set(name, value);\n }\n update.filterMap = filterMap;\n }\n\n if (filterValueMap.has(name)) {\n // Need to unset whatever the linked value was - if they want that value again, they need to double click the link again\n filterValueMap.delete(name);\n update.filterValueMap = filterValueMap;\n }\n }\n }\n\n log.debug('updateInputFilters', update);\n return update as unknown;\n });\n }\n\n deleteInputFilters(inputFilters: InputFilter[], forceUpdate = false): void {\n this.setState(state => {\n const { columnMap, filterValueMap } = state;\n const filterMap = new Map(state.filterMap);\n let needsUpdate = forceUpdate;\n\n for (let i = 0; i < inputFilters.length; i += 1) {\n const { name, type } = inputFilters[i];\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (filterMap.has(name)) {\n const filterValue = filterMap.get(name);\n if (filterValueMap.has(name)) {\n const linkValue = filterValueMap.get(name);\n if (linkValue !== filterValue && linkValue != null) {\n needsUpdate = true;\n filterMap.set(name, linkValue);\n }\n } else {\n needsUpdate = true;\n filterMap.delete(name);\n }\n }\n }\n }\n\n log.debug('deleteInputFilters', needsUpdate);\n return needsUpdate ? { filterMap } : null;\n });\n }\n\n updateColumnFilters(): void {\n this.setState(({ model }) => {\n if (!model) {\n return null;\n }\n\n return { columnMap: model.getFilterColumnMap() };\n });\n }\n\n updateFilters(): void {\n const { columnMap, filterMap, model } = this.state;\n assertNotNull(model);\n const waitingInputMap = this.getWaitingInputMap(\n model.isFilterRequired(),\n columnMap,\n filterMap\n );\n model.setFilter(filterMap);\n\n if (filterMap.size > 0 && waitingInputMap.size === 0) {\n const defaultTitle = model.getDefaultTitle();\n const filterTitle = TextUtils.join(\n Array.from(filterMap.entries()).map(\n ([name, value]) => `${name}: ${value}`\n )\n );\n if (defaultTitle) {\n model.setTitle(\n `${defaultTitle}<br><span style=\"font-size: smaller\">${filterTitle}</span>`\n );\n } else {\n model.setTitle(filterTitle);\n }\n\n log.debug2('updateFilters filters set', filterMap);\n this.setState({ isLoading: true });\n } else {\n log.debug2('updateFilters waiting on inputs', waitingInputMap);\n model.setTitle(model.getDefaultTitle());\n this.setState({ isLoading: false });\n }\n\n this.updatePanelState();\n }\n\n /**\n * Removes any set filter values that are no longer part of the model\n */\n pruneFilterMaps(): void {\n this.setState(state => {\n const { columnMap } = state;\n const filterMap = new Map(state.filterMap);\n const filterValueMap = new Map(state.filterValueMap);\n const newState: Pick<\n Partial<ChartPanelState>,\n 'filterMap' | 'filterValueMap'\n > = {};\n\n state.filterValueMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterValueMap.delete(name);\n newState.filterValueMap = filterValueMap;\n }\n });\n state.filterMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterMap.delete(name);\n newState.filterMap = filterMap;\n }\n });\n return newState as unknown;\n });\n }\n\n updateChart(): void {\n if (this.chart.current) {\n this.chart.current.updateDimensions();\n }\n }\n\n render(): ReactElement {\n const {\n columnSelectionValidator,\n glContainer,\n glEventHub,\n inputFilters,\n isLinkerActive,\n links,\n metadata,\n settings,\n } = this.props;\n const {\n columnMap,\n dh,\n filterMap,\n error,\n model,\n isActive,\n isDisconnected,\n isLoaded,\n isLoading,\n } = this.state;\n let name;\n if (isChartPanelTableMetadata(metadata)) {\n name = metadata.table;\n } else {\n name = metadata.figure;\n }\n const inputFilterMap = this.getInputFilterColumnMap(\n columnMap,\n inputFilters\n );\n const linkedColumnMap = this.getLinkedColumnMap(columnMap, links);\n const waitingInputMap =\n model != null\n ? this.getWaitingInputMap(\n model.isFilterRequired(),\n columnMap,\n filterMap\n )\n : new Map();\n const waitingFilterMap =\n model != null\n ? this.getWaitingFilterMap(\n model.isFilterRequired(),\n columnMap,\n filterMap,\n linkedColumnMap,\n inputFilterMap\n )\n : new Map();\n const errorMessage =\n error != null ? `Unable to open chart. ${error}` : undefined;\n const isWaitingForFilter = waitingInputMap.size > 0;\n const isSelectingColumn = columnMap.size > 0 && isLinkerActive;\n return (\n <WidgetPanel\n className={classNames('iris-chart-panel', {\n 'input-required': isWaitingForFilter,\n })}\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onHide={this.handleHide}\n onClearAllFilters={this.handleClearAllFilters}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabBlur={this.handleTabBlur}\n onTabFocus={this.handleTabFocus}\n errorMessage={errorMessage}\n isDisconnected={isDisconnected}\n isLoading={isLoading}\n isLoaded={isLoaded}\n widgetName={name}\n widgetType=\"Chart\"\n >\n <div\n ref={this.panelContainer}\n className=\"chart-panel-container h-100 w-100\"\n >\n <div className=\"chart-container h-100 w-100\">\n {isLoaded && model && dh && (\n <Chart\n dh={dh}\n isActive={isActive}\n model={model}\n settings={settings}\n ref={this.chart}\n onDisconnect={this.handleDisconnect}\n onReconnect={this.handleReconnect}\n onUpdate={this.handleUpdate}\n onError={this.handleError}\n onSettingsChanged={this.handleSettingsChanged}\n />\n )}\n </div>\n <CSSTransition\n in={isWaitingForFilter && !isSelectingColumn && !isLoading}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <ChartFilterOverlay\n inputFilterMap={inputFilterMap}\n linkedColumnMap={linkedColumnMap}\n onAdd={this.handleFilterAdd}\n onOpenLinker={this.handleOpenLinker}\n columnMap={columnMap}\n waitingFilterMap={waitingFilterMap}\n waitingInputMap={waitingInputMap}\n />\n </CSSTransition>\n <CSSTransition\n in={isSelectingColumn}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <ChartColumnSelectorOverlay\n columns={this.getSelectorColumns(\n columnMap,\n linkedColumnMap,\n columnSelectionValidator\n )}\n onColumnSelected={this.handleColumnSelected}\n onMouseEnter={this.handleColumnMouseEnter}\n onMouseLeave={this.handleColumnMouseLeave}\n />\n </CSSTransition>\n </div>\n </WidgetPanel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string; metadata: { sourcePanelId: string } }\n) => {\n const { localDashboardId, metadata } = ownProps;\n\n let sourcePanelId;\n if (metadata != null) {\n sourcePanelId = metadata.sourcePanelId;\n }\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const openedPanelMap = getOpenedPanelMapForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER && isolatedLinkerPanelId === undefined;\n return {\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n isLinkerActive,\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n source:\n sourcePanelId != null ? panelTableMap.get(sourcePanelId) : undefined,\n sourcePanel:\n sourcePanelId != null ? openedPanelMap.get(sourcePanelId) : undefined,\n settings: getSettings(state),\n };\n};\n\nconst ConnectedChartPanel = connect(\n mapStateToProps,\n {\n setActiveTool: setActiveToolAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n },\n null,\n { forwardRef: true }\n)(ChartPanel);\n\nexport default ConnectedChartPanel;\n"],"mappings":"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"}
@@ -2,7 +2,7 @@ import React, { Component, RefObject } from 'react';
2
2
  import { ConnectedProps } from 'react-redux';
3
3
  import memoize from 'memoizee';
4
4
  import { DashboardPanelProps } from '@deephaven/dashboard';
5
- import type { Column, Row, Table, TableTemplate } from '@deephaven/jsapi-shim';
5
+ import type { dh as DhType, Column, Row, Table, TableTemplate } from '@deephaven/jsapi-types';
6
6
  import { DateTimeColumnFormatter, Formatter, FormattingRule } from '@deephaven/jsapi-utils';
7
7
  import { Pending } from '@deephaven/utils';
8
8
  import DropdownFilter, { DropdownFilterColumn } from '../controls/dropdown-filter/DropdownFilter';
@@ -22,6 +22,7 @@ type StateProps = {
22
22
  columns: Column[];
23
23
  columnSelectionValidator?: ColumnSelectionValidator;
24
24
  dashboardLinks: Link[];
25
+ dh: DhType;
25
26
  disableLinking: boolean;
26
27
  isLinkerActive: boolean;
27
28
  panelTableMap: PanelTableMap;
@@ -55,7 +56,6 @@ export declare class DropdownFilterPanel extends Component<DropdownFilterPanelPr
55
56
  static displayName: string;
56
57
  static COMPONENT: string;
57
58
  static MAX_TABLE_SIZE: number;
58
- static DATETIME_FORMATTER: DateTimeColumnFormatter;
59
59
  static SOURCE_COLUMN: Readonly<{
60
60
  name: "FilterSource";
61
61
  type: null;
@@ -64,6 +64,7 @@ export declare class DropdownFilterPanel extends Component<DropdownFilterPanelPr
64
64
  componentDidMount(): void;
65
65
  componentDidUpdate(prevProps: DropdownFilterPanelProps, prevState: DropdownFilterPanelState): void;
66
66
  componentWillUnmount(): void;
67
+ dateTimeFormatter: DateTimeColumnFormatter;
67
68
  dropdownFilterRef: RefObject<DropdownFilter>;
68
69
  panelContainer: RefObject<HTMLDivElement>;
69
70
  pending: Pending;
@@ -123,7 +124,7 @@ export declare class DropdownFilterPanel extends Component<DropdownFilterPanelPr
123
124
  declare const ConnectedDropdownFilterPanel: import("react-redux").ConnectedComponent<typeof DropdownFilterPanel, import("react-redux").Omit<React.ClassAttributes<DropdownFilterPanel> & import("@deephaven/dashboard").PanelProps & {
124
125
  localDashboardId: string;
125
126
  metadata?: Record<string, unknown> | undefined;
126
- } & StateProps & import("react-redux").DispatchProp<import("redux").AnyAction>, "panelState" | "columns" | "dispatch" | "columnSelectionValidator" | "dashboardLinks" | "disableLinking" | "isLinkerActive" | "panelTableMap" | "settings"> & import("@deephaven/dashboard").PanelProps & {
127
+ } & StateProps & import("react-redux").DispatchProp<import("redux").AnyAction>, "panelState" | "columns" | "dispatch" | "columnSelectionValidator" | "dashboardLinks" | "dh" | "disableLinking" | "isLinkerActive" | "panelTableMap" | "settings"> & import("@deephaven/dashboard").PanelProps & {
127
128
  localDashboardId: string;
128
129
  metadata?: Record<string, unknown> | undefined;
129
130
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownFilterPanel.d.ts","sourceRoot":"","sources":["../../src/panels/DropdownFilterPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DropdownFilterPanel.d.ts","sourceRoot":"","sources":["../../src/panels/DropdownFilterPanel.tsx"],"names":[],"mappings":"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"}
@@ -7,10 +7,9 @@ import debounce from 'lodash.debounce';
7
7
  import deepEqual from 'deep-equal';
8
8
  import memoize from 'memoizee';
9
9
  import { LayoutUtils } from '@deephaven/dashboard';
10
- import dh from '@deephaven/jsapi-shim';
11
10
  import { DateTimeColumnFormatter, Formatter, FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';
12
11
  import Log from '@deephaven/log';
13
- import { getActiveTool, getSettings } from '@deephaven/redux';
12
+ import { getActiveTool, getApi, getSettings } from '@deephaven/redux';
14
13
  import { Pending, PromiseUtils } from '@deephaven/utils';
15
14
  import DropdownFilter from "../controls/dropdown-filter/DropdownFilter.js";
16
15
  import { InputFilterEvent } from "../events/index.js";
@@ -37,6 +36,7 @@ var mapStateToProps = (state, ownProps) => {
37
36
  return {
38
37
  columns: getColumnsForDashboard(state, localDashboardId),
39
38
  columnSelectionValidator: getColumnSelectionValidatorForDashboard(state, localDashboardId),
39
+ dh: getApi(state),
40
40
  isLinkerActive,
41
41
  disableLinking,
42
42
  settings: getSettings(state),
@@ -48,10 +48,9 @@ var connector = connect(mapStateToProps, null, null, {
48
48
  forwardRef: true
49
49
  });
50
50
  export class DropdownFilterPanel extends Component {
51
- // Filter dropdown needs to show and send full timestamp format with nanoseconds
52
-
53
51
  constructor(props) {
54
52
  super(props);
53
+ _defineProperty(this, "dateTimeFormatter", void 0);
55
54
  _defineProperty(this, "dropdownFilterRef", void 0);
56
55
  _defineProperty(this, "panelContainer", void 0);
57
56
  _defineProperty(this, "pending", void 0);
@@ -63,7 +62,7 @@ export class DropdownFilterPanel extends Component {
63
62
  name
64
63
  } = _ref;
65
64
  if (type !== undefined && TableUtils.isDateType(type)) {
66
- return rawValues.map(value => DropdownFilterPanel.DATETIME_FORMATTER.format(value));
65
+ return rawValues.map(value => this.dateTimeFormatter.format(value));
67
66
  }
68
67
  return rawValues.map(value =>
69
68
  // Skip formatting for nulls so they don't get converted to ''
@@ -129,10 +128,17 @@ export class DropdownFilterPanel extends Component {
129
128
  this.panelContainer = /*#__PURE__*/React.createRef();
130
129
  this.pending = new Pending();
131
130
  var {
131
+ dh,
132
132
  panelState,
133
133
  settings
134
134
  } = props;
135
135
  this.columnFormats = FormatterUtils.getColumnFormats(settings);
136
+ // Filter dropdown needs to show and send full timestamp format with nanoseconds
137
+ this.dateTimeFormatter = new DateTimeColumnFormatter(dh, {
138
+ showTimeZone: false,
139
+ showTSeparator: true,
140
+ defaultDateTimeFormatString: "yyyy-MM-dd HH:mm:ss.SSSSSSSSS"
141
+ });
136
142
  var {
137
143
  value: _value = '',
138
144
  isValueShown = false,
@@ -146,7 +152,7 @@ export class DropdownFilterPanel extends Component {
146
152
  } : undefined;
147
153
  this.state = {
148
154
  column,
149
- formatter: new Formatter(this.columnFormats),
155
+ formatter: new Formatter(dh, this.columnFormats),
150
156
  valuesTable: undefined,
151
157
  valuesColumn: undefined,
152
158
  sourceSize: 0,
@@ -286,6 +292,9 @@ export class DropdownFilterPanel extends Component {
286
292
  return this.getCachedSourceColumn(valuesTable, source);
287
293
  }
288
294
  startListeningToSource(sourceTable) {
295
+ var {
296
+ dh
297
+ } = this.props;
289
298
  log.debug('startListeningToSource');
290
299
  sourceTable.addEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);
291
300
  sourceTable.addEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);
@@ -294,6 +303,9 @@ export class DropdownFilterPanel extends Component {
294
303
  sourceTable.addEventListener(dh.Table.EVENT_RECONNECT, this.handleReconnect);
295
304
  }
296
305
  stopListeningToSource(sourceTable) {
306
+ var {
307
+ dh
308
+ } = this.props;
297
309
  log.debug('stopListeningToSource');
298
310
  sourceTable.removeEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);
299
311
  sourceTable.removeEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);
@@ -518,6 +530,9 @@ export class DropdownFilterPanel extends Component {
518
530
  this.setViewport(valuesTable);
519
531
  }
520
532
  updateViewportListener(valuesTable) {
533
+ var {
534
+ dh
535
+ } = this.props;
521
536
  log.debug('updateViewportListener', valuesTable === null || valuesTable === void 0 ? void 0 : valuesTable.size);
522
537
  if (this.cleanup) {
523
538
  this.cleanup();
@@ -541,11 +556,14 @@ export class DropdownFilterPanel extends Component {
541
556
  valuesTable.setViewport(0, DropdownFilterPanel.MAX_TABLE_SIZE - 1, [valuesColumn]);
542
557
  }
543
558
  updateFormatterSettings(settings) {
559
+ var {
560
+ dh
561
+ } = this.props;
544
562
  var columnFormats = FormatterUtils.getColumnFormats(settings);
545
563
  if (!deepEqual(this.columnFormats, columnFormats)) {
546
564
  this.columnFormats = columnFormats;
547
565
  this.setState({
548
- formatter: new Formatter(columnFormats)
566
+ formatter: new Formatter(dh, columnFormats)
549
567
  });
550
568
  }
551
569
  }
@@ -658,11 +676,6 @@ export class DropdownFilterPanel extends Component {
658
676
  _defineProperty(DropdownFilterPanel, "displayName", 'DropdownFilterPanel');
659
677
  _defineProperty(DropdownFilterPanel, "COMPONENT", 'DropdownFilterPanel');
660
678
  _defineProperty(DropdownFilterPanel, "MAX_TABLE_SIZE", 256);
661
- _defineProperty(DropdownFilterPanel, "DATETIME_FORMATTER", new DateTimeColumnFormatter({
662
- showTimeZone: false,
663
- showTSeparator: true,
664
- defaultDateTimeFormatString: "yyyy-MM-dd HH:mm:ss.SSSSSSSSS"
665
- }));
666
679
  _defineProperty(DropdownFilterPanel, "SOURCE_COLUMN", Object.freeze({
667
680
  name: 'FilterSource',
668
681
  type: null
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownFilterPanel.js","names":["React","Component","connect","debounce","deepEqual","memoize","LayoutUtils","dh","DateTimeColumnFormatter","Formatter","FormatterUtils","TableUtils","Log","getActiveTool","getSettings","Pending","PromiseUtils","DropdownFilter","InputFilterEvent","getColumnsForDashboard","getColumnSelectionValidatorForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","ToolType","WidgetPanel","log","module","DROPDOWN_FILTER_DEBOUNCE","mapStateToProps","state","ownProps","localDashboardId","panelId","getIdFromPanel","props","panelTableMap","dashboardLinks","activeTool","isolatedLinkerPanelId","isLinkerActive","LINKER","undefined","disableLinking","columns","columnSelectionValidator","settings","connector","forwardRef","DropdownFilterPanel","constructor","rawValues","formatter","type","name","isDateType","map","value","DATETIME_FORMATTER","format","getFormattedString","panel","debug","filter","link","end","links","source","length","start","error","get","table","find","columnName","columnType","handleChange","bind","handleClearAllFilters","handleDisconnect","handleReconnect","handleColumnSelected","handleSourceFilterChange","handleSourceSortChange","handleSourceSizeChange","handleSourceMouseEnter","handleSourceMouseLeave","handleValuesTableUpdate","dropdownFilterRef","createRef","panelContainer","pending","panelState","columnFormats","getColumnFormats","isValueShown","timestamp","column","valuesTable","valuesColumn","sourceSize","values","wasFlipped","skipUpdate","isDisconnected","isLoading","isLoaded","componentDidMount","updateValuesTable","sourceTable","getSourceTable","startListeningToSource","sendUpdate","componentDidUpdate","prevProps","prevState","getSource","prevSource","prevSourceTable","updateFormatterSettings","close","stopListeningToSource","componentWillUnmount","cancel","cleanup","getCoordinateForColumn","current","element","querySelector","SOURCE_BUTTON_CLASS_NAME","rect","getBoundingClientRect","width","height","x","left","y","bottom","getSettingsErrorMessage","MAX_TABLE_SIZE","getPanelErrorMessage","panelLinks","getCachedPanelLinks","getCachedSource","getCachedSourceTable","getValuesColumn","getCachedSourceColumn","addEventListener","Table","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","EVENT_SIZECHANGED","EVENT_DISCONNECT","EVENT_RECONNECT","removeEventListener","Date","now","setState","prevTimestamp","isFlip","Error","applySourceFilters","applySourceSorts","detail","glEventHub","emit","COLUMN_SELECTED","SOURCE_COLUMN","clearFilter","setPanelState","setFilterState","sourcePanelId","excludePanelIds","FILTERS_CHANGED","size","add","copy","resolved","then","updateViewportListener","catch","isCanceled","sort","sorts","applySort","setViewport","filters","applyFilter","EVENT_UPDATED","rows","row","render","glContainer","settingsErrorMessage","panelErrorMessage","formattedValues","getCachedValues","showTimeZone","showTSeparator","defaultDateTimeFormatString","Object","freeze","ConnectedDropdownFilterPanel"],"sources":["../../src/panels/DropdownFilterPanel.tsx"],"sourcesContent":["import React, { Component, RefObject } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoizee';\nimport { DashboardPanelProps, LayoutUtils } from '@deephaven/dashboard';\nimport dh from '@deephaven/jsapi-shim';\nimport type { Column, Row, Table, TableTemplate } from '@deephaven/jsapi-shim';\nimport {\n DateTimeColumnFormatter,\n Formatter,\n FormatterUtils,\n FormattingRule,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getActiveTool, getSettings, RootState } from '@deephaven/redux';\nimport { Pending, PromiseUtils } from '@deephaven/utils';\nimport DropdownFilter, {\n DropdownFilterColumn,\n} from '../controls/dropdown-filter/DropdownFilter';\nimport { InputFilterEvent } from '../events';\nimport {\n getColumnsForDashboard,\n getColumnSelectionValidatorForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n} from '../redux';\nimport './DropdownFilterPanel.scss';\nimport ToolType from '../linker/ToolType';\nimport WidgetPanel from './WidgetPanel';\nimport type { Link, LinkPoint } from '../linker/LinkerUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\nimport { PanelState as InputFilterPanelState } from './InputFilterPanel';\n\nconst log = Log.module('DropdownFilterPanel');\n\nconst DROPDOWN_FILTER_DEBOUNCE = 250;\n\ninterface PanelState {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n timestamp?: number;\n}\n\ntype PanelTableMap = Map<string | string[], TableTemplate>;\n\ntype StateProps = {\n columns: Column[];\n columnSelectionValidator?: ColumnSelectionValidator;\n dashboardLinks: Link[];\n disableLinking: boolean;\n isLinkerActive: boolean;\n panelTableMap: PanelTableMap;\n panelState?: PanelState;\n settings: { formatter: FormattingRule[] };\n};\n\ntype OwnProps = DashboardPanelProps;\n\nconst mapStateToProps = (state: RootState, ownProps: OwnProps): StateProps => {\n const { localDashboardId } = ownProps;\n const panelId = LayoutUtils.getIdFromPanel({ props: ownProps });\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const dashboardLinks = getLinksForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER &&\n (isolatedLinkerPanelId === undefined || isolatedLinkerPanelId === panelId);\n // Disable linking if linker is in isolated mode for a different panel\n const disableLinking =\n activeTool === ToolType.LINKER &&\n isolatedLinkerPanelId !== undefined &&\n isolatedLinkerPanelId !== panelId;\n\n return {\n columns: getColumnsForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n isLinkerActive,\n disableLinking,\n settings: getSettings(state),\n panelTableMap,\n dashboardLinks,\n };\n};\n\nconst connector = connect(mapStateToProps, null, null, { forwardRef: true });\n\nexport type DropdownFilterPanelProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\ninterface DropdownFilterPanelState {\n column?: DropdownFilterColumn;\n formatter: Formatter;\n valuesTable?: TableTemplate;\n valuesColumn?: Column;\n sourceSize: number;\n value: string;\n timestamp?: number;\n values: unknown[];\n isValueShown: boolean;\n wasFlipped: boolean;\n skipUpdate: boolean;\n\n panelState?: PanelState; // Dehydrated panel state that can load this panel\n\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n error: unknown | null;\n}\n\nexport class DropdownFilterPanel extends Component<\n DropdownFilterPanelProps,\n DropdownFilterPanelState\n> {\n static displayName = 'DropdownFilterPanel';\n\n static COMPONENT = 'DropdownFilterPanel';\n\n static MAX_TABLE_SIZE = 256;\n\n // Filter dropdown needs to show and send full timestamp format with nanoseconds\n static DATETIME_FORMATTER = new DateTimeColumnFormatter({\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: `yyyy-MM-dd HH:mm:ss.SSSSSSSSS`,\n });\n\n static SOURCE_COLUMN = Object.freeze({\n name: 'FilterSource',\n type: null,\n });\n\n constructor(props: DropdownFilterPanelProps) {\n super(props);\n\n this.handleChange = debounce(\n this.handleChange.bind(this),\n DROPDOWN_FILTER_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleSourceSizeChange = this.handleSourceSizeChange.bind(this);\n this.handleSourceMouseEnter = this.handleSourceMouseEnter.bind(this);\n this.handleSourceMouseLeave = this.handleSourceMouseLeave.bind(this);\n this.handleValuesTableUpdate = this.handleValuesTableUpdate.bind(this);\n\n this.dropdownFilterRef = React.createRef();\n this.panelContainer = React.createRef();\n this.pending = new Pending();\n\n const { panelState, settings } = props;\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n const { value = '', isValueShown = false, name, type, timestamp } =\n panelState ?? {};\n const column = name != null && type != null ? { name, type } : undefined;\n this.state = {\n column,\n formatter: new Formatter(this.columnFormats),\n valuesTable: undefined,\n valuesColumn: undefined,\n sourceSize: 0,\n value,\n timestamp,\n values: [],\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n error: null,\n };\n }\n\n componentDidMount(): void {\n this.updateValuesTable();\n const { dashboardLinks, panelTableMap } = this.props;\n const { column, value, timestamp } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n if (column != null) {\n const { name, type } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n\n componentDidUpdate(\n prevProps: DropdownFilterPanelProps,\n prevState: DropdownFilterPanelState\n ): void {\n const { dashboardLinks, panelTableMap, settings } = this.props;\n const { valuesTable } = this.state;\n const source = this.getSource(dashboardLinks);\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n\n const prevSource = this.getSource(prevProps.dashboardLinks);\n const prevSourceTable = this.getSourceTable(\n prevProps.panelTableMap,\n prevProps.dashboardLinks\n );\n\n if (settings !== prevProps.settings && settings !== undefined) {\n this.updateFormatterSettings(settings);\n }\n\n if (\n valuesTable !== prevState.valuesTable &&\n prevState.valuesTable != null\n ) {\n log.debug('Table in state modified, closing the old table.');\n prevState.valuesTable.close();\n }\n\n // Checking source change in addition to table change\n // in case a different column is selected in the same table\n if (sourceTable !== prevSourceTable || source !== prevSource) {\n this.updateValuesTable();\n }\n\n if (sourceTable !== prevSourceTable) {\n if (prevSourceTable !== null) {\n this.stopListeningToSource(prevSourceTable);\n }\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n }\n }\n\n componentWillUnmount(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n this.pending.cancel();\n if (sourceTable !== null) {\n this.stopListeningToSource(sourceTable);\n }\n if (this.cleanup) {\n this.cleanup();\n }\n if (valuesTable != null) {\n valuesTable.close();\n }\n }\n\n dropdownFilterRef: RefObject<DropdownFilter>;\n\n panelContainer: RefObject<HTMLDivElement>;\n\n pending: Pending;\n\n cleanup?: () => void;\n\n columnFormats?: FormattingRule[];\n\n getCachedValues = memoize(\n (\n rawValues: unknown[],\n { type, name }: DropdownFilterColumn,\n formatter: Formatter\n ) => {\n if (type !== undefined && TableUtils.isDateType(type)) {\n return rawValues.map(value =>\n DropdownFilterPanel.DATETIME_FORMATTER.format(value as number)\n );\n }\n return rawValues.map(value =>\n // Skip formatting for nulls so they don't get converted to ''\n value != null && type != null\n ? formatter.getFormattedString(value, type, name)\n : null\n );\n }\n );\n\n getCoordinateForColumn(): [number, number] | null {\n if (this.panelContainer.current == null) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(\n `.${DropdownFilter.SOURCE_BUTTON_CLASS_NAME}`\n );\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n getSettingsErrorMessage(): string | undefined {\n const { sourceSize } = this.state;\n if (sourceSize > DropdownFilterPanel.MAX_TABLE_SIZE) {\n return `Table too large, must have fewer than ${DropdownFilterPanel.MAX_TABLE_SIZE} options.`;\n }\n return undefined;\n }\n\n getPanelErrorMessage(): string | undefined {\n const { error } = this.state;\n return error != null ? `${error}` : undefined;\n }\n\n getCachedPanelLinks = memoize(\n (dashboardLinks: Link[], panel: DropdownFilterPanel) => {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('getCachedPanelLinks', dashboardLinks, panelId);\n return dashboardLinks.filter(link => link.end?.panelId === panelId);\n }\n );\n\n getCachedSource = memoize((links: Link[]) => {\n log.debug('getCachedSource', links);\n let source: LinkPoint | undefined;\n if (links.length > 0) {\n const [link] = links;\n source = link.start;\n if (links.length > 1) {\n log.error('Filter has more that one link', links);\n }\n }\n return source;\n });\n\n getCachedSourceTable = memoize(\n (\n panelTableMap: Map<string | string[], TableTemplate<Table>>,\n source: LinkPoint | undefined\n ) => {\n log.debug('getCachedSourceTable', panelTableMap, source);\n if (source == null) {\n return null;\n }\n const { panelId } = source;\n return panelTableMap.get(panelId) ?? null;\n }\n );\n\n getCachedSourceColumn = memoize(\n (table: TableTemplate, source: LinkPoint | undefined) => {\n log.debug('getCachedSourceColumn', table, source);\n if (table == null || source == null) {\n return null;\n }\n return (\n table.columns.find(\n ({ name, type }) =>\n name === source.columnName && type === source.columnType\n ) ?? null\n );\n }\n );\n\n getSource(links: Link[]): LinkPoint | undefined {\n const panelLinks = this.getCachedPanelLinks(links, this);\n return this.getCachedSource(panelLinks);\n }\n\n getSourceTable(\n panelTableMap: PanelTableMap,\n links: Link[]\n ): TableTemplate | null {\n const source = this.getSource(links);\n return this.getCachedSourceTable(panelTableMap, source);\n }\n\n getValuesColumn(valuesTable: TableTemplate, links: Link[]): Column | null {\n const source = this.getSource(links);\n return this.getCachedSourceColumn(valuesTable, source);\n }\n\n startListeningToSource(sourceTable: TableTemplate): void {\n log.debug('startListeningToSource');\n sourceTable.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n stopListeningToSource(sourceTable: TableTemplate): void {\n log.debug('stopListeningToSource');\n sourceTable.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n handleChange({\n column,\n isValueShown = false,\n value,\n }: {\n column: Partial<Column> | null;\n isValueShown?: boolean | undefined;\n value?: string | undefined;\n }): void {\n const { name = undefined, type = undefined } = column ?? {};\n let sendUpdate = true;\n let timestamp: number | undefined = Date.now();\n this.setState(\n ({ panelState, timestamp: prevTimestamp, wasFlipped, skipUpdate }) => {\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n const isFlip =\n panelState != null &&\n isValueShown !== panelState.isValueShown &&\n name === panelState.name &&\n type === panelState.type &&\n value === panelState.value;\n sendUpdate =\n (!skipUpdate && isValueShown && (!isFlip || !wasFlipped)) ?? false;\n\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp: timestamp ?? undefined,\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false,\n };\n },\n () => {\n if (sendUpdate) {\n this.sendUpdate(name ?? null, type, value, timestamp);\n }\n }\n );\n }\n\n handleDisconnect(): void {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleSourceFilterChange(): void {\n this.applySourceFilters();\n }\n\n handleSourceSortChange(): void {\n this.applySourceSorts();\n }\n\n handleSourceSizeChange({ detail }: { detail: number }): void {\n this.setState({ sourceSize: detail });\n }\n\n handleColumnSelected(): void {\n log.debug('handleColumnSelected');\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMN_SELECTED,\n this,\n DropdownFilterPanel.SOURCE_COLUMN\n );\n }\n\n handleClearAllFilters(): void {\n this.dropdownFilterRef?.current?.clearFilter();\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param state Filter state to set\n * @param sendUpdate Emit filters changed event if true\n */\n setPanelState(state: InputFilterPanelState, sendUpdate = false): void {\n const { dashboardLinks } = this.props;\n if (this.getSource(dashboardLinks) == null) {\n log.debug('Ignore state update for unlinked filter', state);\n return;\n }\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({ skipUpdate: !sendUpdate });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n this.dropdownFilterRef?.current?.setFilterState(state);\n }\n\n sendUpdate(\n name: string | null,\n type: string | undefined,\n value: string | undefined,\n timestamp?: number\n ): void {\n const { dashboardLinks, glEventHub } = this.props;\n const sourcePanelId = this.getSource(dashboardLinks)?.panelId;\n const excludePanelIds = sourcePanelId === null ? [] : [sourcePanelId];\n log.debug('sendUpdate', {\n name,\n type,\n value,\n timestamp,\n excludePanelIds,\n });\n\n glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value: value != null ? value : '=null',\n timestamp,\n excludePanelIds,\n });\n }\n\n updateValuesTable(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const source = this.getSource(dashboardLinks);\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('updateValuesTable', source, sourceTable);\n\n this.setState({\n values: [],\n valuesTable: undefined,\n error: null,\n });\n\n if (source == null) {\n log.debug('Filter unlinked.');\n this.setState({\n isLoading: false,\n isLoaded: true,\n isValueShown: false,\n sourceSize: 0,\n });\n return;\n }\n\n this.setState({ isLoading: true });\n\n if (sourceTable == null) {\n return;\n }\n\n this.setState({ isLoaded: false, sourceSize: sourceTable.size });\n\n this.pending\n .add(sourceTable.copy(), resolved => resolved.close())\n .then(valuesTable => {\n // Loading/loaded will be set when values array is actually populated\n this.updateViewportListener(valuesTable);\n this.setState({ valuesTable });\n })\n .catch((error: unknown) => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n this.setState({ isLoading: false, error });\n });\n }\n\n applySourceSorts(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceSorts', sourceTable?.sort);\n if (valuesTable == null || sourceTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const sorts = [...sourceTable.sort];\n valuesTable.applySort(sorts);\n this.setViewport(valuesTable);\n }\n\n applySourceFilters(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceFilters', sourceTable?.filter);\n if (valuesTable == null || sourceTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const filters = [...sourceTable.filter];\n valuesTable.applyFilter(filters);\n this.setViewport(valuesTable);\n }\n\n updateViewportListener(valuesTable: TableTemplate): void {\n log.debug('updateViewportListener', valuesTable?.size);\n\n if (this.cleanup) {\n this.cleanup();\n }\n\n if (valuesTable == null) {\n this.cleanup = undefined;\n return;\n }\n\n this.cleanup = valuesTable.addEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleValuesTableUpdate\n );\n\n this.setViewport(valuesTable);\n }\n\n setViewport(valuesTable: TableTemplate): void {\n const { dashboardLinks } = this.props;\n const valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\n if (!valuesColumn) {\n log.error('values column is null');\n return;\n }\n valuesTable.setViewport(0, DropdownFilterPanel.MAX_TABLE_SIZE - 1, [\n valuesColumn,\n ]);\n }\n\n updateFormatterSettings(settings: {\n formatter?: FormattingRule[] | undefined;\n }): void {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n if (!deepEqual(this.columnFormats, columnFormats)) {\n this.columnFormats = columnFormats;\n this.setState({ formatter: new Formatter(columnFormats) });\n }\n }\n\n handleValuesTableUpdate({ detail }: { detail: { rows: Row[] } }): void {\n const { rows } = detail;\n const { dashboardLinks } = this.props;\n const { valuesTable } = this.state;\n if (!valuesTable) {\n log.error('valuesTable is null');\n return;\n }\n const valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\n if (!valuesColumn) {\n log.error('Values column not found');\n return;\n }\n const values = rows.map(row => row.get(valuesColumn));\n this.setState({ values, isLoading: false, isLoaded: true, valuesColumn });\n }\n\n handleSourceMouseEnter(): void {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n\n handleSourceMouseLeave(): void {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n render(): React.ReactElement {\n const {\n columns,\n dashboardLinks,\n disableLinking,\n glContainer,\n glEventHub,\n isLinkerActive,\n } = this.props;\n const {\n column,\n formatter,\n isDisconnected,\n isValueShown,\n value,\n values,\n valuesColumn,\n isLoading,\n isLoaded,\n } = this.state;\n const source = this.getSource(dashboardLinks);\n const settingsErrorMessage = this.getSettingsErrorMessage();\n const panelErrorMessage = this.getPanelErrorMessage();\n const formattedValues =\n isLoaded && valuesColumn != null\n ? this.getCachedValues(values, valuesColumn, formatter)\n : [];\n\n return (\n <WidgetPanel\n errorMessage={panelErrorMessage}\n isLoading={isLoading}\n isLoaded={isLoaded}\n isDisconnected={isDisconnected}\n className=\"iris-dropdown-filter-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n widgetName=\"Dropdown Filter\"\n widgetType=\"DropdownFilter\"\n >\n <div\n ref={this.panelContainer}\n className=\"dropdown-filter-container h-100 w-100 container\"\n >\n <DropdownFilter\n ref={this.dropdownFilterRef}\n column={column}\n columns={columns}\n isValueShown={isValueShown}\n isLinkerActive={isLinkerActive}\n disableLinking={disableLinking}\n isLoaded={isLoaded}\n settingsError={settingsErrorMessage}\n source={source}\n value={value}\n values={formattedValues}\n onChange={this.handleChange}\n onColumnSelected={this.handleColumnSelected}\n onSourceMouseEnter={this.handleSourceMouseEnter}\n onSourceMouseLeave={this.handleSourceMouseLeave}\n />\n </div>\n </WidgetPanel>\n );\n }\n}\n\nconst ConnectedDropdownFilterPanel = connector(DropdownFilterPanel);\n\nexport default ConnectedDropdownFilterPanel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"DropdownFilterPanel.js","names":["React","Component","connect","debounce","deepEqual","memoize","LayoutUtils","DateTimeColumnFormatter","Formatter","FormatterUtils","TableUtils","Log","getActiveTool","getApi","getSettings","Pending","PromiseUtils","DropdownFilter","InputFilterEvent","getColumnsForDashboard","getColumnSelectionValidatorForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","ToolType","WidgetPanel","log","module","DROPDOWN_FILTER_DEBOUNCE","mapStateToProps","state","ownProps","localDashboardId","panelId","getIdFromPanel","props","panelTableMap","dashboardLinks","activeTool","isolatedLinkerPanelId","isLinkerActive","LINKER","undefined","disableLinking","columns","columnSelectionValidator","dh","settings","connector","forwardRef","DropdownFilterPanel","constructor","rawValues","formatter","type","name","isDateType","map","value","dateTimeFormatter","format","getFormattedString","panel","debug","filter","link","end","links","source","length","start","error","get","table","find","columnName","columnType","handleChange","bind","handleClearAllFilters","handleDisconnect","handleReconnect","handleColumnSelected","handleSourceFilterChange","handleSourceSortChange","handleSourceSizeChange","handleSourceMouseEnter","handleSourceMouseLeave","handleValuesTableUpdate","dropdownFilterRef","createRef","panelContainer","pending","panelState","columnFormats","getColumnFormats","showTimeZone","showTSeparator","defaultDateTimeFormatString","isValueShown","timestamp","column","valuesTable","valuesColumn","sourceSize","values","wasFlipped","skipUpdate","isDisconnected","isLoading","isLoaded","componentDidMount","updateValuesTable","sourceTable","getSourceTable","startListeningToSource","sendUpdate","componentDidUpdate","prevProps","prevState","getSource","prevSource","prevSourceTable","updateFormatterSettings","close","stopListeningToSource","componentWillUnmount","cancel","cleanup","getCoordinateForColumn","current","element","querySelector","SOURCE_BUTTON_CLASS_NAME","rect","getBoundingClientRect","width","height","x","left","y","bottom","getSettingsErrorMessage","MAX_TABLE_SIZE","getPanelErrorMessage","panelLinks","getCachedPanelLinks","getCachedSource","getCachedSourceTable","getValuesColumn","getCachedSourceColumn","addEventListener","Table","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","EVENT_SIZECHANGED","EVENT_DISCONNECT","EVENT_RECONNECT","removeEventListener","Date","now","setState","prevTimestamp","isFlip","Error","applySourceFilters","applySourceSorts","detail","glEventHub","emit","COLUMN_SELECTED","SOURCE_COLUMN","clearFilter","setPanelState","setFilterState","sourcePanelId","excludePanelIds","FILTERS_CHANGED","size","add","copy","resolved","then","updateViewportListener","catch","isCanceled","sort","sorts","applySort","setViewport","filters","applyFilter","EVENT_UPDATED","rows","row","render","glContainer","settingsErrorMessage","panelErrorMessage","formattedValues","getCachedValues","Object","freeze","ConnectedDropdownFilterPanel"],"sources":["../../src/panels/DropdownFilterPanel.tsx"],"sourcesContent":["import React, { Component, RefObject } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoizee';\nimport { DashboardPanelProps, LayoutUtils } from '@deephaven/dashboard';\nimport type {\n dh as DhType,\n Column,\n Row,\n Table,\n TableTemplate,\n} from '@deephaven/jsapi-types';\nimport {\n DateTimeColumnFormatter,\n Formatter,\n FormatterUtils,\n FormattingRule,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getApi,\n getSettings,\n RootState,\n} from '@deephaven/redux';\nimport { Pending, PromiseUtils } from '@deephaven/utils';\nimport DropdownFilter, {\n DropdownFilterColumn,\n} from '../controls/dropdown-filter/DropdownFilter';\nimport { InputFilterEvent } from '../events';\nimport {\n getColumnsForDashboard,\n getColumnSelectionValidatorForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n} from '../redux';\nimport './DropdownFilterPanel.scss';\nimport ToolType from '../linker/ToolType';\nimport WidgetPanel from './WidgetPanel';\nimport type { Link, LinkPoint } from '../linker/LinkerUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\nimport { PanelState as InputFilterPanelState } from './InputFilterPanel';\n\nconst log = Log.module('DropdownFilterPanel');\n\nconst DROPDOWN_FILTER_DEBOUNCE = 250;\n\ninterface PanelState {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n timestamp?: number;\n}\n\ntype PanelTableMap = Map<string | string[], TableTemplate>;\n\ntype StateProps = {\n columns: Column[];\n columnSelectionValidator?: ColumnSelectionValidator;\n dashboardLinks: Link[];\n dh: DhType;\n disableLinking: boolean;\n isLinkerActive: boolean;\n panelTableMap: PanelTableMap;\n panelState?: PanelState;\n settings: { formatter: FormattingRule[] };\n};\n\ntype OwnProps = DashboardPanelProps;\n\nconst mapStateToProps = (state: RootState, ownProps: OwnProps): StateProps => {\n const { localDashboardId } = ownProps;\n const panelId = LayoutUtils.getIdFromPanel({ props: ownProps });\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const dashboardLinks = getLinksForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER &&\n (isolatedLinkerPanelId === undefined || isolatedLinkerPanelId === panelId);\n // Disable linking if linker is in isolated mode for a different panel\n const disableLinking =\n activeTool === ToolType.LINKER &&\n isolatedLinkerPanelId !== undefined &&\n isolatedLinkerPanelId !== panelId;\n\n return {\n columns: getColumnsForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n dh: getApi(state),\n isLinkerActive,\n disableLinking,\n settings: getSettings(state),\n panelTableMap,\n dashboardLinks,\n };\n};\n\nconst connector = connect(mapStateToProps, null, null, { forwardRef: true });\n\nexport type DropdownFilterPanelProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\ninterface DropdownFilterPanelState {\n column?: DropdownFilterColumn;\n formatter: Formatter;\n valuesTable?: TableTemplate;\n valuesColumn?: Column;\n sourceSize: number;\n value: string;\n timestamp?: number;\n values: unknown[];\n isValueShown: boolean;\n wasFlipped: boolean;\n skipUpdate: boolean;\n\n panelState?: PanelState; // Dehydrated panel state that can load this panel\n\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n error: unknown | null;\n}\n\nexport class DropdownFilterPanel extends Component<\n DropdownFilterPanelProps,\n DropdownFilterPanelState\n> {\n static displayName = 'DropdownFilterPanel';\n\n static COMPONENT = 'DropdownFilterPanel';\n\n static MAX_TABLE_SIZE = 256;\n\n static SOURCE_COLUMN = Object.freeze({\n name: 'FilterSource',\n type: null,\n });\n\n constructor(props: DropdownFilterPanelProps) {\n super(props);\n\n this.handleChange = debounce(\n this.handleChange.bind(this),\n DROPDOWN_FILTER_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleSourceSizeChange = this.handleSourceSizeChange.bind(this);\n this.handleSourceMouseEnter = this.handleSourceMouseEnter.bind(this);\n this.handleSourceMouseLeave = this.handleSourceMouseLeave.bind(this);\n this.handleValuesTableUpdate = this.handleValuesTableUpdate.bind(this);\n\n this.dropdownFilterRef = React.createRef();\n this.panelContainer = React.createRef();\n this.pending = new Pending();\n\n const { dh, panelState, settings } = props;\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n // Filter dropdown needs to show and send full timestamp format with nanoseconds\n this.dateTimeFormatter = new DateTimeColumnFormatter(dh, {\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: `yyyy-MM-dd HH:mm:ss.SSSSSSSSS`,\n });\n const { value = '', isValueShown = false, name, type, timestamp } =\n panelState ?? {};\n const column = name != null && type != null ? { name, type } : undefined;\n this.state = {\n column,\n formatter: new Formatter(dh, this.columnFormats),\n valuesTable: undefined,\n valuesColumn: undefined,\n sourceSize: 0,\n value,\n timestamp,\n values: [],\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n error: null,\n };\n }\n\n componentDidMount(): void {\n this.updateValuesTable();\n const { dashboardLinks, panelTableMap } = this.props;\n const { column, value, timestamp } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n if (column != null) {\n const { name, type } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n\n componentDidUpdate(\n prevProps: DropdownFilterPanelProps,\n prevState: DropdownFilterPanelState\n ): void {\n const { dashboardLinks, panelTableMap, settings } = this.props;\n const { valuesTable } = this.state;\n const source = this.getSource(dashboardLinks);\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n\n const prevSource = this.getSource(prevProps.dashboardLinks);\n const prevSourceTable = this.getSourceTable(\n prevProps.panelTableMap,\n prevProps.dashboardLinks\n );\n\n if (settings !== prevProps.settings && settings !== undefined) {\n this.updateFormatterSettings(settings);\n }\n\n if (\n valuesTable !== prevState.valuesTable &&\n prevState.valuesTable != null\n ) {\n log.debug('Table in state modified, closing the old table.');\n prevState.valuesTable.close();\n }\n\n // Checking source change in addition to table change\n // in case a different column is selected in the same table\n if (sourceTable !== prevSourceTable || source !== prevSource) {\n this.updateValuesTable();\n }\n\n if (sourceTable !== prevSourceTable) {\n if (prevSourceTable !== null) {\n this.stopListeningToSource(prevSourceTable);\n }\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n }\n }\n\n componentWillUnmount(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n this.pending.cancel();\n if (sourceTable !== null) {\n this.stopListeningToSource(sourceTable);\n }\n if (this.cleanup) {\n this.cleanup();\n }\n if (valuesTable != null) {\n valuesTable.close();\n }\n }\n\n dateTimeFormatter: DateTimeColumnFormatter;\n\n dropdownFilterRef: RefObject<DropdownFilter>;\n\n panelContainer: RefObject<HTMLDivElement>;\n\n pending: Pending;\n\n cleanup?: () => void;\n\n columnFormats?: FormattingRule[];\n\n getCachedValues = memoize(\n (\n rawValues: unknown[],\n { type, name }: DropdownFilterColumn,\n formatter: Formatter\n ) => {\n if (type !== undefined && TableUtils.isDateType(type)) {\n return rawValues.map(value =>\n this.dateTimeFormatter.format(value as number)\n );\n }\n return rawValues.map(value =>\n // Skip formatting for nulls so they don't get converted to ''\n value != null && type != null\n ? formatter.getFormattedString(value, type, name)\n : null\n );\n }\n );\n\n getCoordinateForColumn(): [number, number] | null {\n if (this.panelContainer.current == null) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(\n `.${DropdownFilter.SOURCE_BUTTON_CLASS_NAME}`\n );\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n getSettingsErrorMessage(): string | undefined {\n const { sourceSize } = this.state;\n if (sourceSize > DropdownFilterPanel.MAX_TABLE_SIZE) {\n return `Table too large, must have fewer than ${DropdownFilterPanel.MAX_TABLE_SIZE} options.`;\n }\n return undefined;\n }\n\n getPanelErrorMessage(): string | undefined {\n const { error } = this.state;\n return error != null ? `${error}` : undefined;\n }\n\n getCachedPanelLinks = memoize(\n (dashboardLinks: Link[], panel: DropdownFilterPanel) => {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('getCachedPanelLinks', dashboardLinks, panelId);\n return dashboardLinks.filter(link => link.end?.panelId === panelId);\n }\n );\n\n getCachedSource = memoize((links: Link[]) => {\n log.debug('getCachedSource', links);\n let source: LinkPoint | undefined;\n if (links.length > 0) {\n const [link] = links;\n source = link.start;\n if (links.length > 1) {\n log.error('Filter has more that one link', links);\n }\n }\n return source;\n });\n\n getCachedSourceTable = memoize(\n (\n panelTableMap: Map<string | string[], TableTemplate<Table>>,\n source: LinkPoint | undefined\n ) => {\n log.debug('getCachedSourceTable', panelTableMap, source);\n if (source == null) {\n return null;\n }\n const { panelId } = source;\n return panelTableMap.get(panelId) ?? null;\n }\n );\n\n getCachedSourceColumn = memoize(\n (table: TableTemplate, source: LinkPoint | undefined) => {\n log.debug('getCachedSourceColumn', table, source);\n if (table == null || source == null) {\n return null;\n }\n return (\n table.columns.find(\n ({ name, type }) =>\n name === source.columnName && type === source.columnType\n ) ?? null\n );\n }\n );\n\n getSource(links: Link[]): LinkPoint | undefined {\n const panelLinks = this.getCachedPanelLinks(links, this);\n return this.getCachedSource(panelLinks);\n }\n\n getSourceTable(\n panelTableMap: PanelTableMap,\n links: Link[]\n ): TableTemplate | null {\n const source = this.getSource(links);\n return this.getCachedSourceTable(panelTableMap, source);\n }\n\n getValuesColumn(valuesTable: TableTemplate, links: Link[]): Column | null {\n const source = this.getSource(links);\n return this.getCachedSourceColumn(valuesTable, source);\n }\n\n startListeningToSource(sourceTable: TableTemplate): void {\n const { dh } = this.props;\n log.debug('startListeningToSource');\n sourceTable.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n stopListeningToSource(sourceTable: TableTemplate): void {\n const { dh } = this.props;\n log.debug('stopListeningToSource');\n sourceTable.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n handleChange({\n column,\n isValueShown = false,\n value,\n }: {\n column: Partial<Column> | null;\n isValueShown?: boolean | undefined;\n value?: string | undefined;\n }): void {\n const { name = undefined, type = undefined } = column ?? {};\n let sendUpdate = true;\n let timestamp: number | undefined = Date.now();\n this.setState(\n ({ panelState, timestamp: prevTimestamp, wasFlipped, skipUpdate }) => {\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n const isFlip =\n panelState != null &&\n isValueShown !== panelState.isValueShown &&\n name === panelState.name &&\n type === panelState.type &&\n value === panelState.value;\n sendUpdate =\n (!skipUpdate && isValueShown && (!isFlip || !wasFlipped)) ?? false;\n\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp: timestamp ?? undefined,\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false,\n };\n },\n () => {\n if (sendUpdate) {\n this.sendUpdate(name ?? null, type, value, timestamp);\n }\n }\n );\n }\n\n handleDisconnect(): void {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleSourceFilterChange(): void {\n this.applySourceFilters();\n }\n\n handleSourceSortChange(): void {\n this.applySourceSorts();\n }\n\n handleSourceSizeChange({ detail }: { detail: number }): void {\n this.setState({ sourceSize: detail });\n }\n\n handleColumnSelected(): void {\n log.debug('handleColumnSelected');\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMN_SELECTED,\n this,\n DropdownFilterPanel.SOURCE_COLUMN\n );\n }\n\n handleClearAllFilters(): void {\n this.dropdownFilterRef?.current?.clearFilter();\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param state Filter state to set\n * @param sendUpdate Emit filters changed event if true\n */\n setPanelState(state: InputFilterPanelState, sendUpdate = false): void {\n const { dashboardLinks } = this.props;\n if (this.getSource(dashboardLinks) == null) {\n log.debug('Ignore state update for unlinked filter', state);\n return;\n }\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({ skipUpdate: !sendUpdate });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n this.dropdownFilterRef?.current?.setFilterState(state);\n }\n\n sendUpdate(\n name: string | null,\n type: string | undefined,\n value: string | undefined,\n timestamp?: number\n ): void {\n const { dashboardLinks, glEventHub } = this.props;\n const sourcePanelId = this.getSource(dashboardLinks)?.panelId;\n const excludePanelIds = sourcePanelId === null ? [] : [sourcePanelId];\n log.debug('sendUpdate', {\n name,\n type,\n value,\n timestamp,\n excludePanelIds,\n });\n\n glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value: value != null ? value : '=null',\n timestamp,\n excludePanelIds,\n });\n }\n\n updateValuesTable(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const source = this.getSource(dashboardLinks);\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('updateValuesTable', source, sourceTable);\n\n this.setState({\n values: [],\n valuesTable: undefined,\n error: null,\n });\n\n if (source == null) {\n log.debug('Filter unlinked.');\n this.setState({\n isLoading: false,\n isLoaded: true,\n isValueShown: false,\n sourceSize: 0,\n });\n return;\n }\n\n this.setState({ isLoading: true });\n\n if (sourceTable == null) {\n return;\n }\n\n this.setState({ isLoaded: false, sourceSize: sourceTable.size });\n\n this.pending\n .add(sourceTable.copy(), resolved => resolved.close())\n .then(valuesTable => {\n // Loading/loaded will be set when values array is actually populated\n this.updateViewportListener(valuesTable);\n this.setState({ valuesTable });\n })\n .catch((error: unknown) => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n this.setState({ isLoading: false, error });\n });\n }\n\n applySourceSorts(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceSorts', sourceTable?.sort);\n if (valuesTable == null || sourceTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const sorts = [...sourceTable.sort];\n valuesTable.applySort(sorts);\n this.setViewport(valuesTable);\n }\n\n applySourceFilters(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceFilters', sourceTable?.filter);\n if (valuesTable == null || sourceTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const filters = [...sourceTable.filter];\n valuesTable.applyFilter(filters);\n this.setViewport(valuesTable);\n }\n\n updateViewportListener(valuesTable: TableTemplate): void {\n const { dh } = this.props;\n log.debug('updateViewportListener', valuesTable?.size);\n\n if (this.cleanup) {\n this.cleanup();\n }\n\n if (valuesTable == null) {\n this.cleanup = undefined;\n return;\n }\n\n this.cleanup = valuesTable.addEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleValuesTableUpdate\n );\n\n this.setViewport(valuesTable);\n }\n\n setViewport(valuesTable: TableTemplate): void {\n const { dashboardLinks } = this.props;\n const valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\n if (!valuesColumn) {\n log.error('values column is null');\n return;\n }\n valuesTable.setViewport(0, DropdownFilterPanel.MAX_TABLE_SIZE - 1, [\n valuesColumn,\n ]);\n }\n\n updateFormatterSettings(settings: {\n formatter?: FormattingRule[] | undefined;\n }): void {\n const { dh } = this.props;\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n if (!deepEqual(this.columnFormats, columnFormats)) {\n this.columnFormats = columnFormats;\n this.setState({ formatter: new Formatter(dh, columnFormats) });\n }\n }\n\n handleValuesTableUpdate({ detail }: { detail: { rows: Row[] } }): void {\n const { rows } = detail;\n const { dashboardLinks } = this.props;\n const { valuesTable } = this.state;\n if (!valuesTable) {\n log.error('valuesTable is null');\n return;\n }\n const valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\n if (!valuesColumn) {\n log.error('Values column not found');\n return;\n }\n const values = rows.map(row => row.get(valuesColumn));\n this.setState({ values, isLoading: false, isLoaded: true, valuesColumn });\n }\n\n handleSourceMouseEnter(): void {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n\n handleSourceMouseLeave(): void {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n render(): React.ReactElement {\n const {\n columns,\n dashboardLinks,\n disableLinking,\n glContainer,\n glEventHub,\n isLinkerActive,\n } = this.props;\n const {\n column,\n formatter,\n isDisconnected,\n isValueShown,\n value,\n values,\n valuesColumn,\n isLoading,\n isLoaded,\n } = this.state;\n const source = this.getSource(dashboardLinks);\n const settingsErrorMessage = this.getSettingsErrorMessage();\n const panelErrorMessage = this.getPanelErrorMessage();\n const formattedValues =\n isLoaded && valuesColumn != null\n ? this.getCachedValues(values, valuesColumn, formatter)\n : [];\n\n return (\n <WidgetPanel\n errorMessage={panelErrorMessage}\n isLoading={isLoading}\n isLoaded={isLoaded}\n isDisconnected={isDisconnected}\n className=\"iris-dropdown-filter-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n widgetName=\"Dropdown Filter\"\n widgetType=\"DropdownFilter\"\n >\n <div\n ref={this.panelContainer}\n className=\"dropdown-filter-container h-100 w-100 container\"\n >\n <DropdownFilter\n ref={this.dropdownFilterRef}\n column={column}\n columns={columns}\n isValueShown={isValueShown}\n isLinkerActive={isLinkerActive}\n disableLinking={disableLinking}\n isLoaded={isLoaded}\n settingsError={settingsErrorMessage}\n source={source}\n value={value}\n values={formattedValues}\n onChange={this.handleChange}\n onColumnSelected={this.handleColumnSelected}\n onSourceMouseEnter={this.handleSourceMouseEnter}\n onSourceMouseLeave={this.handleSourceMouseLeave}\n />\n </div>\n </WidgetPanel>\n );\n }\n}\n\nconst ConnectedDropdownFilterPanel = connector(DropdownFilterPanel);\n\nexport default ConnectedDropdownFilterPanel;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "0.38.1-beta.7+ce1fe2ce",
3
+ "version": "0.38.1-beta.9+4b40e4b8",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,25 +22,25 @@
22
22
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
23
23
  },
24
24
  "dependencies": {
25
- "@deephaven/chart": "^0.38.1-beta.7+ce1fe2ce",
26
- "@deephaven/components": "^0.38.1-beta.7+ce1fe2ce",
27
- "@deephaven/console": "^0.38.1-beta.7+ce1fe2ce",
28
- "@deephaven/dashboard": "^0.38.1-beta.7+ce1fe2ce",
29
- "@deephaven/file-explorer": "^0.38.1-beta.7+ce1fe2ce",
30
- "@deephaven/filters": "^0.38.1-beta.7+ce1fe2ce",
31
- "@deephaven/golden-layout": "^0.38.1-beta.7+ce1fe2ce",
32
- "@deephaven/grid": "^0.38.1-beta.7+ce1fe2ce",
33
- "@deephaven/icons": "^0.38.1-beta.7+ce1fe2ce",
34
- "@deephaven/iris-grid": "^0.38.1-beta.7+ce1fe2ce",
35
- "@deephaven/jsapi-bootstrap": "^0.38.1-beta.7+ce1fe2ce",
36
- "@deephaven/jsapi-shim": "^0.38.1-beta.7+ce1fe2ce",
37
- "@deephaven/jsapi-types": "^0.38.1-beta.7+ce1fe2ce",
38
- "@deephaven/jsapi-utils": "^0.38.1-beta.7+ce1fe2ce",
39
- "@deephaven/log": "^0.38.1-beta.7+ce1fe2ce",
40
- "@deephaven/react-hooks": "^0.38.1-beta.7+ce1fe2ce",
41
- "@deephaven/redux": "^0.38.1-beta.7+ce1fe2ce",
42
- "@deephaven/storage": "^0.38.1-beta.7+ce1fe2ce",
43
- "@deephaven/utils": "^0.38.1-beta.7+ce1fe2ce",
25
+ "@deephaven/chart": "^0.38.1-beta.9+4b40e4b8",
26
+ "@deephaven/components": "^0.38.1-beta.9+4b40e4b8",
27
+ "@deephaven/console": "^0.38.1-beta.9+4b40e4b8",
28
+ "@deephaven/dashboard": "^0.38.1-beta.9+4b40e4b8",
29
+ "@deephaven/file-explorer": "^0.38.1-beta.9+4b40e4b8",
30
+ "@deephaven/filters": "^0.38.1-beta.9+4b40e4b8",
31
+ "@deephaven/golden-layout": "^0.38.1-beta.9+4b40e4b8",
32
+ "@deephaven/grid": "^0.38.1-beta.9+4b40e4b8",
33
+ "@deephaven/icons": "^0.38.1-beta.9+4b40e4b8",
34
+ "@deephaven/iris-grid": "^0.38.1-beta.9+4b40e4b8",
35
+ "@deephaven/jsapi-bootstrap": "^0.38.1-beta.9+4b40e4b8",
36
+ "@deephaven/jsapi-shim": "^0.38.1-beta.9+4b40e4b8",
37
+ "@deephaven/jsapi-types": "^0.38.1-beta.9+4b40e4b8",
38
+ "@deephaven/jsapi-utils": "^0.38.1-beta.9+4b40e4b8",
39
+ "@deephaven/log": "^0.38.1-beta.9+4b40e4b8",
40
+ "@deephaven/react-hooks": "^0.38.1-beta.9+4b40e4b8",
41
+ "@deephaven/redux": "^0.38.1-beta.9+4b40e4b8",
42
+ "@deephaven/storage": "^0.38.1-beta.9+4b40e4b8",
43
+ "@deephaven/utils": "^0.38.1-beta.9+4b40e4b8",
44
44
  "@fortawesome/react-fontawesome": "^0.2.0",
45
45
  "classnames": "^2.3.1",
46
46
  "deep-equal": "^2.0.5",
@@ -63,8 +63,8 @@
63
63
  "react-redux": "^7.2.4"
64
64
  },
65
65
  "devDependencies": {
66
- "@deephaven/mocks": "^0.38.1-beta.7+ce1fe2ce",
67
- "@deephaven/tsconfig": "^0.38.1-beta.7+ce1fe2ce"
66
+ "@deephaven/mocks": "^0.38.1-beta.9+4b40e4b8",
67
+ "@deephaven/tsconfig": "^0.38.1-beta.9+4b40e4b8"
68
68
  },
69
69
  "files": [
70
70
  "dist"
@@ -75,5 +75,5 @@
75
75
  "publishConfig": {
76
76
  "access": "public"
77
77
  },
78
- "gitHead": "ce1fe2ce8cf28c4bc90356ebb25422835b5070df"
78
+ "gitHead": "4b40e4b831c3dae4f7b869b71c7f6185560f929e"
79
79
  }