@deephaven/dashboard-core-plugins 0.36.1-beta.0 → 0.36.1-beta.3
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.d.ts +1 -1
- package/dist/linker/Linker.d.ts.map +1 -1
- package/dist/linker/Linker.js +39 -11
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.d.ts +2 -0
- package/dist/linker/LinkerLink.d.ts.map +1 -1
- package/dist/linker/LinkerLink.js +6 -3
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.d.ts +2 -1
- package/dist/linker/LinkerOverlayContent.d.ts.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +7 -3
- 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 +1 -0
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +6 -10
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +8 -1
- package/dist/panels/ChartPanel.js.map +1 -1
- package/package.json +21 -21
|
@@ -258,7 +258,8 @@ export class LinkerOverlayContent extends Component {
|
|
|
258
258
|
id,
|
|
259
259
|
className,
|
|
260
260
|
operator,
|
|
261
|
-
startColumnType
|
|
261
|
+
startColumnType,
|
|
262
|
+
type
|
|
262
263
|
};
|
|
263
264
|
} catch (error) {
|
|
264
265
|
log.warn('Unable to get point for link', link, error);
|
|
@@ -278,7 +279,8 @@ export class LinkerOverlayContent extends Component {
|
|
|
278
279
|
id,
|
|
279
280
|
className,
|
|
280
281
|
operator,
|
|
281
|
-
startColumnType
|
|
282
|
+
startColumnType,
|
|
283
|
+
type
|
|
282
284
|
} = _ref;
|
|
283
285
|
return /*#__PURE__*/React.createElement(LinkerLink, {
|
|
284
286
|
className: className,
|
|
@@ -293,6 +295,7 @@ export class LinkerOverlayContent extends Component {
|
|
|
293
295
|
isSelected: selectedIds.has(id),
|
|
294
296
|
operator: operator,
|
|
295
297
|
startColumnType: startColumnType,
|
|
298
|
+
type: type,
|
|
296
299
|
onOperatorChanged: this.handleOperatorChanged
|
|
297
300
|
});
|
|
298
301
|
}), /*#__PURE__*/React.createElement("div", {
|
|
@@ -303,7 +306,8 @@ export class LinkerOverlayContent extends Component {
|
|
|
303
306
|
style: {
|
|
304
307
|
bottom: dialog === null || dialog === void 0 ? void 0 : dialog.y,
|
|
305
308
|
right: dialog === null || dialog === void 0 ? void 0 : dialog.x
|
|
306
|
-
}
|
|
309
|
+
},
|
|
310
|
+
"data-testid": "linker-toast-dialog"
|
|
307
311
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
308
312
|
draggable: true,
|
|
309
313
|
kind: "inline",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerOverlayContent.js","names":["React","Component","classNames","Button","ContextActions","GLOBAL_SHORTCUTS","Tooltip","LayoutUtils","Log","vsGripper","clamp","isLinkableFromPanel","LinkerLink","log","module","LinkerOverlayContent","constructor","props","handleBlur","bind","handleResize","handleMouseMove","handleMouseDown","handleMouseUp","handleKeyDown","handleKeyUp","handleEscapePressed","handleOperatorChanged","dialogRef","createRef","state","mouse","undefined","dialog","offset","x","y","isDragging","mode","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","panelId","columnName","panel","getOpenedPanelById","Error","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","linkId","type","links","onLinksUpdated","newLinks","map","link","id","operator","setState","current","rect","getBoundingClientRect","dialogX","innerWidth","width","dialogY","innerHeight","height","event","clientX","clientY","right","bottom","key","preventDefault","selectedIds","onLinkDeleted","forEach","onCancel","render","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","visibleLinks","isReversed","start","end","startColumnType","columnType","x1","y1","x2","y2","tmpX","tmpY","className","interactive","has","warn","filter","item","dragging","action","shortcut","LINKER_CLOSE","isGlobal"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n ContextActions,\n GLOBAL_SHORTCUTS,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { Container } from '@deephaven/golden-layout';\nimport { vsGripper } from '@deephaven/icons';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport clamp from 'lodash.clamp';\nimport {\n isLinkableFromPanel,\n Link,\n LinkerCoordinate,\n LinkPoint,\n} from './LinkerUtils';\nimport LinkerLink from './LinkerLink';\nimport './LinkerOverlayContent.scss';\n\nconst log = Log.module('LinkerOverlayContent');\n\nexport type VisibleLink = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n operator: FilterTypeValue;\n startColumnType: string | null;\n};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n selectedIds: Set<string>;\n messageText: string;\n onLinkSelected: (linkId: string) => void;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onLinksUpdated: (newLinks: Link[]) => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n};\n\ntype Point = { x: number; y: number };\n\nexport type LinkerOverlayContentState = {\n mouse?: Point;\n dialog?: Point;\n offset: Point;\n isDragging: boolean;\n mode: 'select' | 'delete';\n};\n\nexport class LinkerOverlayContent extends Component<\n LinkerOverlayContentProps,\n LinkerOverlayContentState\n> {\n static defaultProps = {\n disabled: 'false',\n };\n\n constructor(props: LinkerOverlayContentProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.handleOperatorChanged = this.handleOperatorChanged.bind(this);\n\n this.dialogRef = React.createRef();\n\n this.state = {\n mouse: undefined,\n dialog: undefined,\n offset: { x: 0, y: 0 },\n isDragging: false,\n mode: 'select',\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('blur', this.handleBlur, true);\n window.addEventListener('mousemove', this.handleMouseMove, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n window.addEventListener('keydown', this.handleKeyDown, true);\n window.addEventListener('keyup', this.handleKeyUp, true);\n window.addEventListener('resize', this.handleResize, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('blur', this.handleBlur, true);\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('keydown', this.handleKeyDown, true);\n window.removeEventListener('keyup', this.handleKeyUp, true);\n window.removeEventListener('resize', this.handleResize, true);\n }\n\n dialogRef: React.RefObject<HTMLInputElement>;\n\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint: LinkPoint): LinkerCoordinate {\n const { panelManager } = this.props;\n const { panelId, columnName } = linkPoint;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\n `Panel does not have getCoordinateForColumn method: ${panelId}`\n );\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n const coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n const glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(`Unable to find panel container for id: ${panelId}`);\n }\n return LayoutUtils.getTabPoint((glContainer as unknown) as Container);\n }\n\n handleOperatorChanged(linkId: string, type: FilterTypeValue): void {\n const { links, onLinksUpdated } = this.props;\n const newLinks: Link[] = links.map(link =>\n link.id === linkId ? { ...link, operator: type } : link\n );\n onLinksUpdated(newLinks);\n }\n\n handleBlur(): void {\n this.setState({ mode: 'select' });\n }\n\n handleResize(): void {\n const { dialog } = this.state;\n if (dialog && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);\n const dialogY = clamp(dialog.y, 0, window.innerHeight - rect.height);\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n const { offset, isDragging } = this.state;\n this.setState({\n mouse: { x: event.clientX, y: event.clientY },\n });\n\n if (isDragging && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(\n window.innerWidth - (event.clientX + rect.width + offset.x),\n 0,\n window.innerWidth - rect.width\n );\n\n const dialogY = clamp(\n window.innerHeight - (event.clientY + rect.height + offset.y),\n 0,\n window.innerHeight - rect.height\n );\n\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseDown(event: React.MouseEvent): void {\n const offset: Point = { x: 0, y: 0 };\n if (this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n offset.x = rect.right - (rect.width + event.clientX);\n offset.y = rect.bottom - (rect.height + event.clientY);\n }\n this.setState({\n isDragging: true,\n offset,\n });\n }\n\n handleMouseUp(): void {\n this.setState({\n isDragging: false,\n });\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'delete',\n });\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n const { selectedIds, onLinkDeleted } = this.props;\n event.preventDefault();\n selectedIds.forEach(id => onLinkDeleted(id));\n }\n }\n\n handleKeyUp(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'select',\n });\n }\n }\n\n handleEscapePressed(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n render(): JSX.Element {\n const {\n disabled,\n links,\n selectedIds,\n messageText,\n onLinkSelected,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouse, dialog, isDragging, mode } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end, operator } = link;\n const startColumnType = start.columnType;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouse?.x ?? x1;\n let y2 = mouse?.y ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed != null && isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null },\n { 'link-is-selected': selectedIds.has(id) },\n { 'danger-delete': mode === 'delete' }\n );\n return {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n };\n } catch (error) {\n log.warn('Unable to get point for link', link, error);\n return null;\n }\n })\n .filter(item => item != null) as VisibleLink[];\n\n return (\n <div\n className={classNames('linker-overlay', {\n 'danger-delete': mode === 'delete',\n })}\n >\n {visibleLinks.map(\n ({ x1, y1, x2, y2, id, className, operator, startColumnType }) => (\n <LinkerLink\n className={className}\n id={id}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n key={id}\n onClick={onLinkSelected}\n onDelete={onLinkDeleted}\n isSelected={selectedIds.has(id)}\n operator={operator}\n startColumnType={startColumnType}\n onOperatorChanged={this.handleOperatorChanged}\n />\n )\n )}\n <div\n className={classNames('linker-toast-dialog', {\n dragging: isDragging,\n })}\n ref={this.dialogRef}\n style={{ bottom: dialog?.y, right: dialog?.x }}\n >\n <Button\n draggable\n kind=\"inline\"\n className=\"btn-drag-handle\"\n icon={vsGripper}\n onClick={() => {\n // no-op\n }}\n onMouseDown={this.handleMouseDown}\n >\n {!isDragging && <Tooltip>Drag to reposition</Tooltip>}\n </Button>\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <Button kind=\"secondary\" onClick={onAllLinksDeleted}>\n Clear All\n </Button>\n <Button kind=\"primary\" onClick={onDone}>\n Done\n </Button>\n </div>\n </div>\n <ContextActions\n actions={[\n {\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true,\n },\n ]}\n />\n </div>\n );\n }\n}\n\nexport default LinkerOverlayContent;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LinkerOverlayContent.js","names":["React","Component","classNames","Button","ContextActions","GLOBAL_SHORTCUTS","Tooltip","LayoutUtils","Log","vsGripper","clamp","isLinkableFromPanel","LinkerLink","log","module","LinkerOverlayContent","constructor","props","handleBlur","bind","handleResize","handleMouseMove","handleMouseDown","handleMouseUp","handleKeyDown","handleKeyUp","handleEscapePressed","handleOperatorChanged","dialogRef","createRef","state","mouse","undefined","dialog","offset","x","y","isDragging","mode","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","panelId","columnName","panel","getOpenedPanelById","Error","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","linkId","type","links","onLinksUpdated","newLinks","map","link","id","operator","setState","current","rect","getBoundingClientRect","dialogX","innerWidth","width","dialogY","innerHeight","height","event","clientX","clientY","right","bottom","key","preventDefault","selectedIds","onLinkDeleted","forEach","onCancel","render","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","visibleLinks","isReversed","start","end","startColumnType","columnType","x1","y1","x2","y2","tmpX","tmpY","className","interactive","has","warn","filter","item","dragging","action","shortcut","LINKER_CLOSE","isGlobal"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n ContextActions,\n GLOBAL_SHORTCUTS,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { Container } from '@deephaven/golden-layout';\nimport { vsGripper } from '@deephaven/icons';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport clamp from 'lodash.clamp';\nimport {\n isLinkableFromPanel,\n Link,\n LinkerCoordinate,\n LinkPoint,\n LinkType,\n} from './LinkerUtils';\nimport LinkerLink from './LinkerLink';\nimport './LinkerOverlayContent.scss';\n\nconst log = Log.module('LinkerOverlayContent');\n\nexport type VisibleLink = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n 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};\n\ntype Point = { x: number; y: number };\n\nexport type LinkerOverlayContentState = {\n mouse?: Point;\n dialog?: Point;\n offset: Point;\n isDragging: boolean;\n mode: 'select' | 'delete';\n};\n\nexport class LinkerOverlayContent extends Component<\n LinkerOverlayContentProps,\n LinkerOverlayContentState\n> {\n static defaultProps = {\n disabled: 'false',\n };\n\n constructor(props: LinkerOverlayContentProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.handleOperatorChanged = this.handleOperatorChanged.bind(this);\n\n this.dialogRef = React.createRef();\n\n this.state = {\n mouse: undefined,\n dialog: undefined,\n offset: { x: 0, y: 0 },\n isDragging: false,\n mode: 'select',\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('blur', this.handleBlur, true);\n window.addEventListener('mousemove', this.handleMouseMove, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n window.addEventListener('keydown', this.handleKeyDown, true);\n window.addEventListener('keyup', this.handleKeyUp, true);\n window.addEventListener('resize', this.handleResize, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('blur', this.handleBlur, true);\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('keydown', this.handleKeyDown, true);\n window.removeEventListener('keyup', this.handleKeyUp, true);\n window.removeEventListener('resize', this.handleResize, true);\n }\n\n dialogRef: React.RefObject<HTMLInputElement>;\n\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint: LinkPoint): LinkerCoordinate {\n const { panelManager } = this.props;\n const { panelId, columnName } = linkPoint;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\n `Panel does not have getCoordinateForColumn method: ${panelId}`\n );\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n const coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n const glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(`Unable to find panel container for id: ${panelId}`);\n }\n return LayoutUtils.getTabPoint((glContainer as unknown) as Container);\n }\n\n handleOperatorChanged(linkId: string, type: FilterTypeValue): void {\n const { links, onLinksUpdated } = this.props;\n const newLinks: Link[] = links.map(link =>\n link.id === linkId ? { ...link, operator: type } : link\n );\n onLinksUpdated(newLinks);\n }\n\n handleBlur(): void {\n this.setState({ mode: 'select' });\n }\n\n handleResize(): void {\n const { dialog } = this.state;\n if (dialog && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);\n const dialogY = clamp(dialog.y, 0, window.innerHeight - rect.height);\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n const { offset, isDragging } = this.state;\n this.setState({\n mouse: { x: event.clientX, y: event.clientY },\n });\n\n if (isDragging && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(\n window.innerWidth - (event.clientX + rect.width + offset.x),\n 0,\n window.innerWidth - rect.width\n );\n\n const dialogY = clamp(\n window.innerHeight - (event.clientY + rect.height + offset.y),\n 0,\n window.innerHeight - rect.height\n );\n\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseDown(event: React.MouseEvent): void {\n const offset: Point = { x: 0, y: 0 };\n if (this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n offset.x = rect.right - (rect.width + event.clientX);\n offset.y = rect.bottom - (rect.height + event.clientY);\n }\n this.setState({\n isDragging: true,\n offset,\n });\n }\n\n handleMouseUp(): void {\n this.setState({\n isDragging: false,\n });\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'delete',\n });\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n const { selectedIds, onLinkDeleted } = this.props;\n event.preventDefault();\n selectedIds.forEach(id => onLinkDeleted(id));\n }\n }\n\n handleKeyUp(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'select',\n });\n }\n }\n\n handleEscapePressed(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n render(): JSX.Element {\n const {\n disabled,\n links,\n selectedIds,\n messageText,\n onLinkSelected,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouse, dialog, isDragging, mode } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end, operator } = link;\n const startColumnType = start.columnType;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouse?.x ?? x1;\n let y2 = mouse?.y ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed != null && isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null },\n { 'link-is-selected': selectedIds.has(id) },\n { 'danger-delete': mode === 'delete' }\n );\n return {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n 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,6 +1,6 @@
|
|
|
1
1
|
import { PanelComponent } from '@deephaven/dashboard';
|
|
2
2
|
import { TypeValue as FilterTypeValue } from '@deephaven/filters';
|
|
3
|
-
export type LinkType = 'invalid' | 'filterSource' | 'tableLink';
|
|
3
|
+
export type LinkType = 'invalid' | 'filterSource' | 'tableLink' | 'chartLink';
|
|
4
4
|
export type LinkPoint = {
|
|
5
5
|
panelId: string | string[];
|
|
6
6
|
panelComponent?: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerUtils.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAIlE,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"LinkerUtils.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,6 +71,7 @@ class LinkerUtils {
|
|
|
71
71
|
// If all checks pass, link type is determined by the target panel component
|
|
72
72
|
switch (end.panelComponent) {
|
|
73
73
|
case LayoutUtils.getComponentName(ChartPanel):
|
|
74
|
+
return 'chartLink';
|
|
74
75
|
case LayoutUtils.getComponentName(IrisGridPanel):
|
|
75
76
|
return 'tableLink';
|
|
76
77
|
case LayoutUtils.getComponentName(DropdownFilterPanel):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerUtils.js","names":["shortid","LayoutUtils","TableUtils","Log","ChartPanel","IrisGridPanel","DropdownFilterPanel","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","isLinkableColumn","column","description","undefined","startsWith","log","module","LinkerUtils","getLinkType","start","end","isolatedLinkerPanelId","panelId","debug2","panelComponent","error","isCompatibleComponent","ALLOWED_LINKS","get","includes","columnType","startColumnType","endColumnType","isCompatibleType","getComponentName","findColumn","columns","columnName","find","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","push","id","generate","Map"],"sources":["../../src/linker/LinkerUtils.ts"],"sourcesContent":["import shortid from 'shortid';\nimport { LayoutUtils, PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { ChartPanel, IrisGridPanel, DropdownFilterPanel } from '../panels';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink';\n\nexport type LinkPoint = {\n panelId: string | string[];\n panelComponent?: string | null;\n columnName: string;\n columnType: string | null;\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;\n};\n\nexport type LinkDataValue<T = unknown> = {\n operator: FilterTypeValue;\n text: string;\n value: T;\n startColumnIndex: number;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string;\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 === undefined ||\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 static ALLOWED_LINKS = new Map([\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n LayoutUtils.getComponentName(ChartPanel),\n LayoutUtils.getComponentName(DropdownFilterPanel),\n ],\n ],\n ]);\n\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 getLinkType(\n start?: LinkPoint,\n end?: LinkPoint,\n isolatedLinkerPanelId?: string | string[]\n ): LinkType {\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 'invalid';\n }\n\n if (start.panelComponent == null || end.panelComponent == null) {\n log.error('PanelComponent should not be null', start, end);\n return 'invalid';\n }\n\n const isCompatibleComponent = LinkerUtils.ALLOWED_LINKS.get(\n start.panelComponent\n )?.includes(end.panelComponent);\n\n if (isCompatibleComponent === undefined || !isCompatibleComponent) {\n log.debug2('Incompatible panel components', start, end);\n return 'invalid';\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 'invalid';\n }\n\n // If all checks pass, link type is determined by the target panel component\n switch (end.panelComponent) {\n case LayoutUtils.getComponentName(ChartPanel):\n case LayoutUtils.getComponentName(IrisGridPanel):\n return 'tableLink';\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n return 'filterSource';\n default:\n }\n\n log.debug2('Incompatible target panel component', end.panelComponent);\n return 'invalid';\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: 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: shortid.generate(),\n start: { ...link.start, panelId: cloneId },\n });\n } else if (link.end?.panelId === panelId) {\n clonedLinks.push({\n ...link,\n id: shortid.generate(),\n end: { ...link.end, panelId: cloneId },\n });\n }\n });\n return clonedLinks;\n }\n}\n\nexport default LinkerUtils;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LinkerUtils.js","names":["shortid","LayoutUtils","TableUtils","Log","ChartPanel","IrisGridPanel","DropdownFilterPanel","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","isLinkableColumn","column","description","undefined","startsWith","log","module","LinkerUtils","getLinkType","start","end","isolatedLinkerPanelId","panelId","debug2","panelComponent","error","isCompatibleComponent","ALLOWED_LINKS","get","includes","columnType","startColumnType","endColumnType","isCompatibleType","getComponentName","findColumn","columns","columnName","find","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","push","id","generate","Map"],"sources":["../../src/linker/LinkerUtils.ts"],"sourcesContent":["import shortid from 'shortid';\nimport { LayoutUtils, PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { ChartPanel, IrisGridPanel, DropdownFilterPanel } from '../panels';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink' | 'chartLink';\n\nexport type LinkPoint = {\n panelId: string | string[];\n panelComponent?: string | null;\n columnName: string;\n columnType: string | null;\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;\n};\n\nexport type LinkDataValue<T = unknown> = {\n operator: FilterTypeValue;\n text: string;\n value: T;\n startColumnIndex: number;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string;\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 === undefined ||\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 static ALLOWED_LINKS = new Map([\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n [\n LayoutUtils.getComponentName(IrisGridPanel),\n LayoutUtils.getComponentName(ChartPanel),\n LayoutUtils.getComponentName(DropdownFilterPanel),\n ],\n ],\n ]);\n\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 getLinkType(\n start?: LinkPoint,\n end?: LinkPoint,\n isolatedLinkerPanelId?: string | string[]\n ): LinkType {\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 'invalid';\n }\n\n if (start.panelComponent == null || end.panelComponent == null) {\n log.error('PanelComponent should not be null', start, end);\n return 'invalid';\n }\n\n const isCompatibleComponent = LinkerUtils.ALLOWED_LINKS.get(\n start.panelComponent\n )?.includes(end.panelComponent);\n\n if (isCompatibleComponent === undefined || !isCompatibleComponent) {\n log.debug2('Incompatible panel components', start, end);\n return 'invalid';\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 'invalid';\n }\n\n // If all checks pass, link type is determined by the target panel component\n switch (end.panelComponent) {\n case LayoutUtils.getComponentName(ChartPanel):\n return 'chartLink';\n case LayoutUtils.getComponentName(IrisGridPanel):\n return 'tableLink';\n case LayoutUtils.getComponentName(DropdownFilterPanel):\n return 'filterSource';\n default:\n }\n\n log.debug2('Incompatible target panel component', end.panelComponent);\n return 'invalid';\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: 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: shortid.generate(),\n start: { ...link.start, panelId: cloneId },\n });\n } else if (link.end?.panelId === panelId) {\n clonedLinks.push({\n ...link,\n id: shortid.generate(),\n end: { ...link.end, panelId: cloneId },\n });\n }\n });\n return clonedLinks;\n }\n}\n\nexport default LinkerUtils;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, ReactElement, RefObject } from 'react';
|
|
2
|
-
import { Chart, ChartModel, ChartModelSettings } from '@deephaven/chart';
|
|
2
|
+
import { Chart, ChartModel, ChartModelSettings, FilterMap } from '@deephaven/chart';
|
|
3
3
|
import { PanelComponent } from '@deephaven/dashboard';
|
|
4
4
|
import { InputFilter, ColumnName, DehydratedSort, DehydratedAdvancedFilter, DehydratedQuickFilter, LegacyDehydratedSort } from '@deephaven/iris-grid';
|
|
5
5
|
import { SeriesPlotStyle, TableTemplate } from '@deephaven/jsapi-shim';
|
|
@@ -9,10 +9,9 @@ import type { Container, EventEmitter } from '@deephaven/golden-layout';
|
|
|
9
9
|
import { ColumnMap } from './ChartFilterOverlay';
|
|
10
10
|
import { SelectorColumn } from './ChartColumnSelectorOverlay';
|
|
11
11
|
import './ChartPanel.scss';
|
|
12
|
-
import { Link } from '../linker/LinkerUtils';
|
|
12
|
+
import { Link, LinkFilterMap } from '../linker/LinkerUtils';
|
|
13
13
|
import { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';
|
|
14
14
|
export type InputFilterMap = Map<string, InputFilter>;
|
|
15
|
-
export type FilterMap = Map<string, string>;
|
|
16
15
|
export type LinkedColumnMap = Map<string, {
|
|
17
16
|
name: string;
|
|
18
17
|
type: string;
|
|
@@ -43,7 +42,7 @@ export interface ChartPanelTableSettings {
|
|
|
43
42
|
partitionColumn?: string;
|
|
44
43
|
}
|
|
45
44
|
export interface GLChartPanelState {
|
|
46
|
-
filterValueMap: [string,
|
|
45
|
+
filterValueMap: [string, unknown][];
|
|
47
46
|
settings: Partial<ChartModelSettings>;
|
|
48
47
|
tableSettings: ChartPanelTableSettings;
|
|
49
48
|
irisGridState?: {
|
|
@@ -84,8 +83,8 @@ interface ChartPanelState {
|
|
|
84
83
|
isLoading: boolean;
|
|
85
84
|
isLoaded: boolean;
|
|
86
85
|
isLinked: boolean;
|
|
87
|
-
filterMap:
|
|
88
|
-
filterValueMap:
|
|
86
|
+
filterMap: FilterMap;
|
|
87
|
+
filterValueMap: FilterMap;
|
|
89
88
|
model?: ChartModel;
|
|
90
89
|
columnMap: ColumnMap;
|
|
91
90
|
panelState: GLChartPanelState;
|
|
@@ -164,10 +163,7 @@ export declare class ChartPanel extends Component<ChartPanelProps, ChartPanelSta
|
|
|
164
163
|
* Set chart filters based on the filter map
|
|
165
164
|
* @param filterMapParam Filter map
|
|
166
165
|
*/
|
|
167
|
-
setFilterMap(filterMapParam:
|
|
168
|
-
columnType: string;
|
|
169
|
-
value: string;
|
|
170
|
-
}>): void;
|
|
166
|
+
setFilterMap(filterMapParam: LinkFilterMap): void;
|
|
171
167
|
unsetFilterValue(columnName: ColumnName): void;
|
|
172
168
|
updateChangedInputFilters(inputFilters: InputFilter[], prevInputFilters: InputFilter[]): void;
|
|
173
169
|
updateInputFilters(inputFilters: InputFilter[], forceUpdate?: boolean): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMlE,OAAO,EACL,KAAK,EACL,UAAU,EACV,kBAAkB,
|
|
1
|
+
{"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -573,12 +573,19 @@ export class ChartPanel extends Component {
|
|
|
573
573
|
filterMapParam.forEach((_ref3, columnName) => {
|
|
574
574
|
var {
|
|
575
575
|
columnType,
|
|
576
|
-
|
|
576
|
+
filterList
|
|
577
577
|
} = _ref3;
|
|
578
578
|
var column = columnMap.get(columnName);
|
|
579
579
|
if (column == null || column.type !== columnType) {
|
|
580
580
|
return;
|
|
581
581
|
}
|
|
582
|
+
if (filterList.length < 1) {
|
|
583
|
+
log.debug('Ignoring empty filterList for column', columnName);
|
|
584
|
+
return;
|
|
585
|
+
}
|
|
586
|
+
var {
|
|
587
|
+
value
|
|
588
|
+
} = filterList[0];
|
|
582
589
|
filterValueMap.set(columnName, value);
|
|
583
590
|
if (filterMap.get(columnName) !== value) {
|
|
584
591
|
if (updatedFilterMap === null) {
|