@deephaven/dashboard-core-plugins 0.85.35-alpha-pivots.9 → 0.85.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/linker/Linker.js +1 -1
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.d.ts +1 -1
- package/dist/linker/LinkerOverlayContent.d.ts.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +2 -1
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.d.ts +1 -1
- package/dist/linker/LinkerUtils.d.ts.map +1 -1
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/package.json +23 -23
package/dist/linker/Linker.js
CHANGED
|
@@ -526,7 +526,7 @@ export class Linker extends Component {
|
|
|
526
526
|
end,
|
|
527
527
|
operator
|
|
528
528
|
} = links[i];
|
|
529
|
-
if (start.panelId === sourceId && end != null
|
|
529
|
+
if (start.panelId === sourceId && end != null) {
|
|
530
530
|
var _filterMap$get$filter, _filterMap$get;
|
|
531
531
|
var {
|
|
532
532
|
panelId: endPanelId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Linker.js","names":["React","Component","connect","nanoid","memoize","FadeTransition","LayoutUtils","PanelEvent","DateTimeColumnFormatter","DateUtils","TableUtils","Log","Type","FilterType","getActiveTool","getApi","getTimeZone","setActiveTool","setActiveToolAction","assertNotNull","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","isLinkableColumn","listenForFilterColumnsChanged","listenForLinkPointSelected","listenForLinkSourceDataSelected","listenForRegisterLinkTarget","jsx","_jsx","log","module","mapState","state","ownProps","activeTool","dh","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","_defineProperty","Map","linkInProgress","isolateForPanelId","combinedLinks","start","push","undefined","filter","link","_link$start","_link$end","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleLinksUpdated","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","handleLinkPointSelected","handleTargetRegistered","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","removerFns","CLOSE","CLOSED","DRAGGING","DROPPED","off","forEach","remove","setState","panel","column","getIdFromPanel","columnSelected","sourceId","columns","debug","deleteLinksForPanelId","linksToDelete","_ref","findColumn","deleteLinks","debug2","options","type","isIsolatedLinker","isAlwaysEnd","isOverlayShown","panelLinks","_link$start2","_link$end2","LINKER","length","isAlwaysEndPoint","arguments","overrideIsolatedLinkerPanelId","name","columnName","columnType","newLink","id","isReversed","endType","_linkInProgress$endTy","isValid","isLinkValid","finalType","existingLinkPanelId","_ref2","panelLinkEnd","existingLinkEnd","existingLinkStart","_ref3","panelLinkStart","operator","eq","addLinks","unsetFilterValueForLink","panelManager","_linkTargetPropMap$ge","linkTargetPropMap","unsetFilterValue","get","endPanel","getOpenedPanelById","setPanelFilterMap","filterMap","_linkTargetPropMap$ge2","setFilterValues","setFilterMap","clearAll","map","_ref4","isolatedLinks","_link$start3","_link$end3","linkId","find","l","handlers","delete","set","dataMap","panelFilterMap","i","_filterMap$get$filter","_filterMap$get","endPanelId","existingFilterMap","filterList","visibleIndex","startColumnIndex","isExpandable","isGrouped","value","text","concat","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","componentId","newLinks","forceUpdate","updateLinkInProgressType","_ref5","_objectSpread","panelOrId","tableColumn","_linkInProgress$endTy2","getComponentNameFromPanel","description","render","isLinkOverlayShown","disabled","linkerOverlayMessage","in","mountOnEnter","unmountOnExit","onExited","children","getCachedLinks","messageText","onLinkSelected","onLinkDeleted","onAllLinksDeleted","onLinksUpdated","onDone","onCancel","ConnectedLinker"],"sources":["../../src/linker/Linker.tsx"],"sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport memoize from 'memoize-one';\nimport { FadeTransition } 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 { assertNotNull } from '@deephaven/utils';\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 } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkFilterMap,\n LinkType,\n isLinkableColumn,\n type LinkPointOptions,\n} from './LinkerUtils';\nimport {\n type FilterColumnSourceId,\n listenForFilterColumnsChanged,\n} from '../FilterEvents';\nimport {\n type LinkTargetProps,\n listenForLinkPointSelected,\n listenForLinkSourceDataSelected,\n listenForRegisterLinkTarget,\n} from './LinkerEvent';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n dh: typeof 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:\n setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link & { endType?: LinkType };\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.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.handleLinkPointSelected = this.handleLinkPointSelected.bind(this);\n this.handleTargetRegistered = this.handleTargetRegistered.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 private linkTargetPropMap: Map<string, LinkTargetProps> = new Map();\n\n private removerFns: (() => void)[] = [];\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 this.removerFns = [\n listenForFilterColumnsChanged(eventHub, this.handleColumnsChanged),\n listenForLinkPointSelected(eventHub, this.handleLinkPointSelected),\n listenForLinkSourceDataSelected(eventHub, this.handleUpdateValues),\n listenForRegisterLinkTarget(eventHub, this.handleTargetRegistered),\n ];\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(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 this.removerFns.forEach(remove => remove());\n this.removerFns = [];\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 const panelId = LayoutUtils.getIdFromPanel(panel);\n assertNotNull(panelId);\n this.columnSelected(panelId, column, 'chartLink', true);\n }\n\n handleColumnsChanged(\n sourceId: FilterColumnSourceId,\n columns: readonly LinkColumn[] | null\n ): void {\n log.debug('handleColumnsChanged', sourceId, columns);\n const { links } = this.props;\n if (sourceId == null) {\n log.error('Invalid filter columns source id', sourceId);\n return;\n }\n\n // Columns is null when dh.ui widgets with linker capability are closed\n if (columns == null) {\n this.deleteLinksForPanelId(sourceId);\n return;\n }\n // NOTE: links need to be updated to use sourceId instead of panelId. This will be done when we implement linker for dh.ui widgets DH-18840\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 === sourceId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === sourceId &&\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 const panelId = LayoutUtils.getIdFromPanel(panel);\n assertNotNull(panelId);\n this.columnSelected(panelId, column, 'tableLink');\n }\n\n handleLinkPointSelected(\n sourceId: string,\n column: LinkColumn,\n options: LinkPointOptions\n ): void {\n const { type } = options;\n const isIsolatedLinker = type === 'filterSource';\n const isAlwaysEnd = type === 'chartLink' || type === 'filterSource';\n\n // filterSource type should open in isolated linker mode\n if (!this.isOverlayShown() && sourceId != null && isIsolatedLinker) {\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelLinks = links.filter(\n link =>\n link.start?.panelId === sourceId || link.end?.panelId === sourceId\n );\n\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, sourceId);\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(sourceId, column, type, isAlwaysEnd, sourceId);\n }\n return;\n }\n\n this.columnSelected(sourceId, column, type, isAlwaysEnd);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param sourceId The ID of the source for the column selection\n * @param column The column that was selected\n * @param type The type of the link point\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 sourceId: string,\n column: LinkColumn,\n type: LinkType,\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 { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link & { endType?: LinkType } = {\n id: nanoid(),\n start: {\n panelId: sourceId,\n columnName,\n columnType,\n },\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n if (isAlwaysEndPoint) {\n newLink.endType = type;\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 = false } = linkInProgress;\n const end = {\n panelId: sourceId,\n columnName,\n columnType,\n };\n\n const isValid =\n !(isReversed && isAlwaysEndPoint) && // Cannot add a point which is only an end when we already have an end\n LinkerUtils.isLinkValid(\n isReversed ? end : start,\n isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n if (!isValid) {\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n }\n\n // The end point is what determines the type\n // If the link is reversed, we already set the type on the linkInProgress\n const finalType = linkInProgress.endType ?? type;\n\n switch (finalType) {\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 ? end : start,\n end: isReversed ? start : end,\n id,\n type: finalType,\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 { linkTargetPropMap } = this;\n const unsetFilterValue = linkTargetPropMap.get(panelId)?.unsetFilterValue;\n if (unsetFilterValue) {\n unsetFilterValue(columnName, columnType);\n return;\n }\n\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists or target is not a panel. 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 { linkTargetPropMap } = this;\n const setFilterValues = linkTargetPropMap.get(panelId)?.setFilterValues;\n if (setFilterValues) {\n setFilterValues(filterMap);\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug(\n 'panel no longer exists or target is not a panel. Ignoring setFilterMap',\n panelId\n );\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 handleTargetRegistered(\n sourceId: string,\n handlers: LinkTargetProps | null\n ): void {\n const { linkTargetPropMap } = this;\n if (handlers == null) {\n linkTargetPropMap.delete(sourceId);\n } else {\n linkTargetPropMap.set(sourceId, handlers);\n }\n }\n\n handleUpdateValues(sourceId: string, dataMap: RowDataMap): void {\n const { dh, links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap: Map<string, LinkFilterMap> = 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 === sourceId && end != null && operator != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const existingFilterMap = panelFilterMap.get(endPanelId);\n const filterMap: LinkFilterMap = existingFilterMap ?? new Map();\n const filterList = filterMap.get(columnName)?.filterList ?? [];\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 filterList.push({ operator, text, value, startColumnIndex });\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 panelOrId: PanelComponent | string,\n tableColumn: LinkColumn | undefined,\n options: LinkPointOptions\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n // This is backwards compatibility for Grizzly Enterprise panels\n // IrisGridPanel is the only allowed start point for a link\n // The enterprise panels will not call this method with options\n // They are also JS and removed in sanluis, so figure this is best for now\n const isAlwaysEnd =\n typeof panelOrId === 'string'\n ? options.type === 'filterSource' || options.type === 'chartLink'\n : LayoutUtils.getComponentNameFromPanel(panelOrId) !== 'IrisGridPanel';\n\n if (tableColumn == null) {\n if (linkInProgress?.start != null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType('invalid');\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 = false, start } = linkInProgress;\n const panelId =\n typeof panelOrId === 'string'\n ? panelOrId\n : LayoutUtils.getIdFromPanel(panelOrId);\n if (panelId == null) {\n return false;\n }\n\n // We've already selected an end point, so we can't select another one\n if (isReversed && isAlwaysEnd) {\n this.updateLinkInProgressType('invalid');\n return false;\n }\n\n const end = {\n panelId,\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const isValid = isReversed\n ? LinkerUtils.isLinkValid(end, start, isolatedLinkerPanelId)\n : LinkerUtils.isLinkValid(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(\n isValid ? linkInProgress.endType ?? options.type : 'invalid'\n );\n\n return isValid;\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 <FadeTransition\n in={isLinkOverlayShown}\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 linkTargetPropMap={this.linkTargetPropMap}\n />\n </FadeTransition>\n ) : null;\n }\n}\n\nconst ConnectedLinker = connector(Linker);\n\nexport default ConnectedLinker;\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAmB,OAAO;AACnD,SAASC,OAAO,QAAwB,aAAa;AACrD,SAASC,MAAM,QAAQ,QAAQ;AAC/B,OAAOC,OAAO,MAAM,aAAa;AACjC,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SACEC,WAAW,EAEXC,UAAU,QAEL,sBAAsB;AAE7B,SACEC,uBAAuB,EACvBC,SAAS,EAETC,UAAU,QACL,wBAAwB;AAE/B,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,IAAI,IAAIC,UAAU,QAAQ,oBAAoB;AACvD,SACEC,aAAa,EACbC,MAAM,EACNC,WAAW,EACXC,aAAa,IAAIC,mBAAmB,QAE/B,kBAAkB;AACzB,SAASC,aAAa,QAAQ,kBAAkB;AAAC,SAE/CC,oCAAoC,EACpCC,oBAAoB,EACpBC,iBAAiB,IAAIC,uBAAuB,EAC5CC,iBAAiB,IAAIC,uBAAuB,EAC5CC,oBAAoB,IAAIC,0BAA0B,EAClDC,iCAAiC,IAAIC,uCAAuC,EAC5EC,oCAAoC,IAAIC,0CAA0C;AAAA,OAE7EC,QAAQ;AAAA,SACNC,UAAU,EAAEC,aAAa;AAAA,OAC3BC,oBAAoB;AAAA,OACpBC,WAAW,IAChBC,eAAe,EAKfC,gBAAgB;AAAA,SAKhBC,6BAA6B;AAAA,SAI7BC,0BAA0B,EAC1BC,+BAA+B,EAC/BC,2BAA2B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAG7B,IAAMC,GAAG,GAAGlC,GAAG,CAACmC,MAAM,CAAC,QAAQ,CAAC;AAgBhC,IAAMC,QAAQ,GAAGA,CAACC,KAAgB,EAAEC,QAAkB,MAAkB;EACtEC,UAAU,EAAEpC,aAAa,CAACkC,KAAK,CAAC;EAChCG,EAAE,EAAEpC,MAAM,CAACiC,KAAK,CAAC;EACjBI,qBAAqB,EAAEhC,oCAAoC,CACzD4B,KAAK,EACLC,QAAQ,CAACI,gBACX,CAAC;EACDC,KAAK,EAAEjC,oBAAoB,CAAC2B,KAAK,EAAEC,QAAQ,CAACI,gBAAgB,CAAC;EAC7DE,QAAQ,EAAEvC,WAAW,CAACgC,KAAK;AAC7B,CAAC,CAAC;AAEF,IAAMQ,SAAS,GAAGtD,OAAO,CAAC6C,QAAQ,EAAE;EAClC9B,aAAa,EAAEC,mBAAmB;EAClCI,iBAAiB,EAAEC,uBAAuB;EAC1CC,iBAAiB,EAAEC,uBAAuB;EAC1CC,oBAAoB,EAAEC,0BAA0B;EAChDC,iCAAiC,EAAEC,uCAAuC;EAC1EC,oCAAoC,EAClCC;AACJ,CAAC,CAAC;AAYF,OAAO,MAAM0B,MAAM,SAASxD,SAAS,CAA2B;EAC9DyD,WAAWA,CAACC,KAAkB,EAAE;IAC9B,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,4BA2D2C,IAAIC,GAAG,CAAC,CAAC;IAAAD,eAAA,qBAE9B,EAAE;IAAAA,eAAA,yBA8ftBxD,OAAO,CACtB,CACEkD,KAAa,EACbQ,cAAgC,EAChCC,iBAAqC,KAClC;MACH,IAAMC,aAAa,GAAG,CAAC,GAAGV,KAAK,CAAC;MAEhC,IAAIQ,cAAc,IAAI,IAAI,IAAIA,cAAc,CAACG,KAAK,IAAI,IAAI,EAAE;QAC1DD,aAAa,CAACE,IAAI,CAACJ,cAAc,CAAC;MACpC;MAEA,IAAIC,iBAAiB,KAAKI,SAAS,EAAE;QACnC,OAAOH,aAAa,CAACI,MAAM,CACzBC,IAAI;UAAA,IAAAC,WAAA,EAAAC,SAAA;UAAA,OACF,CAAAF,IAAI,aAAJA,IAAI,wBAAAC,WAAA,GAAJD,IAAI,CAAEJ,KAAK,cAAAK,WAAA,uBAAXA,WAAA,CAAaE,OAAO,MAAKT,iBAAiB,IAC1C,CAAAM,IAAI,aAAJA,IAAI,wBAAAE,SAAA,GAAJF,IAAI,CAAEI,GAAG,cAAAF,SAAA,uBAATA,SAAA,CAAWC,OAAO,MAAKT,iBAAiB,IACxC,CAAAM,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEI,GAAG,KAAI,IAAI;QAAA,CACrB,CAAC;MACH;MACA;MACA,OAAOT,aAAa;IACtB,CACF,CAAC;IAhlBC,IAAI,CAACU,YAAY,GAAG,IAAI,CAACA,YAAY,CAACC,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACC,UAAU,GAAG,IAAI,CAACA,UAAU,CAACD,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACE,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACF,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACG,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACH,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACI,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACJ,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACK,wBAAwB,GAAG,IAAI,CAACA,wBAAwB,CAACL,IAAI,CAAC,IAAI,CAAC;IACxE,IAAI,CAACM,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACN,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACO,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACP,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACQ,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACR,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACS,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACT,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACU,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACV,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACW,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACX,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACY,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACZ,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACa,YAAY,GAAG,IAAI,CAACA,YAAY,CAACb,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACc,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACd,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACe,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACf,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACgB,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAAChB,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACiB,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACjB,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACkB,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAAClB,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACmB,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACnB,IAAI,CAAC,IAAI,CAAC;IAEpE,IAAI,CAAC3B,KAAK,GAAG;MACXc,cAAc,EAAEK,SAAS;MACzB4B,WAAW,EAAE,IAAIC,GAAG,CAAS,CAAC;MAC9BC,eAAe,EAAE;IACnB,CAAC;EACH;EAEAC,iBAAiBA,CAAA,EAAS;IACxB,IAAM;MAAEC;IAAO,CAAC,GAAG,IAAI,CAACxC,KAAK;IAC7B,IAAI,CAACyC,cAAc,CAACD,MAAM,CAAC;IAC3B,IAAI,CAACE,yBAAyB,CAAC,CAAC;EAClC;EAEAC,kBAAkBA,CAACC,SAAsB,EAAQ;IAC/C,IAAM;MAAErD,UAAU;MAAEiD;IAAO,CAAC,GAAG,IAAI,CAACxC,KAAK;IACzC,IAAIwC,MAAM,KAAKI,SAAS,CAACJ,MAAM,EAAE;MAC/B,IAAI,CAACK,aAAa,CAACD,SAAS,CAACJ,MAAM,CAAC;MACpC,IAAI,CAACC,cAAc,CAACD,MAAM,CAAC;IAC7B;IACA,IAAIjD,UAAU,KAAKqD,SAAS,CAACrD,UAAU,EAAE;MACvC,IAAI,CAACmD,yBAAyB,CAAC,CAAC;MAChC,IAAInD,UAAU,KAAKlB,QAAQ,CAACyE,OAAO,EAAE;QACnC,IAAI,CAACC,KAAK,CAAC,CAAC;MACd;IACF;EACF;EAEAC,iBAAiBA,CAACC,KAAY,EAAEC,IAAe,EAAQ;IACrDhE,GAAG,CAAC+D,KAAK,CAAC,mBAAmB,EAAEA,KAAK,EAAEC,IAAI,CAAC;EAC7C;EAEAC,oBAAoBA,CAAA,EAAS;IAC3B,IAAM;MAAEX;IAAO,CAAC,GAAG,IAAI,CAACxC,KAAK;IAC7B,IAAI,CAAC6C,aAAa,CAACL,MAAM,CAAC;EAC5B;EAMAC,cAAcA,CAACD,MAAoB,EAAQ;IACzCA,MAAM,CAACY,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC/B,wBAAwB,CAAC;IAExD,IAAM;MAAEgC;IAAS,CAAC,GAAGb,MAAM;IAC3Ba,QAAQ,CAACD,EAAE,CAAC7E,aAAa,CAAC+E,eAAe,EAAE,IAAI,CAAC5B,sBAAsB,CAAC;IACvE2B,QAAQ,CAACD,EAAE,CAAC7E,aAAa,CAACgF,aAAa,EAAE,IAAI,CAAC5B,kBAAkB,CAAC;IACjE0B,QAAQ,CAACD,EAAE,CAAC7E,aAAa,CAACiF,aAAa,EAAE,IAAI,CAAC5B,iBAAiB,CAAC;IAChEyB,QAAQ,CAACD,EAAE,CAAC9E,UAAU,CAACgF,eAAe,EAAE,IAAI,CAAC7B,uBAAuB,CAAC;IACrE4B,QAAQ,CAACD,EAAE,CAACxG,UAAU,CAAC6G,MAAM,EAAE,IAAI,CAACvC,iBAAiB,CAAC;IACtD,IAAI,CAACwC,UAAU,GAAG,CAChB9E,6BAA6B,CAACyE,QAAQ,EAAE,IAAI,CAAClC,oBAAoB,CAAC,EAClEtC,0BAA0B,CAACwE,QAAQ,EAAE,IAAI,CAACvB,uBAAuB,CAAC,EAClEhD,+BAA+B,CAACuE,QAAQ,EAAE,IAAI,CAAC1B,kBAAkB,CAAC,EAClE5C,2BAA2B,CAACsE,QAAQ,EAAE,IAAI,CAACtB,sBAAsB,CAAC,CACnE;IACDsB,QAAQ,CAACD,EAAE,CAACxG,UAAU,CAAC+G,KAAK,EAAE,IAAI,CAACvC,iBAAiB,CAAC;IACrDiC,QAAQ,CAACD,EAAE,CAACxG,UAAU,CAACgH,MAAM,EAAE,IAAI,CAACxC,iBAAiB,CAAC;IACtDiC,QAAQ,CAACD,EAAE,CAACxG,UAAU,CAACiH,QAAQ,EAAE,IAAI,CAAC5B,mBAAmB,CAAC;IAC1DoB,QAAQ,CAACD,EAAE,CAACxG,UAAU,CAACkH,OAAO,EAAE,IAAI,CAAC5B,kBAAkB,CAAC;EAC1D;EAEAW,aAAaA,CAACL,MAAoB,EAAQ;IACxCA,MAAM,CAACuB,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC1C,wBAAwB,CAAC;IAEzD,IAAM;MAAEgC;IAAS,CAAC,GAAGb,MAAM;IAC3Ba,QAAQ,CAACU,GAAG,CAACxF,aAAa,CAAC+E,eAAe,EAAE,IAAI,CAAC5B,sBAAsB,CAAC;IACxE2B,QAAQ,CAACU,GAAG,CAACxF,aAAa,CAACgF,aAAa,EAAE,IAAI,CAAC5B,kBAAkB,CAAC;IAClE0B,QAAQ,CAACU,GAAG,CAACxF,aAAa,CAACiF,aAAa,EAAE,IAAI,CAAC5B,iBAAiB,CAAC;IACjEyB,QAAQ,CAACU,GAAG,CAACzF,UAAU,CAACgF,eAAe,EAAE,IAAI,CAAC7B,uBAAuB,CAAC;IACtE4B,QAAQ,CAACU,GAAG,CAACnH,UAAU,CAAC6G,MAAM,EAAE,IAAI,CAACvC,iBAAiB,CAAC;IACvDmC,QAAQ,CAACU,GAAG,CAACnH,UAAU,CAAC+G,KAAK,EAAE,IAAI,CAACvC,iBAAiB,CAAC;IACtDiC,QAAQ,CAACU,GAAG,CAACnH,UAAU,CAACgH,MAAM,EAAE,IAAI,CAACxC,iBAAiB,CAAC;IACvDiC,QAAQ,CAACU,GAAG,CAACnH,UAAU,CAACiH,QAAQ,EAAE,IAAI,CAAC5B,mBAAmB,CAAC;IAC3DoB,QAAQ,CAACU,GAAG,CAACnH,UAAU,CAACkH,OAAO,EAAE,IAAI,CAAC5B,kBAAkB,CAAC;IACzD,IAAI,CAACwB,UAAU,CAACM,OAAO,CAACC,MAAM,IAAIA,MAAM,CAAC,CAAC,CAAC;IAC3C,IAAI,CAACP,UAAU,GAAG,EAAE;EACtB;EAEAX,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACmB,QAAQ,CAAC;MACZ/D,cAAc,EAAEK,SAAS;MACzB4B,WAAW,EAAE,IAAIC,GAAG,CAAS;IAC/B,CAAC,CAAC;EACJ;EAEAtB,YAAYA,CAAA,EAAS;IACnB,IAAM;MAAEZ;IAAe,CAAC,GAAG,IAAI,CAACd,KAAK;IACrC,IAAIc,cAAc,IAAI,IAAI,EAAE;MAC1B,IAAM;QAAE7C;MAAc,CAAC,GAAG,IAAI,CAAC0C,KAAK;MACpC1C,aAAa,CAACe,QAAQ,CAACyE,OAAO,CAAC;IACjC;IACA,IAAI,CAACoB,QAAQ,CAAC;MAAE/D,cAAc,EAAEK;IAAU,CAAC,CAAC;EAC9C;EAEAS,UAAUA,CAAA,EAAS;IACjB,IAAM;MAAE3D;IAAc,CAAC,GAAG,IAAI,CAAC0C,KAAK;IACpC1C,aAAa,CAACe,QAAQ,CAACyE,OAAO,CAAC;EACjC;EAEArB,uBAAuBA,CAAC0C,KAAqB,EAAEC,MAAkB,EAAQ;IACvE,IAAMvD,OAAO,GAAGlE,WAAW,CAAC0H,cAAc,CAACF,KAAK,CAAC;IACjD3G,aAAa,CAACqD,OAAO,CAAC;IACtB,IAAI,CAACyD,cAAc,CAACzD,OAAO,EAAEuD,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC;EACzD;EAEAjD,oBAAoBA,CAClBoD,QAA8B,EAC9BC,OAAqC,EAC/B;IACNtF,GAAG,CAACuF,KAAK,CAAC,sBAAsB,EAAEF,QAAQ,EAAEC,OAAO,CAAC;IACpD,IAAM;MAAE7E;IAAM,CAAC,GAAG,IAAI,CAACK,KAAK;IAC5B,IAAIuE,QAAQ,IAAI,IAAI,EAAE;MACpBrF,GAAG,CAAC+D,KAAK,CAAC,kCAAkC,EAAEsB,QAAQ,CAAC;MACvD;IACF;;IAEA;IACA,IAAIC,OAAO,IAAI,IAAI,EAAE;MACnB,IAAI,CAACE,qBAAqB,CAACH,QAAQ,CAAC;MACpC;IACF;IACA;IACA;IACA,IAAMI,aAAa,GAAGhF,KAAK,CAACc,MAAM,CAChCmE,IAAA;MAAA,IAAC;QAAEtE,KAAK;QAAEQ;MAAI,CAAC,GAAA8D,IAAA;MAAA,OACZtE,KAAK,CAACO,OAAO,KAAK0D,QAAQ,IACzB9F,WAAW,CAACoG,UAAU,CAACL,OAAO,EAAElE,KAAK,CAAC,IAAI,IAAI,IAC/CQ,GAAG,IAAI,IAAI,IACVA,GAAG,CAACD,OAAO,KAAK0D,QAAQ,IACxB9F,WAAW,CAACoG,UAAU,CAACL,OAAO,EAAE1D,GAAG,CAAC,IAAI,IAAK;IAAA,CACnD,CAAC;IACD,IAAI,CAACgE,WAAW,CAACH,aAAa,CAAC;EACjC;EAEAjD,sBAAsBA,CAACyC,KAAqB,EAAEC,MAAkB,EAAQ;IACtE,IAAI,CAACzF,gBAAgB,CAACyF,MAAM,CAAC,EAAE;MAC7BlF,GAAG,CAAC6F,MAAM,CAAC,0BAA0B,CAAC;MACtC;IACF;IACA,IAAMlE,OAAO,GAAGlE,WAAW,CAAC0H,cAAc,CAACF,KAAK,CAAC;IACjD3G,aAAa,CAACqD,OAAO,CAAC;IACtB,IAAI,CAACyD,cAAc,CAACzD,OAAO,EAAEuD,MAAM,EAAE,WAAW,CAAC;EACnD;EAEAtC,uBAAuBA,CACrByC,QAAgB,EAChBH,MAAkB,EAClBY,OAAyB,EACnB;IACN,IAAM;MAAEC;IAAK,CAAC,GAAGD,OAAO;IACxB,IAAME,gBAAgB,GAAGD,IAAI,KAAK,cAAc;IAChD,IAAME,WAAW,GAAGF,IAAI,KAAK,WAAW,IAAIA,IAAI,KAAK,cAAc;;IAEnE;IACA,IAAI,CAAC,IAAI,CAACG,cAAc,CAAC,CAAC,IAAIb,QAAQ,IAAI,IAAI,IAAIW,gBAAgB,EAAE;MAClE,IAAM;QACJvF,KAAK;QACLD,gBAAgB;QAChBpC,aAAa;QACbW;MACF,CAAC,GAAG,IAAI,CAAC+B,KAAK;MAEd,IAAMqF,UAAU,GAAG1F,KAAK,CAACc,MAAM,CAC7BC,IAAI;QAAA,IAAA4E,YAAA,EAAAC,UAAA;QAAA,OACF,EAAAD,YAAA,GAAA5E,IAAI,CAACJ,KAAK,cAAAgF,YAAA,uBAAVA,YAAA,CAAYzE,OAAO,MAAK0D,QAAQ,IAAI,EAAAgB,UAAA,GAAA7E,IAAI,CAACI,GAAG,cAAAyE,UAAA,uBAARA,UAAA,CAAU1E,OAAO,MAAK0D,QAAQ;MAAA,CACtE,CAAC;;MAED;MACA;MACAjH,aAAa,CAACe,QAAQ,CAACmH,MAAM,CAAC;MAC9BvH,iCAAiC,CAACyB,gBAAgB,EAAE6E,QAAQ,CAAC;MAE7D,IAAIc,UAAU,CAACI,MAAM,KAAK,CAAC,EAAE;QAC3B;QACA;QACA;QACA,IAAI,CAACnB,cAAc,CAACC,QAAQ,EAAEH,MAAM,EAAEa,IAAI,EAAEE,WAAW,EAAEZ,QAAQ,CAAC;MACpE;MACA;IACF;IAEA,IAAI,CAACD,cAAc,CAACC,QAAQ,EAAEH,MAAM,EAAEa,IAAI,EAAEE,WAAW,CAAC;EAC1D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEb,cAAcA,CACZC,QAAgB,EAChBH,MAAkB,EAClBa,IAAc,EAGR;IAAA,IAFNS,gBAAgB,GAAAC,SAAA,CAAAF,MAAA,QAAAE,SAAA,QAAAnF,SAAA,GAAAmF,SAAA,MAAG,KAAK;IAAA,IACxBC,6BAAiD,GAAAD,SAAA,CAAAF,MAAA,OAAAE,SAAA,MAAAnF,SAAA;IAEjD,IAAIoF,6BAA6B,KAAKpF,SAAS,IAAI,CAAC,IAAI,CAAC4E,cAAc,CAAC,CAAC,EAAE;MACzE;IACF;IACA,IAAM;MAAE3F;IAAsB,CAAC,GAAG,IAAI,CAACO,KAAK;IAC5C,IAAM;MAAEG;IAAe,CAAC,GAAG,IAAI,CAACd,KAAK;IACrC,IAAM;MAAEwG,IAAI,EAAEC,UAAU;MAAEb,IAAI,EAAEc;IAAW,CAAC,GAAG3B,MAAM;IACrD,IAAIjE,cAAc,IAAI,IAAI,IAAIA,cAAc,CAACG,KAAK,IAAI,IAAI,EAAE;MAC1D,IAAM0F,OAAsC,GAAG;QAC7CC,EAAE,EAAEzJ,MAAM,CAAC,CAAC;QACZ8D,KAAK,EAAE;UACLO,OAAO,EAAE0D,QAAQ;UACjBuB,UAAU;UACVC;QACF,CAAC;QACDd,IAAI,EAAE,SAAS;QACfiB,UAAU,EAAER;MACd,CAAC;MAED,IAAIA,gBAAgB,EAAE;QACpBM,OAAO,CAACG,OAAO,GAAGlB,IAAI;MACxB;MAEA/F,GAAG,CAACuF,KAAK,CAAC,eAAe,EAAEuB,OAAO,CAAC;MAEnC,IAAI,CAAC9B,QAAQ,CAAC;QAAE/D,cAAc,EAAE6F;MAAQ,CAAC,CAAC;IAC5C,CAAC,MAAM;MAAA,IAAAI,qBAAA;MACL,IAAM;QAAEzG;MAAM,CAAC,GAAG,IAAI,CAACK,KAAK;MAC5B,IAAM;QAAEM,KAAK;QAAE2F,EAAE;QAAEC,UAAU,GAAG;MAAM,CAAC,GAAG/F,cAAc;MACxD,IAAMW,GAAG,GAAG;QACVD,OAAO,EAAE0D,QAAQ;QACjBuB,UAAU;QACVC;MACF,CAAC;MAED,IAAMM,OAAO,GACX,EAAEH,UAAU,IAAIR,gBAAgB,CAAC;MAAI;MACrCjH,WAAW,CAAC6H,WAAW,CACrBJ,UAAU,GAAGpF,GAAG,GAAGR,KAAK,EACxB4F,UAAU,GAAG5F,KAAK,GAAGQ,GAAG,EACxB8E,6BAA6B,aAA7BA,6BAA6B,cAA7BA,6BAA6B,GAAInG,qBACnC,CAAC;MAEH,IAAI,CAAC4G,OAAO,EAAE;QACZnH,GAAG,CAACuF,KAAK,CAAC,gCAAgC,EAAEtE,cAAc,EAAEW,GAAG,CAAC;QAChE;MACF;;MAEA;MACA;MACA,IAAMyF,SAAS,IAAAH,qBAAA,GAAGjG,cAAc,CAACgG,OAAO,cAAAC,qBAAA,cAAAA,qBAAA,GAAInB,IAAI;MAEhD,QAAQsB,SAAS;QACf,KAAK,SAAS;UACZrH,GAAG,CAACuF,KAAK,CAAC,gCAAgC,EAAEtE,cAAc,EAAEW,GAAG,CAAC;UAChE;QACF,KAAK,cAAc;UAAE;YACnB;YACA;YACA,IAAM0F,mBAAmB,GACvBN,UAAU,KAAK1F,SAAS,IAAI0F,UAAU,GAClC5F,KAAK,CAACO,OAAO,GACbC,GAAG,CAACD,OAAO;YACjB;YACA;YACA,IAAM8D,aAAa,GAAGhF,KAAK,CAACc,MAAM,CAChCgG,KAAA;cAAA,IAAC;gBAAE3F,GAAG,EAAE4F;cAAa,CAAC,GAAAD,KAAA;cAAA,OACpB,CAAAC,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE7F,OAAO,MAAK2F,mBAAmB;YAAA,CACjD,CAAC;YACD,IAAI,CAAC1B,WAAW,CAACH,aAAa,CAAC;YAC/B;UACF;QACA,KAAK,WAAW;UAAE;YAChB,IAAMgC,eAAe,GAAGT,UAAU,KAAK,IAAI,GAAG5F,KAAK,GAAGQ,GAAG;YACzD,IAAM8F,iBAAiB,GAAGV,UAAU,KAAK,IAAI,GAAGpF,GAAG,GAAGR,KAAK;YAC3DpB,GAAG,CAACuF,KAAK,CAAC,oBAAoB,EAAE;cAAEkC,eAAe;cAAErG,KAAK;cAAEQ;YAAI,CAAC,CAAC;YAChE;YACA,IAAM6D,cAAa,GAAGhF,KAAK,CAACc,MAAM,CAChCoG,KAAA;cAAA,IAAC;gBAAE/F,GAAG,EAAE4F,YAAY;gBAAEpG,KAAK,EAAEwG;cAAe,CAAC,GAAAD,KAAA;cAAA,OAC3C,CAAAC,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEjG,OAAO,MAAK+F,iBAAiB,CAAC/F,OAAO,IACrD,CAAA6F,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE7F,OAAO,MAAK8F,eAAe,CAAC9F,OAAO,IACjD,CAAA6F,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEZ,UAAU,MAAKa,eAAe,CAACb,UAAU,IACvD,CAAAY,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEX,UAAU,MAAKY,eAAe,CAACZ,UAAU;YAAA,CAC3D,CAAC;YACD,IAAI,CAACjB,WAAW,CAACH,cAAa,CAAC;YAC/B;UACF;QACA,KAAK,WAAW;UACd;UACA;MACJ;;MAEA;MACA,IAAMqB,QAAa,GAAG;QACpB1F,KAAK,EAAE4F,UAAU,GAAGpF,GAAG,GAAGR,KAAK;QAC/BQ,GAAG,EAAEoF,UAAU,GAAG5F,KAAK,GAAGQ,GAAG;QAC7BmF,EAAE;QACFhB,IAAI,EAAEsB,SAAS;QACfQ,QAAQ,EAAE7J,UAAU,CAAC8J;MACvB,CAAC;MACD9H,GAAG,CAACgE,IAAI,CAAC,eAAe,EAAE8C,QAAO,CAAC;MAElC,IAAI,CAAC9B,QAAQ,CACX;QAAE/D,cAAc,EAAEK,SAAS;QAAE4B,WAAW,EAAE,IAAIC,GAAG,CAAS,CAAC4D,EAAE,CAAC;MAAE,CAAC,EACjE,MAAM;QACJ;QACA;QACA;QACA,IAAI,CAACgB,QAAQ,CAAC,CAACjB,QAAO,CAAC,CAAC;MAC1B,CACF,CAAC;IACH;EACF;EAEAkB,uBAAuBA,CAACxG,IAAU,EAAQ;IACxC,IAAM;MAAEyG;IAAa,CAAC,GAAG,IAAI,CAACnH,KAAK;IACnC,IAAIU,IAAI,CAACI,GAAG,EAAE;MAAA,IAAAsG,qBAAA;MACZ,IAAM;QAAEtG;MAAI,CAAC,GAAGJ,IAAI;MACpB,IAAM;QAAEG,OAAO;QAAEiF,UAAU;QAAEC;MAAW,CAAC,GAAGjF,GAAG;MAC/C,IAAM;QAAEuG;MAAkB,CAAC,GAAG,IAAI;MAClC,IAAMC,gBAAgB,IAAAF,qBAAA,GAAGC,iBAAiB,CAACE,GAAG,CAAC1G,OAAO,CAAC,cAAAuG,qBAAA,uBAA9BA,qBAAA,CAAgCE,gBAAgB;MACzE,IAAIA,gBAAgB,EAAE;QACpBA,gBAAgB,CAACxB,UAAU,EAAEC,UAAU,CAAC;QACxC;MACF;MAEA,IAAMyB,QAAQ,GAAGL,YAAY,CAACM,kBAAkB,CAAC5G,OAAO,CAAC;MACzD,IAAI,CAAC2G,QAAQ,EAAE;QACbtI,GAAG,CAACuF,KAAK,CACP,+EAA+E,EAC/E5D,OACF,CAAC;MACH,CAAC,MAAM,IAAInC,eAAe,CAAC8I,QAAQ,CAAC,EAAE;QACpCA,QAAQ,CAACF,gBAAgB,CAACxB,UAAU,EAAEC,UAAU,CAAC;MACnD,CAAC,MAAM;QACL7G,GAAG,CAACuF,KAAK,CAAC,2CAA2C,EAAE+C,QAAQ,CAAC;MAClE;IACF;EACF;;EAEA;AACF;AACA;AACA;AACA;EACEE,iBAAiBA,CAAC7G,OAAe,EAAE8G,SAAwB,EAAQ;IAAA,IAAAC,sBAAA;IACjE1I,GAAG,CAACuF,KAAK,CAAC,4BAA4B,EAAE5D,OAAO,EAAE8G,SAAS,CAAC;IAC3D,IAAM;MAAER;IAAa,CAAC,GAAG,IAAI,CAACnH,KAAK;IACnC,IAAM;MAAEqH;IAAkB,CAAC,GAAG,IAAI;IAClC,IAAMQ,eAAe,IAAAD,sBAAA,GAAGP,iBAAiB,CAACE,GAAG,CAAC1G,OAAO,CAAC,cAAA+G,sBAAA,uBAA9BA,sBAAA,CAAgCC,eAAe;IACvE,IAAIA,eAAe,EAAE;MACnBA,eAAe,CAACF,SAAS,CAAC;MAC1B;IACF;IAEA,IAAMxD,KAAK,GAAGgD,YAAY,CAACM,kBAAkB,CAAC5G,OAAO,CAAC;IACtD,IAAI,CAACsD,KAAK,EAAE;MACVjF,GAAG,CAACuF,KAAK,CACP,wEAAwE,EACxE5D,OACF,CAAC;IACH,CAAC,MAAM,IAAInC,eAAe,CAACyF,KAAK,CAAC,EAAE;MACjCA,KAAK,CAAC2D,YAAY,CAACH,SAAS,CAAC;IAC/B,CAAC,MAAM;MACLzI,GAAG,CAACuF,KAAK,CAAC,oCAAoC,EAAE5D,OAAO,EAAEsD,KAAK,CAAC;IACjE;EACF;EAEA8C,QAAQA,CAACtH,KAAa,EAAQ;IAC5B,IAAM;MAAE9B,iBAAiB;MAAE6B;IAAiB,CAAC,GAAG,IAAI,CAACM,KAAK;IAC1DnC,iBAAiB,CAAC6B,gBAAgB,EAAEC,KAAK,CAAC;EAC5C;EAEAmF,WAAWA,CAACnF,KAAa,EAA0B;IAAA,IAAxBoI,QAAQ,GAAApC,SAAA,CAAAF,MAAA,QAAAE,SAAA,QAAAnF,SAAA,GAAAmF,SAAA,MAAG,KAAK;IACzC,IAAM;MAAEjG;IAAiB,CAAC,GAAG,IAAI,CAACM,KAAK;IACvCL,KAAK,CAACqE,OAAO,CAACtD,IAAI,IAAI,IAAI,CAACwG,uBAAuB,CAACxG,IAAI,CAAC,CAAC;IACzD,IAAIqH,QAAQ,EAAE;MACZ,IAAM;QAAEpK;MAAkB,CAAC,GAAG,IAAI,CAACqC,KAAK;MACxCrC,iBAAiB,CAAC+B,gBAAgB,EAAE,EAAE,CAAC;IACzC,CAAC,MAAM,IAAIC,KAAK,CAAC8F,MAAM,GAAG,CAAC,EAAE;MAC3B,IAAM;QAAE1H;MAAqB,CAAC,GAAG,IAAI,CAACiC,KAAK;MAC3CjC,oBAAoB,CAClB2B,gBAAgB,EAChBC,KAAK,CAACqI,GAAG,CAACC,KAAA;QAAA,IAAC;UAAEhC;QAAG,CAAC,GAAAgC,KAAA;QAAA,OAAKhC,EAAE;MAAA,EAC1B,CAAC;IACH;EACF;EAEA3E,qBAAqBA,CAAA,EAAS;IAC5B,IAAM;MAAE3B,KAAK;MAAEF;IAAsB,CAAC,GAAG,IAAI,CAACO,KAAK;IACnD,IAAIP,qBAAqB,KAAKe,SAAS,EAAE;MACvC,IAAI,CAACsE,WAAW,CAACnF,KAAK,EAAE,IAAI,CAAC;IAC/B,CAAC,MAAM;MACL,IAAMuI,aAAa,GAAGvI,KAAK,CAACc,MAAM,CAChCC,IAAI;QAAA,IAAAyH,YAAA,EAAAC,UAAA;QAAA,OACF,CAAA1H,IAAI,aAAJA,IAAI,wBAAAyH,YAAA,GAAJzH,IAAI,CAAEJ,KAAK,cAAA6H,YAAA,uBAAXA,YAAA,CAAatH,OAAO,MAAKpB,qBAAqB,IAC9C,CAAAiB,IAAI,aAAJA,IAAI,wBAAA0H,UAAA,GAAJ1H,IAAI,CAAEI,GAAG,cAAAsH,UAAA,uBAATA,UAAA,CAAWvH,OAAO,MAAKpB,qBAAqB;MAAA,CAChD,CAAC;MACD,IAAI,CAACqF,WAAW,CAACoD,aAAa,CAAC;IACjC;IACA,IAAI,CAACnF,KAAK,CAAC,CAAC;EACd;EAEAxB,iBAAiBA,CAAC8G,MAAc,EAAQ;IACtC,IAAM;MAAE1I;IAAM,CAAC,GAAG,IAAI,CAACK,KAAK;IAC5B,IAAMU,IAAI,GAAGf,KAAK,CAAC2I,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACtC,EAAE,KAAKoC,MAAM,CAAC;IAC7C,IAAI3H,IAAI,EAAE;MACR,IAAI,CAACoE,WAAW,CAAC,CAACpE,IAAI,CAAC,CAAC;IAC1B,CAAC,MAAM;MACLxB,GAAG,CAAC+D,KAAK,CAAC,+BAA+B,EAAEoF,MAAM,CAAC;IACpD;EACF;EAEAtG,sBAAsBA,CACpBwC,QAAgB,EAChBiE,QAAgC,EAC1B;IACN,IAAM;MAAEnB;IAAkB,CAAC,GAAG,IAAI;IAClC,IAAImB,QAAQ,IAAI,IAAI,EAAE;MACpBnB,iBAAiB,CAACoB,MAAM,CAAClE,QAAQ,CAAC;IACpC,CAAC,MAAM;MACL8C,iBAAiB,CAACqB,GAAG,CAACnE,QAAQ,EAAEiE,QAAQ,CAAC;IAC3C;EACF;EAEA7G,kBAAkBA,CAAC4C,QAAgB,EAAEoE,OAAmB,EAAQ;IAC9D,IAAM;MAAEnJ,EAAE;MAAEG,KAAK;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACI,KAAK;IAC1C;IACA,IAAM4I,cAA0C,GAAG,IAAI1I,GAAG,CAAC,CAAC;IAC5D;IACA;IACA,KAAK,IAAI2I,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlJ,KAAK,CAAC8F,MAAM,EAAEoD,CAAC,IAAI,CAAC,EAAE;MACxC,IAAM;QAAEvI,KAAK;QAAEQ,GAAG;QAAEiG;MAAS,CAAC,GAAGpH,KAAK,CAACkJ,CAAC,CAAC;MACzC,IAAIvI,KAAK,CAACO,OAAO,KAAK0D,QAAQ,IAAIzD,GAAG,IAAI,IAAI,IAAIiG,QAAQ,IAAI,IAAI,EAAE;QAAA,IAAA+B,qBAAA,EAAAC,cAAA;QACjE,IAAM;UAAElI,OAAO,EAAEmI,UAAU;UAAElD,UAAU;UAAEC;QAAW,CAAC,GAAGjF,GAAG;QAC3D;QACA,IAAMmI,iBAAiB,GAAGL,cAAc,CAACrB,GAAG,CAACyB,UAAU,CAAC;QACxD,IAAMrB,SAAwB,GAAGsB,iBAAiB,aAAjBA,iBAAiB,cAAjBA,iBAAiB,GAAI,IAAI/I,GAAG,CAAC,CAAC;QAC/D,IAAMgJ,UAAU,IAAAJ,qBAAA,IAAAC,cAAA,GAAGpB,SAAS,CAACJ,GAAG,CAACzB,UAAU,CAAC,cAAAiD,cAAA,uBAAzBA,cAAA,CAA2BG,UAAU,cAAAJ,qBAAA,cAAAA,qBAAA,GAAI,EAAE;QAC9D,IAAM;UACJK,YAAY,EAAEC,gBAAgB;UAC9BC,YAAY;UACZC;QACF,CAAC,GAAGX,OAAO,CAACrI,KAAK,CAACwF,UAAU,CAAC;QAC7B,IAAI;UAAEyD;QAAM,CAAC,GAAGZ,OAAO,CAACrI,KAAK,CAACwF,UAAU,CAAC;QACzC,IAAI0D,IAAI,MAAAC,MAAA,CAAMF,KAAK,CAAE;QACrB,IAAIA,KAAK,KAAK,IAAI,IAAIF,YAAY,IAAIC,SAAS,EAAE;UAC/C;UACAC,KAAK,GAAG/I,SAAS;QACnB;QACA,IAAIuF,UAAU,IAAI,IAAI,IAAIhJ,UAAU,CAAC2M,UAAU,CAAC3D,UAAU,CAAC,EAAE;UAC3D,IAAM4D,mBAAmB,GAAG,IAAI9M,uBAAuB,CAAC2C,EAAE,EAAE;YAC1DI,QAAQ;YACRgK,YAAY,EAAE,KAAK;YACnBC,cAAc,EAAE,IAAI;YACpBC,2BAA2B,EAAEhN,SAAS,CAACiN;UACzC,CAAC,CAAC;UACF;UACAP,IAAI,GAAGG,mBAAmB,CAACK,MAAM,CAACT,KAAa,CAAC;QAClD;QACAL,UAAU,CAAC3I,IAAI,CAAC;UAAEwG,QAAQ;UAAEyC,IAAI;UAAED,KAAK;UAAEH;QAAiB,CAAC,CAAC;QAC5DzB,SAAS,CAACe,GAAG,CAAC5C,UAAU,EAAE;UACxBC,UAAU;UACVmD;QACF,CAAC,CAAC;QACFN,cAAc,CAACF,GAAG,CAACM,UAAU,EAAErB,SAAS,CAAC;MAC3C;IACF;;IAEA;IACAiB,cAAc,CAAC5E,OAAO,CAAC,CAAC2D,SAAS,EAAEqB,UAAU,KAAK;MAChD,IAAI,CAACtB,iBAAiB,CAACsB,UAAU,EAAErB,SAAS,CAAC;IAC/C,CAAC,CAAC;EACJ;EAEAzG,iBAAiBA,CAACiD,KAAqB,EAAE8F,WAA2B,EAAQ;IAC1E,IAAM;MAAEtK;IAAM,CAAC,GAAG,IAAI,CAACK,KAAK;IAC5B,IAAMa,OAAO,GAAGlE,WAAW,CAAC0H,cAAc,CAACF,KAAK,CAAC;IACjD,IAAM+F,OAAO,GAAGD,WAAW,CAAChE,EAAE;IAC9B,IAAIpF,OAAO,IAAI,IAAI,EAAE;MACnB,IAAMsJ,UAAU,GAAG1L,WAAW,CAAC2L,kBAAkB,CAC/CzK,KAAK,EACLkB,OAAO,EACPqJ,OACF,CAAC;MACD,IAAI,CAACjD,QAAQ,CAACkD,UAAU,CAAC;IAC3B;EACF;EAEAlI,mBAAmBA,CAACoI,WAAmB,EAAQ;IAC7C,IAAM;MAAE1K;IAAM,CAAC,GAAG,IAAI,CAACK,KAAK;IAC5B,KAAK,IAAI6I,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlJ,KAAK,CAAC8F,MAAM,EAAEoD,CAAC,IAAI,CAAC,EAAE;MACxC,IAAMnI,IAAI,GAAGf,KAAK,CAACkJ,CAAC,CAAC;MACrB,IAAM;QAAEvI,KAAK;QAAEQ;MAAI,CAAC,GAAGJ,IAAI;MAC3B,IAAIJ,KAAK,CAACO,OAAO,KAAKwJ,WAAW,IAAI,CAAAvJ,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAED,OAAO,MAAKwJ,WAAW,EAAE;QACjE,IAAI,CAACnG,QAAQ,CAAC;UAAE5B,eAAe,EAAE;QAAK,CAAC,CAAC;QACxC;MACF;IACF;EACF;EAEAJ,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAACgC,QAAQ,CAAC;MAAE5B,eAAe,EAAE;IAAM,CAAC,CAAC;EAC3C;EAEAlB,iBAAiBA,CAACP,OAAe,EAAQ;IACvC;IACA;IACA3B,GAAG,CAACuF,KAAK,UAAAgF,MAAA,CAAU5I,OAAO,6BAA0B,CAAC;IACrD,IAAI,CAAC6D,qBAAqB,CAAC7D,OAAO,CAAC;EACrC;EAEAmB,kBAAkBA,CAACqG,MAAc,EAAQ;IACvC,IAAI,CAACnE,QAAQ,CAAC;MAAE9B,WAAW,EAAE,IAAIC,GAAG,CAAS,CAACgG,MAAM,CAAC;IAAE,CAAC,CAAC;EAC3D;EAEA7G,kBAAkBA,CAAC8I,QAAgB,EAAQ;IACzC,IAAM;MAAE5K,gBAAgB;MAAE/B;IAAkB,CAAC,GAAG,IAAI,CAACqC,KAAK;IAC1DrC,iBAAiB,CAAC+B,gBAAgB,EAAE4K,QAAQ,CAAC;EAC/C;EAEAjJ,wBAAwBA,CAAA,EAAS;IAC/B,IAAI,CAACkJ,WAAW,CAAC,CAAC;EACpB;EAEA3I,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAAC2I,WAAW,CAAC,CAAC;EACpB;EAEA1I,YAAYA,CAAA,EAAS;IACnB;IACA,IAAM;MAAEnC,gBAAgB;MAAEzB;IAAkC,CAAC,GAAG,IAAI,CAAC+B,KAAK;IAC1E/B,iCAAiC,CAACyB,gBAAgB,EAAEc,SAAS,CAAC;EAChE;;EAEA;AACF;AACA;AACA;EACEkE,qBAAqBA,CAAC7D,OAAe,EAAQ;IAC3C,IAAM;MAAElB;IAAM,CAAC,GAAG,IAAI,CAACK,KAAK;IAC5B,KAAK,IAAI6I,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlJ,KAAK,CAAC8F,MAAM,EAAEoD,CAAC,IAAI,CAAC,EAAE;MACxC,IAAMnI,IAAI,GAAGf,KAAK,CAACkJ,CAAC,CAAC;MACrB,IAAM;QAAEvI,KAAK;QAAEQ,GAAG;QAAEmF;MAAG,CAAC,GAAGvF,IAAI;MAC/B,IAAIJ,KAAK,CAACO,OAAO,KAAKA,OAAO,IAAI,CAAAC,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAED,OAAO,MAAKA,OAAO,EAAE;QACzD,IAAI,CAACU,iBAAiB,CAAC0E,EAAE,CAAC;MAC5B;IACF;EACF;EA2BAb,cAAcA,CAAA,EAAY;IACxB,IAAM;MAAE7F;IAAW,CAAC,GAAG,IAAI,CAACS,KAAK;IACjC,OAAOT,UAAU,KAAKlB,QAAQ,CAACmH,MAAM;EACvC;EAEA9C,yBAAyBA,CAAA,EAAS;IAChC,IAAM;MACJnD,UAAU;MACVpB,oCAAoC;MACpCuB;IACF,CAAC,GAAG,IAAI,CAACM,KAAK;IACd,QAAQT,UAAU;MAChB,KAAKlB,QAAQ,CAACmH,MAAM;QAClBrH,oCAAoC,CAClCuB,gBAAgB,EAChB,IAAI,CAACyC,sBACP,CAAC;QACD;MACF;QACEhE,oCAAoC,CAACuB,gBAAgB,EAAEc,SAAS,CAAC;QACjE;IACJ;EACF;EAEAgK,wBAAwBA,CAAA,EAAmC;IAAA,IAAlCvF,IAAc,GAAAU,SAAA,CAAAF,MAAA,QAAAE,SAAA,QAAAnF,SAAA,GAAAmF,SAAA,MAAG,SAAS;IACjD,IAAI,CAACzB,QAAQ,CAACuG,KAAA,IAAwB;MAAA,IAAvB;QAAEtK;MAAe,CAAC,GAAAsK,KAAA;MAC/B,IAAItK,cAAc,KAAKK,SAAS,EAAE;QAChC,OAAO;UACLL,cAAc,EAAAuK,aAAA,CAAAA,aAAA,KACTvK,cAAc;YACjB8E;UAAI;QAER,CAAC;MACH;MACA,OAAO,IAAI;IACb,CAAC,CAAC;EACJ;EAEA9C,sBAAsBA,CACpBwI,SAAkC,EAClCC,WAAmC,EACnC5F,OAAyB,EAChB;IAAA,IAAA6F,sBAAA;IACT,IAAM;MAAE1K;IAAe,CAAC,GAAG,IAAI,CAACd,KAAK;IACrC,IAAM;MAAEI;IAAsB,CAAC,GAAG,IAAI,CAACO,KAAK;IAC5C;IACA;IACA;IACA;IACA,IAAMmF,WAAW,GACf,OAAOwF,SAAS,KAAK,QAAQ,GACzB3F,OAAO,CAACC,IAAI,KAAK,cAAc,IAAID,OAAO,CAACC,IAAI,KAAK,WAAW,GAC/DtI,WAAW,CAACmO,yBAAyB,CAACH,SAAS,CAAC,KAAK,eAAe;IAE1E,IAAIC,WAAW,IAAI,IAAI,EAAE;MACvB,IAAI,CAAAzK,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEG,KAAK,KAAI,IAAI,EAAE;QACjC;QACA,IAAI,CAACkK,wBAAwB,CAAC,SAAS,CAAC;MAC1C;MACA,OAAO,KAAK;IACd;;IAEA;IACA,IAAI,CAAC7L,gBAAgB,CAACiM,WAAW,CAAC,EAAE;MAClC1L,GAAG,CAAC6F,MAAM,CAAC,0BAA0B,EAAE6F,WAAW,CAACG,WAAW,CAAC;MAC/D,IAAI,CAAA5K,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEG,KAAK,KAAI,IAAI,EAAE;QACjC,IAAI,CAACkK,wBAAwB,CAAC,SAAS,CAAC;MAC1C;MACA,OAAO,KAAK;IACd;;IAEA;IACA,IAAI,CAAArK,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEG,KAAK,KAAI,IAAI,EAAE;MACjC,OAAO,IAAI;IACb;IAEA,IAAM;MAAE4F,UAAU,GAAG,KAAK;MAAE5F;IAAM,CAAC,GAAGH,cAAc;IACpD,IAAMU,OAAO,GACX,OAAO8J,SAAS,KAAK,QAAQ,GACzBA,SAAS,GACThO,WAAW,CAAC0H,cAAc,CAACsG,SAAS,CAAC;IAC3C,IAAI9J,OAAO,IAAI,IAAI,EAAE;MACnB,OAAO,KAAK;IACd;;IAEA;IACA,IAAIqF,UAAU,IAAIf,WAAW,EAAE;MAC7B,IAAI,CAACqF,wBAAwB,CAAC,SAAS,CAAC;MACxC,OAAO,KAAK;IACd;IAEA,IAAM1J,GAAG,GAAG;MACVD,OAAO;MACPiF,UAAU,EAAE8E,WAAW,CAAC/E,IAAI;MAC5BE,UAAU,EAAE6E,WAAW,CAAC3F;IAC1B,CAAC;IAED,IAAMoB,OAAO,GAAGH,UAAU,GACtBzH,WAAW,CAAC6H,WAAW,CAACxF,GAAG,EAAER,KAAK,EAAEb,qBAAqB,CAAC,GAC1DhB,WAAW,CAAC6H,WAAW,CAAChG,KAAK,EAAEQ,GAAG,EAAErB,qBAAqB,CAAC;IAE9D,IAAI,CAAC+K,wBAAwB,CAC3BnE,OAAO,IAAAwE,sBAAA,GAAG1K,cAAc,CAACgG,OAAO,cAAA0E,sBAAA,cAAAA,sBAAA,GAAI7F,OAAO,CAACC,IAAI,GAAG,SACrD,CAAC;IAED,OAAOoB,OAAO;EAChB;EAEA2E,MAAMA,CAAA,EAAuB;IAC3B,IAAM;MAAErL,KAAK;MAAEF,qBAAqB;MAAE0H;IAAa,CAAC,GAAG,IAAI,CAACnH,KAAK;IACjE,IAAM;MAAEG,cAAc;MAAEiC,WAAW;MAAEE;IAAgB,CAAC,GAAG,IAAI,CAACjD,KAAK;IAEnE,IAAM4L,kBAAkB,GAAG,IAAI,CAAC7F,cAAc,CAAC,CAAC;IAChD,IAAM8F,QAAQ,GAAG/K,cAAc,IAAI,IAAI,IAAIA,cAAc,CAACG,KAAK,IAAI,IAAI;IACvE,IAAM6K,oBAAoB,GACxB1L,qBAAqB,KAAKe,SAAS,GAC/B,mPAAmP,GACnP,uMAAuM;IAE7M,OAAO,CAAC8B,eAAe,gBACrBrD,IAAA,CAACvC,cAAc;MACb0O,EAAE,EAAEH,kBAAmB;MACvBI,YAAY;MACZC,aAAa;MACbC,QAAQ,EAAE,IAAI,CAAC1J,YAAa;MAAA2J,QAAA,eAE5BvM,IAAA,CAACT,oBAAoB;QACnB0M,QAAQ,EAAEA,QAAS;QACnB/D,YAAY,EAAEA,YAAa;QAC3BxH,KAAK,EAAE,IAAI,CAAC8L,cAAc,CACxB9L,KAAK,EACLQ,cAAc,EACdV,qBACF,CAAE;QACF2C,WAAW,EAAEA,WAAY;QACzBsJ,WAAW,EAAEP,oBAAqB;QAClCQ,cAAc,EAAE,IAAI,CAAC3J,kBAAmB;QACxC4J,aAAa,EAAE,IAAI,CAACrK,iBAAkB;QACtCsK,iBAAiB,EAAE,IAAI,CAACvK,qBAAsB;QAC9CwK,cAAc,EAAE,IAAI,CAACtK,kBAAmB;QACxCuK,MAAM,EAAE,IAAI,CAAC9K,UAAW;QACxB+K,QAAQ,EAAE,IAAI,CAACjL,YAAa;QAC5BsG,iBAAiB,EAAE,IAAI,CAACA;MAAkB,CAC3C;IAAC,CACY,CAAC,GACf,IAAI;EACV;AACF;AAEA,IAAM4E,eAAe,GAAGpM,SAAS,CAACC,MAAM,CAAC;AAEzC,eAAemM,eAAe"}
|
|
1
|
+
{"version":3,"file":"Linker.js","names":["React","Component","connect","nanoid","memoize","FadeTransition","LayoutUtils","PanelEvent","DateTimeColumnFormatter","DateUtils","TableUtils","Log","Type","FilterType","getActiveTool","getApi","getTimeZone","setActiveTool","setActiveToolAction","assertNotNull","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","isLinkableColumn","listenForFilterColumnsChanged","listenForLinkPointSelected","listenForLinkSourceDataSelected","listenForRegisterLinkTarget","jsx","_jsx","log","module","mapState","state","ownProps","activeTool","dh","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","_defineProperty","Map","linkInProgress","isolateForPanelId","combinedLinks","start","push","undefined","filter","link","_link$start","_link$end","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleLinksUpdated","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","handleLinkPointSelected","handleTargetRegistered","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","removerFns","CLOSE","CLOSED","DRAGGING","DROPPED","off","forEach","remove","setState","panel","column","getIdFromPanel","columnSelected","sourceId","columns","debug","deleteLinksForPanelId","linksToDelete","_ref","findColumn","deleteLinks","debug2","options","type","isIsolatedLinker","isAlwaysEnd","isOverlayShown","panelLinks","_link$start2","_link$end2","LINKER","length","isAlwaysEndPoint","arguments","overrideIsolatedLinkerPanelId","name","columnName","columnType","newLink","id","isReversed","endType","_linkInProgress$endTy","isValid","isLinkValid","finalType","existingLinkPanelId","_ref2","panelLinkEnd","existingLinkEnd","existingLinkStart","_ref3","panelLinkStart","operator","eq","addLinks","unsetFilterValueForLink","panelManager","_linkTargetPropMap$ge","linkTargetPropMap","unsetFilterValue","get","endPanel","getOpenedPanelById","setPanelFilterMap","filterMap","_linkTargetPropMap$ge2","setFilterValues","setFilterMap","clearAll","map","_ref4","isolatedLinks","_link$start3","_link$end3","linkId","find","l","handlers","delete","set","dataMap","panelFilterMap","i","_filterMap$get$filter","_filterMap$get","endPanelId","existingFilterMap","filterList","visibleIndex","startColumnIndex","isExpandable","isGrouped","value","text","concat","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","componentId","newLinks","forceUpdate","updateLinkInProgressType","_ref5","_objectSpread","panelOrId","tableColumn","_linkInProgress$endTy2","getComponentNameFromPanel","description","render","isLinkOverlayShown","disabled","linkerOverlayMessage","in","mountOnEnter","unmountOnExit","onExited","children","getCachedLinks","messageText","onLinkSelected","onLinkDeleted","onAllLinksDeleted","onLinksUpdated","onDone","onCancel","ConnectedLinker"],"sources":["../../src/linker/Linker.tsx"],"sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport memoize from 'memoize-one';\nimport { FadeTransition } 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 { assertNotNull } from '@deephaven/utils';\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 } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkFilterMap,\n LinkType,\n isLinkableColumn,\n type LinkPointOptions,\n} from './LinkerUtils';\nimport {\n type FilterColumnSourceId,\n listenForFilterColumnsChanged,\n} from '../FilterEvents';\nimport {\n type LinkTargetProps,\n listenForLinkPointSelected,\n listenForLinkSourceDataSelected,\n listenForRegisterLinkTarget,\n} from './LinkerEvent';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n dh: typeof 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:\n setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link & { endType?: LinkType };\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.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.handleLinkPointSelected = this.handleLinkPointSelected.bind(this);\n this.handleTargetRegistered = this.handleTargetRegistered.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 private linkTargetPropMap: Map<string, LinkTargetProps> = new Map();\n\n private removerFns: (() => void)[] = [];\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 this.removerFns = [\n listenForFilterColumnsChanged(eventHub, this.handleColumnsChanged),\n listenForLinkPointSelected(eventHub, this.handleLinkPointSelected),\n listenForLinkSourceDataSelected(eventHub, this.handleUpdateValues),\n listenForRegisterLinkTarget(eventHub, this.handleTargetRegistered),\n ];\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(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 this.removerFns.forEach(remove => remove());\n this.removerFns = [];\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 const panelId = LayoutUtils.getIdFromPanel(panel);\n assertNotNull(panelId);\n this.columnSelected(panelId, column, 'chartLink', true);\n }\n\n handleColumnsChanged(\n sourceId: FilterColumnSourceId,\n columns: readonly LinkColumn[] | null\n ): void {\n log.debug('handleColumnsChanged', sourceId, columns);\n const { links } = this.props;\n if (sourceId == null) {\n log.error('Invalid filter columns source id', sourceId);\n return;\n }\n\n // Columns is null when dh.ui widgets with linker capability are closed\n if (columns == null) {\n this.deleteLinksForPanelId(sourceId);\n return;\n }\n // NOTE: links need to be updated to use sourceId instead of panelId. This will be done when we implement linker for dh.ui widgets DH-18840\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 === sourceId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === sourceId &&\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 const panelId = LayoutUtils.getIdFromPanel(panel);\n assertNotNull(panelId);\n this.columnSelected(panelId, column, 'tableLink');\n }\n\n handleLinkPointSelected(\n sourceId: string,\n column: LinkColumn,\n options: LinkPointOptions\n ): void {\n const { type } = options;\n const isIsolatedLinker = type === 'filterSource';\n const isAlwaysEnd = type === 'chartLink' || type === 'filterSource';\n\n // filterSource type should open in isolated linker mode\n if (!this.isOverlayShown() && sourceId != null && isIsolatedLinker) {\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelLinks = links.filter(\n link =>\n link.start?.panelId === sourceId || link.end?.panelId === sourceId\n );\n\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, sourceId);\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(sourceId, column, type, isAlwaysEnd, sourceId);\n }\n return;\n }\n\n this.columnSelected(sourceId, column, type, isAlwaysEnd);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param sourceId The ID of the source for the column selection\n * @param column The column that was selected\n * @param type The type of the link point\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 sourceId: string,\n column: LinkColumn,\n type: LinkType,\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 { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link & { endType?: LinkType } = {\n id: nanoid(),\n start: {\n panelId: sourceId,\n columnName,\n columnType,\n },\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n if (isAlwaysEndPoint) {\n newLink.endType = type;\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 = false } = linkInProgress;\n const end = {\n panelId: sourceId,\n columnName,\n columnType,\n };\n\n const isValid =\n !(isReversed && isAlwaysEndPoint) && // Cannot add a point which is only an end when we already have an end\n LinkerUtils.isLinkValid(\n isReversed ? end : start,\n isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n if (!isValid) {\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n }\n\n // The end point is what determines the type\n // If the link is reversed, we already set the type on the linkInProgress\n const finalType = linkInProgress.endType ?? type;\n\n switch (finalType) {\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 ? end : start,\n end: isReversed ? start : end,\n id,\n type: finalType,\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 { linkTargetPropMap } = this;\n const unsetFilterValue = linkTargetPropMap.get(panelId)?.unsetFilterValue;\n if (unsetFilterValue) {\n unsetFilterValue(columnName, columnType);\n return;\n }\n\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists or target is not a panel. 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 { linkTargetPropMap } = this;\n const setFilterValues = linkTargetPropMap.get(panelId)?.setFilterValues;\n if (setFilterValues) {\n setFilterValues(filterMap);\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug(\n 'panel no longer exists or target is not a panel. Ignoring setFilterMap',\n panelId\n );\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 handleTargetRegistered(\n sourceId: string,\n handlers: LinkTargetProps | null\n ): void {\n const { linkTargetPropMap } = this;\n if (handlers == null) {\n linkTargetPropMap.delete(sourceId);\n } else {\n linkTargetPropMap.set(sourceId, handlers);\n }\n }\n\n handleUpdateValues(sourceId: string, dataMap: RowDataMap): void {\n const { dh, links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap: Map<string, LinkFilterMap> = 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 === sourceId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const existingFilterMap = panelFilterMap.get(endPanelId);\n const filterMap: LinkFilterMap = existingFilterMap ?? new Map();\n const filterList = filterMap.get(columnName)?.filterList ?? [];\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 filterList.push({ operator, text, value, startColumnIndex });\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 panelOrId: PanelComponent | string,\n tableColumn: LinkColumn | undefined,\n options: LinkPointOptions\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n // This is backwards compatibility for Grizzly Enterprise panels\n // IrisGridPanel is the only allowed start point for a link\n // The enterprise panels will not call this method with options\n // They are also JS and removed in sanluis, so figure this is best for now\n const isAlwaysEnd =\n typeof panelOrId === 'string'\n ? options.type === 'filterSource' || options.type === 'chartLink'\n : LayoutUtils.getComponentNameFromPanel(panelOrId) !== 'IrisGridPanel';\n\n if (tableColumn == null) {\n if (linkInProgress?.start != null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType('invalid');\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 = false, start } = linkInProgress;\n const panelId =\n typeof panelOrId === 'string'\n ? panelOrId\n : LayoutUtils.getIdFromPanel(panelOrId);\n if (panelId == null) {\n return false;\n }\n\n // We've already selected an end point, so we can't select another one\n if (isReversed && isAlwaysEnd) {\n this.updateLinkInProgressType('invalid');\n return false;\n }\n\n const end = {\n panelId,\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const isValid = isReversed\n ? LinkerUtils.isLinkValid(end, start, isolatedLinkerPanelId)\n : LinkerUtils.isLinkValid(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(\n isValid ? linkInProgress.endType ?? options.type : 'invalid'\n );\n\n return isValid;\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 <FadeTransition\n in={isLinkOverlayShown}\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 linkTargetPropMap={this.linkTargetPropMap}\n />\n </FadeTransition>\n ) : null;\n }\n}\n\nconst ConnectedLinker = connector(Linker);\n\nexport default ConnectedLinker;\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { Component, ErrorInfo } from 'react';
|
|
2
2
|
import { PanelManager } from '@deephaven/dashboard';
|
|
3
|
-
import { TypeValue as FilterTypeValue } from '@deephaven/filters';
|
|
3
|
+
import { type TypeValue as FilterTypeValue } from '@deephaven/filters';
|
|
4
4
|
import { Link, LinkerCoordinate, LinkPoint, LinkType } from './LinkerUtils';
|
|
5
5
|
import './LinkerOverlayContent.scss';
|
|
6
6
|
import { type LinkTargetProps } from './LinkerEvent';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerOverlayContent.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerOverlayContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQpD,OAAO,EAAe,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIjE,OAAO,
|
|
1
|
+
{"version":3,"file":"LinkerOverlayContent.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerOverlayContent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { Button, ContextActions, GLOBAL_SHORTCUTS, Tooltip } from '@deephaven/co
|
|
|
9
9
|
import { LayoutUtils } from '@deephaven/dashboard';
|
|
10
10
|
import Log from '@deephaven/log';
|
|
11
11
|
import { vsGripper } from '@deephaven/icons';
|
|
12
|
+
import { Type as FilterType } from '@deephaven/filters';
|
|
12
13
|
import clamp from 'lodash.clamp';
|
|
13
14
|
import { isLinkableFromPanel } from "./LinkerUtils.js";
|
|
14
15
|
import LinkerLink from "./LinkerLink.js";
|
|
@@ -305,7 +306,7 @@ export class LinkerOverlayContent extends Component {
|
|
|
305
306
|
onClick: onLinkSelected,
|
|
306
307
|
onDelete: onLinkDeleted,
|
|
307
308
|
isSelected: selectedIds.has(id),
|
|
308
|
-
operator: operator,
|
|
309
|
+
operator: operator !== null && operator !== void 0 ? operator : FilterType.eq,
|
|
309
310
|
startColumnType: startColumnType,
|
|
310
311
|
type: type,
|
|
311
312
|
onOperatorChanged: this.handleOperatorChanged
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerOverlayContent.js","names":["React","Component","classNames","Button","ContextActions","GLOBAL_SHORTCUTS","Tooltip","LayoutUtils","Log","vsGripper","clamp","isLinkableFromPanel","LinkerLink","jsx","_jsx","jsxs","_jsxs","log","module","LinkerOverlayContent","constructor","props","_defineProperty","handleBlur","bind","handleResize","handleMouseMove","handleMouseDown","handleMouseUp","handleKeyDown","handleKeyUp","handleEscapePressed","handleOperatorChanged","dialogRef","createRef","state","mouse","undefined","dialog","offset","x","y","isDragging","mode","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","linkTargetPropMap","panelId","linkPointId","columnName","linkTargetHandlers","get","coordinates","getCoordinates","panel","getOpenedPanelById","Error","concat","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","linkId","type","links","onLinksUpdated","newLinks","map","link","id","_objectSpread","operator","setState","current","rect","getBoundingClientRect","dialogX","innerWidth","width","dialogY","innerHeight","height","event","clientX","clientY","preventDefault","right","bottom","key","selectedIds","onLinkDeleted","forEach","onCancel","render","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","visibleLinks","_mouse$x","_mouse$y","isReversed","start","end","startColumnType","columnType","x1","y1","x2","y2","tmpX","tmpY","className","interactive","has","warn","filter","item","children","_ref","onClick","onDelete","isSelected","onOperatorChanged","dragging","ref","style","draggable","kind","icon","onMouseDown","actions","action","shortcut","LINKER_CLOSE","isGlobal"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n ContextActions,\n GLOBAL_SHORTCUTS,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { Container } from '@deephaven/golden-layout';\nimport { vsGripper } from '@deephaven/icons';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport clamp from 'lodash.clamp';\nimport {\n isLinkableFromPanel,\n Link,\n LinkerCoordinate,\n LinkPoint,\n LinkType,\n} from './LinkerUtils';\nimport LinkerLink from './LinkerLink';\nimport './LinkerOverlayContent.scss';\nimport { type LinkTargetProps } from './LinkerEvent';\n\nconst log = Log.module('LinkerOverlayContent');\n\nexport type VisibleLink = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n type: LinkType;\n operator: FilterTypeValue;\n startColumnType: string | null;\n};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n selectedIds: Set<string>;\n messageText: string;\n onLinkSelected: (linkId: string) => void;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onLinksUpdated: (newLinks: Link[]) => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n linkTargetPropMap: Map<string, LinkTargetProps>;\n};\n\ntype Point = { x: number; y: number };\n\nexport type LinkerOverlayContentState = {\n mouse?: Point;\n dialog?: Point;\n offset: Point;\n isDragging: boolean;\n mode: 'select' | 'delete';\n};\n\nexport class LinkerOverlayContent extends Component<\n LinkerOverlayContentProps,\n LinkerOverlayContentState\n> {\n static defaultProps = {\n disabled: 'false',\n };\n\n constructor(props: LinkerOverlayContentProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.handleOperatorChanged = this.handleOperatorChanged.bind(this);\n\n this.dialogRef = React.createRef();\n\n this.state = {\n mouse: undefined,\n dialog: undefined,\n offset: { x: 0, y: 0 },\n isDragging: false,\n mode: 'select',\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('blur', this.handleBlur, true);\n window.addEventListener('mousemove', this.handleMouseMove, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n window.addEventListener('keydown', this.handleKeyDown, true);\n window.addEventListener('keyup', this.handleKeyUp, true);\n window.addEventListener('resize', this.handleResize, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('blur', this.handleBlur, true);\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('keydown', this.handleKeyDown, true);\n window.removeEventListener('keyup', this.handleKeyUp, true);\n window.removeEventListener('resize', this.handleResize, true);\n }\n\n dialogRef: React.RefObject<HTMLInputElement>;\n\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint: LinkPoint): LinkerCoordinate {\n const { panelManager, linkTargetPropMap } = this.props;\n const { panelId: linkPointId, columnName } = linkPoint;\n\n let panelId = linkPointId;\n const linkTargetHandlers = linkTargetPropMap.get(linkPointId);\n\n if (linkTargetHandlers != null) {\n panelId = linkTargetHandlers.panelId;\n const coordinates = linkTargetHandlers.getCoordinates(columnName);\n if (coordinates != null) {\n return coordinates;\n }\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (linkTargetHandlers == null && panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\n `Panel does not have getCoordinateForColumn method: ${panelId}`\n );\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n const coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n const glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(`Unable to find panel container for id: ${panelId}`);\n }\n return LayoutUtils.getTabPoint(glContainer as unknown as Container);\n }\n\n handleOperatorChanged(linkId: string, type: FilterTypeValue): void {\n const { links, onLinksUpdated } = this.props;\n const newLinks: Link[] = links.map(link =>\n link.id === linkId ? { ...link, operator: type } : link\n );\n onLinksUpdated(newLinks);\n }\n\n handleBlur(): void {\n this.setState({ mode: 'select' });\n }\n\n handleResize(): void {\n const { dialog } = this.state;\n if (dialog && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);\n const dialogY = clamp(dialog.y, 0, window.innerHeight - rect.height);\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n const { offset, isDragging } = this.state;\n this.setState({\n mouse: { x: event.clientX, y: event.clientY },\n });\n\n if (isDragging && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(\n window.innerWidth - (event.clientX + rect.width + offset.x),\n 0,\n window.innerWidth - rect.width\n );\n\n const dialogY = clamp(\n window.innerHeight - (event.clientY + rect.height + offset.y),\n 0,\n window.innerHeight - rect.height\n );\n\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseDown(event: React.MouseEvent): void {\n event.preventDefault();\n const offset: Point = { x: 0, y: 0 };\n if (this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n offset.x = rect.right - (rect.width + event.clientX);\n offset.y = rect.bottom - (rect.height + event.clientY);\n }\n this.setState({\n isDragging: true,\n offset,\n });\n }\n\n handleMouseUp(): void {\n this.setState({\n isDragging: false,\n });\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'delete',\n });\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n const { selectedIds, onLinkDeleted } = this.props;\n event.preventDefault();\n selectedIds.forEach(id => onLinkDeleted(id));\n }\n }\n\n handleKeyUp(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'select',\n });\n }\n }\n\n handleEscapePressed(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n render(): JSX.Element {\n const {\n disabled,\n links,\n selectedIds,\n messageText,\n onLinkSelected,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouse, dialog, isDragging, mode } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end, operator } = link;\n const startColumnType = start.columnType;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouse?.x ?? x1;\n let y2 = mouse?.y ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed != null && isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null },\n { 'link-is-selected': selectedIds.has(id) },\n { 'danger-delete': mode === 'delete' }\n );\n return {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type,\n };\n } catch (error) {\n log.warn('Unable to get point for link', link, error);\n return null;\n }\n })\n .filter(item => item != null) as VisibleLink[];\n\n return (\n <div\n className={classNames('linker-overlay', {\n 'danger-delete': mode === 'delete',\n })}\n >\n {visibleLinks.map(\n ({\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type,\n }) => (\n <LinkerLink\n className={className}\n id={id}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n key={id}\n onClick={onLinkSelected}\n onDelete={onLinkDeleted}\n isSelected={selectedIds.has(id)}\n operator={operator}\n startColumnType={startColumnType}\n type={type}\n onOperatorChanged={this.handleOperatorChanged}\n />\n )\n )}\n <div\n className={classNames('linker-toast-dialog', {\n dragging: isDragging,\n })}\n ref={this.dialogRef}\n style={{ bottom: dialog?.y, right: dialog?.x }}\n data-testid=\"linker-toast-dialog\"\n >\n <Button\n draggable\n kind=\"inline\"\n className=\"btn-drag-handle\"\n icon={vsGripper}\n onClick={() => {\n // no-op\n }}\n onMouseDown={this.handleMouseDown}\n >\n {!isDragging && <Tooltip>Drag to reposition</Tooltip>}\n </Button>\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <Button kind=\"secondary\" onClick={onAllLinksDeleted}>\n Clear All\n </Button>\n <Button kind=\"primary\" onClick={onDone}>\n Done\n </Button>\n </div>\n </div>\n <ContextActions\n actions={[\n {\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true,\n },\n ]}\n />\n </div>\n );\n }\n}\n\nexport default LinkerOverlayContent;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LinkerOverlayContent.js","names":["React","Component","classNames","Button","ContextActions","GLOBAL_SHORTCUTS","Tooltip","LayoutUtils","Log","vsGripper","Type","FilterType","clamp","isLinkableFromPanel","LinkerLink","jsx","_jsx","jsxs","_jsxs","log","module","LinkerOverlayContent","constructor","props","_defineProperty","handleBlur","bind","handleResize","handleMouseMove","handleMouseDown","handleMouseUp","handleKeyDown","handleKeyUp","handleEscapePressed","handleOperatorChanged","dialogRef","createRef","state","mouse","undefined","dialog","offset","x","y","isDragging","mode","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","linkTargetPropMap","panelId","linkPointId","columnName","linkTargetHandlers","get","coordinates","getCoordinates","panel","getOpenedPanelById","Error","concat","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","linkId","type","links","onLinksUpdated","newLinks","map","link","id","_objectSpread","operator","setState","current","rect","getBoundingClientRect","dialogX","innerWidth","width","dialogY","innerHeight","height","event","clientX","clientY","preventDefault","right","bottom","key","selectedIds","onLinkDeleted","forEach","onCancel","render","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","visibleLinks","_mouse$x","_mouse$y","isReversed","start","end","startColumnType","columnType","x1","y1","x2","y2","tmpX","tmpY","className","interactive","has","warn","filter","item","children","_ref","onClick","onDelete","isSelected","eq","onOperatorChanged","dragging","ref","style","draggable","kind","icon","onMouseDown","actions","action","shortcut","LINKER_CLOSE","isGlobal"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n ContextActions,\n GLOBAL_SHORTCUTS,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { Container } from '@deephaven/golden-layout';\nimport { vsGripper } from '@deephaven/icons';\nimport {\n type TypeValue as FilterTypeValue,\n Type as FilterType,\n} from '@deephaven/filters';\nimport clamp from 'lodash.clamp';\nimport {\n isLinkableFromPanel,\n Link,\n LinkerCoordinate,\n LinkPoint,\n LinkType,\n} from './LinkerUtils';\nimport LinkerLink from './LinkerLink';\nimport './LinkerOverlayContent.scss';\nimport { type LinkTargetProps } from './LinkerEvent';\n\nconst log = Log.module('LinkerOverlayContent');\n\nexport type VisibleLink = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n type: LinkType;\n operator: FilterTypeValue;\n startColumnType: string | null;\n};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n selectedIds: Set<string>;\n messageText: string;\n onLinkSelected: (linkId: string) => void;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onLinksUpdated: (newLinks: Link[]) => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n linkTargetPropMap: Map<string, LinkTargetProps>;\n};\n\ntype Point = { x: number; y: number };\n\nexport type LinkerOverlayContentState = {\n mouse?: Point;\n dialog?: Point;\n offset: Point;\n isDragging: boolean;\n mode: 'select' | 'delete';\n};\n\nexport class LinkerOverlayContent extends Component<\n LinkerOverlayContentProps,\n LinkerOverlayContentState\n> {\n static defaultProps = {\n disabled: 'false',\n };\n\n constructor(props: LinkerOverlayContentProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.handleOperatorChanged = this.handleOperatorChanged.bind(this);\n\n this.dialogRef = React.createRef();\n\n this.state = {\n mouse: undefined,\n dialog: undefined,\n offset: { x: 0, y: 0 },\n isDragging: false,\n mode: 'select',\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('blur', this.handleBlur, true);\n window.addEventListener('mousemove', this.handleMouseMove, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n window.addEventListener('keydown', this.handleKeyDown, true);\n window.addEventListener('keyup', this.handleKeyUp, true);\n window.addEventListener('resize', this.handleResize, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('blur', this.handleBlur, true);\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('keydown', this.handleKeyDown, true);\n window.removeEventListener('keyup', this.handleKeyUp, true);\n window.removeEventListener('resize', this.handleResize, true);\n }\n\n dialogRef: React.RefObject<HTMLInputElement>;\n\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint: LinkPoint): LinkerCoordinate {\n const { panelManager, linkTargetPropMap } = this.props;\n const { panelId: linkPointId, columnName } = linkPoint;\n\n let panelId = linkPointId;\n const linkTargetHandlers = linkTargetPropMap.get(linkPointId);\n\n if (linkTargetHandlers != null) {\n panelId = linkTargetHandlers.panelId;\n const coordinates = linkTargetHandlers.getCoordinates(columnName);\n if (coordinates != null) {\n return coordinates;\n }\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (linkTargetHandlers == null && panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\n `Panel does not have getCoordinateForColumn method: ${panelId}`\n );\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n const coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n const glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(`Unable to find panel container for id: ${panelId}`);\n }\n return LayoutUtils.getTabPoint(glContainer as unknown as Container);\n }\n\n handleOperatorChanged(linkId: string, type: FilterTypeValue): void {\n const { links, onLinksUpdated } = this.props;\n const newLinks: Link[] = links.map(link =>\n link.id === linkId ? { ...link, operator: type } : link\n );\n onLinksUpdated(newLinks);\n }\n\n handleBlur(): void {\n this.setState({ mode: 'select' });\n }\n\n handleResize(): void {\n const { dialog } = this.state;\n if (dialog && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);\n const dialogY = clamp(dialog.y, 0, window.innerHeight - rect.height);\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n const { offset, isDragging } = this.state;\n this.setState({\n mouse: { x: event.clientX, y: event.clientY },\n });\n\n if (isDragging && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(\n window.innerWidth - (event.clientX + rect.width + offset.x),\n 0,\n window.innerWidth - rect.width\n );\n\n const dialogY = clamp(\n window.innerHeight - (event.clientY + rect.height + offset.y),\n 0,\n window.innerHeight - rect.height\n );\n\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseDown(event: React.MouseEvent): void {\n event.preventDefault();\n const offset: Point = { x: 0, y: 0 };\n if (this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n offset.x = rect.right - (rect.width + event.clientX);\n offset.y = rect.bottom - (rect.height + event.clientY);\n }\n this.setState({\n isDragging: true,\n offset,\n });\n }\n\n handleMouseUp(): void {\n this.setState({\n isDragging: false,\n });\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'delete',\n });\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n const { selectedIds, onLinkDeleted } = this.props;\n event.preventDefault();\n selectedIds.forEach(id => onLinkDeleted(id));\n }\n }\n\n handleKeyUp(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'select',\n });\n }\n }\n\n handleEscapePressed(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n render(): JSX.Element {\n const {\n disabled,\n links,\n selectedIds,\n messageText,\n onLinkSelected,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouse, dialog, isDragging, mode } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end, operator } = link;\n const startColumnType = start.columnType;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouse?.x ?? x1;\n let y2 = mouse?.y ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed != null && isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null },\n { 'link-is-selected': selectedIds.has(id) },\n { 'danger-delete': mode === 'delete' }\n );\n return {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type,\n } as const;\n } catch (error) {\n log.warn('Unable to get point for link', link, error);\n return null;\n }\n })\n .filter(item => item != null) as VisibleLink[];\n\n return (\n <div\n className={classNames('linker-overlay', {\n 'danger-delete': mode === 'delete',\n })}\n >\n {visibleLinks.map(\n ({\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type,\n }) => (\n <LinkerLink\n className={className}\n id={id}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n key={id}\n onClick={onLinkSelected}\n onDelete={onLinkDeleted}\n isSelected={selectedIds.has(id)}\n operator={operator ?? FilterType.eq}\n startColumnType={startColumnType}\n type={type}\n onOperatorChanged={this.handleOperatorChanged}\n />\n )\n )}\n <div\n className={classNames('linker-toast-dialog', {\n dragging: isDragging,\n })}\n ref={this.dialogRef}\n style={{ bottom: dialog?.y, right: dialog?.x }}\n data-testid=\"linker-toast-dialog\"\n >\n <Button\n draggable\n kind=\"inline\"\n className=\"btn-drag-handle\"\n icon={vsGripper}\n onClick={() => {\n // no-op\n }}\n onMouseDown={this.handleMouseDown}\n >\n {!isDragging && <Tooltip>Drag to reposition</Tooltip>}\n </Button>\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <Button kind=\"secondary\" onClick={onAllLinksDeleted}>\n Clear All\n </Button>\n <Button kind=\"primary\" onClick={onDone}>\n Done\n </Button>\n </div>\n </div>\n <ContextActions\n actions={[\n {\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true,\n },\n ]}\n />\n </div>\n );\n }\n}\n\nexport default LinkerOverlayContent;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerUtils.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGlE,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,GAAG,WAAW,CAAC;AAE9E,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI;IACvC,QAAQ,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"LinkerUtils.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerUtils.js","names":["nanoid","TableUtils","Log","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","isLinkableColumn","column","description","startsWith","log","module","LinkerUtils","isLinkValid","start","end","isolatedLinkerPanelId","panelId","debug2","columnType","startColumnType","endColumnType","isCompatibleType","findColumn","columns","_ref","columnName","find","_ref2","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","_link$end","push","_objectSpread","id"],"sources":["../../src/linker/LinkerUtils.ts"],"sourcesContent":["import { nanoid } from 'nanoid';\nimport { type PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport Log from '@deephaven/log';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink' | 'chartLink';\n\nexport type LinkPoint = {\n panelId: string;\n columnName: string;\n columnType: string | null;\n};\n\nexport type LinkPointOptions = {\n /**\n * The type of link this point is associated with.\n * If this point is the end point of a link, this will set the type of the link.\n */\n type: LinkType;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n operator?: FilterTypeValue;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string | null;\n description?: string | null;\n};\n\nexport type LinkDataValue<T = unknown> = {\n operator
|
|
1
|
+
{"version":3,"file":"LinkerUtils.js","names":["nanoid","TableUtils","Log","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","isLinkableColumn","column","description","startsWith","log","module","LinkerUtils","isLinkValid","start","end","isolatedLinkerPanelId","panelId","debug2","columnType","startColumnType","endColumnType","isCompatibleType","findColumn","columns","_ref","columnName","find","_ref2","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","_link$end","push","_objectSpread","id"],"sources":["../../src/linker/LinkerUtils.ts"],"sourcesContent":["import { nanoid } from 'nanoid';\nimport { type PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport Log from '@deephaven/log';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink' | 'chartLink';\n\nexport type LinkPoint = {\n panelId: string;\n columnName: string;\n columnType: string | null;\n};\n\nexport type LinkPointOptions = {\n /**\n * The type of link this point is associated with.\n * If this point is the end point of a link, this will set the type of the link.\n */\n type: LinkType;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n operator?: FilterTypeValue;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string | null;\n description?: string | null;\n};\n\nexport type LinkDataValue<T = unknown> = {\n operator?: FilterTypeValue; // Default behavior treats no operator as equals\n text: string;\n value: T;\n startColumnIndex: number;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string | null;\n filterList: LinkDataValue<T>[];\n};\n\nexport type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;\n\n// [x,y] screen coordinates used by the Linker\nexport type LinkerCoordinate = [number, number];\n\nexport type LinkableFromPanel = PanelComponent & {\n getCoordinateForColumn: (name: string) => LinkerCoordinate;\n};\n\nexport type LinkablePanel = LinkableFromPanel & {\n setFilterMap: (filterMap: LinkFilterMap) => void;\n unsetFilterValue: (name: string, type: string | null) => void;\n};\n\nexport function isLinkableFromPanel(\n panel: PanelComponent\n): panel is LinkableFromPanel {\n const p = panel as LinkableFromPanel;\n return typeof p.getCoordinateForColumn === 'function';\n}\n\nexport function isLinkablePanel(panel: PanelComponent): panel is LinkablePanel {\n const p = panel as LinkablePanel;\n return (\n isLinkableFromPanel(panel) &&\n typeof p.setFilterMap === 'function' &&\n typeof p.unsetFilterValue === 'function'\n );\n}\n\nexport function isLinkableColumn(column: LinkColumn): boolean {\n // TODO: core/#3358 Use preview/original type property instead of checking description\n return (\n column.description == null ||\n !column.description.startsWith('Preview of type: ')\n );\n}\n\nconst log = Log.module('LinkerUtils');\n\n/**\n * Collection of utility functions for use with the Linker\n */\nclass LinkerUtils {\n /**\n * Retrieve the type of link given parameters.\n * @param start The link start\n * @param end The link end\n * @param isolatedLinkerPanelId Whether there's an isolated linker\n * @returns The type of link, or invalid if there's an error\n */\n static isLinkValid(\n start: LinkPoint,\n end: LinkPoint,\n isolatedLinkerPanelId?: string | string[]\n ): boolean {\n // Panel compatibility checks:\n // Link ends should point to different non-null panelIds\n // For isolated linker one of the panels should match isolated panel id\n if (\n start.panelId == null ||\n end.panelId == null ||\n start.panelId === end.panelId ||\n (isolatedLinkerPanelId != null &&\n isolatedLinkerPanelId !== start.panelId &&\n isolatedLinkerPanelId !== end.panelId)\n ) {\n log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);\n return false;\n }\n\n // Check column type compatibility\n const { columnType: startColumnType } = start;\n const { columnType: endColumnType } = end;\n\n // Null columnType in ending link point allows linking to any type\n const isCompatibleType =\n endColumnType === null ||\n TableUtils.isCompatibleType(startColumnType, endColumnType);\n\n if (!isCompatibleType) {\n log.debug2('Incompatible type', startColumnType, endColumnType);\n return false;\n }\n\n return true;\n }\n\n /**\n * Find column matching the link point\n * @param columns Columns to search in\n * @param linkPoint Link point to find column for\n * @param linkPoint.columnName Column name to find\n * @param linkPoint.columnType Column type to find\n * @returns Column matching the link point, undefined if not found\n */\n static findColumn(\n columns: readonly LinkColumn[],\n { columnName, columnType }: LinkPoint\n ): LinkColumn | undefined {\n return columns.find(\n ({ name, type }) => name === columnName && type === columnType\n );\n }\n\n /**\n * Clone links for a given panel id\n * @param links Original links array\n * @param panelId Original panel id\n * @param cloneId Cloned panel id\n * @returns Cloned links array or empty array if no new links added\n */\n static cloneLinksForPanel(\n links: Link[],\n panelId: string | string[],\n cloneId: string\n ): Link[] {\n const clonedLinks: Link[] = [];\n links.forEach(link => {\n if (link.start.panelId === panelId && link.type !== 'filterSource') {\n clonedLinks.push({\n ...link,\n id: nanoid(),\n start: { ...link.start, panelId: cloneId },\n });\n } else if (link.end?.panelId === panelId) {\n clonedLinks.push({\n ...link,\n id: nanoid(),\n end: { ...link.end, panelId: cloneId },\n });\n }\n });\n return clonedLinks;\n }\n}\n\nexport default LinkerUtils;\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.85.
|
|
3
|
+
"version": "0.85.36",
|
|
4
4
|
"description": "Deephaven Dashboard Core Plugins",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -22,26 +22,26 @@
|
|
|
22
22
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@deephaven/chart": "^0.85.35
|
|
26
|
-
"@deephaven/components": "^0.85.35
|
|
27
|
-
"@deephaven/console": "^0.85.35
|
|
28
|
-
"@deephaven/dashboard": "^0.85.
|
|
29
|
-
"@deephaven/file-explorer": "^0.85.35
|
|
30
|
-
"@deephaven/filters": "^0.85.
|
|
31
|
-
"@deephaven/golden-layout": "^0.85.35
|
|
32
|
-
"@deephaven/grid": "^0.85.35
|
|
33
|
-
"@deephaven/icons": "^0.85.
|
|
34
|
-
"@deephaven/iris-grid": "^0.85.
|
|
35
|
-
"@deephaven/jsapi-bootstrap": "^0.85.35
|
|
36
|
-
"@deephaven/jsapi-components": "^0.85.35
|
|
25
|
+
"@deephaven/chart": "^0.85.35",
|
|
26
|
+
"@deephaven/components": "^0.85.35",
|
|
27
|
+
"@deephaven/console": "^0.85.35",
|
|
28
|
+
"@deephaven/dashboard": "^0.85.36",
|
|
29
|
+
"@deephaven/file-explorer": "^0.85.35",
|
|
30
|
+
"@deephaven/filters": "^0.85.0",
|
|
31
|
+
"@deephaven/golden-layout": "^0.85.35",
|
|
32
|
+
"@deephaven/grid": "^0.85.35",
|
|
33
|
+
"@deephaven/icons": "^0.85.0",
|
|
34
|
+
"@deephaven/iris-grid": "^0.85.36",
|
|
35
|
+
"@deephaven/jsapi-bootstrap": "^0.85.35",
|
|
36
|
+
"@deephaven/jsapi-components": "^0.85.35",
|
|
37
37
|
"@deephaven/jsapi-types": "^1.0.0-dev0.39.4",
|
|
38
|
-
"@deephaven/jsapi-utils": "^0.85.35
|
|
39
|
-
"@deephaven/log": "^0.85.
|
|
40
|
-
"@deephaven/plugin": "^0.85.
|
|
41
|
-
"@deephaven/react-hooks": "^0.85.35
|
|
42
|
-
"@deephaven/redux": "^0.85.
|
|
43
|
-
"@deephaven/storage": "^0.85.
|
|
44
|
-
"@deephaven/utils": "^0.85.35
|
|
38
|
+
"@deephaven/jsapi-utils": "^0.85.35",
|
|
39
|
+
"@deephaven/log": "^0.85.19",
|
|
40
|
+
"@deephaven/plugin": "^0.85.36",
|
|
41
|
+
"@deephaven/react-hooks": "^0.85.35",
|
|
42
|
+
"@deephaven/redux": "^0.85.36",
|
|
43
|
+
"@deephaven/storage": "^0.85.19",
|
|
44
|
+
"@deephaven/utils": "^0.85.35",
|
|
45
45
|
"@fortawesome/react-fontawesome": "^0.2.0",
|
|
46
46
|
"classnames": "^2.3.1",
|
|
47
47
|
"fast-deep-equal": "^3.1.3",
|
|
@@ -65,8 +65,8 @@
|
|
|
65
65
|
"react-redux": "^7.2.4"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@deephaven/jsapi-shim": "^0.85.
|
|
69
|
-
"@deephaven/mocks": "^0.85.
|
|
68
|
+
"@deephaven/jsapi-shim": "^0.85.31",
|
|
69
|
+
"@deephaven/mocks": "^0.85.0"
|
|
70
70
|
},
|
|
71
71
|
"files": [
|
|
72
72
|
"dist",
|
|
@@ -78,5 +78,5 @@
|
|
|
78
78
|
"publishConfig": {
|
|
79
79
|
"access": "public"
|
|
80
80
|
},
|
|
81
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "b525cdaca22da88aead1eb8753dc949b07739d20"
|
|
82
82
|
}
|