@deephaven/dashboard-core-plugins 1.7.2-beta.1 → 1.7.2-beta.4
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/ChartBuilderPlugin.js.map +1 -1
- package/dist/ChartBuilderPluginConfig.js.map +1 -1
- package/dist/ChartPanelPlugin.js +1 -1
- package/dist/ChartPanelPlugin.js.map +1 -1
- package/dist/ChartPluginConfig.js.map +1 -1
- package/dist/ChartWidgetPlugin.js.map +1 -1
- package/dist/ConsolePlugin.d.ts.map +1 -1
- package/dist/ConsolePlugin.js +12 -2
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterEvents.js.map +1 -1
- package/dist/FilterPlugin.js +2 -2
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/FilterPluginConfig.js.map +1 -1
- package/dist/GridPanelPlugin.js.map +1 -1
- package/dist/GridPluginConfig.js.map +1 -1
- package/dist/GridWidgetPlugin.js.map +1 -1
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/LinkerPluginConfig.js.map +1 -1
- package/dist/MarkdownPlugin.js +1 -1
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/MarkdownPluginConfig.js.map +1 -1
- package/dist/PandasPanelPlugin.js.map +1 -1
- package/dist/PandasPluginConfig.js.map +1 -1
- package/dist/PandasWidgetPlugin.js.map +1 -1
- package/dist/TablePluginWrapper.js.map +1 -1
- package/dist/WidgetLoaderPlugin.js.map +1 -1
- package/dist/WidgetLoaderPluginConfig.js.map +1 -1
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +4 -6
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +1 -2
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +1 -2
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js +1 -2
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/events/ChartEvent.js +2 -0
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.js +8 -0
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/events/IrisGridEvent.js +2 -0
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/events/MarkdownEvent.js.map +1 -1
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/events/PandasEvent.js +2 -0
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/events/TabEventMap.js.map +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/linker/ColumnSelectionValidator.js.map +1 -1
- package/dist/linker/Linker.js +2 -2
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerEvent.js.map +1 -1
- package/dist/linker/LinkerLink.js +1 -3
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +1 -2
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/linker/ToolType.js.map +1 -1
- package/dist/linker/index.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.d.ts +0 -4
- package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js +2 -7
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.d.ts +0 -12
- package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
- package/dist/panels/ChartFilterOverlay.js +1 -13
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +10 -10
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +2 -4
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/ChartPanelUtils.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.js +2 -4
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts +2 -1
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js +11 -11
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/CorePanel.js +3 -3
- package/dist/panels/CorePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts +2 -8
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +6 -6
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.d.ts +1 -7
- package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
- package/dist/panels/FileExplorerPanel.js +1 -2
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.js +12 -13
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.d.ts +3 -3
- package/dist/panels/FilterSetManagerPanel.js +4 -4
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.d.ts +3 -3
- package/dist/panels/InputFilterPanel.js +4 -5
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +5 -5
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +14 -13
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.js +1 -2
- package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
- package/dist/panels/IrisGridPanelTypes.js.map +1 -1
- package/dist/panels/LogPanel.d.ts +3 -3
- package/dist/panels/LogPanel.d.ts.map +1 -1
- package/dist/panels/LogPanel.js +1 -3
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.js +3 -4
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.d.ts +3 -3
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/MockFileStorage.js.map +1 -1
- package/dist/panels/MockFileStorageTable.js +1 -1
- package/dist/panels/MockFileStorageTable.js.map +1 -1
- package/dist/panels/NotebookPanel.d.ts +7 -9
- package/dist/panels/NotebookPanel.d.ts.map +1 -1
- package/dist/panels/NotebookPanel.js +8 -10
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.js +5 -6
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/PandasReloadButton.js +2 -3
- package/dist/panels/PandasReloadButton.js.map +1 -1
- package/dist/panels/WidgetPanel.js +2 -3
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js +1 -3
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/panels/WidgetPanelTypes.js.map +1 -1
- package/dist/panels/index.js.map +1 -1
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/prop-types/UIPropTypes.js.map +1 -1
- package/dist/prop-types/index.js.map +1 -1
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/index.js.map +1 -1
- package/dist/redux/selectors.js.map +1 -1
- package/dist/useChartLinker.js.map +1 -1
- package/dist/useConfigureRuff.js.map +1 -1
- package/dist/useDashboardColumnFilters.js.map +1 -1
- package/dist/useGridLinker.js.map +1 -1
- package/dist/useHydrateGrid.js.map +1 -1
- package/dist/useIrisGridModel.js +2 -2
- package/dist/useIrisGridModel.js.map +1 -1
- package/dist/useLoadTablePlugin.js.map +1 -1
- package/dist/useTablePlugin.js +1 -1
- package/dist/useTablePlugin.js.map +1 -1
- package/package.json +24 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerLink.js","names":["React","Component","memoize","classNames","Button","DropdownMenu","vsTrash","vsTriangleDown","FontAwesomeIcon","Type","FilterType","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","Log","TableUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","Math","sqrt","TRIANGLE_THETA","asin","CLIP_RADIUS","HALF_PI","PI","LinkerLink","makeCirclePath","x","y","r","concat","getLabelForLinkFilter","columnType","filterType","isNumberType","isCharType","isTextType","isDateType","isBooleanType","eq","notEq","Error","e","warn","constructor","props","_defineProperty","linkId","onOperatorChanged","filterTypes","getFilterTypes","flatMap","type","index","symbol","getFilterOperatorString","title","icon","children","action","order","handleClick","bind","handleMouseEnter","handleMouseLeave","handleDelete","getDropdownActions","state","isHovering","undefined","event","stopPropagation","preventDefault","id","onClick","onDelete","altKey","setState","startColumnType","getOperators","render","className","operator","isSelected","x1","y1","x2","y2","len","theta","atan2","xMult","sin","yMult","cos","maxX","window","innerWidth","maxY","innerHeight","minX","minY","qx","max","min","qy","path","selectClipPath","clipPathId","endTheta","t2theta","t3theta","tx1","ty1","tx2","ty2","tx3","ty3","points","midX","midY","dMidX","dMidY","slopeAtMid","DISTANCE_FROM_MID","topOffsetX","topOffsetY","bottomOffsetX","bottomOffsetY","Number","isFinite","abs","showOperator","hovering","d","clipRule","onMouseEnter","onMouseLeave","clipPath","cx","cy","kind","style","top","left","transform","tooltip","actions","popperOptions","placement"],"sources":["../../src/linker/LinkerLink.tsx"],"sourcesContent":["import React, { Component, type MouseEvent } from 'react';\nimport memoize from 'memoize-one';\nimport classNames from 'classnames';\nimport {\n Button,\n type DropdownAction,\n DropdownMenu,\n} from '@deephaven/components';\nimport { vsTrash, vsTriangleDown } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Type as FilterType,\n type TypeValue as FilterTypeValue,\n getLabelForNumberFilter,\n getLabelForTextFilter,\n getLabelForDateFilter,\n} from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport './LinkerLink.scss';\nimport { type LinkType } from './LinkerUtils';\n\nconst log = Log.module('LinkerLink');\n\n/** The constant for how droopy the links are. Increase for more droopiness. */\nconst DROOP = 0.015;\nconst DROOP_EXPONENT = 1.5;\nconst TRIANGLE_HEIGHT = 12;\nconst TRIANGLE_BASE = 12;\nconst TRIANGLE_TIP = 2;\nconst TRIANGLE_HYPOTENUSE = Math.sqrt(\n (TRIANGLE_BASE * 0.5) ** 2 + TRIANGLE_HEIGHT ** 2\n);\nconst TRIANGLE_THETA = Math.asin((TRIANGLE_BASE * 0.5) / TRIANGLE_HEIGHT);\nconst CLIP_RADIUS = 15;\nconst HALF_PI = Math.PI * 0.5;\n\nexport type LinkerLinkProps = {\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 isSelected: boolean;\n startColumnType: string | null;\n onClick: (id: string) => void;\n onDelete: (id: string) => void;\n onOperatorChanged: (id: string, type: FilterTypeValue) => void;\n};\n\nexport type LinkerLinkState = {\n isHovering?: boolean;\n};\n\nexport class LinkerLink extends Component<LinkerLinkProps, LinkerLinkState> {\n static defaultProps = {\n className: '',\n isSelected: false,\n onClick(): void {\n // no-op\n },\n onDelete(): void {\n // no-op\n },\n };\n\n /**\n * Make an SVG path for a circle at the specified coordinates.\n * @param x The x coordinate for the centre of the circle\n * @param y The y coordinate for the centre of the circle\n * @param r Radius of the circle\n * @returns The SVG string path\n */\n static makeCirclePath(x: number, y: number, r: number): string {\n return `M ${x} ${y} m -${r},0 a ${r},${r} 0 1,0 ${\n r * 2\n },0 a ${r},${r} 0 1,0 -${r * 2},0 z`;\n }\n\n static getLabelForLinkFilter(\n columnType: string,\n filterType: FilterTypeValue\n ): string {\n try {\n if (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isCharType(columnType)\n ) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n if (filterType === FilterType.eq) {\n return 'is equal to';\n }\n if (filterType === FilterType.notEq) {\n return 'is not equal to';\n }\n }\n throw new Error(`Unrecognized column type: ${columnType}`);\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n\n constructor(props: LinkerLinkProps) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleDelete = this.handleDelete.bind(this);\n this.getDropdownActions = this.getDropdownActions.bind(this);\n\n this.state = {\n isHovering: undefined,\n };\n }\n\n getOperators = memoize(\n (linkId: string, columnType: string): DropdownAction[] => {\n const { onOperatorChanged } = this.props;\n let filterTypes = TableUtils.getFilterTypes(columnType);\n if (TableUtils.isBooleanType(columnType)) {\n filterTypes = [FilterType.eq, FilterType.notEq];\n }\n return filterTypes.flatMap((type, index) => {\n // Remove case-insensitive string comparisons\n if (type === 'eqIgnoreCase' || type === `notEqIgnoreCase`) {\n return [];\n }\n let symbol = '';\n\n if (type === 'startsWith') {\n symbol = 'a*';\n } else if (type === 'endsWith') {\n symbol = '*z';\n } else {\n symbol = TableUtils.getFilterOperatorString(type);\n }\n\n return [\n {\n title: LinkerLink.getLabelForLinkFilter(columnType, type),\n icon: <b>{symbol}</b>,\n action: () => onOperatorChanged(linkId, type),\n order: index,\n },\n ];\n });\n }\n );\n\n handleClick(event: MouseEvent<SVGPathElement>): void {\n event.stopPropagation();\n event.preventDefault();\n\n const { id, onClick, onDelete } = this.props;\n if (event.altKey) {\n onDelete(id);\n } else {\n onClick(id);\n }\n }\n\n handleMouseEnter(): void {\n this.setState({\n isHovering: true,\n });\n }\n\n handleMouseLeave(): void {\n this.setState({\n isHovering: false,\n });\n }\n\n handleDelete(): void {\n const { id, onDelete } = this.props;\n onDelete(id);\n }\n\n getDropdownActions(): DropdownAction[] {\n const { id, startColumnType } = this.props;\n if (startColumnType != null) {\n return this.getOperators(id, startColumnType);\n }\n return [];\n }\n\n render(): JSX.Element {\n const {\n className,\n operator,\n isSelected,\n x1,\n y1,\n x2,\n y2,\n id,\n startColumnType,\n type,\n } = this.props;\n const { isHovering } = this.state;\n\n // Path between the two points\n const len = Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);\n const theta = Math.atan2(y2 - y1, x2 - x1);\n const xMult = Math.sin(theta);\n const yMult = Math.cos(theta) + 2;\n const maxX = window.innerWidth;\n const maxY = window.innerHeight;\n const minX = 0;\n const minY = 0;\n const qx = Math.max(\n minX,\n Math.min(\n x1 + (x2 - x1) / 2 + xMult * (len * DROOP) ** DROOP_EXPONENT,\n maxX\n )\n );\n const qy = Math.max(\n minY,\n Math.min(\n y1 + (y2 - y1) / 2 + yMult * (len * DROOP) ** DROOP_EXPONENT,\n maxY\n )\n );\n const path = `M ${x1} ${y1} Q ${qx} ${qy} ${x2} ${y2}`;\n\n // path for a 100%, 100% rect, then two paths for circles at point\n const selectClipPath = `M ${minX} ${minY} L ${minX} ${maxY} L ${maxX} ${maxY} L ${maxX} ${minY} z\n ${LinkerLink.makeCirclePath(x1, y1, CLIP_RADIUS)}\n ${LinkerLink.makeCirclePath(x2, y2, CLIP_RADIUS)}`;\n const clipPathId = `link-select-clip-${id}`;\n\n // Calculate location of the end triangle\n // We draw it instead of using markers to allow for transitions in the style\n const endTheta = Math.atan2(y2 - qy, x2 - qx);\n const t2theta = endTheta - TRIANGLE_THETA + Math.PI;\n const t3theta = endTheta + TRIANGLE_THETA + Math.PI;\n const tx1 = x2 + Math.cos(endTheta) * TRIANGLE_TIP;\n const ty1 = y2 + Math.sin(endTheta) * TRIANGLE_TIP;\n const tx2 = tx1 + Math.cos(t2theta) * TRIANGLE_HYPOTENUSE;\n const ty2 = ty1 + Math.sin(t2theta) * TRIANGLE_HYPOTENUSE;\n const tx3 = tx1 + Math.cos(t3theta) * TRIANGLE_HYPOTENUSE;\n const ty3 = ty1 + Math.sin(t3theta) * TRIANGLE_HYPOTENUSE;\n const points = `${tx1},${ty1} ${tx2},${ty2} ${tx3},${ty3}`;\n\n // Button offset calculations\n const midX = 0.25 * x1 + 0.5 * qx + 0.25 * x2;\n const midY = 0.25 * y1 + 0.5 * qy + 0.25 * y2;\n const dMidX = qx - x1 + (x2 - qx);\n const dMidY = qy - y1 + (y2 - qy);\n const slopeAtMid = dMidY / dMidX;\n const DISTANCE_FROM_MID = 20;\n let topOffsetX = DISTANCE_FROM_MID / Math.sqrt(1 + slopeAtMid ** 2);\n let topOffsetY = topOffsetX * slopeAtMid;\n let bottomOffsetX = topOffsetX * -1;\n let bottomOffsetY = topOffsetY * -1;\n if (!Number.isFinite(slopeAtMid)) {\n bottomOffsetX = 10;\n bottomOffsetY = 5;\n topOffsetX = 10;\n topOffsetY = -35;\n } else if (slopeAtMid > 0) {\n topOffsetX *= -1;\n topOffsetY *= -1;\n bottomOffsetX *= -1;\n bottomOffsetY *= -1;\n bottomOffsetX -= 50 - 10 * (Math.abs(theta) % HALF_PI);\n bottomOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetX -= 50 - 10 * (Math.abs(theta) % HALF_PI);\n topOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n } else if (slopeAtMid < 0) {\n bottomOffsetX += 10 * (Math.abs(theta) % HALF_PI);\n bottomOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetX += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n } else {\n bottomOffsetX = 15;\n bottomOffsetY = 10;\n topOffsetX = -25;\n topOffsetY = 10;\n }\n\n let symbol = '';\n if (operator !== undefined) {\n if (operator === 'startsWith') {\n symbol = 'a*';\n } else if (operator === 'endsWith') {\n symbol = '*z';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n\n const showOperator = type !== 'chartLink' && type !== 'filterSource';\n\n return (\n <>\n <svg\n className={classNames(className, {\n hovering: isHovering,\n })}\n >\n <clipPath id={clipPathId}>\n <path d={selectClipPath} clipRule=\"evenodd\" />\n </clipPath>\n <path\n className=\"link-select\"\n d={path}\n onClick={this.handleClick}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n clipPath={`url(#${clipPathId})`}\n data-testid=\"link-select\"\n />\n <path className=\"link-background\" d={path} />\n <path className=\"link-foreground\" d={path} />\n <circle className=\"link-dot\" cx={x1} cy={y1} r=\"5\" />\n <polygon className=\"link-triangle\" points={points} />\n </svg>\n {startColumnType != null && isSelected && (\n <>\n {showOperator && (\n <Button\n kind=\"primary\"\n className=\"btn-fab btn-operator\"\n style={{\n top: midY + (slopeAtMid >= 0 ? topOffsetY : bottomOffsetY),\n left: midX + (slopeAtMid >= 0 ? topOffsetX : bottomOffsetX),\n }}\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n icon={\n <div className=\"fa-md fa-layers\">\n <b>{symbol}</b>\n <FontAwesomeIcon\n icon={vsTriangleDown}\n transform=\"right-8 down-9 shrink-5\"\n />\n </div>\n }\n tooltip=\"Change comparison operator\"\n >\n <DropdownMenu\n actions={this.getDropdownActions}\n popperOptions={{ placement: 'bottom-start' }}\n />\n </Button>\n )}\n <Button\n kind=\"primary\"\n className=\"btn-fab btn-delete\"\n style={{\n top: midY + (slopeAtMid < 0 ? topOffsetY : bottomOffsetY),\n left: midX + (slopeAtMid < 0 ? topOffsetX : bottomOffsetX),\n }}\n onClick={this.handleDelete}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n </>\n )}\n </>\n );\n }\n}\n\nexport default LinkerLink;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LinkerLink.js","names":["React","Component","memoize","classNames","Button","DropdownMenu","vsTrash","vsTriangleDown","FontAwesomeIcon","Type","FilterType","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","Log","TableUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","Math","sqrt","TRIANGLE_THETA","asin","CLIP_RADIUS","HALF_PI","PI","LinkerLink","makeCirclePath","x","y","r","concat","getLabelForLinkFilter","columnType","filterType","isNumberType","isCharType","isTextType","isDateType","isBooleanType","eq","notEq","Error","e","warn","constructor","props","_defineProperty","linkId","onOperatorChanged","filterTypes","getFilterTypes","flatMap","type","index","symbol","getFilterOperatorString","title","icon","children","action","order","handleClick","bind","handleMouseEnter","handleMouseLeave","handleDelete","getDropdownActions","state","isHovering","undefined","event","stopPropagation","preventDefault","id","onClick","onDelete","altKey","setState","startColumnType","getOperators","render","className","operator","isSelected","x1","y1","x2","y2","len","theta","atan2","xMult","sin","yMult","cos","maxX","window","innerWidth","maxY","innerHeight","minX","minY","qx","max","min","qy","path","selectClipPath","clipPathId","endTheta","t2theta","t3theta","tx1","ty1","tx2","ty2","tx3","ty3","points","midX","midY","dMidX","dMidY","slopeAtMid","DISTANCE_FROM_MID","topOffsetX","topOffsetY","bottomOffsetX","bottomOffsetY","Number","isFinite","abs","showOperator","hovering","d","clipRule","onMouseEnter","onMouseLeave","clipPath","cx","cy","kind","style","top","left","transform","tooltip","actions","popperOptions","placement"],"sources":["../../src/linker/LinkerLink.tsx"],"sourcesContent":["import React, { Component, type MouseEvent } from 'react';\nimport memoize from 'memoize-one';\nimport classNames from 'classnames';\nimport {\n Button,\n type DropdownAction,\n DropdownMenu,\n} from '@deephaven/components';\nimport { vsTrash, vsTriangleDown } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Type as FilterType,\n type TypeValue as FilterTypeValue,\n getLabelForNumberFilter,\n getLabelForTextFilter,\n getLabelForDateFilter,\n} from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport './LinkerLink.scss';\nimport { type LinkType } from './LinkerUtils';\n\nconst log = Log.module('LinkerLink');\n\n/** The constant for how droopy the links are. Increase for more droopiness. */\nconst DROOP = 0.015;\nconst DROOP_EXPONENT = 1.5;\nconst TRIANGLE_HEIGHT = 12;\nconst TRIANGLE_BASE = 12;\nconst TRIANGLE_TIP = 2;\nconst TRIANGLE_HYPOTENUSE = Math.sqrt(\n (TRIANGLE_BASE * 0.5) ** 2 + TRIANGLE_HEIGHT ** 2\n);\nconst TRIANGLE_THETA = Math.asin((TRIANGLE_BASE * 0.5) / TRIANGLE_HEIGHT);\nconst CLIP_RADIUS = 15;\nconst HALF_PI = Math.PI * 0.5;\n\nexport type LinkerLinkProps = {\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 isSelected: boolean;\n startColumnType: string | null;\n onClick: (id: string) => void;\n onDelete: (id: string) => void;\n onOperatorChanged: (id: string, type: FilterTypeValue) => void;\n};\n\nexport type LinkerLinkState = {\n isHovering?: boolean;\n};\n\nexport class LinkerLink extends Component<LinkerLinkProps, LinkerLinkState> {\n static defaultProps = {\n className: '',\n isSelected: false,\n onClick(): void {\n // no-op\n },\n onDelete(): void {\n // no-op\n },\n };\n\n /**\n * Make an SVG path for a circle at the specified coordinates.\n * @param x The x coordinate for the centre of the circle\n * @param y The y coordinate for the centre of the circle\n * @param r Radius of the circle\n * @returns The SVG string path\n */\n static makeCirclePath(x: number, y: number, r: number): string {\n return `M ${x} ${y} m -${r},0 a ${r},${r} 0 1,0 ${\n r * 2\n },0 a ${r},${r} 0 1,0 -${r * 2},0 z`;\n }\n\n static getLabelForLinkFilter(\n columnType: string,\n filterType: FilterTypeValue\n ): string {\n try {\n if (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isCharType(columnType)\n ) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n if (filterType === FilterType.eq) {\n return 'is equal to';\n }\n if (filterType === FilterType.notEq) {\n return 'is not equal to';\n }\n }\n throw new Error(`Unrecognized column type: ${columnType}`);\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n\n constructor(props: LinkerLinkProps) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleDelete = this.handleDelete.bind(this);\n this.getDropdownActions = this.getDropdownActions.bind(this);\n\n this.state = {\n isHovering: undefined,\n };\n }\n\n getOperators = memoize(\n (linkId: string, columnType: string): DropdownAction[] => {\n const { onOperatorChanged } = this.props;\n let filterTypes = TableUtils.getFilterTypes(columnType);\n if (TableUtils.isBooleanType(columnType)) {\n filterTypes = [FilterType.eq, FilterType.notEq];\n }\n return filterTypes.flatMap((type, index) => {\n // Remove case-insensitive string comparisons\n if (type === 'eqIgnoreCase' || type === `notEqIgnoreCase`) {\n return [];\n }\n let symbol = '';\n\n if (type === 'startsWith') {\n symbol = 'a*';\n } else if (type === 'endsWith') {\n symbol = '*z';\n } else {\n symbol = TableUtils.getFilterOperatorString(type);\n }\n\n return [\n {\n title: LinkerLink.getLabelForLinkFilter(columnType, type),\n icon: <b>{symbol}</b>,\n action: () => onOperatorChanged(linkId, type),\n order: index,\n },\n ];\n });\n }\n );\n\n handleClick(event: MouseEvent<SVGPathElement>): void {\n event.stopPropagation();\n event.preventDefault();\n\n const { id, onClick, onDelete } = this.props;\n if (event.altKey) {\n onDelete(id);\n } else {\n onClick(id);\n }\n }\n\n handleMouseEnter(): void {\n this.setState({\n isHovering: true,\n });\n }\n\n handleMouseLeave(): void {\n this.setState({\n isHovering: false,\n });\n }\n\n handleDelete(): void {\n const { id, onDelete } = this.props;\n onDelete(id);\n }\n\n getDropdownActions(): DropdownAction[] {\n const { id, startColumnType } = this.props;\n if (startColumnType != null) {\n return this.getOperators(id, startColumnType);\n }\n return [];\n }\n\n render(): JSX.Element {\n const {\n className,\n operator,\n isSelected,\n x1,\n y1,\n x2,\n y2,\n id,\n startColumnType,\n type,\n } = this.props;\n const { isHovering } = this.state;\n\n // Path between the two points\n const len = Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);\n const theta = Math.atan2(y2 - y1, x2 - x1);\n const xMult = Math.sin(theta);\n const yMult = Math.cos(theta) + 2;\n const maxX = window.innerWidth;\n const maxY = window.innerHeight;\n const minX = 0;\n const minY = 0;\n const qx = Math.max(\n minX,\n Math.min(\n x1 + (x2 - x1) / 2 + xMult * (len * DROOP) ** DROOP_EXPONENT,\n maxX\n )\n );\n const qy = Math.max(\n minY,\n Math.min(\n y1 + (y2 - y1) / 2 + yMult * (len * DROOP) ** DROOP_EXPONENT,\n maxY\n )\n );\n const path = `M ${x1} ${y1} Q ${qx} ${qy} ${x2} ${y2}`;\n\n // path for a 100%, 100% rect, then two paths for circles at point\n const selectClipPath = `M ${minX} ${minY} L ${minX} ${maxY} L ${maxX} ${maxY} L ${maxX} ${minY} z\n ${LinkerLink.makeCirclePath(x1, y1, CLIP_RADIUS)}\n ${LinkerLink.makeCirclePath(x2, y2, CLIP_RADIUS)}`;\n const clipPathId = `link-select-clip-${id}`;\n\n // Calculate location of the end triangle\n // We draw it instead of using markers to allow for transitions in the style\n const endTheta = Math.atan2(y2 - qy, x2 - qx);\n const t2theta = endTheta - TRIANGLE_THETA + Math.PI;\n const t3theta = endTheta + TRIANGLE_THETA + Math.PI;\n const tx1 = x2 + Math.cos(endTheta) * TRIANGLE_TIP;\n const ty1 = y2 + Math.sin(endTheta) * TRIANGLE_TIP;\n const tx2 = tx1 + Math.cos(t2theta) * TRIANGLE_HYPOTENUSE;\n const ty2 = ty1 + Math.sin(t2theta) * TRIANGLE_HYPOTENUSE;\n const tx3 = tx1 + Math.cos(t3theta) * TRIANGLE_HYPOTENUSE;\n const ty3 = ty1 + Math.sin(t3theta) * TRIANGLE_HYPOTENUSE;\n const points = `${tx1},${ty1} ${tx2},${ty2} ${tx3},${ty3}`;\n\n // Button offset calculations\n const midX = 0.25 * x1 + 0.5 * qx + 0.25 * x2;\n const midY = 0.25 * y1 + 0.5 * qy + 0.25 * y2;\n const dMidX = qx - x1 + (x2 - qx);\n const dMidY = qy - y1 + (y2 - qy);\n const slopeAtMid = dMidY / dMidX;\n const DISTANCE_FROM_MID = 20;\n let topOffsetX = DISTANCE_FROM_MID / Math.sqrt(1 + slopeAtMid ** 2);\n let topOffsetY = topOffsetX * slopeAtMid;\n let bottomOffsetX = topOffsetX * -1;\n let bottomOffsetY = topOffsetY * -1;\n if (!Number.isFinite(slopeAtMid)) {\n bottomOffsetX = 10;\n bottomOffsetY = 5;\n topOffsetX = 10;\n topOffsetY = -35;\n } else if (slopeAtMid > 0) {\n topOffsetX *= -1;\n topOffsetY *= -1;\n bottomOffsetX *= -1;\n bottomOffsetY *= -1;\n bottomOffsetX -= 50 - 10 * (Math.abs(theta) % HALF_PI);\n bottomOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetX -= 50 - 10 * (Math.abs(theta) % HALF_PI);\n topOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n } else if (slopeAtMid < 0) {\n bottomOffsetX += 10 * (Math.abs(theta) % HALF_PI);\n bottomOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetX += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n } else {\n bottomOffsetX = 15;\n bottomOffsetY = 10;\n topOffsetX = -25;\n topOffsetY = 10;\n }\n\n let symbol = '';\n if (operator !== undefined) {\n if (operator === 'startsWith') {\n symbol = 'a*';\n } else if (operator === 'endsWith') {\n symbol = '*z';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n\n const showOperator = type !== 'chartLink' && type !== 'filterSource';\n\n return (\n <>\n <svg\n className={classNames(className, {\n hovering: isHovering,\n })}\n >\n <clipPath id={clipPathId}>\n <path d={selectClipPath} clipRule=\"evenodd\" />\n </clipPath>\n <path\n className=\"link-select\"\n d={path}\n onClick={this.handleClick}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n clipPath={`url(#${clipPathId})`}\n data-testid=\"link-select\"\n />\n <path className=\"link-background\" d={path} />\n <path className=\"link-foreground\" d={path} />\n <circle className=\"link-dot\" cx={x1} cy={y1} r=\"5\" />\n <polygon className=\"link-triangle\" points={points} />\n </svg>\n {startColumnType != null && isSelected && (\n <>\n {showOperator && (\n <Button\n kind=\"primary\"\n className=\"btn-fab btn-operator\"\n style={{\n top: midY + (slopeAtMid >= 0 ? topOffsetY : bottomOffsetY),\n left: midX + (slopeAtMid >= 0 ? topOffsetX : bottomOffsetX),\n }}\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n icon={\n <div className=\"fa-md fa-layers\">\n <b>{symbol}</b>\n <FontAwesomeIcon\n icon={vsTriangleDown}\n transform=\"right-8 down-9 shrink-5\"\n />\n </div>\n }\n tooltip=\"Change comparison operator\"\n >\n <DropdownMenu\n actions={this.getDropdownActions}\n popperOptions={{ placement: 'bottom-start' }}\n />\n </Button>\n )}\n <Button\n kind=\"primary\"\n className=\"btn-fab btn-delete\"\n style={{\n top: midY + (slopeAtMid < 0 ? topOffsetY : bottomOffsetY),\n left: midX + (slopeAtMid < 0 ? topOffsetX : bottomOffsetX),\n }}\n onClick={this.handleDelete}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n </>\n )}\n </>\n );\n }\n}\n\nexport default LinkerLink;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,8 +14,7 @@ import clamp from 'lodash.clamp';
|
|
|
14
14
|
import { isLinkableFromPanel } from "./LinkerUtils.js";
|
|
15
15
|
import LinkerLink from "./LinkerLink.js";
|
|
16
16
|
import "./LinkerOverlayContent.css";
|
|
17
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
19
18
|
var log = Log.module('LinkerOverlayContent');
|
|
20
19
|
export class LinkerOverlayContent extends Component {
|
|
21
20
|
constructor(props) {
|
|
@@ -1 +1 @@
|
|
|
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, type ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n ContextActions,\n GLOBAL_SHORTCUTS,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, type 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 type Link,\n type LinkerCoordinate,\n type LinkPoint,\n type 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);\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
|
+
{"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, type ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n ContextActions,\n GLOBAL_SHORTCUTS,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, type 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 type Link,\n type LinkerCoordinate,\n type LinkPoint,\n type 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);\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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","ignoreList":[]}
|
|
@@ -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 { type 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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"}
|
|
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 { type 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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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolType.js","names":["Object","freeze","DEFAULT","LINKER"],"sources":["../../src/linker/ToolType.ts"],"sourcesContent":["export default Object.freeze({\n DEFAULT: 'DEFAULT',\n LINKER: 'LINKER',\n});\n"],"mappings":"AAAA,eAAeA,MAAM,CAACC,MAAM,CAAC;EAC3BC,OAAO,EAAE,SAAS;EAClBC,MAAM,EAAE;AACV,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"ToolType.js","names":["Object","freeze","DEFAULT","LINKER"],"sources":["../../src/linker/ToolType.ts"],"sourcesContent":["export default Object.freeze({\n DEFAULT: 'DEFAULT',\n LINKER: 'LINKER',\n});\n"],"mappings":"AAAA,eAAeA,MAAM,CAACC,MAAM,CAAC;EAC3BC,OAAO,EAAE,SAAS;EAClBC,MAAM,EAAE;AACV,CAAC,CAAC","ignoreList":[]}
|
package/dist/linker/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/linker/index.ts"],"sourcesContent":["export * from './ColumnSelectionValidator';\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/linker/index.ts"],"sourcesContent":["export * from './ColumnSelectionValidator';\n"],"mappings":"","ignoreList":[]}
|
|
@@ -15,10 +15,6 @@ interface ChartColumnSelectorOverlayProps {
|
|
|
15
15
|
declare function ChartColumnSelectorOverlay({ columns, onColumnSelected, onMouseEnter, onMouseLeave, }: ChartColumnSelectorOverlayProps): ReactElement;
|
|
16
16
|
declare namespace ChartColumnSelectorOverlay {
|
|
17
17
|
var makeButtonClassName: (columnName: string) => string;
|
|
18
|
-
var defaultProps: {
|
|
19
|
-
onMouseEnter: () => void;
|
|
20
|
-
onMouseLeave: () => void;
|
|
21
|
-
};
|
|
22
18
|
}
|
|
23
19
|
export default ChartColumnSelectorOverlay;
|
|
24
20
|
//# sourceMappingURL=ChartColumnSelectorOverlay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartColumnSelectorOverlay.d.ts","sourceRoot":"","sources":["../../src/panels/ChartColumnSelectorOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAGzE,OAAO,mCAAmC,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,+BAA+B;IACvC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;CACrD;AAED,iBAAS,0BAA0B,CAAC,EAClC,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,EAAE,+BAA+B,GAAG,YAAY,CA+BhD;kBApCQ,0BAA0B;0CAsC2B,MAAM;;
|
|
1
|
+
{"version":3,"file":"ChartColumnSelectorOverlay.d.ts","sourceRoot":"","sources":["../../src/panels/ChartColumnSelectorOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAGzE,OAAO,mCAAmC,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,+BAA+B;IACvC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;CACrD;AAED,iBAAS,0BAA0B,CAAC,EAClC,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,EAAE,+BAA+B,GAAG,YAAY,CA+BhD;kBApCQ,0BAA0B;0CAsC2B,MAAM;;AAGpE,eAAe,0BAA0B,CAAC"}
|
|
@@ -2,8 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
import { SocketedButton } from '@deephaven/components';
|
|
4
4
|
import "./ChartColumnSelectorOverlay.css";
|
|
5
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
6
|
function ChartColumnSelectorOverlay(_ref) {
|
|
8
7
|
var {
|
|
9
8
|
columns,
|
|
@@ -24,7 +23,7 @@ function ChartColumnSelectorOverlay(_ref) {
|
|
|
24
23
|
className: classNames('btn-chart-column-selector', ChartColumnSelectorOverlay.makeButtonClassName(column.name)),
|
|
25
24
|
onClick: () => onColumnSelected(column.name),
|
|
26
25
|
onMouseEnter: () => {
|
|
27
|
-
|
|
26
|
+
_onMouseEnter === null || _onMouseEnter === void 0 || _onMouseEnter(column);
|
|
28
27
|
},
|
|
29
28
|
onMouseLeave: onMouseLeave,
|
|
30
29
|
disabled: !column.isValid,
|
|
@@ -36,9 +35,5 @@ function ChartColumnSelectorOverlay(_ref) {
|
|
|
36
35
|
});
|
|
37
36
|
}
|
|
38
37
|
ChartColumnSelectorOverlay.makeButtonClassName = columnName => "btn-chart-column-selector-".concat(columnName);
|
|
39
|
-
ChartColumnSelectorOverlay.defaultProps = {
|
|
40
|
-
onMouseEnter: () => undefined,
|
|
41
|
-
onMouseLeave: () => undefined
|
|
42
|
-
};
|
|
43
38
|
export default ChartColumnSelectorOverlay;
|
|
44
39
|
//# sourceMappingURL=ChartColumnSelectorOverlay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartColumnSelectorOverlay.js","names":["React","classNames","SocketedButton","jsx","_jsx","jsxs","_jsxs","ChartColumnSelectorOverlay","_ref","columns","onColumnSelected","onMouseEnter","onMouseLeave","className","children","map","column","makeButtonClassName","name","onClick","disabled","isValid","isLinked","isActive","columnName","concat"
|
|
1
|
+
{"version":3,"file":"ChartColumnSelectorOverlay.js","names":["React","classNames","SocketedButton","jsx","_jsx","jsxs","_jsxs","ChartColumnSelectorOverlay","_ref","columns","onColumnSelected","onMouseEnter","onMouseLeave","className","children","map","column","makeButtonClassName","name","onClick","disabled","isValid","isLinked","isActive","columnName","concat"],"sources":["../../src/panels/ChartColumnSelectorOverlay.tsx"],"sourcesContent":["import React, { type MouseEventHandler, type ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { SocketedButton } from '@deephaven/components';\nimport './ChartColumnSelectorOverlay.scss';\n\nexport interface SelectorColumn {\n name: string;\n type: string;\n isValid: boolean;\n isActive: boolean;\n}\n\ninterface ChartColumnSelectorOverlayProps {\n columns: SelectorColumn[];\n onColumnSelected: (name: string) => void;\n onMouseEnter?: (column: SelectorColumn) => void;\n onMouseLeave?: MouseEventHandler<HTMLButtonElement>;\n}\n\nfunction ChartColumnSelectorOverlay({\n columns,\n onColumnSelected,\n onMouseEnter,\n onMouseLeave,\n}: ChartColumnSelectorOverlayProps): ReactElement {\n return (\n <div className=\"chart-panel-overlay chart-column-selector-overlay\">\n <div className={classNames('chart-panel-overlay-content')}>\n <div className=\"info-message\">\n This plot requires a filter control to be added to the layout or a\n table link to be created on the following columns:\n </div>\n <div className=\"waiting-column-select-list\">\n {columns.map(column => (\n <SocketedButton\n key={column.name}\n className={classNames(\n 'btn-chart-column-selector',\n ChartColumnSelectorOverlay.makeButtonClassName(column.name)\n )}\n onClick={() => onColumnSelected(column.name)}\n onMouseEnter={() => {\n onMouseEnter?.(column);\n }}\n onMouseLeave={onMouseLeave}\n disabled={!column.isValid}\n isLinked={column.isActive}\n >\n {column.name}\n </SocketedButton>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nChartColumnSelectorOverlay.makeButtonClassName = (columnName: string) =>\n `btn-chart-column-selector-${columnName}`;\n\nexport default ChartColumnSelectorOverlay;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAqD,OAAO;AACxE,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,cAAc,QAAQ,uBAAuB;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAiBvD,SAASC,0BAA0BA,CAAAC,IAAA,EAKe;EAAA,IALd;IAClCC,OAAO;IACPC,gBAAgB;IAChBC,YAAY,EAAZA,aAAY;IACZC;EAC+B,CAAC,GAAAJ,IAAA;EAChC,oBACEJ,IAAA;IAAKS,SAAS,EAAC,mDAAmD;IAAAC,QAAA,eAChER,KAAA;MAAKO,SAAS,EAAEZ,UAAU,CAAC,6BAA6B,CAAE;MAAAa,QAAA,gBACxDV,IAAA;QAAKS,SAAS,EAAC,cAAc;QAAAC,QAAA,EAAC;MAG9B,CAAK,CAAC,eACNV,IAAA;QAAKS,SAAS,EAAC,4BAA4B;QAAAC,QAAA,EACxCL,OAAO,CAACM,GAAG,CAACC,MAAM,iBACjBZ,IAAA,CAACF,cAAc;UAEbW,SAAS,EAAEZ,UAAU,CACnB,2BAA2B,EAC3BM,0BAA0B,CAACU,mBAAmB,CAACD,MAAM,CAACE,IAAI,CAC5D,CAAE;UACFC,OAAO,EAAEA,CAAA,KAAMT,gBAAgB,CAACM,MAAM,CAACE,IAAI,CAAE;UAC7CP,YAAY,EAAEA,CAAA,KAAM;YAClBA,aAAY,aAAZA,aAAY,eAAZA,aAAY,CAAGK,MAAM,CAAC;UACxB,CAAE;UACFJ,YAAY,EAAEA,YAAa;UAC3BQ,QAAQ,EAAE,CAACJ,MAAM,CAACK,OAAQ;UAC1BC,QAAQ,EAAEN,MAAM,CAACO,QAAS;UAAAT,QAAA,EAEzBE,MAAM,CAACE;QAAI,GAbPF,MAAM,CAACE,IAcE,CACjB;MAAC,CACC,CAAC;IAAA,CACH;EAAC,CACH,CAAC;AAEV;AAEAX,0BAA0B,CAACU,mBAAmB,GAAIO,UAAkB,iCAAAC,MAAA,CACrCD,UAAU,CAAE;AAE3C,eAAejB,0BAA0B","ignoreList":[]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type ReactElement } from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
2
|
import { type ColumnName, type InputFilter } from '@deephaven/iris-grid';
|
|
4
3
|
import './ChartFilterOverlay.scss';
|
|
5
4
|
export type ColumnMap = Map<ColumnName, {
|
|
@@ -16,16 +15,5 @@ interface ChartFilterOverlayProps {
|
|
|
16
15
|
waitingInputMap: Map<ColumnName, unknown>;
|
|
17
16
|
}
|
|
18
17
|
declare function ChartFilterOverlay({ columnMap, inputFilterMap, linkedColumnMap, onAdd, onOpenLinker, waitingFilterMap, waitingInputMap, }: ChartFilterOverlayProps): ReactElement;
|
|
19
|
-
declare namespace ChartFilterOverlay {
|
|
20
|
-
var propTypes: {
|
|
21
|
-
columnMap: PropTypes.Validator<Map<unknown, unknown>>;
|
|
22
|
-
inputFilterMap: PropTypes.Validator<Map<unknown, unknown>>;
|
|
23
|
-
linkedColumnMap: PropTypes.Validator<Map<unknown, unknown>>;
|
|
24
|
-
onAdd: PropTypes.Validator<(...args: any[]) => any>;
|
|
25
|
-
onOpenLinker: PropTypes.Validator<(...args: any[]) => any>;
|
|
26
|
-
waitingFilterMap: PropTypes.Validator<Map<unknown, unknown>>;
|
|
27
|
-
waitingInputMap: PropTypes.Validator<Map<unknown, unknown>>;
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
18
|
export default ChartFilterOverlay;
|
|
31
19
|
//# sourceMappingURL=ChartFilterOverlay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartFilterOverlay.d.ts","sourceRoot":"","sources":["../../src/panels/ChartFilterOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEZ,KAAK,YAAY,EAGlB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartFilterOverlay.d.ts","sourceRoot":"","sources":["../../src/panels/ChartFilterOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEZ,KAAK,YAAY,EAGlB,MAAM,OAAO,CAAC;AAMf,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,2BAA2B,CAAC;AAEnC,MAAM,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAExE,UAAU,uBAAuB;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC7C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,eAAe,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,cAAc,EACd,eAAe,EACf,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,EAAE,uBAAuB,GAAG,YAAY,CAoGxC;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import React, { useCallback, useMemo } from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
2
|
import classNames from 'classnames';
|
|
4
3
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
5
4
|
import { Button } from '@deephaven/components';
|
|
6
5
|
import { vsPass, vsWarning } from '@deephaven/icons';
|
|
7
6
|
import { TextUtils } from '@deephaven/utils';
|
|
8
7
|
import "./ChartFilterOverlay.css";
|
|
9
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
-
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
12
9
|
function ChartFilterOverlay(_ref) {
|
|
13
10
|
var {
|
|
14
11
|
columnMap,
|
|
@@ -94,14 +91,5 @@ function ChartFilterOverlay(_ref) {
|
|
|
94
91
|
})
|
|
95
92
|
});
|
|
96
93
|
}
|
|
97
|
-
ChartFilterOverlay.propTypes = {
|
|
98
|
-
columnMap: PropTypes.instanceOf(Map).isRequired,
|
|
99
|
-
inputFilterMap: PropTypes.instanceOf(Map).isRequired,
|
|
100
|
-
linkedColumnMap: PropTypes.instanceOf(Map).isRequired,
|
|
101
|
-
onAdd: PropTypes.func.isRequired,
|
|
102
|
-
onOpenLinker: PropTypes.func.isRequired,
|
|
103
|
-
waitingFilterMap: PropTypes.instanceOf(Map).isRequired,
|
|
104
|
-
waitingInputMap: PropTypes.instanceOf(Map).isRequired
|
|
105
|
-
};
|
|
106
94
|
export default ChartFilterOverlay;
|
|
107
95
|
//# sourceMappingURL=ChartFilterOverlay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartFilterOverlay.js","names":["React","useCallback","useMemo","
|
|
1
|
+
{"version":3,"file":"ChartFilterOverlay.js","names":["React","useCallback","useMemo","classNames","FontAwesomeIcon","Button","vsPass","vsWarning","TextUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ChartFilterOverlay","_ref","columnMap","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","waitingColumns","Array","from","keys","needsInputFilterValue","find","columnName","get","needsLinkValue","columnsText","join","map","item","concat","columns","values","handleAddClick","event","stopPropagation","preventDefault","handleOpenLinker","isWaitingFilters","size","isWaitingInput","className","children","column","isColumnWaiting","has","name","icon","kind","onClick"],"sources":["../../src/panels/ChartFilterOverlay.tsx"],"sourcesContent":["import React, {\n type MouseEvent,\n type ReactElement,\n useCallback,\n useMemo,\n} from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { TextUtils } from '@deephaven/utils';\nimport { type ColumnName, type InputFilter } from '@deephaven/iris-grid';\nimport './ChartFilterOverlay.scss';\n\nexport type ColumnMap = Map<ColumnName, { name: string; type: string }>;\n\ninterface ChartFilterOverlayProps {\n columnMap: ColumnMap;\n inputFilterMap: Map<ColumnName, InputFilter>;\n linkedColumnMap: Map<string, unknown>;\n onAdd: (columns: InputFilter[]) => void;\n onOpenLinker: () => void;\n waitingFilterMap: Map<string, InputFilter>;\n waitingInputMap: Map<ColumnName, unknown>;\n}\n\nfunction ChartFilterOverlay({\n columnMap,\n inputFilterMap,\n linkedColumnMap,\n onAdd,\n onOpenLinker,\n waitingFilterMap,\n waitingInputMap,\n}: ChartFilterOverlayProps): ReactElement {\n const inputMessage = useMemo(() => {\n const waitingColumns = Array.from(waitingInputMap.keys());\n const needsInputFilterValue = waitingColumns.find(\n (columnName: ColumnName) => inputFilterMap.get(columnName) != null\n );\n const needsLinkValue = waitingColumns.find(\n columnName => linkedColumnMap.get(columnName) != null\n );\n const columnsText = TextUtils.join(waitingColumns.map(item => `\"${item}\"`));\n if (\n needsInputFilterValue != null &&\n needsInputFilterValue &&\n needsLinkValue != null &&\n needsLinkValue\n ) {\n return `Use a filter control or linked table to set a value for ${columnsText}`;\n }\n if (needsInputFilterValue != null && needsInputFilterValue) {\n return `Set a filter control value for ${columnsText}`;\n }\n return `Double click a row in a linked table to set a value for ${columnsText}`;\n }, [inputFilterMap, linkedColumnMap, waitingInputMap]);\n\n const columns = useMemo(() => Array.from(columnMap.values()), [columnMap]);\n\n const handleAddClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n event.preventDefault();\n\n onAdd(Array.from(waitingFilterMap.values()));\n },\n [onAdd, waitingFilterMap]\n );\n\n const handleOpenLinker = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n event.preventDefault();\n\n onOpenLinker();\n },\n [onOpenLinker]\n );\n\n const isWaitingFilters = waitingFilterMap.size > 0;\n const isWaitingInput = !isWaitingFilters && waitingInputMap.size > 0;\n\n return (\n <div className=\"chart-panel-overlay chart-filter-overlay\">\n <div\n className={classNames(\n 'chart-panel-overlay-content chart-filter-overlay-content',\n { 'chart-filter-waiting-filter': isWaitingFilters },\n { 'chart-filter-waiting-input': isWaitingInput }\n )}\n >\n {isWaitingFilters && (\n <>\n <div className=\"info-message\">\n This plot requires a filter control to be added to the layout or a\n table link to be created on the following columns:\n </div>\n <div className=\"waiting-filter-list\">\n {columns.map(column => {\n const isColumnWaiting = waitingFilterMap.has(column.name);\n const icon = isColumnWaiting ? vsWarning : vsPass;\n return (\n <div\n key={column.name}\n className={classNames('waiting-filter-item', {\n 'is-invalid': isColumnWaiting,\n })}\n >\n <FontAwesomeIcon icon={icon} />\n {column.name}\n </div>\n );\n })}\n </div>\n <div>\n <Button kind=\"primary\" onClick={handleAddClick}>\n Add Input Filters\n </Button>\n <Button kind=\"primary\" onClick={handleOpenLinker}>\n Open Linker Tool\n </Button>\n </div>\n </>\n )}\n {isWaitingInput && (\n <>\n <div className=\"info-message\">Waiting for User Input</div>\n <div className=\"\">{inputMessage}</div>\n </>\n )}\n </div>\n </div>\n );\n}\n\nexport default ChartFilterOverlay;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -32,7 +32,7 @@ export interface ChartPanelTableMetadata extends PanelMetadata {
|
|
|
32
32
|
title: string;
|
|
33
33
|
xAxis: string;
|
|
34
34
|
series: string[];
|
|
35
|
-
type: keyof dh.plot.SeriesPlotStyle;
|
|
35
|
+
type: keyof typeof dh.plot.SeriesPlotStyle;
|
|
36
36
|
};
|
|
37
37
|
tableSettings: TableSettings;
|
|
38
38
|
}
|
|
@@ -193,14 +193,14 @@ export declare class ChartPanel extends Component<ChartPanelProps, ChartPanelSta
|
|
|
193
193
|
pruneFilterMaps(): void;
|
|
194
194
|
render(): ReactElement;
|
|
195
195
|
}
|
|
196
|
-
declare const ConnectedChartPanel: import("react-redux").ConnectedComponent<typeof ChartPanel, import("react-redux").Omit<Pick<OwnProps & StateProps & DispatchProps & React.RefAttributes<ChartPanel>, "glEventHub" | "glContainer" | "metadata" | "makeModel" | "localDashboardId" | "Plotly" | "inputFilters" | "links" | keyof DispatchProps | keyof React.RefAttributes<ChartPanel>> &
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
},
|
|
196
|
+
declare const ConnectedChartPanel: import("react-redux").ConnectedComponent<typeof ChartPanel, import("react-redux").Omit<Pick<OwnProps & StateProps & DispatchProps & React.RefAttributes<ChartPanel>, "glEventHub" | "glContainer" | "metadata" | "makeModel" | "localDashboardId" | "Plotly" | "inputFilters" | "links" | keyof DispatchProps | keyof React.RefAttributes<ChartPanel>> & {
|
|
197
|
+
source?: dh.Table | undefined;
|
|
198
|
+
settings?: Partial<WorkspaceSettings> | undefined;
|
|
199
|
+
containerRef?: React.Ref<HTMLDivElement> | undefined;
|
|
200
|
+
panelState?: GLChartPanelState | undefined;
|
|
201
|
+
isLinkerActive?: boolean | undefined;
|
|
202
|
+
sourcePanel?: PanelComponent | undefined;
|
|
203
|
+
columnSelectionValidator?: ColumnSelectionValidator | undefined;
|
|
204
|
+
} & {}, "source" | "settings" | "inputFilters" | "links" | "isLinkerActive" | "sourcePanel" | "columnSelectionValidator" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId"> & OwnProps>;
|
|
205
205
|
export default ConnectedChartPanel;
|
|
206
206
|
//# sourceMappingURL=ChartPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK5E,OAAO,EAEL,KAAK,UAAU,EAEf,KAAK,kBAAkB,EACvB,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,UAAU,MAAM,WAAW,CAAC;AACxC,OAAO,EACL,KAAK,mBAAmB,EAGxB,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAGjD,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,OAAO,EAGR,MAAM,kBAAkB,CAAC;AAY1B,OAA2B,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAmC,EACjC,KAAK,cAAc,EACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAMtE,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAOhE,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEtD,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE1E,sFAAsF;AACtF,MAAM,WAAW,wBAAyB,SAAQ,aAAa;IAC7D;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAwB,SAAQ,aAAa;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QACR,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"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"}
|