@deephaven/dashboard-core-plugins 0.15.1 → 0.15.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ChartPlugin.tsx"],"names":["React","useCallback","useEffect","ChartModelFactory","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","shortid","ChartPanel","ChartPlugin","props","id","layout","registerComponent","hydrate","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","dh","VariableType","FIGURE","metadata","figure","makeModel","then","undefined","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,QAA8C,OAA9C;AACA,SAASC,iBAAT,QAAkC,kBAAlC;AACA,SACEC,4BADF,EAGEC,WAHF,EAIEC,UAJF,EAMEC,WANF,QAOO,sBAPP;AASA,OAAOC,OAAP,MAAoB,SAApB;SACSC,U;AAMT,OAAO,IAAMC,WAAW,GAAIC,KAAD,IAA0C;AACnEP,EAAAA,4BAA4B,CAACO,KAAD,CAA5B;AACA,MAAM;AAAEC,IAAAA,EAAF;AAAMC,IAAAA,MAAN;AAAcC,IAAAA,iBAAd;AAAiCC,IAAAA;AAAjC,MAA6CJ,KAAnD;AACA,MAAMK,eAAe,GAAGf,WAAW,CACjC,QAUM;AAAA,QAVL;AACCgB,MAAAA,SADD;AAECC,MAAAA,KAFD;AAGCC,MAAAA,OAAO,GAAGX,OAAO,CAACY,QAAR,EAHX;AAICC,MAAAA;AAJD,KAUK;AACJ,QAAM;AAAEC,MAAAA,IAAF;AAAQC,MAAAA;AAAR,QAAiBF,MAAvB;;AACA,QAAIE,IAAI,KAAKC,EAAE,CAACC,YAAH,CAAgBC,MAA7B,EAAqC;AACnC;AACD;;AAED,QAAMC,QAAQ,GAAG;AAAEL,MAAAA,IAAF;AAAQM,MAAAA,MAAM,EAAEN;AAAhB,KAAjB;;AACA,QAAMO,SAAS,GAAG,MAChBX,KAAK,GAAGY,IAAR,CAAcF,MAAD,IACXzB,iBAAiB,CAAC0B,SAAlB,CAA4BE,SAA5B,EAAuCH,MAAvC,CADF,CADF;;AAIA,QAAMI,MAAM,GAAG;AACbT,MAAAA,IAAI,EAAE,iBADO;AAEbU,MAAAA,SAAS,EAAExB,UAAU,CAACyB,SAFT;AAGbvB,MAAAA,KAAK,EAAE;AACLwB,QAAAA,gBAAgB,EAAEvB,EADb;AAELA,QAAAA,EAAE,EAAEO,OAFC;AAGLQ,QAAAA,QAHK;AAILE,QAAAA;AAJK,OAHM;AASbO,MAAAA,KAAK,EAAEd,IATM;AAUbV,MAAAA,EAAE,EAAEO;AAVS,KAAf;AAaA,QAAM;AAAEkB,MAAAA;AAAF,QAAWxB,MAAjB;AACAR,IAAAA,WAAW,CAACiC,aAAZ,CAA0B;AAAED,MAAAA,IAAF;AAAQL,MAAAA,MAAR;AAAgBf,MAAAA;AAAhB,KAA1B;AACD,GArCgC,EAsCjC,CAACL,EAAD,EAAKC,MAAL,CAtCiC,CAAnC;AAyCAX,EAAAA,SAAS,CACP,SAASqC,kCAAT,GAA8C;AAC5C,QAAMC,QAAQ,GAAG,CACf1B,iBAAiB,CAACL,UAAU,CAACyB,SAAZ,EAAuBzB,UAAvB,EAAmCM,OAAnC,CADF,CAAjB;AAGA,WAAO,MAAM;AACXyB,MAAAA,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;AACD,KAFD;AAGD,GARM,EASP,CAAC3B,OAAD,EAAUD,iBAAV,CATO,CAAT;AAYAP,EAAAA,WAAW,CAACM,MAAM,CAAC8B,QAAR,EAAkBrC,UAAU,CAACsC,IAA7B,EAAmC5B,eAAnC,CAAX;AAEA,sBAAO,yCAAP;AACD,CA3DM;AA6DP,eAAeN,WAAf","sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport { ChartModelFactory } from '@deephaven/chart';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { Figure, VariableDefinition } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { ChartPanel } from './panels';\n\nexport type ChartPluginProps = Partial<DashboardPluginComponentProps> & {\n hydrate: PanelHydrateFunction;\n};\n\nexport const ChartPlugin = (props: ChartPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id, layout, registerComponent, hydrate } = props;\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget,\n }: {\n dragEvent?: DragEvent;\n fetch: () => Promise<Figure>;\n panelId?: string;\n widget: VariableDefinition;\n }) => {\n const { name, type } = widget;\n if (type !== dh.VariableType.FIGURE) {\n return;\n }\n\n const metadata = { name, figure: name };\n const makeModel = () =>\n fetch().then((figure: Figure) =>\n ChartModelFactory.makeModel(undefined, figure)\n );\n const config = {\n type: 'react-component',\n component: ChartPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [id, layout]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ChartPanel.COMPONENT, ChartPanel, hydrate),\n ];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [hydrate, registerComponent]\n );\n\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return <></>;\n};\n\nexport default ChartPlugin;\n"],"file":"ChartPlugin.js"}
1
+ {"version":3,"sources":["../src/ChartPlugin.tsx"],"names":["React","useCallback","useEffect","ChartModelFactory","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","shortid","ChartPanel","ChartPlugin","props","id","layout","registerComponent","hydrate","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","dh","VariableType","FIGURE","metadata","figure","makeModel","then","undefined","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,QAAyD,OAAzD;AACA,SAASC,iBAAT,QAAkC,kBAAlC;AACA,SACEC,4BADF,EAGEC,WAHF,EAIEC,UAJF,EAMEC,WANF,QAOO,sBAPP;AASA,OAAOC,OAAP,MAAoB,SAApB;SACSC,U;AAMT,OAAO,IAAMC,WAAW,GAAIC,KAAD,IAA0C;AACnEP,EAAAA,4BAA4B,CAACO,KAAD,CAA5B;AACA,MAAM;AAAEC,IAAAA,EAAF;AAAMC,IAAAA,MAAN;AAAcC,IAAAA,iBAAd;AAAiCC,IAAAA;AAAjC,MAA6CJ,KAAnD;AACA,MAAMK,eAAe,GAAGf,WAAW,CACjC,QAUM;AAAA,QAVL;AACCgB,MAAAA,SADD;AAECC,MAAAA,KAFD;AAGCC,MAAAA,OAAO,GAAGX,OAAO,CAACY,QAAR,EAHX;AAICC,MAAAA;AAJD,KAUK;AACJ,QAAM;AAAEC,MAAAA,IAAF;AAAQC,MAAAA;AAAR,QAAiBF,MAAvB;;AACA,QAAIE,IAAI,KAAKC,EAAE,CAACC,YAAH,CAAgBC,MAA7B,EAAqC;AACnC;AACD;;AAED,QAAMC,QAAQ,GAAG;AAAEL,MAAAA,IAAF;AAAQM,MAAAA,MAAM,EAAEN;AAAhB,KAAjB;;AACA,QAAMO,SAAS,GAAG,MAChBX,KAAK,GAAGY,IAAR,CAAcF,MAAD,IACXzB,iBAAiB,CAAC0B,SAAlB,CAA4BE,SAA5B,EAAuCH,MAAvC,CADF,CADF;;AAIA,QAAMI,MAAM,GAAG;AACbT,MAAAA,IAAI,EAAE,iBADO;AAEbU,MAAAA,SAAS,EAAExB,UAAU,CAACyB,SAFT;AAGbvB,MAAAA,KAAK,EAAE;AACLwB,QAAAA,gBAAgB,EAAEvB,EADb;AAELA,QAAAA,EAAE,EAAEO,OAFC;AAGLQ,QAAAA,QAHK;AAILE,QAAAA;AAJK,OAHM;AASbO,MAAAA,KAAK,EAAEd,IATM;AAUbV,MAAAA,EAAE,EAAEO;AAVS,KAAf;AAaA,QAAM;AAAEkB,MAAAA;AAAF,QAAWxB,MAAjB;AACAR,IAAAA,WAAW,CAACiC,aAAZ,CAA0B;AAAED,MAAAA,IAAF;AAAQL,MAAAA,MAAR;AAAgBf,MAAAA;AAAhB,KAA1B;AACD,GArCgC,EAsCjC,CAACL,EAAD,EAAKC,MAAL,CAtCiC,CAAnC;AAyCAX,EAAAA,SAAS,CACP,SAASqC,kCAAT,GAA8C;AAC5C,QAAMC,QAAQ,GAAG,CACf1B,iBAAiB,CAACL,UAAU,CAACyB,SAAZ,EAAuBzB,UAAvB,EAAmCM,OAAnC,CADF,CAAjB;AAGA,WAAO,MAAM;AACXyB,MAAAA,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;AACD,KAFD;AAGD,GARM,EASP,CAAC3B,OAAD,EAAUD,iBAAV,CATO,CAAT;AAYAP,EAAAA,WAAW,CAACM,MAAM,CAAC8B,QAAR,EAAkBrC,UAAU,CAACsC,IAA7B,EAAmC5B,eAAnC,CAAX;AAEA,sBAAO,yCAAP;AACD,CA3DM;AA6DP,eAAeN,WAAf","sourcesContent":["import React, { useCallback, useEffect, DragEvent } from 'react';\nimport { ChartModelFactory } from '@deephaven/chart';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { Figure, VariableDefinition } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { ChartPanel } from './panels';\n\nexport type ChartPluginProps = Partial<DashboardPluginComponentProps> & {\n hydrate: PanelHydrateFunction;\n};\n\nexport const ChartPlugin = (props: ChartPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id, layout, registerComponent, hydrate } = props;\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget,\n }: {\n dragEvent?: DragEvent;\n fetch: () => Promise<Figure>;\n panelId?: string;\n widget: VariableDefinition;\n }) => {\n const { name, type } = widget;\n if (type !== dh.VariableType.FIGURE) {\n return;\n }\n\n const metadata = { name, figure: name };\n const makeModel = () =>\n fetch().then((figure: Figure) =>\n ChartModelFactory.makeModel(undefined, figure)\n );\n const config = {\n type: 'react-component',\n component: ChartPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [id, layout]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ChartPanel.COMPONENT, ChartPanel, hydrate),\n ];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [hydrate, registerComponent]\n );\n\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return <></>;\n};\n\nexport default ChartPlugin;\n"],"file":"ChartPlugin.js"}
@@ -19,7 +19,7 @@ declare const connector: import("react-redux").InferableComponentEnhancerWithPro
19
19
  setDashboardLinks: (id: string, links: Link[]) => any;
20
20
  addDashboardLinks: (id: string, newLinks: Link[]) => any;
21
21
  deleteDashboardLinks: (id: string, linkIds: string[]) => any;
22
- setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | undefined) => any;
22
+ setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | string[] | undefined) => any;
23
23
  setDashboardColumnSelectionValidator: (id: string, columnSelectionValidator: any) => any;
24
24
  }, OwnProps>;
25
25
  export declare type LinkerProps = OwnProps & StateProps & ConnectedProps<typeof connector>;
@@ -47,7 +47,7 @@ export declare class Linker extends Component<LinkerProps, LinkerState> {
47
47
  * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.
48
48
  * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate
49
49
  */
50
- columnSelected(panel: PanelComponent, column: LinkColumn, isAlwaysEndPoint?: boolean, overrideIsolatedLinkerPanelId?: string): void;
50
+ columnSelected(panel: PanelComponent, column: LinkColumn, isAlwaysEndPoint?: boolean, overrideIsolatedLinkerPanelId?: string | string[]): void;
51
51
  unsetFilterValueForLink(link: Link): void;
52
52
  /**
53
53
  * Set filters for a given panel ID
@@ -84,7 +84,7 @@ declare const _default: import("react-redux").ConnectedComponent<typeof Linker,
84
84
  setDashboardLinks: (id: string, links: Link[]) => any;
85
85
  addDashboardLinks: (id: string, newLinks: Link[]) => any;
86
86
  deleteDashboardLinks: (id: string, linkIds: string[]) => any;
87
- setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | undefined) => any;
87
+ setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | string[] | undefined) => any;
88
88
  setDashboardColumnSelectionValidator: (id: string, columnSelectionValidator: any) => any;
89
89
  }, "activeTool" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId" | "links" | "timeZone" | "setDashboardLinks" | "addDashboardLinks" | "deleteDashboardLinks" | "setDashboardColumnSelectionValidator" | "isolatedLinkerPanelId"> & OwnProps>;
90
90
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"Linker.d.ts","sourceRoot":"","sources":["../../src/linker/Linker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Linker.d.ts","sourceRoot":"","sources":["../../src/linker/Linker.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/linker/Linker.tsx"],"names":["React","Component","connect","shortid","memoize","CSSTransition","ThemeExport","LayoutUtils","PanelEvent","DateTimeColumnFormatter","DateUtils","TableUtils","Log","getActiveTool","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","log","module","mapState","state","ownProps","activeTool","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","linkInProgress","isolateForPanelId","combinedLinks","start","push","undefined","filter","link","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleFilterColumnSelect","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","isColumnSelectionValid","componentDidMount","layout","startListening","updateSelectionValidators","componentDidUpdate","prevProps","stopListening","componentDidCatch","error","info","componentWillUnmount","on","eventHub","COLUMN_SELECTED","DATA_SELECTED","STATE_CHANGED","CLONED","COLUMNS_CHANGED","CLOSED","off","DEFAULT","setState","panel","column","columnSelected","debug","isOverlayShown","getIdFromPanel","panelLinks","LINKER","length","columns","linksToDelete","findColumn","deleteLinks","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","addLinks","unsetFilterValueForLink","panelManager","endPanel","getOpenedPanelById","unsetFilterValue","setPanelFilterMap","filterMap","setFilterMap","clearAll","forEach","map","isolatedLinks","linkId","find","l","dataMap","panelFilterMap","Map","i","endPanelId","has","get","value","text","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","set","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","deleteLinksForPanelId","forceUpdate","updateLinkInProgressType","tableColumn","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks"],"mappings":"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","sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport {\n LayoutUtils,\n PanelComponent,\n PanelEvent,\n PanelManager,\n} from '@deephaven/dashboard';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport {\n DateTimeColumnFormatter,\n DateUtils,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getTimeZone,\n setActiveTool as setActiveToolAction,\n RootState,\n} from '@deephaven/redux';\nimport {\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n setDashboardLinks as setDashboardLinksAction,\n addDashboardLinks as addDashboardLinksAction,\n deleteDashboardLinks as deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction,\n} from '../redux';\nimport ToolType from './ToolType';\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkDataMap,\n LinkFilterMap,\n LinkType,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n isolatedLinkerPanelId?: string;\n links: Link[];\n timeZone: string;\n}\n\ninterface OwnProps {\n layout: GoldenLayout;\n panelManager: PanelManager;\n localDashboardId: string;\n}\n\nconst mapState = (state: RootState, ownProps: OwnProps): StateProps => ({\n activeTool: getActiveTool(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(\n state,\n ownProps.localDashboardId\n ),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n});\n\nconst connector = connect(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link;\n};\n\nexport class Linker extends Component<LinkerProps, LinkerState> {\n constructor(props: LinkerProps) {\n super(props);\n\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n\n this.state = { linkInProgress: undefined };\n }\n\n componentDidMount(): void {\n const { layout } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n\n componentDidUpdate(prevProps: LinkerProps): void {\n const { activeTool, layout } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n const { layout } = this.props;\n this.stopListening(layout);\n }\n\n startListening(layout: GoldenLayout): void {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n stopListening(layout: GoldenLayout): void {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n handleCancel(): void {\n const { linkInProgress } = this.state;\n if (linkInProgress == null) {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleDone(): void {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n this.setState({ linkInProgress: undefined });\n }\n\n handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column, true);\n }\n\n handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const panelLinks = links.filter(\n link => link.start?.panelId === panelId || link.end?.panelId === panelId\n );\n\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n\n handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void {\n log.debug('handleColumnsChanged', panel, columns);\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n const linksToDelete = links.filter(\n ({ start, end }) =>\n (start.panelId === panelId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === panelId &&\n LinkerUtils.findColumn(columns, end) == null)\n );\n this.deleteLinks(linksToDelete);\n }\n\n handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(\n panel: PanelComponent,\n column: LinkColumn,\n isAlwaysEndPoint = false,\n overrideIsolatedLinkerPanelId?: string\n ): void {\n if (overrideIsolatedLinkerPanelId === undefined && !this.isOverlayShown()) {\n return;\n }\n const { isolatedLinkerPanelId } = this.props;\n const { linkInProgress } = this.state;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n const panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n const { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType,\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n log.debug('starting link', newLink);\n\n this.setState({ linkInProgress: newLink });\n } else {\n const { start, id, isReversed } = linkInProgress;\n const end = {\n panelId,\n panelComponent,\n columnName,\n columnType,\n };\n\n const type = LinkerUtils.getLinkType(\n isReversed ? end : start,\n isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource': {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n const { links } = this.props;\n const existingLinkPanelId = isReversed ? start.panelId : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd }) =>\n panelLinkEnd?.panelId === existingLinkPanelId\n );\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n const newLink = {\n start: isReversed ? end : start,\n end: isReversed ? start : end,\n id,\n type,\n };\n log.info('creating link', newLink);\n\n this.setState({ linkInProgress: undefined }, () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([newLink]);\n });\n }\n }\n\n unsetFilterValueForLink(link: Link): void {\n const { panelManager } = this.props;\n if (link.end) {\n const { end } = link;\n const { panelId, columnName, columnType } = end;\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists, ignoring unsetFilterValue',\n panelId\n );\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId: string, filterMap: LinkFilterMap): void {\n log.debug('Set filter data for panel:', panelId, filterMap);\n const { panelManager } = this.props;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n\n addLinks(links: Link[]): void {\n const { addDashboardLinks, localDashboardId } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n\n deleteLinks(links: Link[], clearAll = false): void {\n const { localDashboardId } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n const { setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n const { deleteDashboardLinks } = this.props;\n deleteDashboardLinks(\n localDashboardId,\n links.map(({ id }) => id)\n );\n }\n }\n\n handleAllLinksDeleted(): void {\n const { links, isolatedLinkerPanelId } = this.props;\n if (isolatedLinkerPanelId === undefined) {\n this.deleteLinks(links, true);\n } else {\n const isolatedLinks = links.filter(\n link =>\n link?.start?.panelId === isolatedLinkerPanelId ||\n link?.end?.panelId === isolatedLinkerPanelId\n );\n this.deleteLinks(isolatedLinks);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleLinkDeleted(linkId: string): void {\n const { links } = this.props;\n const link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n\n handleUpdateValues(panel: PanelComponent, dataMap: LinkDataMap): void {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const { links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (let i = 0; i < links.length; i += 1) {\n const { start, end } = links[i];\n if (start.panelId === panelId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const filterMap = panelFilterMap.has(endPanelId)\n ? panelFilterMap.get(endPanelId)\n : new Map();\n const { value } = dataMap[start.columnName];\n let text = `${value}`;\n if (TableUtils.isDateType(columnType)) {\n const dateFilterFormatter = new DateTimeColumnFormatter({\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT,\n });\n // The values are Dates for dateType values, not string like everything else\n text = dateFilterFormatter.format((value as unknown) as Date);\n }\n filterMap.set(columnName, {\n columnType,\n text,\n value,\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n\n handlePanelCloned(panel: PanelComponent, cloneConfig: { id: string }): void {\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const cloneId = cloneConfig.id;\n if (panelId != null) {\n const linksToAdd = LinkerUtils.cloneLinksForPanel(\n links,\n panelId,\n cloneId\n );\n this.addLinks(linksToAdd);\n }\n }\n\n handlePanelClosed(panelId: string): void {\n // Delete links on PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(`Panel ${panelId} closed, deleting links.`);\n this.deleteLinksForPanelId(panelId);\n }\n\n handleLayoutStateChanged(): void {\n this.forceUpdate();\n }\n\n handleStateChange(): void {\n this.forceUpdate();\n }\n\n handleExited(): void {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n const { localDashboardId, setDashboardIsolatedLinkerPanelId } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end, id } = link;\n if (start.panelId === panelId || end?.panelId === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n\n getCachedLinks = memoize((links, linkInProgress, isolateForPanelId) => {\n const combinedLinks = [...links];\n\n if (linkInProgress && linkInProgress.start) {\n combinedLinks.push(linkInProgress);\n }\n\n if (isolateForPanelId !== undefined) {\n return combinedLinks.filter(\n link =>\n link?.start?.panelId === isolateForPanelId ||\n link?.end?.panelId === isolateForPanelId ||\n link?.end == null\n );\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n });\n\n isOverlayShown(): boolean {\n const { activeTool } = this.props;\n return activeTool === ToolType.LINKER;\n }\n\n updateSelectionValidators(): void {\n const {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId,\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(\n localDashboardId,\n this.isColumnSelectionValid\n );\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n\n updateLinkInProgressType(\n linkInProgress: Link,\n type: LinkType = 'invalid'\n ): void {\n this.setState({\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n });\n }\n\n isColumnSelectionValid(\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\n }\n\n if (tableColumn == null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType(linkInProgress);\n return false;\n }\n\n const { isReversed, start } = linkInProgress;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n\n const end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const type = isReversed\n ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId)\n : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(linkInProgress, type);\n\n return type !== 'invalid';\n }\n\n render(): JSX.Element {\n const { links, isolatedLinkerPanelId, panelManager } = this.props;\n const { linkInProgress } = this.state;\n\n const isLinkOverlayShown = this.isOverlayShown();\n const disabled = linkInProgress != null && linkInProgress.start != null;\n const linkerOverlayMessage =\n isolatedLinkerPanelId === undefined\n ? 'Click a column source, then click a column target to create a filter link. Remove a filter link by clicking again to erase. Click done when finished.'\n : 'Create a link between the source column button and a table column by clicking on one, then the other. Remove the link by clicking it directly. Click done when finished.';\n return (\n <>\n <CSSTransition\n in={isLinkOverlayShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n onExited={this.handleExited}\n >\n <LinkerOverlayContent\n disabled={disabled}\n panelManager={panelManager}\n links={this.getCachedLinks(\n links,\n linkInProgress,\n isolatedLinkerPanelId\n )}\n messageText={linkerOverlayMessage}\n onLinkDeleted={this.handleLinkDeleted}\n onAllLinksDeleted={this.handleAllLinksDeleted}\n onDone={this.handleDone}\n onCancel={this.handleCancel}\n />\n </CSSTransition>\n </>\n );\n }\n}\n\nexport default connector(Linker);\n"],"file":"Linker.js"}
1
+ {"version":3,"sources":["../../src/linker/Linker.tsx"],"names":["React","Component","connect","shortid","memoize","CSSTransition","ThemeExport","LayoutUtils","PanelEvent","DateTimeColumnFormatter","DateUtils","TableUtils","Log","getActiveTool","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","log","module","mapState","state","ownProps","activeTool","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","linkInProgress","isolateForPanelId","combinedLinks","start","push","undefined","filter","link","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleFilterColumnSelect","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","isColumnSelectionValid","componentDidMount","layout","startListening","updateSelectionValidators","componentDidUpdate","prevProps","stopListening","componentDidCatch","error","info","componentWillUnmount","on","eventHub","COLUMN_SELECTED","DATA_SELECTED","STATE_CHANGED","CLONED","COLUMNS_CHANGED","CLOSED","off","DEFAULT","setState","panel","column","columnSelected","debug","isOverlayShown","getIdFromPanel","panelLinks","LINKER","length","columns","linksToDelete","findColumn","deleteLinks","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","addLinks","unsetFilterValueForLink","panelManager","endPanel","getOpenedPanelById","unsetFilterValue","setPanelFilterMap","filterMap","setFilterMap","clearAll","forEach","map","isolatedLinks","linkId","find","l","dataMap","panelFilterMap","Map","i","endPanelId","has","get","value","text","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","set","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","deleteLinksForPanelId","forceUpdate","updateLinkInProgressType","tableColumn","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks"],"mappings":"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","sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport {\n LayoutUtils,\n PanelComponent,\n PanelEvent,\n PanelManager,\n} from '@deephaven/dashboard';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport {\n DateTimeColumnFormatter,\n DateUtils,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getTimeZone,\n setActiveTool as setActiveToolAction,\n RootState,\n} from '@deephaven/redux';\nimport {\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n setDashboardLinks as setDashboardLinksAction,\n addDashboardLinks as addDashboardLinksAction,\n deleteDashboardLinks as deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction,\n} from '../redux';\nimport ToolType from './ToolType';\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkDataMap,\n LinkFilterMap,\n LinkType,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n isolatedLinkerPanelId?: string;\n links: Link[];\n timeZone: string;\n}\n\ninterface OwnProps {\n layout: GoldenLayout;\n panelManager: PanelManager;\n localDashboardId: string;\n}\n\nconst mapState = (state: RootState, ownProps: OwnProps): StateProps => ({\n activeTool: getActiveTool(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(\n state,\n ownProps.localDashboardId\n ),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n});\n\nconst connector = connect(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link;\n};\n\nexport class Linker extends Component<LinkerProps, LinkerState> {\n constructor(props: LinkerProps) {\n super(props);\n\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n\n this.state = { linkInProgress: undefined };\n }\n\n componentDidMount(): void {\n const { layout } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n\n componentDidUpdate(prevProps: LinkerProps): void {\n const { activeTool, layout } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n const { layout } = this.props;\n this.stopListening(layout);\n }\n\n startListening(layout: GoldenLayout): void {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n stopListening(layout: GoldenLayout): void {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n handleCancel(): void {\n const { linkInProgress } = this.state;\n if (linkInProgress == null) {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleDone(): void {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n this.setState({ linkInProgress: undefined });\n }\n\n handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column, true);\n }\n\n handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const panelLinks = links.filter(\n link => link.start?.panelId === panelId || link.end?.panelId === panelId\n );\n\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n\n handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void {\n log.debug('handleColumnsChanged', panel, columns);\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n const linksToDelete = links.filter(\n ({ start, end }) =>\n (start.panelId === panelId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === panelId &&\n LinkerUtils.findColumn(columns, end) == null)\n );\n this.deleteLinks(linksToDelete);\n }\n\n handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(\n panel: PanelComponent,\n column: LinkColumn,\n isAlwaysEndPoint = false,\n overrideIsolatedLinkerPanelId?: string | string[]\n ): void {\n if (overrideIsolatedLinkerPanelId === undefined && !this.isOverlayShown()) {\n return;\n }\n const { isolatedLinkerPanelId } = this.props;\n const { linkInProgress } = this.state;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n const panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n const { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType,\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n log.debug('starting link', newLink);\n\n this.setState({ linkInProgress: newLink });\n } else {\n const { start, id, isReversed } = linkInProgress;\n const end = {\n panelId,\n panelComponent,\n columnName,\n columnType,\n };\n\n const type = LinkerUtils.getLinkType(\n isReversed ? end : start,\n isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource': {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n const { links } = this.props;\n const existingLinkPanelId = isReversed ? start.panelId : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd }) =>\n panelLinkEnd?.panelId === existingLinkPanelId\n );\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n const newLink = {\n start: isReversed ? end : start,\n end: isReversed ? start : end,\n id,\n type,\n };\n log.info('creating link', newLink);\n\n this.setState({ linkInProgress: undefined }, () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([newLink]);\n });\n }\n }\n\n unsetFilterValueForLink(link: Link): void {\n const { panelManager } = this.props;\n if (link.end) {\n const { end } = link;\n const { panelId, columnName, columnType } = end;\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists, ignoring unsetFilterValue',\n panelId\n );\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId: string, filterMap: LinkFilterMap): void {\n log.debug('Set filter data for panel:', panelId, filterMap);\n const { panelManager } = this.props;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n\n addLinks(links: Link[]): void {\n const { addDashboardLinks, localDashboardId } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n\n deleteLinks(links: Link[], clearAll = false): void {\n const { localDashboardId } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n const { setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n const { deleteDashboardLinks } = this.props;\n deleteDashboardLinks(\n localDashboardId,\n links.map(({ id }) => id)\n );\n }\n }\n\n handleAllLinksDeleted(): void {\n const { links, isolatedLinkerPanelId } = this.props;\n if (isolatedLinkerPanelId === undefined) {\n this.deleteLinks(links, true);\n } else {\n const isolatedLinks = links.filter(\n link =>\n link?.start?.panelId === isolatedLinkerPanelId ||\n link?.end?.panelId === isolatedLinkerPanelId\n );\n this.deleteLinks(isolatedLinks);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleLinkDeleted(linkId: string): void {\n const { links } = this.props;\n const link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n\n handleUpdateValues(panel: PanelComponent, dataMap: LinkDataMap): void {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const { links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (let i = 0; i < links.length; i += 1) {\n const { start, end } = links[i];\n if (start.panelId === panelId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const filterMap = panelFilterMap.has(endPanelId)\n ? panelFilterMap.get(endPanelId)\n : new Map();\n const { value } = dataMap[start.columnName];\n let text = `${value}`;\n if (TableUtils.isDateType(columnType)) {\n const dateFilterFormatter = new DateTimeColumnFormatter({\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT,\n });\n // The values are Dates for dateType values, not string like everything else\n text = dateFilterFormatter.format((value as unknown) as Date);\n }\n filterMap.set(columnName, {\n columnType,\n text,\n value,\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n\n handlePanelCloned(panel: PanelComponent, cloneConfig: { id: string }): void {\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const cloneId = cloneConfig.id;\n if (panelId != null) {\n const linksToAdd = LinkerUtils.cloneLinksForPanel(\n links,\n panelId,\n cloneId\n );\n this.addLinks(linksToAdd);\n }\n }\n\n handlePanelClosed(panelId: string): void {\n // Delete links on PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(`Panel ${panelId} closed, deleting links.`);\n this.deleteLinksForPanelId(panelId);\n }\n\n handleLayoutStateChanged(): void {\n this.forceUpdate();\n }\n\n handleStateChange(): void {\n this.forceUpdate();\n }\n\n handleExited(): void {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n const { localDashboardId, setDashboardIsolatedLinkerPanelId } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end, id } = link;\n if (start.panelId === panelId || end?.panelId === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n\n getCachedLinks = memoize((links, linkInProgress, isolateForPanelId) => {\n const combinedLinks = [...links];\n\n if (linkInProgress && linkInProgress.start) {\n combinedLinks.push(linkInProgress);\n }\n\n if (isolateForPanelId !== undefined) {\n return combinedLinks.filter(\n link =>\n link?.start?.panelId === isolateForPanelId ||\n link?.end?.panelId === isolateForPanelId ||\n link?.end == null\n );\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n });\n\n isOverlayShown(): boolean {\n const { activeTool } = this.props;\n return activeTool === ToolType.LINKER;\n }\n\n updateSelectionValidators(): void {\n const {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId,\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(\n localDashboardId,\n this.isColumnSelectionValid\n );\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n\n updateLinkInProgressType(\n linkInProgress: Link,\n type: LinkType = 'invalid'\n ): void {\n this.setState({\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n });\n }\n\n isColumnSelectionValid(\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\n }\n\n if (tableColumn == null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType(linkInProgress);\n return false;\n }\n\n const { isReversed, start } = linkInProgress;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n\n const end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const type = isReversed\n ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId)\n : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(linkInProgress, type);\n\n return type !== 'invalid';\n }\n\n render(): JSX.Element {\n const { links, isolatedLinkerPanelId, panelManager } = this.props;\n const { linkInProgress } = this.state;\n\n const isLinkOverlayShown = this.isOverlayShown();\n const disabled = linkInProgress != null && linkInProgress.start != null;\n const linkerOverlayMessage =\n isolatedLinkerPanelId === undefined\n ? 'Click a column source, then click a column target to create a filter link. Remove a filter link by clicking again to erase. Click done when finished.'\n : 'Create a link between the source column button and a table column by clicking on one, then the other. Remove the link by clicking it directly. Click done when finished.';\n return (\n <>\n <CSSTransition\n in={isLinkOverlayShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n onExited={this.handleExited}\n >\n <LinkerOverlayContent\n disabled={disabled}\n panelManager={panelManager}\n links={this.getCachedLinks(\n links,\n linkInProgress,\n isolatedLinkerPanelId\n )}\n messageText={linkerOverlayMessage}\n onLinkDeleted={this.handleLinkDeleted}\n onAllLinksDeleted={this.handleAllLinksDeleted}\n onDone={this.handleDone}\n onCancel={this.handleCancel}\n />\n </CSSTransition>\n </>\n );\n }\n}\n\nexport default connector(Linker);\n"],"file":"Linker.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"LinkerOverlayContent.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerOverlayContent.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,EAAe,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAEL,IAAI,EACJ,gBAAgB,EAChB,SAAS,EACV,MAAM,eAAe,CAAC;AAEvB,OAAO,6BAA6B,CAAC;AAIrC,oBAAY,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,yBAAyB,GAAG;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,oBAAY,yBAAyB,GAAG;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,SAAS,CACjD,yBAAyB,EACzB,yBAAyB,CAC1B;IACC,MAAM,CAAC,YAAY;;MAEjB;gBAEU,KAAK,EAAE,yBAAyB;IAY5C,iBAAiB,IAAI,IAAI;IAKzB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAItD,oBAAoB,IAAI,IAAI;IAI5B,6DAA6D;IAC7D,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,gBAAgB;IA+B7D,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAOxC,mBAAmB,IAAI,IAAI;IAK3B,MAAM,IAAI,GAAG,CAAC,OAAO;CAoFtB;AAED,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"LinkerOverlayContent.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerOverlayContent.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,EAAe,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAEL,IAAI,EACJ,gBAAgB,EAChB,SAAS,EACV,MAAM,eAAe,CAAC;AAEvB,OAAO,6BAA6B,CAAC;AAIrC,oBAAY,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,yBAAyB,GAAG;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,oBAAY,yBAAyB,GAAG;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,SAAS,CACjD,yBAAyB,EACzB,yBAAyB,CAC1B;IACC,MAAM,CAAC,YAAY;;MAEjB;gBAEU,KAAK,EAAE,yBAAyB;IAY5C,iBAAiB,IAAI,IAAI;IAKzB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAItD,oBAAoB,IAAI,IAAI;IAI5B,6DAA6D;IAC7D,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,gBAAgB;IAiC7D,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAOxC,mBAAmB,IAAI,IAAI;IAK3B,MAAM,IAAI,GAAG,CAAC,OAAO;CAoFtB;AAED,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/linker/LinkerOverlayContent.tsx"],"names":["React","Component","classNames","ContextActions","GLOBAL_SHORTCUTS","LayoutUtils","Log","isLinkableFromPanel","LinkerLink","log","module","LinkerOverlayContent","constructor","props","handleMouseMove","bind","handleEscapePressed","state","mouseX","undefined","mouseY","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","panelId","columnName","panel","getOpenedPanelById","Error","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","event","setState","clientX","clientY","onCancel","render","disabled","links","messageText","onLinkDeleted","onAllLinksDeleted","onDone","visibleLinks","map","link","id","type","isReversed","start","end","x1","y1","x2","y2","tmpX","tmpY","className","interactive","filter","item","action","shortcut","LINKER_CLOSE","isGlobal"],"mappings":"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","sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport { ContextActions, GLOBAL_SHORTCUTS } from '@deephaven/components';\nimport { LayoutUtils, PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\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};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n messageText: string;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n};\n\nexport type LinkerOverlayContentState = {\n mouseX?: number;\n mouseY?: number;\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.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n\n this.state = {\n mouseX: undefined,\n mouseY: undefined,\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('mousemove', this.handleMouseMove, 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('mousemove', this.handleMouseMove, true);\n }\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 LinkerCoordinate;\n }\n\n handleMouseMove(event: MouseEvent): void {\n this.setState({\n mouseX: event.clientX,\n mouseY: event.clientY,\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 messageText,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouseX, mouseY } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end } = link;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouseX ?? x1;\n let y2 = mouseY ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (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 );\n return { x1, y1, x2, y2, id, className };\n } catch (error) {\n log.error('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 className=\"linker-overlay\">\n <svg>\n {visibleLinks.map(({ x1, y1, x2, y2, id, className }) => (\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={onLinkDeleted}\n />\n ))}\n </svg>\n <div className=\"linker-toast-dialog\">\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <button\n className=\"btn btn-outline-primary\"\n onClick={onAllLinksDeleted}\n type=\"button\"\n >\n Clear All\n </button>\n <button className=\"btn btn-primary\" onClick={onDone} type=\"button\">\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"],"file":"LinkerOverlayContent.js"}
1
+ {"version":3,"sources":["../../src/linker/LinkerOverlayContent.tsx"],"names":["React","Component","classNames","ContextActions","GLOBAL_SHORTCUTS","LayoutUtils","Log","isLinkableFromPanel","LinkerLink","log","module","LinkerOverlayContent","constructor","props","handleMouseMove","bind","handleEscapePressed","state","mouseX","undefined","mouseY","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","panelId","columnName","panel","getOpenedPanelById","Error","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","event","setState","clientX","clientY","onCancel","render","disabled","links","messageText","onLinkDeleted","onAllLinksDeleted","onDone","visibleLinks","map","link","id","type","isReversed","start","end","x1","y1","x2","y2","tmpX","tmpY","className","interactive","filter","item","action","shortcut","LINKER_CLOSE","isGlobal"],"mappings":"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","sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport { ContextActions, GLOBAL_SHORTCUTS } from '@deephaven/components';\nimport { LayoutUtils, PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport GoldenLayout from '@deephaven/golden-layout';\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};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n messageText: string;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n};\n\nexport type LinkerOverlayContentState = {\n mouseX?: number;\n mouseY?: number;\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.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n\n this.state = {\n mouseX: undefined,\n mouseY: undefined,\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('mousemove', this.handleMouseMove, 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('mousemove', this.handleMouseMove, true);\n }\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(\n (glContainer as unknown) as GoldenLayout.Container\n ) as LinkerCoordinate;\n }\n\n handleMouseMove(event: MouseEvent): void {\n this.setState({\n mouseX: event.clientX,\n mouseY: event.clientY,\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 messageText,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouseX, mouseY } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end } = link;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouseX ?? x1;\n let y2 = mouseY ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (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 );\n return { x1, y1, x2, y2, id, className };\n } catch (error) {\n log.error('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 className=\"linker-overlay\">\n <svg>\n {visibleLinks.map(({ x1, y1, x2, y2, id, className }) => (\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={onLinkDeleted}\n />\n ))}\n </svg>\n <div className=\"linker-toast-dialog\">\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <button\n className=\"btn btn-outline-primary\"\n onClick={onAllLinksDeleted}\n type=\"button\"\n >\n Clear All\n </button>\n <button className=\"btn btn-primary\" onClick={onDone} type=\"button\">\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"],"file":"LinkerOverlayContent.js"}
@@ -1,8 +1,8 @@
1
1
  import { PanelComponent } from '@deephaven/dashboard';
2
2
  export declare type LinkType = 'invalid' | 'filterSource' | 'tableLink';
3
3
  export declare type LinkPoint = {
4
- panelId: string;
5
- panelComponent?: string;
4
+ panelId: string | string[];
5
+ panelComponent?: string | null;
6
6
  columnName: string;
7
7
  columnType: string;
8
8
  };
@@ -51,7 +51,7 @@ declare class LinkerUtils {
51
51
  * @param isolatedLinkerPanelId Whether there's an isolated linker
52
52
  * @returns The type of link, or invalid if there's an error
53
53
  */
54
- static getLinkType(start?: LinkPoint, end?: LinkPoint, isolatedLinkerPanelId?: string): LinkType;
54
+ static getLinkType(start?: LinkPoint, end?: LinkPoint, isolatedLinkerPanelId?: string | string[]): LinkType;
55
55
  /**
56
56
  * Find column matching the link point
57
57
  * @param columns Columns to search in
@@ -68,7 +68,7 @@ declare class LinkerUtils {
68
68
  * @param cloneId Cloned panel id
69
69
  * @returns Cloned links array or empty array if no new links added
70
70
  */
71
- static cloneLinksForPanel(links: Link[], panelId: string, cloneId: string): Link[];
71
+ static cloneLinksForPanel(links: Link[], panelId: string | string[], cloneId: string): Link[];
72
72
  }
73
73
  export default LinkerUtils;
74
74
  //# sourceMappingURL=LinkerUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkerUtils.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerUtils.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKnE,oBAAY,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,CAAC;AAEhE,oBAAY,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oBAAY,IAAI,GAAG;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,oBAAY,kBAAkB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF,oBAAY,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,oBAAY,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,oBAAY,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAG3D,oBAAY,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,oBAAY,iBAAiB,GAAG,cAAc,GAAG;IAC/C,sBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,CAAC;CAC5D,CAAC;AAEF,oBAAY,aAAa,GAAG,iBAAiB,GAAG;IAC9C,YAAY,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,GACpB,KAAK,IAAI,iBAAiB,CAG5B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,KAAK,IAAI,aAAa,CAO7E;AAID;;GAEG;AACH,cAAM,WAAW;IACf,MAAM,CAAC,aAAa,wBASjB;IAEH;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAChB,KAAK,CAAC,EAAE,SAAS,EACjB,GAAG,CAAC,EAAE,SAAS,EACf,qBAAqB,CAAC,EAAE,MAAM,GAC7B,QAAQ;IA0DX;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CACf,OAAO,EAAE,UAAU,EAAE,EACrB,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,SAAS,GACpC,UAAU,GAAG,SAAS;IAMzB;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CACvB,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,IAAI,EAAE;CAmBV;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"LinkerUtils.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerUtils.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKnE,oBAAY,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,CAAC;AAEhE,oBAAY,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oBAAY,IAAI,GAAG;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,oBAAY,kBAAkB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF,oBAAY,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,oBAAY,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,oBAAY,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAG3D,oBAAY,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,oBAAY,iBAAiB,GAAG,cAAc,GAAG;IAC/C,sBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,CAAC;CAC5D,CAAC;AAEF,oBAAY,aAAa,GAAG,iBAAiB,GAAG;IAC9C,YAAY,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,GACpB,KAAK,IAAI,iBAAiB,CAG5B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,KAAK,IAAI,aAAa,CAO7E;AAID;;GAEG;AACH,cAAM,WAAW;IACf,MAAM,CAAC,aAAa,wBASjB;IAEH;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAChB,KAAK,CAAC,EAAE,SAAS,EACjB,GAAG,CAAC,EAAE,SAAS,EACf,qBAAqB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GACxC,QAAQ;IA0DX;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CACf,OAAO,EAAE,UAAU,EAAE,EACrB,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,SAAS,GACpC,UAAU,GAAG,SAAS;IAMzB;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CACvB,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,MAAM,GACd,IAAI,EAAE;CAmBV;AAED,eAAe,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/linker/LinkerUtils.tsx"],"names":["shortid","LayoutUtils","TableUtils","Log","ChartPanel","IrisGridPanel","DropdownFilterPanel","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","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"],"mappings":"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","sourcesContent":["import shortid from 'shortid';\nimport { LayoutUtils, PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\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;\n panelComponent?: string;\n columnName: string;\n columnType: string;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string;\n text: string;\n value: T;\n};\n\nexport type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;\n\nexport type LinkDataMapValue = {\n type: string;\n text: string;\n value: string;\n};\n\nexport type LinkDataMap = Record<string, LinkDataMapValue>;\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) => 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\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\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) {\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,\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"],"file":"LinkerUtils.js"}
1
+ {"version":3,"sources":["../../src/linker/LinkerUtils.tsx"],"names":["shortid","LayoutUtils","TableUtils","Log","ChartPanel","IrisGridPanel","DropdownFilterPanel","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","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"],"mappings":"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","sourcesContent":["import shortid from 'shortid';\nimport { LayoutUtils, PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\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;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string;\n text: string;\n value: T;\n};\n\nexport type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;\n\nexport type LinkDataMapValue = {\n type: string;\n text: string;\n value: string;\n};\n\nexport type LinkDataMap = Record<string, LinkDataMapValue>;\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) => 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\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) {\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"],"file":"LinkerUtils.js"}
@@ -53,7 +53,7 @@ export class IrisGridPanel extends React.PureComponent<any, any, any> {
53
53
  isStuckToBottom: boolean;
54
54
  isStuckToRight: boolean;
55
55
  movedColumns: {
56
- from: string;
56
+ from: string | [string, string];
57
57
  to: string;
58
58
  }[];
59
59
  movedRows: import("@deephaven/grid").MoveOperation[];
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridPanel.d.ts","sourceRoot":"","sources":["../../src/panels/IrisGridPanel.jsx"],"names":[],"mappings":"AAsCA;IACE,yBAAmC;IAEnC,wBAuFC;IAsrBD,uBAqFC;IAxhBD,yDAOC;IAqDD,uCAOC;IAED,qCAKC;IA+CD,wCAGC;IAED,iDAGC;IAgBD,8BAGC;IAhHD,gEAYC;IAED,gDAQC;IAkBD,qDAMC;IAED;;;;;;;;OAQG;IACH,yDAFW,aAAa,QA4BvB;IAYD,qBAEC;IAED,mBAEC;IAED,yBAIC;IAOD,yBAMC;IAED,wBAEC;IA5ND,yCA6CC;IAiLD,kCAMC;IA5ID,8CAMC;IAVD,kCAEC;IAjBD,uCASC;IAED,wDAEC;IA8KD,8BAMC;IAnfC,+BAAiC;IACjC,gCAAkC;IAClC,uEAAwB;IAKxB,mBAAyB;IACzB,eAAqB;IACrB,iBAAuB;IA+EzB,oBAGC;IAED,kHAWE;IAEF,0FAWG;IAEH,0HAyBG;IAEH;;;;MAOE;IAEF,sjBAgDE;IAEF;;;;;;;;MAQE;IAEF;;;;;MAOE;IAEF,kBAWC;IAiDD,uDAWC;IA4KD,mCAwBC;IAUD,sCAIC;IAED,sCAcC;IAED,qCAiBC;IAED,sDAsCC;IAED,mCAKC;IAED,2CAKC;IAED;;;aA+BC;IAED,wCASC;IAGD,yBAEC;IAED,iCAqGC;IAyFD,mBAMC;CA4KF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAmDgB,wCAAQ;;QACH,6CAAQ"}
1
+ {"version":3,"file":"IrisGridPanel.d.ts","sourceRoot":"","sources":["../../src/panels/IrisGridPanel.jsx"],"names":[],"mappings":"AAsCA;IACE,yBAAmC;IAEnC,wBAuFC;IAurBD,uBAqFC;IAzhBD,yDAOC;IAqDD,uCAOC;IAED,qCAKC;IA+CD,wCAGC;IAED,iDAGC;IAgBD,8BAGC;IAhHD,gEAYC;IAED,gDAQC;IAkBD,qDAMC;IAED;;;;;;;;OAQG;IACH,yDAFW,aAAa,QA4BvB;IAYD,qBAEC;IAED,mBAEC;IAED,yBAIC;IAOD,yBAMC;IAED,wBAEC;IA5ND,yCA6CC;IAiLD,kCAMC;IA5ID,8CAMC;IAVD,kCAEC;IAjBD,uCASC;IAED,wDAEC;IA8KD,8BAMC;IAnfC,+BAAiC;IACjC,gCAAkC;IAClC,uEAAwB;IAKxB,mBAAyB;IACzB,eAAqB;IACrB,iBAAuB;IA+EzB,oBAGC;IAED,kHAWE;IAEF,0FAWG;IAEH,0HAyBG;IAEH;;;;MAOE;IAEF,sjBAgDE;IAEF;;;;;;;;MAQE;IAEF;;;;;MAOE;IAEF,kBAWC;IAiDD,uDAWC;IA4KD,mCAwBC;IAUD,sCAIC;IAED,sCAcC;IAED,qCAiBC;IAED,sDAuCC;IAED,mCAKC;IAED,2CAKC;IAED;;;aA+BC;IAED,wCASC;IAGD,yBAEC;IAED,iCAqGC;IAyFD,mBAMC;CA4KF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAmDgB,wCAAQ;;QACH,6CAAQ"}
@@ -657,13 +657,14 @@ export class IrisGridPanel extends PureComponent {
657
657
  columnHeaderHeight,
658
658
  visibleColumnXs,
659
659
  visibleColumnWidths,
660
- right
660
+ right,
661
+ columnHeaderMaxDepth
661
662
  } = metrics;
662
663
  var visibleIndex = irisGrid.getVisibleColumn(model.getColumnIndexByName(columnName));
663
664
  var columnX = visibleColumnXs.get(visibleIndex) || 0;
664
665
  var columnWidth = visibleColumnWidths.get(visibleIndex) || 0;
665
666
  var x = Math.max(rect.left, Math.min(visibleIndex > right ? rect.right : rect.left + columnX + columnWidth * 0.5, rect.right));
666
- var y = rect.top + columnHeaderHeight;
667
+ var y = rect.top + columnHeaderHeight * columnHeaderMaxDepth;
667
668
  return [x, y];
668
669
  }
669
670
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/panels/IrisGridPanel.jsx"],"names":["React","PureComponent","memoize","PropTypes","connect","debounce","GLPropTypes","LayoutUtils","AdvancedSettings","IrisGrid","IrisGridModel","IrisGridUtils","IrisGridTableModel","isIrisGridTableModelTemplate","TableUtils","Log","getSettings","getUser","getWorkspace","PromiseUtils","ContextMenuRoot","ConsoleEvent","InputFilterEvent","IrisGridEvent","getInputFiltersForDashboard","getLinksForDashboard","getColumnSelectionValidatorForDashboard","UIPropTypes","WidgetPanel","WidgetPanelTooltip","log","module","DEBOUNCE_PANEL_STATE_UPDATE","PLUGIN_COMPONENTS","IrisGridPanel","constructor","props","columns","inputFilters","getInputFiltersForColumns","filter","value","excludePanelIds","includes","getIdFromPanel","dashboardLinks","pluginFetchColumns","id","columnSet","Set","i","length","start","panelId","add","columnName","Plugin","table","user","workspace","pluginState","pluginRef","handlePluginFilter","handlePluginFetchColumns","handlePluginStateChange","model","isSelectingPartition","partition","partitionColumn","dehydrateIrisGridPanelState","sorts","advancedFilters","customColumnFormatMap","isFilterBarShown","quickFilters","customColumns","reverseType","rollupConfig","showSearchBar","searchValue","selectDistinctColumns","selectedSearchColumns","invertSearchColumns","userColumnWidths","userRowHeights","aggregationSettings","advancedSettings","pendingDataMap","frozenColumns","conditionalFormats","dehydrateIrisGridState","metrics","movedColumns","movedRows","isStuckToBottom","isStuckToRight","dehydrateGridState","irisGridPanelState","irisGridState","gridState","savePanelState","bind","handleAdvancedSettingsChange","handleColumnsChanged","handleTableChanged","handleColumnSelected","handleDataSelected","handleError","handleGridStateChange","handlePartitionAppend","handleCreateChart","handleResize","handleShow","handleTabClicked","handleDisconnect","handleReconnect","handleLoadSuccess","handleLoadError","isColumnSelectionValid","handleContextMenu","handleClearAllFilters","irisGrid","createRef","modelPromise","panelState","metadata","queryName","query","state","error","isDisconnected","isLoaded","isLoading","isModelReady","Map","aggregations","showOnTop","DEFAULTS","REVERSE_TYPE","NONE","pluginFilters","modelQueue","irisGridStateOverrides","gridStateOverrides","componentDidMount","initModel","componentDidUpdate","_","prevState","stopModelListening","close","startModelListening","componentWillUnmount","cancel","getTableName","setState","makeModel","makeCancelable","resolved","then","catch","modelParam","push","m","getModelRollupConfig","originalColumns","initModelQueue","modelInitialized","modelChange","shift","debug","key","get","set","filters","formatter","getFiltersFromInputFilters","timeZone","data","current","getMenu","tableColumn","columnSelectionValidator","glEventHub","onStateChange","emit","STATE_CHANGED","event","sendColumnsChange","detail","TABLE_CHANGED","column","name","tableName","command","SEND_COMMAND","settings","flush","sourcePanelId","tableSettings","extractTableSettings","CREATE_CHART","COLUMN_SELECTED","row","dataMap","DATA_SELECTED","updateGrid","focus","Error","isCanceled","loadPlugin","loadPanelState","pluginName","clearAllFilters","debug2","COLUMNS_CHANGED","addEventListener","EVENT","DISCONNECT","RECONNECT","removeEventListener","getCoordinateForColumn","gridWrapper","rect","getBoundingClientRect","width","height","columnHeaderHeight","visibleColumnXs","visibleColumnWidths","right","visibleIndex","getVisibleColumn","getColumnIndexByName","columnX","columnWidth","x","Math","max","left","min","y","top","setFilterMap","filterMap","setAdvancedFilterMap","setFilters","indexedQuickFilters","changeFilterColumnNamesToIndexes","columnIndex","isFilterable","indexedAdvancedFilters","hydrateQuickFilters","hydrateAdvancedFilters","setStateOverrides","overrides","unsetFilterValue","originalIrisGridStateOverrides","savedQuickFilters","savedAdvancedFilters","hydrateIrisGridPanelState","hydrateIrisGridState","hydrateGridState","onPanelStateUpdate","oldPanelState","getCachedPanelState","getDehydratedIrisGridPanelState","getDehydratedIrisGridState","getDehydratedGridState","grid","render","children","glContainer","getDownloadWorker","links","theme","errorMessage","querySerial","description","childrenContent","getPluginContent","permissions","canCopy","canDownloadCsv","formattedRowCount","displayString","rowCount","getAlwaysFetchColumns","getGridInputFilters","propTypes","node","Container","isRequired","EventHub","shape","string","arrayOf","array","func","InputFilter","Links","User","defaultProps","undefined","displayName","mapStateToProps","ownProps","localDashboardId","forwardRef"],"mappings":"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","sourcesContent":["// Wrapper for the IrisGrid for use in a golden layout container\n// Will probably need to handle window popping out from golden layout here.\nimport React, { PureComponent } from 'react';\nimport memoize from 'memoize-one';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport { GLPropTypes, LayoutUtils } from '@deephaven/dashboard';\nimport {\n AdvancedSettings,\n IrisGrid,\n IrisGridModel,\n IrisGridUtils,\n IrisGridTableModel,\n isIrisGridTableModelTemplate,\n} from '@deephaven/iris-grid';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getSettings, getUser, getWorkspace } from '@deephaven/redux';\nimport { PromiseUtils } from '@deephaven/utils';\nimport { ContextMenuRoot } from '@deephaven/components';\nimport { ConsoleEvent, InputFilterEvent, IrisGridEvent } from '../events';\nimport {\n getInputFiltersForDashboard,\n getLinksForDashboard,\n getColumnSelectionValidatorForDashboard,\n} from '../redux';\nimport { UIPropTypes } from '../prop-types';\nimport WidgetPanel from './WidgetPanel';\nimport WidgetPanelTooltip from './WidgetPanelTooltip';\nimport './IrisGridPanel.scss';\n\nconst log = Log.module('IrisGridPanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 500;\n\nconst PLUGIN_COMPONENTS = { IrisGrid, IrisGridTableModel, ContextMenuRoot };\n\nexport class IrisGridPanel extends PureComponent {\n static COMPONENT = 'IrisGridPanel';\n\n constructor(props) {\n super(props);\n\n this.savePanelState = debounce(\n this.savePanelState.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.handleAdvancedSettingsChange = this.handleAdvancedSettingsChange.bind(\n this\n );\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handleTableChanged = this.handleTableChanged.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleDataSelected = this.handleDataSelected.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleGridStateChange = this.handleGridStateChange.bind(this);\n this.handlePluginStateChange = this.handlePluginStateChange.bind(this);\n this.handlePartitionAppend = this.handlePartitionAppend.bind(this);\n this.handleCreateChart = this.handleCreateChart.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handlePluginFilter = this.handlePluginFilter.bind(this);\n this.handlePluginFetchColumns = this.handlePluginFetchColumns.bind(this);\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n\n this.irisGrid = React.createRef();\n this.pluginRef = React.createRef();\n this.modelPromise = null;\n\n const { panelState, metadata } = props;\n const queryName = metadata.query;\n\n this.irisGridState = null;\n this.gridState = null;\n this.pluginState = null;\n\n this.state = {\n error: null,\n isDisconnected: false,\n isLoaded: false,\n isLoading: true,\n isModelReady: false,\n model: null,\n\n // State is hydrated from panel state when table is loaded\n advancedFilters: new Map(),\n aggregationSettings: { aggregations: [], showOnTop: false },\n advancedSettings: new Map(AdvancedSettings.DEFAULTS),\n customColumns: [],\n customColumnFormatMap: new Map(),\n isFilterBarShown: false,\n quickFilters: new Map(),\n sorts: [],\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n movedColumns: [],\n movedRows: [],\n isSelectingPartition: false,\n partition: null,\n partitionColumn: null,\n queryName,\n rollupConfig: null,\n showSearchBar: false,\n searchValue: '',\n selectedSearchColumns: null,\n invertSearchColumns: true,\n Plugin: null,\n pluginFilters: [],\n pluginFetchColumns: [],\n modelQueue: [],\n pendingDataMap: new Map(),\n frozenColumns: null,\n\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n irisGridStateOverrides: {},\n gridStateOverrides: {},\n };\n }\n\n componentDidMount() {\n this.initModel();\n }\n\n componentDidUpdate(_, prevState) {\n const { model } = this.state;\n if (model !== prevState.model) {\n if (prevState.model != null) {\n this.stopModelListening(prevState.model);\n prevState.model.close();\n }\n if (model != null) {\n this.startModelListening(model);\n }\n }\n }\n\n componentWillUnmount() {\n this.savePanelState.cancel();\n\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n this.modelPromise = null;\n }\n\n const { model } = this.state;\n if (model) {\n this.stopModelListening(model);\n model.close();\n }\n }\n\n getTableName() {\n const { metadata } = this.props;\n return metadata.table;\n }\n\n getGridInputFilters = memoize((columns, inputFilters) =>\n IrisGridUtils.getInputFiltersForColumns(\n columns,\n // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.\n inputFilters.filter(\n ({ value, excludePanelIds }) =>\n value != null &&\n (excludePanelIds == null ||\n !excludePanelIds.includes(LayoutUtils.getIdFromPanel(this)))\n )\n )\n );\n\n getAlwaysFetchColumns = memoize((dashboardLinks, pluginFetchColumns) => {\n const id = LayoutUtils.getIdFromPanel(this);\n // Always fetch columns which are the start/source of a link or columns specified by a plugin\n const columnSet = new Set(pluginFetchColumns);\n for (let i = 0; i < dashboardLinks.length; i += 1) {\n const { start } = dashboardLinks[i];\n if (start && start.panelId === id) {\n columnSet.add(start.columnName);\n }\n }\n return [...columnSet];\n });\n\n getPluginContent = memoize((Plugin, table, user, workspace, pluginState) => {\n if (Plugin == null || table == null) {\n return null;\n }\n\n return (\n <div className=\"iris-grid-plugin\">\n <Plugin\n ref={this.pluginRef}\n filter={this.handlePluginFilter}\n // onFilter is deprecated\n onFilter={this.handlePluginFilter}\n fetchColumns={this.handlePluginFetchColumns}\n // onFetchColumns is deprecated\n onFetchColumns={this.handlePluginFetchColumns}\n table={table}\n user={user}\n panel={this}\n workspace={workspace}\n components={PLUGIN_COMPONENTS}\n onStateChange={this.handlePluginStateChange}\n pluginState={pluginState}\n />\n </div>\n );\n });\n\n getDehydratedIrisGridPanelState = memoize(\n (model, isSelectingPartition, partition, partitionColumn) =>\n IrisGridUtils.dehydrateIrisGridPanelState(model, {\n isSelectingPartition,\n partition,\n partitionColumn,\n })\n );\n\n getDehydratedIrisGridState = memoize(\n (\n model,\n sorts,\n advancedFilters,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n userColumnWidths,\n userRowHeights,\n aggregationSettings,\n advancedSettings,\n pendingDataMap,\n frozenColumns,\n conditionalFormats\n ) =>\n IrisGridUtils.dehydrateIrisGridState(model, {\n advancedFilters,\n advancedSettings,\n aggregationSettings,\n customColumnFormatMap,\n isFilterBarShown,\n metrics: {\n userColumnWidths,\n userRowHeights,\n },\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n })\n );\n\n getDehydratedGridState = memoize(\n (model, movedColumns, movedRows, isStuckToBottom, isStuckToRight) =>\n IrisGridUtils.dehydrateGridState(model, {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows,\n })\n );\n\n getCachedPanelState = memoize(\n (irisGridPanelState, irisGridState, gridState, pluginState) => ({\n irisGridPanelState,\n irisGridState,\n gridState,\n pluginState,\n })\n );\n\n initModel() {\n this.setState({ isModelReady: false, isLoading: true, error: null });\n const { makeModel } = this.props;\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n this.modelPromise = PromiseUtils.makeCancelable(\n makeModel(),\n resolved => resolved.close\n );\n this.modelPromise.then(this.handleLoadSuccess).catch(this.handleLoadError);\n }\n\n handleLoadSuccess(modelParam) {\n const model = modelParam;\n const { panelState, irisGridStateOverrides } = this.state;\n const modelQueue = [];\n\n if (panelState != null) {\n const { irisGridState } = panelState;\n const {\n aggregationSettings,\n customColumns,\n selectDistinctColumns = [],\n rollupConfig,\n } = { ...irisGridState, ...irisGridStateOverrides };\n\n if (customColumns.length > 0) {\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.customColumns = customColumns;\n });\n }\n\n if (rollupConfig != null && rollupConfig.columns.length > 0) {\n // originalColumns might change by the time this model queue item is applied.\n // Instead of pushing a static object, push the function\n // that calculates the config based on the updated model state.\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.rollupConfig = IrisGridUtils.getModelRollupConfig(\n m.originalColumns,\n rollupConfig,\n aggregationSettings\n );\n });\n }\n\n if (selectDistinctColumns.length > 0) {\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.selectDistinctColumns = selectDistinctColumns;\n });\n }\n }\n\n this.setState({ model, modelQueue });\n this.initModelQueue(model, modelQueue);\n }\n\n initModelQueue(modelParam, modelQueue) {\n const model = modelParam;\n if (modelQueue.length === 0) {\n this.modelInitialized(model);\n return;\n }\n const modelChange = modelQueue.shift();\n log.debug('initModelQueue', modelChange);\n // Apply next model change. Triggers columnschanged event.\n modelChange(model);\n this.setState({ modelQueue });\n }\n\n handleAdvancedSettingsChange(key, value) {\n log.debug('handleAdvancedSettingsChange', key, value);\n this.setState(({ advancedSettings }) =>\n advancedSettings.get(key) === value\n ? null\n : { advancedSettings: new Map(advancedSettings).set(key, value) }\n );\n }\n\n handlePluginFilter(filters) {\n const { model } = this.state;\n const { columns, formatter } = model;\n const pluginFilters = IrisGridUtils.getFiltersFromInputFilters(\n columns,\n filters,\n formatter.timeZone\n );\n this.setState({ pluginFilters });\n }\n\n handlePluginFetchColumns(pluginFetchColumns) {\n this.setState({ pluginFetchColumns });\n }\n\n handleContextMenu(data) {\n return this.pluginRef.current?.getMenu?.(data) ?? [];\n }\n\n isColumnSelectionValid(tableColumn) {\n const { columnSelectionValidator } = this.props;\n if (columnSelectionValidator) {\n return columnSelectionValidator(this, tableColumn);\n }\n return false;\n }\n\n handleGridStateChange(irisGridState, gridState) {\n this.irisGridState = irisGridState;\n this.gridState = gridState;\n\n // Grid sends it's first state change after it's finished loading\n this.setState({ isLoaded: true, isLoading: false });\n\n this.savePanelState();\n\n const { glEventHub, onStateChange } = this.props;\n glEventHub.emit(IrisGridEvent.STATE_CHANGED, this);\n onStateChange(irisGridState, gridState);\n }\n\n handlePluginStateChange(pluginState) {\n const { irisGridState, gridState } = this;\n this.pluginState = pluginState;\n // Do not save if there is null state\n // The save will happen when the grid loads\n if (irisGridState !== null && gridState !== null) {\n this.savePanelState();\n }\n }\n\n handleColumnsChanged(event) {\n const { isModelReady, model, modelQueue } = this.state;\n if (isModelReady) {\n this.sendColumnsChange(event.detail);\n } else {\n this.initModelQueue(model, modelQueue);\n }\n }\n\n handleTableChanged(event) {\n log.debug('handleTableChanged', event);\n const { glEventHub } = this.props;\n const { detail: table } = event;\n glEventHub.emit(InputFilterEvent.TABLE_CHANGED, this, table);\n }\n\n handlePartitionAppend(column, value) {\n const { glEventHub } = this.props;\n const { name } = column;\n const tableName = this.getTableName();\n const command = `${tableName} = ${tableName}.where(\"${name}=\\`${value}\\`\")`;\n glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);\n }\n\n /**\n * Create a chart with the specified settings\n * @param {ChartBuilderSettings} settings The settings from the chart builder\n * @param {string} settings.type The settings from the chart builder\n * @param {string[]} settings.series The names of the series\n * @param {string} xAxis The xAxis for this chart\n * @param {boolean} isLinked Whether this chart should be linked or not\n * @param {IrisGridModel} model The IrisGridModel object\n */\n handleCreateChart(settings, model) {\n // Panel state is stored with the created chart, so flush it first\n this.savePanelState.flush();\n\n this.setState(\n () => null,\n () => {\n const { glEventHub, inputFilters, metadata } = this.props;\n const { table } = metadata;\n const { panelState } = this.state;\n const sourcePanelId = LayoutUtils.getIdFromPanel(this);\n const tableSettings = IrisGridUtils.extractTableSettings(\n panelState,\n inputFilters\n );\n glEventHub.emit(IrisGridEvent.CREATE_CHART, {\n metadata: {\n settings,\n sourcePanelId,\n table,\n tableSettings,\n },\n table: model.table,\n });\n }\n );\n }\n\n handleColumnSelected(column) {\n const { glEventHub } = this.props;\n glEventHub.emit(IrisGridEvent.COLUMN_SELECTED, this, column);\n }\n\n handleDataSelected(row, dataMap) {\n const { glEventHub } = this.props;\n glEventHub.emit(IrisGridEvent.DATA_SELECTED, this, dataMap);\n }\n\n handleResize() {\n this.updateGrid();\n }\n\n handleShow() {\n this.updateGrid();\n }\n\n handleTabClicked() {\n if (this.irisGrid.current) {\n this.irisGrid.current.focus();\n }\n }\n\n handleError(error) {\n log.error(error);\n this.setState({ error, isLoading: false });\n }\n\n handleDisconnect() {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect() {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleLoadError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n this.handleError(error);\n }\n\n modelInitialized(model) {\n const { glEventHub, loadPlugin } = this.props;\n\n this.modelPromise = null;\n\n // Custom columns at this point already initialized, can load state\n this.loadPanelState(model);\n\n this.setState({ isModelReady: true });\n\n if (isIrisGridTableModelTemplate(model)) {\n const { table } = model;\n const { pluginName } = table;\n\n if (pluginName) {\n if (loadPlugin && pluginName) {\n const Plugin = loadPlugin(pluginName);\n this.setState({ Plugin });\n }\n }\n glEventHub.emit(InputFilterEvent.TABLE_CHANGED, this, table);\n }\n\n this.sendColumnsChange(model.columns);\n }\n\n handleClearAllFilters() {\n const irisGrid = this.irisGrid.current;\n const { isDisconnected } = this.state;\n if (irisGrid != null && !isDisconnected) {\n irisGrid.clearAllFilters();\n }\n }\n\n sendColumnsChange(columns) {\n log.debug2('sendColumnsChange', columns);\n const { glEventHub } = this.props;\n glEventHub.emit(InputFilterEvent.COLUMNS_CHANGED, this, columns);\n }\n\n startModelListening(model) {\n model.addEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n this.handleDisconnect\n );\n model.addEventListener(IrisGridModel.EVENT.RECONNECT, this.handleReconnect);\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleColumnsChanged\n );\n model.addEventListener(\n IrisGridModel.EVENT.TABLE_CHANGED,\n this.handleTableChanged\n );\n }\n\n stopModelListening(model) {\n model.removeEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n this.handleDisconnect\n );\n model.removeEventListener(\n IrisGridModel.EVENT.RECONNECT,\n this.handleReconnect\n );\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleColumnsChanged\n );\n model.removeEventListener(\n IrisGridModel.EVENT.TABLE_CHANGED,\n this.handleTableChanged\n );\n }\n\n getCoordinateForColumn(columnName) {\n const { model } = this.state;\n if (!model) {\n return null;\n }\n\n const irisGrid = this.irisGrid.current;\n const { gridWrapper } = irisGrid || {};\n const rect = gridWrapper?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n\n const { metrics } = irisGrid.state;\n const {\n columnHeaderHeight,\n visibleColumnXs,\n visibleColumnWidths,\n right,\n } = metrics;\n const visibleIndex = irisGrid.getVisibleColumn(\n model.getColumnIndexByName(columnName)\n );\n const columnX = visibleColumnXs.get(visibleIndex) || 0;\n const columnWidth = visibleColumnWidths.get(visibleIndex) || 0;\n\n const x = Math.max(\n rect.left,\n Math.min(\n visibleIndex > right\n ? rect.right\n : rect.left + columnX + columnWidth * 0.5,\n rect.right\n )\n );\n const y = rect.top + columnHeaderHeight;\n\n return [x, y];\n }\n\n setFilterMap(filterMap) {\n const irisGrid = this.irisGrid.current;\n if (irisGrid != null) {\n irisGrid.setFilterMap(filterMap);\n }\n }\n\n setAdvancedFilterMap(filterMap) {\n const irisGrid = this.irisGrid.current;\n if (irisGrid != null) {\n irisGrid.setAdvancedFilterMap(filterMap);\n }\n }\n\n setFilters({ quickFilters, advancedFilters }) {\n log.debug('setFilters', quickFilters, advancedFilters);\n const { model, isDisconnected } = this.state;\n const irisGrid = this.irisGrid.current;\n if (irisGrid == null || isDisconnected) {\n log.debug('Ignore setFilters, model disconnected');\n return;\n }\n const { columns, formatter } = model;\n const indexedQuickFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n quickFilters\n ).filter(([columnIndex]) => model.isFilterable(columnIndex));\n const indexedAdvancedFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n advancedFilters\n ).filter(([columnIndex]) => model.isFilterable(columnIndex));\n\n irisGrid.clearAllFilters();\n irisGrid.setFilters({\n quickFilters: IrisGridUtils.hydrateQuickFilters(\n columns,\n indexedQuickFilters,\n formatter.timeZone\n ),\n advancedFilters: IrisGridUtils.hydrateAdvancedFilters(\n columns,\n indexedAdvancedFilters,\n formatter.timeZone\n ),\n });\n }\n\n setStateOverrides(overrides) {\n log.debug('setStateOverrides', overrides);\n const {\n irisGridState: irisGridStateOverrides,\n gridState: gridStateOverrides,\n } = overrides;\n this.setState({ irisGridStateOverrides, gridStateOverrides }, () => {\n this.initModel();\n });\n }\n\n // eslint-disable-next-line class-methods-use-this\n unsetFilterValue() {\n // IrisGridPanel retains the set value after the link is broken\n }\n\n loadPanelState(model) {\n const {\n panelState,\n irisGridStateOverrides: originalIrisGridStateOverrides,\n gridStateOverrides,\n } = this.state;\n if (panelState == null) {\n return;\n }\n\n try {\n const { gridState, irisGridState, irisGridPanelState } = panelState;\n const irisGridStateOverrides = { ...originalIrisGridStateOverrides };\n const {\n quickFilters: savedQuickFilters,\n advancedFilters: savedAdvancedFilters,\n } = irisGridStateOverrides;\n if (savedQuickFilters) {\n irisGridStateOverrides.quickFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n savedQuickFilters\n );\n }\n if (savedAdvancedFilters) {\n irisGridStateOverrides.advancedFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n savedAdvancedFilters\n );\n }\n const {\n isSelectingPartition,\n partition,\n partitionColumn,\n } = IrisGridUtils.hydrateIrisGridPanelState(model, irisGridPanelState);\n const {\n advancedFilters,\n advancedSettings,\n customColumns,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n reverseType,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n } = IrisGridUtils.hydrateIrisGridState(model, {\n ...irisGridState,\n ...irisGridStateOverrides,\n });\n const {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows,\n } = IrisGridUtils.hydrateGridState(\n model,\n { ...gridState, ...gridStateOverrides },\n irisGridState.customColumns\n );\n this.setState({\n advancedFilters,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n isFilterBarShown,\n isSelectingPartition,\n movedColumns,\n movedRows,\n partition,\n partitionColumn,\n quickFilters,\n reverseType,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n isStuckToBottom,\n isStuckToRight,\n });\n } catch (error) {\n log.error('loadPanelState failed to load panelState', panelState, error);\n }\n }\n\n savePanelState() {\n const { irisGridState, gridState, pluginState } = this;\n const { onPanelStateUpdate } = this.props;\n const {\n model,\n panelState: oldPanelState,\n isSelectingPartition,\n partition,\n partitionColumn,\n advancedSettings,\n } = this.state;\n const {\n advancedFilters,\n aggregationSettings,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n metrics,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n } = irisGridState;\n const { userColumnWidths, userRowHeights } = metrics;\n const {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows,\n } = gridState;\n\n const panelState = this.getCachedPanelState(\n this.getDehydratedIrisGridPanelState(\n model,\n isSelectingPartition,\n partition,\n partitionColumn\n ),\n this.getDehydratedIrisGridState(\n model,\n sorts,\n advancedFilters,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n userColumnWidths,\n userRowHeights,\n aggregationSettings,\n advancedSettings,\n pendingDataMap,\n frozenColumns,\n conditionalFormats\n ),\n this.getDehydratedGridState(\n model,\n movedColumns,\n movedRows,\n isStuckToBottom,\n isStuckToRight\n ),\n pluginState\n );\n\n if (panelState !== oldPanelState) {\n log.debug('Saving panel state', this, panelState);\n\n this.setState({ panelState });\n onPanelStateUpdate(panelState);\n }\n }\n\n updateGrid() {\n const grid = this.irisGrid.current?.grid ?? null;\n if (!grid) return;\n\n // handle resize will verify state and draw and update\n grid.handleResize();\n }\n\n render() {\n const {\n children,\n glContainer,\n glEventHub,\n columnSelectionValidator,\n getDownloadWorker,\n inputFilters,\n links,\n metadata,\n panelState,\n user,\n workspace,\n settings,\n theme,\n } = this.props;\n const {\n advancedFilters,\n aggregationSettings,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n error,\n isDisconnected,\n isFilterBarShown,\n isSelectingPartition,\n isStuckToBottom,\n isStuckToRight,\n isLoaded,\n isLoading,\n isModelReady,\n model,\n movedColumns,\n movedRows,\n partition,\n partitionColumn,\n queryName,\n quickFilters,\n reverseType,\n rollupConfig,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n Plugin,\n pluginFilters,\n pluginFetchColumns,\n pendingDataMap,\n frozenColumns,\n } = this.state;\n const errorMessage = error ? `Unable to open table. ${error}` : null;\n const { table: name, querySerial } = metadata;\n const description = model?.description ?? null;\n const pluginState = panelState?.pluginState ?? null;\n const childrenContent =\n children ??\n this.getPluginContent(Plugin, model?.table, user, workspace, pluginState);\n const { permissions } = user;\n const { canCopy, canDownloadCsv } = permissions;\n const formattedRowCount = model?.displayString(\n model?.rowCount ?? 0,\n 'long'\n );\n\n return (\n <WidgetPanel\n errorMessage={errorMessage}\n isDisconnected={isDisconnected}\n isLoading={isLoading}\n isLoaded={isLoaded}\n className=\"iris-grid-panel\"\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabFocus={this.handleShow}\n onTabClicked={this.handleTabClicked}\n queryName={queryName}\n querySerial={querySerial}\n widgetName={name}\n widgetType=\"Table\"\n description={description}\n componentPanel={this}\n renderTabTooltip={() => (\n <WidgetPanelTooltip\n widgetType=\"Table\"\n widgetName={name}\n glContainer={glContainer}\n description={description}\n >\n <div className=\"column-statistics-grid\">\n <span className=\"column-statistic-operation\">Number of Rows</span>\n <span className=\"column-statistic-value\">\n {formattedRowCount}\n </span>\n </div>\n </WidgetPanelTooltip>\n )}\n >\n {isModelReady && (\n <IrisGrid\n advancedFilters={advancedFilters}\n aggregationSettings={aggregationSettings}\n advancedSettings={advancedSettings}\n alwaysFetchColumns={this.getAlwaysFetchColumns(\n links,\n pluginFetchColumns\n )}\n columnAllowedCursor=\"linker\"\n columnNotAllowedCursor=\"not-allowed\"\n customColumns={customColumns}\n customColumnFormatMap={customColumnFormatMap}\n columnSelectionValidator={this.isColumnSelectionValid}\n conditionalFormats={conditionalFormats}\n inputFilters={this.getGridInputFilters(model.columns, inputFilters)}\n applyInputFiltersOnInit={panelState == null}\n isFilterBarShown={isFilterBarShown}\n isSelectingColumn={columnSelectionValidator != null}\n isSelectingPartition={isSelectingPartition}\n isStuckToBottom={isStuckToBottom}\n isStuckToRight={isStuckToRight}\n movedColumns={movedColumns}\n movedRows={movedRows}\n partition={partition}\n partitionColumn={partitionColumn}\n quickFilters={quickFilters}\n reverseType={reverseType}\n rollupConfig={rollupConfig}\n settings={settings}\n sorts={sorts}\n userColumnWidths={userColumnWidths}\n userRowHeights={userRowHeights}\n model={model}\n tableName={name}\n showSearchBar={showSearchBar}\n searchValue={searchValue}\n selectedSearchColumns={selectedSearchColumns}\n selectDistinctColumns={selectDistinctColumns}\n invertSearchColumns={invertSearchColumns}\n onColumnSelected={this.handleColumnSelected}\n onCreateChart={this.handleCreateChart}\n onDataSelected={this.handleDataSelected}\n onError={this.handleError}\n onPartitionAppend={this.handlePartitionAppend}\n onStateChange={this.handleGridStateChange}\n onContextMenu={this.handleContextMenu}\n onAdvancedSettingsChange={this.handleAdvancedSettingsChange}\n customFilters={pluginFilters}\n pendingDataMap={pendingDataMap}\n canCopy={canCopy}\n canDownloadCsv={canDownloadCsv}\n ref={this.irisGrid}\n getDownloadWorker={getDownloadWorker}\n frozenColumns={frozenColumns}\n theme={theme}\n >\n {childrenContent}\n </IrisGrid>\n )}\n\n {!isModelReady && <></>}\n </WidgetPanel>\n );\n }\n}\n\nIrisGridPanel.propTypes = {\n children: PropTypes.node,\n glContainer: GLPropTypes.Container.isRequired,\n glEventHub: GLPropTypes.EventHub.isRequired,\n metadata: PropTypes.shape({\n table: PropTypes.string.isRequired,\n query: PropTypes.string,\n querySerial: PropTypes.string,\n }).isRequired,\n panelState: PropTypes.shape({\n gridState: PropTypes.shape({}),\n irisGridState: PropTypes.shape({\n aggregationSettings: PropTypes.shape({}),\n customColumns: PropTypes.arrayOf(PropTypes.string),\n conditionalFormats: PropTypes.arrayOf(PropTypes.shape({})),\n selectDistinctColumns: PropTypes.arrayOf(PropTypes.string),\n rollupConfig: PropTypes.shape({\n columns: PropTypes.arrayOf(PropTypes.string).isRequired,\n }),\n pendingDataMap: PropTypes.arrayOf(PropTypes.array),\n frozenColumns: PropTypes.arrayOf(PropTypes.string),\n }),\n irisGridPanelState: PropTypes.shape({}),\n pluginState: PropTypes.shape({}),\n }),\n makeModel: PropTypes.func.isRequired,\n inputFilters: PropTypes.arrayOf(UIPropTypes.InputFilter).isRequired,\n links: UIPropTypes.Links.isRequired,\n columnSelectionValidator: PropTypes.func,\n onStateChange: PropTypes.func,\n onPanelStateUpdate: PropTypes.func,\n user: UIPropTypes.User.isRequired,\n workspace: PropTypes.shape({}).isRequired,\n settings: PropTypes.shape({ timeZone: PropTypes.string.isRequired })\n .isRequired,\n\n // Retrieve a download worker for optimizing exporting tables\n getDownloadWorker: PropTypes.func,\n\n // Load a plugin defined by the table\n loadPlugin: PropTypes.func,\n\n theme: PropTypes.shape({}),\n};\n\nIrisGridPanel.defaultProps = {\n children: null,\n panelState: null,\n columnSelectionValidator: null,\n onStateChange: () => {},\n onPanelStateUpdate: () => {},\n getDownloadWorker: undefined,\n loadPlugin: undefined,\n theme: undefined,\n};\n\nIrisGridPanel.displayName = 'IrisGridPanel';\n\nconst mapStateToProps = (state, ownProps) => {\n const { localDashboardId } = ownProps;\n return {\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n user: getUser(state),\n workspace: getWorkspace(state),\n settings: getSettings(state),\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n IrisGridPanel\n);\n"],"file":"IrisGridPanel.js"}
1
+ {"version":3,"sources":["../../src/panels/IrisGridPanel.jsx"],"names":["React","PureComponent","memoize","PropTypes","connect","debounce","GLPropTypes","LayoutUtils","AdvancedSettings","IrisGrid","IrisGridModel","IrisGridUtils","IrisGridTableModel","isIrisGridTableModelTemplate","TableUtils","Log","getSettings","getUser","getWorkspace","PromiseUtils","ContextMenuRoot","ConsoleEvent","InputFilterEvent","IrisGridEvent","getInputFiltersForDashboard","getLinksForDashboard","getColumnSelectionValidatorForDashboard","UIPropTypes","WidgetPanel","WidgetPanelTooltip","log","module","DEBOUNCE_PANEL_STATE_UPDATE","PLUGIN_COMPONENTS","IrisGridPanel","constructor","props","columns","inputFilters","getInputFiltersForColumns","filter","value","excludePanelIds","includes","getIdFromPanel","dashboardLinks","pluginFetchColumns","id","columnSet","Set","i","length","start","panelId","add","columnName","Plugin","table","user","workspace","pluginState","pluginRef","handlePluginFilter","handlePluginFetchColumns","handlePluginStateChange","model","isSelectingPartition","partition","partitionColumn","dehydrateIrisGridPanelState","sorts","advancedFilters","customColumnFormatMap","isFilterBarShown","quickFilters","customColumns","reverseType","rollupConfig","showSearchBar","searchValue","selectDistinctColumns","selectedSearchColumns","invertSearchColumns","userColumnWidths","userRowHeights","aggregationSettings","advancedSettings","pendingDataMap","frozenColumns","conditionalFormats","dehydrateIrisGridState","metrics","movedColumns","movedRows","isStuckToBottom","isStuckToRight","dehydrateGridState","irisGridPanelState","irisGridState","gridState","savePanelState","bind","handleAdvancedSettingsChange","handleColumnsChanged","handleTableChanged","handleColumnSelected","handleDataSelected","handleError","handleGridStateChange","handlePartitionAppend","handleCreateChart","handleResize","handleShow","handleTabClicked","handleDisconnect","handleReconnect","handleLoadSuccess","handleLoadError","isColumnSelectionValid","handleContextMenu","handleClearAllFilters","irisGrid","createRef","modelPromise","panelState","metadata","queryName","query","state","error","isDisconnected","isLoaded","isLoading","isModelReady","Map","aggregations","showOnTop","DEFAULTS","REVERSE_TYPE","NONE","pluginFilters","modelQueue","irisGridStateOverrides","gridStateOverrides","componentDidMount","initModel","componentDidUpdate","_","prevState","stopModelListening","close","startModelListening","componentWillUnmount","cancel","getTableName","setState","makeModel","makeCancelable","resolved","then","catch","modelParam","push","m","getModelRollupConfig","originalColumns","initModelQueue","modelInitialized","modelChange","shift","debug","key","get","set","filters","formatter","getFiltersFromInputFilters","timeZone","data","current","getMenu","tableColumn","columnSelectionValidator","glEventHub","onStateChange","emit","STATE_CHANGED","event","sendColumnsChange","detail","TABLE_CHANGED","column","name","tableName","command","SEND_COMMAND","settings","flush","sourcePanelId","tableSettings","extractTableSettings","CREATE_CHART","COLUMN_SELECTED","row","dataMap","DATA_SELECTED","updateGrid","focus","Error","isCanceled","loadPlugin","loadPanelState","pluginName","clearAllFilters","debug2","COLUMNS_CHANGED","addEventListener","EVENT","DISCONNECT","RECONNECT","removeEventListener","getCoordinateForColumn","gridWrapper","rect","getBoundingClientRect","width","height","columnHeaderHeight","visibleColumnXs","visibleColumnWidths","right","columnHeaderMaxDepth","visibleIndex","getVisibleColumn","getColumnIndexByName","columnX","columnWidth","x","Math","max","left","min","y","top","setFilterMap","filterMap","setAdvancedFilterMap","setFilters","indexedQuickFilters","changeFilterColumnNamesToIndexes","columnIndex","isFilterable","indexedAdvancedFilters","hydrateQuickFilters","hydrateAdvancedFilters","setStateOverrides","overrides","unsetFilterValue","originalIrisGridStateOverrides","savedQuickFilters","savedAdvancedFilters","hydrateIrisGridPanelState","hydrateIrisGridState","hydrateGridState","onPanelStateUpdate","oldPanelState","getCachedPanelState","getDehydratedIrisGridPanelState","getDehydratedIrisGridState","getDehydratedGridState","grid","render","children","glContainer","getDownloadWorker","links","theme","errorMessage","querySerial","description","childrenContent","getPluginContent","permissions","canCopy","canDownloadCsv","formattedRowCount","displayString","rowCount","getAlwaysFetchColumns","getGridInputFilters","propTypes","node","Container","isRequired","EventHub","shape","string","arrayOf","array","func","InputFilter","Links","User","defaultProps","undefined","displayName","mapStateToProps","ownProps","localDashboardId","forwardRef"],"mappings":"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","sourcesContent":["// Wrapper for the IrisGrid for use in a golden layout container\n// Will probably need to handle window popping out from golden layout here.\nimport React, { PureComponent } from 'react';\nimport memoize from 'memoize-one';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport { GLPropTypes, LayoutUtils } from '@deephaven/dashboard';\nimport {\n AdvancedSettings,\n IrisGrid,\n IrisGridModel,\n IrisGridUtils,\n IrisGridTableModel,\n isIrisGridTableModelTemplate,\n} from '@deephaven/iris-grid';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getSettings, getUser, getWorkspace } from '@deephaven/redux';\nimport { PromiseUtils } from '@deephaven/utils';\nimport { ContextMenuRoot } from '@deephaven/components';\nimport { ConsoleEvent, InputFilterEvent, IrisGridEvent } from '../events';\nimport {\n getInputFiltersForDashboard,\n getLinksForDashboard,\n getColumnSelectionValidatorForDashboard,\n} from '../redux';\nimport { UIPropTypes } from '../prop-types';\nimport WidgetPanel from './WidgetPanel';\nimport WidgetPanelTooltip from './WidgetPanelTooltip';\nimport './IrisGridPanel.scss';\n\nconst log = Log.module('IrisGridPanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 500;\n\nconst PLUGIN_COMPONENTS = { IrisGrid, IrisGridTableModel, ContextMenuRoot };\n\nexport class IrisGridPanel extends PureComponent {\n static COMPONENT = 'IrisGridPanel';\n\n constructor(props) {\n super(props);\n\n this.savePanelState = debounce(\n this.savePanelState.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.handleAdvancedSettingsChange = this.handleAdvancedSettingsChange.bind(\n this\n );\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handleTableChanged = this.handleTableChanged.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleDataSelected = this.handleDataSelected.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleGridStateChange = this.handleGridStateChange.bind(this);\n this.handlePluginStateChange = this.handlePluginStateChange.bind(this);\n this.handlePartitionAppend = this.handlePartitionAppend.bind(this);\n this.handleCreateChart = this.handleCreateChart.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handlePluginFilter = this.handlePluginFilter.bind(this);\n this.handlePluginFetchColumns = this.handlePluginFetchColumns.bind(this);\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n\n this.irisGrid = React.createRef();\n this.pluginRef = React.createRef();\n this.modelPromise = null;\n\n const { panelState, metadata } = props;\n const queryName = metadata.query;\n\n this.irisGridState = null;\n this.gridState = null;\n this.pluginState = null;\n\n this.state = {\n error: null,\n isDisconnected: false,\n isLoaded: false,\n isLoading: true,\n isModelReady: false,\n model: null,\n\n // State is hydrated from panel state when table is loaded\n advancedFilters: new Map(),\n aggregationSettings: { aggregations: [], showOnTop: false },\n advancedSettings: new Map(AdvancedSettings.DEFAULTS),\n customColumns: [],\n customColumnFormatMap: new Map(),\n isFilterBarShown: false,\n quickFilters: new Map(),\n sorts: [],\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n reverseType: TableUtils.REVERSE_TYPE.NONE,\n movedColumns: [],\n movedRows: [],\n isSelectingPartition: false,\n partition: null,\n partitionColumn: null,\n queryName,\n rollupConfig: null,\n showSearchBar: false,\n searchValue: '',\n selectedSearchColumns: null,\n invertSearchColumns: true,\n Plugin: null,\n pluginFilters: [],\n pluginFetchColumns: [],\n modelQueue: [],\n pendingDataMap: new Map(),\n frozenColumns: null,\n\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n irisGridStateOverrides: {},\n gridStateOverrides: {},\n };\n }\n\n componentDidMount() {\n this.initModel();\n }\n\n componentDidUpdate(_, prevState) {\n const { model } = this.state;\n if (model !== prevState.model) {\n if (prevState.model != null) {\n this.stopModelListening(prevState.model);\n prevState.model.close();\n }\n if (model != null) {\n this.startModelListening(model);\n }\n }\n }\n\n componentWillUnmount() {\n this.savePanelState.cancel();\n\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n this.modelPromise = null;\n }\n\n const { model } = this.state;\n if (model) {\n this.stopModelListening(model);\n model.close();\n }\n }\n\n getTableName() {\n const { metadata } = this.props;\n return metadata.table;\n }\n\n getGridInputFilters = memoize((columns, inputFilters) =>\n IrisGridUtils.getInputFiltersForColumns(\n columns,\n // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.\n inputFilters.filter(\n ({ value, excludePanelIds }) =>\n value != null &&\n (excludePanelIds == null ||\n !excludePanelIds.includes(LayoutUtils.getIdFromPanel(this)))\n )\n )\n );\n\n getAlwaysFetchColumns = memoize((dashboardLinks, pluginFetchColumns) => {\n const id = LayoutUtils.getIdFromPanel(this);\n // Always fetch columns which are the start/source of a link or columns specified by a plugin\n const columnSet = new Set(pluginFetchColumns);\n for (let i = 0; i < dashboardLinks.length; i += 1) {\n const { start } = dashboardLinks[i];\n if (start && start.panelId === id) {\n columnSet.add(start.columnName);\n }\n }\n return [...columnSet];\n });\n\n getPluginContent = memoize((Plugin, table, user, workspace, pluginState) => {\n if (Plugin == null || table == null) {\n return null;\n }\n\n return (\n <div className=\"iris-grid-plugin\">\n <Plugin\n ref={this.pluginRef}\n filter={this.handlePluginFilter}\n // onFilter is deprecated\n onFilter={this.handlePluginFilter}\n fetchColumns={this.handlePluginFetchColumns}\n // onFetchColumns is deprecated\n onFetchColumns={this.handlePluginFetchColumns}\n table={table}\n user={user}\n panel={this}\n workspace={workspace}\n components={PLUGIN_COMPONENTS}\n onStateChange={this.handlePluginStateChange}\n pluginState={pluginState}\n />\n </div>\n );\n });\n\n getDehydratedIrisGridPanelState = memoize(\n (model, isSelectingPartition, partition, partitionColumn) =>\n IrisGridUtils.dehydrateIrisGridPanelState(model, {\n isSelectingPartition,\n partition,\n partitionColumn,\n })\n );\n\n getDehydratedIrisGridState = memoize(\n (\n model,\n sorts,\n advancedFilters,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n userColumnWidths,\n userRowHeights,\n aggregationSettings,\n advancedSettings,\n pendingDataMap,\n frozenColumns,\n conditionalFormats\n ) =>\n IrisGridUtils.dehydrateIrisGridState(model, {\n advancedFilters,\n advancedSettings,\n aggregationSettings,\n customColumnFormatMap,\n isFilterBarShown,\n metrics: {\n userColumnWidths,\n userRowHeights,\n },\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n })\n );\n\n getDehydratedGridState = memoize(\n (model, movedColumns, movedRows, isStuckToBottom, isStuckToRight) =>\n IrisGridUtils.dehydrateGridState(model, {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows,\n })\n );\n\n getCachedPanelState = memoize(\n (irisGridPanelState, irisGridState, gridState, pluginState) => ({\n irisGridPanelState,\n irisGridState,\n gridState,\n pluginState,\n })\n );\n\n initModel() {\n this.setState({ isModelReady: false, isLoading: true, error: null });\n const { makeModel } = this.props;\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n this.modelPromise = PromiseUtils.makeCancelable(\n makeModel(),\n resolved => resolved.close\n );\n this.modelPromise.then(this.handleLoadSuccess).catch(this.handleLoadError);\n }\n\n handleLoadSuccess(modelParam) {\n const model = modelParam;\n const { panelState, irisGridStateOverrides } = this.state;\n const modelQueue = [];\n\n if (panelState != null) {\n const { irisGridState } = panelState;\n const {\n aggregationSettings,\n customColumns,\n selectDistinctColumns = [],\n rollupConfig,\n } = { ...irisGridState, ...irisGridStateOverrides };\n\n if (customColumns.length > 0) {\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.customColumns = customColumns;\n });\n }\n\n if (rollupConfig != null && rollupConfig.columns.length > 0) {\n // originalColumns might change by the time this model queue item is applied.\n // Instead of pushing a static object, push the function\n // that calculates the config based on the updated model state.\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.rollupConfig = IrisGridUtils.getModelRollupConfig(\n m.originalColumns,\n rollupConfig,\n aggregationSettings\n );\n });\n }\n\n if (selectDistinctColumns.length > 0) {\n modelQueue.push(m => {\n // eslint-disable-next-line no-param-reassign\n m.selectDistinctColumns = selectDistinctColumns;\n });\n }\n }\n\n this.setState({ model, modelQueue });\n this.initModelQueue(model, modelQueue);\n }\n\n initModelQueue(modelParam, modelQueue) {\n const model = modelParam;\n if (modelQueue.length === 0) {\n this.modelInitialized(model);\n return;\n }\n const modelChange = modelQueue.shift();\n log.debug('initModelQueue', modelChange);\n // Apply next model change. Triggers columnschanged event.\n modelChange(model);\n this.setState({ modelQueue });\n }\n\n handleAdvancedSettingsChange(key, value) {\n log.debug('handleAdvancedSettingsChange', key, value);\n this.setState(({ advancedSettings }) =>\n advancedSettings.get(key) === value\n ? null\n : { advancedSettings: new Map(advancedSettings).set(key, value) }\n );\n }\n\n handlePluginFilter(filters) {\n const { model } = this.state;\n const { columns, formatter } = model;\n const pluginFilters = IrisGridUtils.getFiltersFromInputFilters(\n columns,\n filters,\n formatter.timeZone\n );\n this.setState({ pluginFilters });\n }\n\n handlePluginFetchColumns(pluginFetchColumns) {\n this.setState({ pluginFetchColumns });\n }\n\n handleContextMenu(data) {\n return this.pluginRef.current?.getMenu?.(data) ?? [];\n }\n\n isColumnSelectionValid(tableColumn) {\n const { columnSelectionValidator } = this.props;\n if (columnSelectionValidator) {\n return columnSelectionValidator(this, tableColumn);\n }\n return false;\n }\n\n handleGridStateChange(irisGridState, gridState) {\n this.irisGridState = irisGridState;\n this.gridState = gridState;\n\n // Grid sends it's first state change after it's finished loading\n this.setState({ isLoaded: true, isLoading: false });\n\n this.savePanelState();\n\n const { glEventHub, onStateChange } = this.props;\n glEventHub.emit(IrisGridEvent.STATE_CHANGED, this);\n onStateChange(irisGridState, gridState);\n }\n\n handlePluginStateChange(pluginState) {\n const { irisGridState, gridState } = this;\n this.pluginState = pluginState;\n // Do not save if there is null state\n // The save will happen when the grid loads\n if (irisGridState !== null && gridState !== null) {\n this.savePanelState();\n }\n }\n\n handleColumnsChanged(event) {\n const { isModelReady, model, modelQueue } = this.state;\n if (isModelReady) {\n this.sendColumnsChange(event.detail);\n } else {\n this.initModelQueue(model, modelQueue);\n }\n }\n\n handleTableChanged(event) {\n log.debug('handleTableChanged', event);\n const { glEventHub } = this.props;\n const { detail: table } = event;\n glEventHub.emit(InputFilterEvent.TABLE_CHANGED, this, table);\n }\n\n handlePartitionAppend(column, value) {\n const { glEventHub } = this.props;\n const { name } = column;\n const tableName = this.getTableName();\n const command = `${tableName} = ${tableName}.where(\"${name}=\\`${value}\\`\")`;\n glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);\n }\n\n /**\n * Create a chart with the specified settings\n * @param {ChartBuilderSettings} settings The settings from the chart builder\n * @param {string} settings.type The settings from the chart builder\n * @param {string[]} settings.series The names of the series\n * @param {string} xAxis The xAxis for this chart\n * @param {boolean} isLinked Whether this chart should be linked or not\n * @param {IrisGridModel} model The IrisGridModel object\n */\n handleCreateChart(settings, model) {\n // Panel state is stored with the created chart, so flush it first\n this.savePanelState.flush();\n\n this.setState(\n () => null,\n () => {\n const { glEventHub, inputFilters, metadata } = this.props;\n const { table } = metadata;\n const { panelState } = this.state;\n const sourcePanelId = LayoutUtils.getIdFromPanel(this);\n const tableSettings = IrisGridUtils.extractTableSettings(\n panelState,\n inputFilters\n );\n glEventHub.emit(IrisGridEvent.CREATE_CHART, {\n metadata: {\n settings,\n sourcePanelId,\n table,\n tableSettings,\n },\n table: model.table,\n });\n }\n );\n }\n\n handleColumnSelected(column) {\n const { glEventHub } = this.props;\n glEventHub.emit(IrisGridEvent.COLUMN_SELECTED, this, column);\n }\n\n handleDataSelected(row, dataMap) {\n const { glEventHub } = this.props;\n glEventHub.emit(IrisGridEvent.DATA_SELECTED, this, dataMap);\n }\n\n handleResize() {\n this.updateGrid();\n }\n\n handleShow() {\n this.updateGrid();\n }\n\n handleTabClicked() {\n if (this.irisGrid.current) {\n this.irisGrid.current.focus();\n }\n }\n\n handleError(error) {\n log.error(error);\n this.setState({ error, isLoading: false });\n }\n\n handleDisconnect() {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect() {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleLoadError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n this.handleError(error);\n }\n\n modelInitialized(model) {\n const { glEventHub, loadPlugin } = this.props;\n\n this.modelPromise = null;\n\n // Custom columns at this point already initialized, can load state\n this.loadPanelState(model);\n\n this.setState({ isModelReady: true });\n\n if (isIrisGridTableModelTemplate(model)) {\n const { table } = model;\n const { pluginName } = table;\n\n if (pluginName) {\n if (loadPlugin && pluginName) {\n const Plugin = loadPlugin(pluginName);\n this.setState({ Plugin });\n }\n }\n glEventHub.emit(InputFilterEvent.TABLE_CHANGED, this, table);\n }\n\n this.sendColumnsChange(model.columns);\n }\n\n handleClearAllFilters() {\n const irisGrid = this.irisGrid.current;\n const { isDisconnected } = this.state;\n if (irisGrid != null && !isDisconnected) {\n irisGrid.clearAllFilters();\n }\n }\n\n sendColumnsChange(columns) {\n log.debug2('sendColumnsChange', columns);\n const { glEventHub } = this.props;\n glEventHub.emit(InputFilterEvent.COLUMNS_CHANGED, this, columns);\n }\n\n startModelListening(model) {\n model.addEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n this.handleDisconnect\n );\n model.addEventListener(IrisGridModel.EVENT.RECONNECT, this.handleReconnect);\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleColumnsChanged\n );\n model.addEventListener(\n IrisGridModel.EVENT.TABLE_CHANGED,\n this.handleTableChanged\n );\n }\n\n stopModelListening(model) {\n model.removeEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n this.handleDisconnect\n );\n model.removeEventListener(\n IrisGridModel.EVENT.RECONNECT,\n this.handleReconnect\n );\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleColumnsChanged\n );\n model.removeEventListener(\n IrisGridModel.EVENT.TABLE_CHANGED,\n this.handleTableChanged\n );\n }\n\n getCoordinateForColumn(columnName) {\n const { model } = this.state;\n if (!model) {\n return null;\n }\n\n const irisGrid = this.irisGrid.current;\n const { gridWrapper } = irisGrid || {};\n const rect = gridWrapper?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n\n const { metrics } = irisGrid.state;\n const {\n columnHeaderHeight,\n visibleColumnXs,\n visibleColumnWidths,\n right,\n columnHeaderMaxDepth,\n } = metrics;\n const visibleIndex = irisGrid.getVisibleColumn(\n model.getColumnIndexByName(columnName)\n );\n const columnX = visibleColumnXs.get(visibleIndex) || 0;\n const columnWidth = visibleColumnWidths.get(visibleIndex) || 0;\n\n const x = Math.max(\n rect.left,\n Math.min(\n visibleIndex > right\n ? rect.right\n : rect.left + columnX + columnWidth * 0.5,\n rect.right\n )\n );\n const y = rect.top + columnHeaderHeight * columnHeaderMaxDepth;\n\n return [x, y];\n }\n\n setFilterMap(filterMap) {\n const irisGrid = this.irisGrid.current;\n if (irisGrid != null) {\n irisGrid.setFilterMap(filterMap);\n }\n }\n\n setAdvancedFilterMap(filterMap) {\n const irisGrid = this.irisGrid.current;\n if (irisGrid != null) {\n irisGrid.setAdvancedFilterMap(filterMap);\n }\n }\n\n setFilters({ quickFilters, advancedFilters }) {\n log.debug('setFilters', quickFilters, advancedFilters);\n const { model, isDisconnected } = this.state;\n const irisGrid = this.irisGrid.current;\n if (irisGrid == null || isDisconnected) {\n log.debug('Ignore setFilters, model disconnected');\n return;\n }\n const { columns, formatter } = model;\n const indexedQuickFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n quickFilters\n ).filter(([columnIndex]) => model.isFilterable(columnIndex));\n const indexedAdvancedFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n advancedFilters\n ).filter(([columnIndex]) => model.isFilterable(columnIndex));\n\n irisGrid.clearAllFilters();\n irisGrid.setFilters({\n quickFilters: IrisGridUtils.hydrateQuickFilters(\n columns,\n indexedQuickFilters,\n formatter.timeZone\n ),\n advancedFilters: IrisGridUtils.hydrateAdvancedFilters(\n columns,\n indexedAdvancedFilters,\n formatter.timeZone\n ),\n });\n }\n\n setStateOverrides(overrides) {\n log.debug('setStateOverrides', overrides);\n const {\n irisGridState: irisGridStateOverrides,\n gridState: gridStateOverrides,\n } = overrides;\n this.setState({ irisGridStateOverrides, gridStateOverrides }, () => {\n this.initModel();\n });\n }\n\n // eslint-disable-next-line class-methods-use-this\n unsetFilterValue() {\n // IrisGridPanel retains the set value after the link is broken\n }\n\n loadPanelState(model) {\n const {\n panelState,\n irisGridStateOverrides: originalIrisGridStateOverrides,\n gridStateOverrides,\n } = this.state;\n if (panelState == null) {\n return;\n }\n\n try {\n const { gridState, irisGridState, irisGridPanelState } = panelState;\n const irisGridStateOverrides = { ...originalIrisGridStateOverrides };\n const {\n quickFilters: savedQuickFilters,\n advancedFilters: savedAdvancedFilters,\n } = irisGridStateOverrides;\n if (savedQuickFilters) {\n irisGridStateOverrides.quickFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n savedQuickFilters\n );\n }\n if (savedAdvancedFilters) {\n irisGridStateOverrides.advancedFilters = IrisGridUtils.changeFilterColumnNamesToIndexes(\n model.columns,\n savedAdvancedFilters\n );\n }\n const {\n isSelectingPartition,\n partition,\n partitionColumn,\n } = IrisGridUtils.hydrateIrisGridPanelState(model, irisGridPanelState);\n const {\n advancedFilters,\n advancedSettings,\n customColumns,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n reverseType,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n } = IrisGridUtils.hydrateIrisGridState(model, {\n ...irisGridState,\n ...irisGridStateOverrides,\n });\n const {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows,\n } = IrisGridUtils.hydrateGridState(\n model,\n { ...gridState, ...gridStateOverrides },\n irisGridState.customColumns\n );\n this.setState({\n advancedFilters,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n isFilterBarShown,\n isSelectingPartition,\n movedColumns,\n movedRows,\n partition,\n partitionColumn,\n quickFilters,\n reverseType,\n rollupConfig,\n aggregationSettings,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap,\n frozenColumns,\n isStuckToBottom,\n isStuckToRight,\n });\n } catch (error) {\n log.error('loadPanelState failed to load panelState', panelState, error);\n }\n }\n\n savePanelState() {\n const { irisGridState, gridState, pluginState } = this;\n const { onPanelStateUpdate } = this.props;\n const {\n model,\n panelState: oldPanelState,\n isSelectingPartition,\n partition,\n partitionColumn,\n advancedSettings,\n } = this.state;\n const {\n advancedFilters,\n aggregationSettings,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n metrics,\n pendingDataMap,\n frozenColumns,\n conditionalFormats,\n } = irisGridState;\n const { userColumnWidths, userRowHeights } = metrics;\n const {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows,\n } = gridState;\n\n const panelState = this.getCachedPanelState(\n this.getDehydratedIrisGridPanelState(\n model,\n isSelectingPartition,\n partition,\n partitionColumn\n ),\n this.getDehydratedIrisGridState(\n model,\n sorts,\n advancedFilters,\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n customColumns,\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n userColumnWidths,\n userRowHeights,\n aggregationSettings,\n advancedSettings,\n pendingDataMap,\n frozenColumns,\n conditionalFormats\n ),\n this.getDehydratedGridState(\n model,\n movedColumns,\n movedRows,\n isStuckToBottom,\n isStuckToRight\n ),\n pluginState\n );\n\n if (panelState !== oldPanelState) {\n log.debug('Saving panel state', this, panelState);\n\n this.setState({ panelState });\n onPanelStateUpdate(panelState);\n }\n }\n\n updateGrid() {\n const grid = this.irisGrid.current?.grid ?? null;\n if (!grid) return;\n\n // handle resize will verify state and draw and update\n grid.handleResize();\n }\n\n render() {\n const {\n children,\n glContainer,\n glEventHub,\n columnSelectionValidator,\n getDownloadWorker,\n inputFilters,\n links,\n metadata,\n panelState,\n user,\n workspace,\n settings,\n theme,\n } = this.props;\n const {\n advancedFilters,\n aggregationSettings,\n advancedSettings,\n conditionalFormats,\n customColumns,\n customColumnFormatMap,\n error,\n isDisconnected,\n isFilterBarShown,\n isSelectingPartition,\n isStuckToBottom,\n isStuckToRight,\n isLoaded,\n isLoading,\n isModelReady,\n model,\n movedColumns,\n movedRows,\n partition,\n partitionColumn,\n queryName,\n quickFilters,\n reverseType,\n rollupConfig,\n sorts,\n userColumnWidths,\n userRowHeights,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n Plugin,\n pluginFilters,\n pluginFetchColumns,\n pendingDataMap,\n frozenColumns,\n } = this.state;\n const errorMessage = error ? `Unable to open table. ${error}` : null;\n const { table: name, querySerial } = metadata;\n const description = model?.description ?? null;\n const pluginState = panelState?.pluginState ?? null;\n const childrenContent =\n children ??\n this.getPluginContent(Plugin, model?.table, user, workspace, pluginState);\n const { permissions } = user;\n const { canCopy, canDownloadCsv } = permissions;\n const formattedRowCount = model?.displayString(\n model?.rowCount ?? 0,\n 'long'\n );\n\n return (\n <WidgetPanel\n errorMessage={errorMessage}\n isDisconnected={isDisconnected}\n isLoading={isLoading}\n isLoaded={isLoaded}\n className=\"iris-grid-panel\"\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabFocus={this.handleShow}\n onTabClicked={this.handleTabClicked}\n queryName={queryName}\n querySerial={querySerial}\n widgetName={name}\n widgetType=\"Table\"\n description={description}\n componentPanel={this}\n renderTabTooltip={() => (\n <WidgetPanelTooltip\n widgetType=\"Table\"\n widgetName={name}\n glContainer={glContainer}\n description={description}\n >\n <div className=\"column-statistics-grid\">\n <span className=\"column-statistic-operation\">Number of Rows</span>\n <span className=\"column-statistic-value\">\n {formattedRowCount}\n </span>\n </div>\n </WidgetPanelTooltip>\n )}\n >\n {isModelReady && (\n <IrisGrid\n advancedFilters={advancedFilters}\n aggregationSettings={aggregationSettings}\n advancedSettings={advancedSettings}\n alwaysFetchColumns={this.getAlwaysFetchColumns(\n links,\n pluginFetchColumns\n )}\n columnAllowedCursor=\"linker\"\n columnNotAllowedCursor=\"not-allowed\"\n customColumns={customColumns}\n customColumnFormatMap={customColumnFormatMap}\n columnSelectionValidator={this.isColumnSelectionValid}\n conditionalFormats={conditionalFormats}\n inputFilters={this.getGridInputFilters(model.columns, inputFilters)}\n applyInputFiltersOnInit={panelState == null}\n isFilterBarShown={isFilterBarShown}\n isSelectingColumn={columnSelectionValidator != null}\n isSelectingPartition={isSelectingPartition}\n isStuckToBottom={isStuckToBottom}\n isStuckToRight={isStuckToRight}\n movedColumns={movedColumns}\n movedRows={movedRows}\n partition={partition}\n partitionColumn={partitionColumn}\n quickFilters={quickFilters}\n reverseType={reverseType}\n rollupConfig={rollupConfig}\n settings={settings}\n sorts={sorts}\n userColumnWidths={userColumnWidths}\n userRowHeights={userRowHeights}\n model={model}\n tableName={name}\n showSearchBar={showSearchBar}\n searchValue={searchValue}\n selectedSearchColumns={selectedSearchColumns}\n selectDistinctColumns={selectDistinctColumns}\n invertSearchColumns={invertSearchColumns}\n onColumnSelected={this.handleColumnSelected}\n onCreateChart={this.handleCreateChart}\n onDataSelected={this.handleDataSelected}\n onError={this.handleError}\n onPartitionAppend={this.handlePartitionAppend}\n onStateChange={this.handleGridStateChange}\n onContextMenu={this.handleContextMenu}\n onAdvancedSettingsChange={this.handleAdvancedSettingsChange}\n customFilters={pluginFilters}\n pendingDataMap={pendingDataMap}\n canCopy={canCopy}\n canDownloadCsv={canDownloadCsv}\n ref={this.irisGrid}\n getDownloadWorker={getDownloadWorker}\n frozenColumns={frozenColumns}\n theme={theme}\n >\n {childrenContent}\n </IrisGrid>\n )}\n\n {!isModelReady && <></>}\n </WidgetPanel>\n );\n }\n}\n\nIrisGridPanel.propTypes = {\n children: PropTypes.node,\n glContainer: GLPropTypes.Container.isRequired,\n glEventHub: GLPropTypes.EventHub.isRequired,\n metadata: PropTypes.shape({\n table: PropTypes.string.isRequired,\n query: PropTypes.string,\n querySerial: PropTypes.string,\n }).isRequired,\n panelState: PropTypes.shape({\n gridState: PropTypes.shape({}),\n irisGridState: PropTypes.shape({\n aggregationSettings: PropTypes.shape({}),\n customColumns: PropTypes.arrayOf(PropTypes.string),\n conditionalFormats: PropTypes.arrayOf(PropTypes.shape({})),\n selectDistinctColumns: PropTypes.arrayOf(PropTypes.string),\n rollupConfig: PropTypes.shape({\n columns: PropTypes.arrayOf(PropTypes.string).isRequired,\n }),\n pendingDataMap: PropTypes.arrayOf(PropTypes.array),\n frozenColumns: PropTypes.arrayOf(PropTypes.string),\n }),\n irisGridPanelState: PropTypes.shape({}),\n pluginState: PropTypes.shape({}),\n }),\n makeModel: PropTypes.func.isRequired,\n inputFilters: PropTypes.arrayOf(UIPropTypes.InputFilter).isRequired,\n links: UIPropTypes.Links.isRequired,\n columnSelectionValidator: PropTypes.func,\n onStateChange: PropTypes.func,\n onPanelStateUpdate: PropTypes.func,\n user: UIPropTypes.User.isRequired,\n workspace: PropTypes.shape({}).isRequired,\n settings: PropTypes.shape({ timeZone: PropTypes.string.isRequired })\n .isRequired,\n\n // Retrieve a download worker for optimizing exporting tables\n getDownloadWorker: PropTypes.func,\n\n // Load a plugin defined by the table\n loadPlugin: PropTypes.func,\n\n theme: PropTypes.shape({}),\n};\n\nIrisGridPanel.defaultProps = {\n children: null,\n panelState: null,\n columnSelectionValidator: null,\n onStateChange: () => {},\n onPanelStateUpdate: () => {},\n getDownloadWorker: undefined,\n loadPlugin: undefined,\n theme: undefined,\n};\n\nIrisGridPanel.displayName = 'IrisGridPanel';\n\nconst mapStateToProps = (state, ownProps) => {\n const { localDashboardId } = ownProps;\n return {\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n user: getUser(state),\n workspace: getWorkspace(state),\n settings: getSettings(state),\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n IrisGridPanel\n);\n"],"file":"IrisGridPanel.js"}
@@ -20,7 +20,7 @@ var WidgetPanelTooltip = props => {
20
20
  return /*#__PURE__*/React.createElement("div", {
21
21
  className: "tab-tooltip-container"
22
22
  }, /*#__PURE__*/React.createElement("div", {
23
- className: "row"
23
+ className: "row flex-nowrap align-items-start"
24
24
  }, /*#__PURE__*/React.createElement("span", {
25
25
  className: "tab-tooltip-title"
26
26
  }, /*#__PURE__*/React.createElement("b", null, widgetType, " Name ")), /*#__PURE__*/React.createElement("span", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/panels/WidgetPanelTooltip.jsx"],"names":["React","useState","PropTypes","Button","ContextActionUtils","vsCopy","vsPassFilled","GLPropTypes","LayoutUtils","Log","log","module","WidgetPanelTooltip","props","widgetType","widgetName","glContainer","description","children","panelTitle","getTitleFromContainer","copied","setCopied","copyToClipboard","then","catch","e","error","propTypes","Container","isRequired","string","node","defaultProps"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,QAAhB,QAAgC,OAAhC;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,MAAT,EAAiBC,kBAAjB,QAA2C,uBAA3C;AACA,SAASC,MAAT,EAAiBC,YAAjB,QAAqC,kBAArC;AACA,SAASC,WAAT,EAAsBC,WAAtB,QAAyC,sBAAzC;AACA,OAAOC,GAAP,MAAgB,gBAAhB;;AAGA,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAJ,CAAW,oBAAX,CAAZ;;AAEA,IAAMC,kBAAkB,GAAGC,KAAK,IAAI;AAClC,MAAM;AAAEC,IAAAA,UAAF;AAAcC,IAAAA,UAAd;AAA0BC,IAAAA,WAA1B;AAAuCC,IAAAA,WAAvC;AAAoDC,IAAAA;AAApD,MAAiEL,KAAvE;AACA,MAAMM,UAAU,GAAGX,WAAW,CAACY,qBAAZ,CAAkCJ,WAAlC,CAAnB;AACA,MAAM,CAACK,MAAD,EAASC,SAAT,IAAsBrB,QAAQ,CAAC,KAAD,CAApC;AAEA,sBACE;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAM,IAAA,SAAS,EAAC;AAAhB,kBACE,+BAAIa,UAAJ,WADF,CADF,eAIE;AAAM,IAAA,SAAS,EAAC;AAAhB,KAAoCC,UAApC,CAJF,eAME,oBAAC,MAAD;AACE,IAAA,IAAI,EAAC,OADP;AAEE,IAAA,SAAS,EAAC,kBAFZ;AAGE,IAAA,IAAI,EAAEM,MAAM,GAAGf,YAAH,GAAkBD,MAHhC;AAIE,IAAA,OAAO,EAAE,MAAM;AACbD,MAAAA,kBAAkB,CAACmB,eAAnB,CAAmCR,UAAnC,EACGS,IADH,CACQF,SAAS,CAAC,IAAD,CADjB,EAEGG,KAFH,CAESC,CAAC,IAAIhB,GAAG,CAACiB,KAAJ,CAAU,uBAAV,EAAmCD,CAAnC,CAFd;AAGD,KARH;AASE,IAAA,OAAO,EAAEL,MAAM,GAAG,aAAH,GAAmB;AATpC,IANF,CADF,EAmBGN,UAAU,KAAKI,UAAf,iBACC;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAM,IAAA,SAAS,EAAC;AAAhB,kBACE,8CADF,CADF,eAIE;AAAM,IAAA,SAAS,EAAC;AAAhB,KAAoCA,UAApC,CAJF,CApBJ,EA2BGF,WAAW,iBACV;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAM,IAAA,SAAS,EAAC;AAAhB,KAA2CA,WAA3C,CADF,CA5BJ,EAgCGC,QAhCH,CADF;AAoCD,CAzCD;;AA2CAN,kBAAkB,CAACgB,SAAnB,GAA+B;AAC7BZ,EAAAA,WAAW,EAAET,WAAW,CAACsB,SAAZ,CAAsBC,UADN;AAE7BhB,EAAAA,UAAU,EAAEZ,SAAS,CAAC6B,MAFO;AAG7BhB,EAAAA,UAAU,EAAEb,SAAS,CAAC6B,MAHO;AAI7Bd,EAAAA,WAAW,EAAEf,SAAS,CAAC6B,MAJM;AAK7Bb,EAAAA,QAAQ,EAAEhB,SAAS,CAAC8B;AALS,CAA/B;AAQApB,kBAAkB,CAACqB,YAAnB,GAAkC;AAChCnB,EAAAA,UAAU,EAAE,EADoB;AAEhCC,EAAAA,UAAU,EAAE,EAFoB;AAGhCE,EAAAA,WAAW,EAAE,IAHmB;AAIhCC,EAAAA,QAAQ,EAAE;AAJsB,CAAlC;AAOA,eAAeN,kBAAf","sourcesContent":["import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ContextActionUtils } from '@deephaven/components';\nimport { vsCopy, vsPassFilled } from '@deephaven/icons';\nimport { GLPropTypes, LayoutUtils } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport './WidgetPanelTooltip.scss';\n\nconst log = Log.module('WidgetPanelTooltip');\n\nconst WidgetPanelTooltip = props => {\n const { widgetType, widgetName, glContainer, description, children } = props;\n const panelTitle = LayoutUtils.getTitleFromContainer(glContainer);\n const [copied, setCopied] = useState(false);\n\n return (\n <div className=\"tab-tooltip-container\">\n <div className=\"row\">\n <span className=\"tab-tooltip-title\">\n <b>{widgetType} Name </b>\n </span>\n <span className=\"tab-tooltip-name\">{widgetName}</span>\n\n <Button\n kind=\"ghost\"\n className=\"tab-tooltip-copy\"\n icon={copied ? vsPassFilled : vsCopy}\n onClick={() => {\n ContextActionUtils.copyToClipboard(widgetName)\n .then(setCopied(true))\n .catch(e => log.error('Unable to column name', e));\n }}\n tooltip={copied ? 'Copied text' : 'Copy name'}\n />\n </div>\n {widgetName !== panelTitle && (\n <div className=\"row\">\n <span className=\"tab-tooltip-title\">\n <b>Display Name</b>\n </span>\n <span className=\"tab-tooltip-name\">{panelTitle}</span>\n </div>\n )}\n {description && (\n <div className=\"row\">\n <span className=\"tab-tooltip-description\">{description}</span>\n </div>\n )}\n {children}\n </div>\n );\n};\n\nWidgetPanelTooltip.propTypes = {\n glContainer: GLPropTypes.Container.isRequired,\n widgetType: PropTypes.string,\n widgetName: PropTypes.string,\n description: PropTypes.string,\n children: PropTypes.node,\n};\n\nWidgetPanelTooltip.defaultProps = {\n widgetType: '',\n widgetName: '',\n description: null,\n children: null,\n};\n\nexport default WidgetPanelTooltip;\n"],"file":"WidgetPanelTooltip.js"}
1
+ {"version":3,"sources":["../../src/panels/WidgetPanelTooltip.jsx"],"names":["React","useState","PropTypes","Button","ContextActionUtils","vsCopy","vsPassFilled","GLPropTypes","LayoutUtils","Log","log","module","WidgetPanelTooltip","props","widgetType","widgetName","glContainer","description","children","panelTitle","getTitleFromContainer","copied","setCopied","copyToClipboard","then","catch","e","error","propTypes","Container","isRequired","string","node","defaultProps"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,QAAhB,QAAgC,OAAhC;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,MAAT,EAAiBC,kBAAjB,QAA2C,uBAA3C;AACA,SAASC,MAAT,EAAiBC,YAAjB,QAAqC,kBAArC;AACA,SAASC,WAAT,EAAsBC,WAAtB,QAAyC,sBAAzC;AACA,OAAOC,GAAP,MAAgB,gBAAhB;;AAGA,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAJ,CAAW,oBAAX,CAAZ;;AAEA,IAAMC,kBAAkB,GAAGC,KAAK,IAAI;AAClC,MAAM;AAAEC,IAAAA,UAAF;AAAcC,IAAAA,UAAd;AAA0BC,IAAAA,WAA1B;AAAuCC,IAAAA,WAAvC;AAAoDC,IAAAA;AAApD,MAAiEL,KAAvE;AACA,MAAMM,UAAU,GAAGX,WAAW,CAACY,qBAAZ,CAAkCJ,WAAlC,CAAnB;AACA,MAAM,CAACK,MAAD,EAASC,SAAT,IAAsBrB,QAAQ,CAAC,KAAD,CAApC;AAEA,sBACE;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAM,IAAA,SAAS,EAAC;AAAhB,kBACE,+BAAIa,UAAJ,WADF,CADF,eAIE;AAAM,IAAA,SAAS,EAAC;AAAhB,KAAoCC,UAApC,CAJF,eAME,oBAAC,MAAD;AACE,IAAA,IAAI,EAAC,OADP;AAEE,IAAA,SAAS,EAAC,kBAFZ;AAGE,IAAA,IAAI,EAAEM,MAAM,GAAGf,YAAH,GAAkBD,MAHhC;AAIE,IAAA,OAAO,EAAE,MAAM;AACbD,MAAAA,kBAAkB,CAACmB,eAAnB,CAAmCR,UAAnC,EACGS,IADH,CACQF,SAAS,CAAC,IAAD,CADjB,EAEGG,KAFH,CAESC,CAAC,IAAIhB,GAAG,CAACiB,KAAJ,CAAU,uBAAV,EAAmCD,CAAnC,CAFd;AAGD,KARH;AASE,IAAA,OAAO,EAAEL,MAAM,GAAG,aAAH,GAAmB;AATpC,IANF,CADF,EAmBGN,UAAU,KAAKI,UAAf,iBACC;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAM,IAAA,SAAS,EAAC;AAAhB,kBACE,8CADF,CADF,eAIE;AAAM,IAAA,SAAS,EAAC;AAAhB,KAAoCA,UAApC,CAJF,CApBJ,EA2BGF,WAAW,iBACV;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAM,IAAA,SAAS,EAAC;AAAhB,KAA2CA,WAA3C,CADF,CA5BJ,EAgCGC,QAhCH,CADF;AAoCD,CAzCD;;AA2CAN,kBAAkB,CAACgB,SAAnB,GAA+B;AAC7BZ,EAAAA,WAAW,EAAET,WAAW,CAACsB,SAAZ,CAAsBC,UADN;AAE7BhB,EAAAA,UAAU,EAAEZ,SAAS,CAAC6B,MAFO;AAG7BhB,EAAAA,UAAU,EAAEb,SAAS,CAAC6B,MAHO;AAI7Bd,EAAAA,WAAW,EAAEf,SAAS,CAAC6B,MAJM;AAK7Bb,EAAAA,QAAQ,EAAEhB,SAAS,CAAC8B;AALS,CAA/B;AAQApB,kBAAkB,CAACqB,YAAnB,GAAkC;AAChCnB,EAAAA,UAAU,EAAE,EADoB;AAEhCC,EAAAA,UAAU,EAAE,EAFoB;AAGhCE,EAAAA,WAAW,EAAE,IAHmB;AAIhCC,EAAAA,QAAQ,EAAE;AAJsB,CAAlC;AAOA,eAAeN,kBAAf","sourcesContent":["import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ContextActionUtils } from '@deephaven/components';\nimport { vsCopy, vsPassFilled } from '@deephaven/icons';\nimport { GLPropTypes, LayoutUtils } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport './WidgetPanelTooltip.scss';\n\nconst log = Log.module('WidgetPanelTooltip');\n\nconst WidgetPanelTooltip = props => {\n const { widgetType, widgetName, glContainer, description, children } = props;\n const panelTitle = LayoutUtils.getTitleFromContainer(glContainer);\n const [copied, setCopied] = useState(false);\n\n return (\n <div className=\"tab-tooltip-container\">\n <div className=\"row flex-nowrap align-items-start\">\n <span className=\"tab-tooltip-title\">\n <b>{widgetType} Name </b>\n </span>\n <span className=\"tab-tooltip-name\">{widgetName}</span>\n\n <Button\n kind=\"ghost\"\n className=\"tab-tooltip-copy\"\n icon={copied ? vsPassFilled : vsCopy}\n onClick={() => {\n ContextActionUtils.copyToClipboard(widgetName)\n .then(setCopied(true))\n .catch(e => log.error('Unable to column name', e));\n }}\n tooltip={copied ? 'Copied text' : 'Copy name'}\n />\n </div>\n {widgetName !== panelTitle && (\n <div className=\"row\">\n <span className=\"tab-tooltip-title\">\n <b>Display Name</b>\n </span>\n <span className=\"tab-tooltip-name\">{panelTitle}</span>\n </div>\n )}\n {description && (\n <div className=\"row\">\n <span className=\"tab-tooltip-description\">{description}</span>\n </div>\n )}\n {children}\n </div>\n );\n};\n\nWidgetPanelTooltip.propTypes = {\n glContainer: GLPropTypes.Container.isRequired,\n widgetType: PropTypes.string,\n widgetName: PropTypes.string,\n description: PropTypes.string,\n children: PropTypes.node,\n};\n\nWidgetPanelTooltip.defaultProps = {\n widgetType: '',\n widgetName: '',\n description: null,\n children: null,\n};\n\nexport default WidgetPanelTooltip;\n"],"file":"WidgetPanelTooltip.js"}
@@ -2,7 +2,7 @@ export function setDashboardSessionWrapper(id: string, sessionWrapper: SessionWr
2
2
  export function setDashboardLinks(id: string, links: Link[]): (dispatch: any) => any;
3
3
  export function addDashboardLinks(id: string, newLinks: Link[]): (dispatch: any, getState: any) => any;
4
4
  export function deleteDashboardLinks(id: string, linkIds: string[]): (dispatch: any, getState: any) => any;
5
- export function setDashboardIsolatedLinkerPanelId(id: string, isolatedLinkerPanelId: string | undefined): (dispatch: any) => any;
5
+ export function setDashboardIsolatedLinkerPanelId(id: string, isolatedLinkerPanelId: string | string[] | undefined): (dispatch: any) => any;
6
6
  export function setDashboardColumnSelectionValidator(id: string, columnSelectionValidator: ColumnSelectionValidator | undefined): (dispatch: any) => any;
7
7
  export function setDashboardConsoleSettings(id: string, consoleSettings: ConsoleSettings): (dispatch: any) => any;
8
8
  export function setDashboardFilterSets(id: string, filterSets: FilterSet[]): (dispatch: any) => any;
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/redux/actions.js"],"names":[],"mappings":"AASO,+CAHI,MAAM,0DAIsC;AAOhD,sCAHI,MAAM,SACN,MAAM,0BAG6B;AAOvC,sCAHI,MAAM,YACN,MAAM,yCAahB;AAOM,yCAHI,MAAM,WACN,MAAM,EAAE,yCAMlB;AAOM,sDAHI,MAAM,yBACN,MAAM,GAAC,SAAS,0BAKkD;AAOtE,yDAHI,MAAM,4BACN,2BAAyB,SAAS,0BAMoB;AAO1D,gDAHI,MAAM,4DAIuC;AAOjD,2CAHI,MAAM,cACN,WAAW,0BAG6B"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/redux/actions.js"],"names":[],"mappings":"AASO,+CAHI,MAAM,0DAIsC;AAOhD,sCAHI,MAAM,SACN,MAAM,0BAG6B;AAOvC,sCAHI,MAAM,YACN,MAAM,yCAahB;AAOM,yCAHI,MAAM,WACN,MAAM,EAAE,yCAMlB;AAOM,sDAHI,MAAM,yBACN,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,0BAKqC;AAOtE,yDAHI,MAAM,4BACN,2BAAyB,SAAS,0BAMoB;AAO1D,gDAHI,MAAM,4DAIuC;AAOjD,2CAHI,MAAM,cACN,WAAW,0BAG6B"}
@@ -44,7 +44,7 @@ export var deleteDashboardLinks = (id, linkIds) => (dispatch, getState) => {
44
44
  /**
45
45
  * Set the isolated linker panel ID for a dashboard
46
46
  * @param {string} id The ID of the dashboard to set the isolated linker panel ID in
47
- * @param {string|undefined} isolatedLinkerPanelId The isolated panel ID, or undefined to unset
47
+ * @param {string | string[] | undefined} isolatedLinkerPanelId The isolated panel ID, or undefined to unset
48
48
  */
49
49
 
50
50
  export var setDashboardIsolatedLinkerPanelId = (id, isolatedLinkerPanelId) => dispatch => dispatch(updateDashboardData(id, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/redux/actions.js"],"names":["deepEqual","updateDashboardData","getLinksForDashboard","setDashboardSessionWrapper","id","sessionWrapper","dispatch","setDashboardLinks","links","addDashboardLinks","newLinks","getState","filtered","filter","newLink","findIndex","link","start","end","concat","deleteDashboardLinks","linkIds","includes","setDashboardIsolatedLinkerPanelId","isolatedLinkerPanelId","setDashboardColumnSelectionValidator","columnSelectionValidator","setDashboardConsoleSettings","consoleSettings","setDashboardFilterSets","filterSets"],"mappings":"AAAA,OAAOA,SAAP,MAAsB,YAAtB;AACA,SAASC,mBAAT,QAAoC,sBAApC;SACSC,oB;AAET;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,0BAA0B,GAAG,CAACC,EAAD,EAAKC,cAAL,KAAwBC,QAAQ,IACxEA,QAAQ,CAACL,mBAAmB,CAACG,EAAD,EAAK;AAAEC,EAAAA;AAAF,CAAL,CAApB,CADH;AAGP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAME,iBAAiB,GAAG,CAACH,EAAD,EAAKI,KAAL,KAAeF,QAAQ,IACtDA,QAAQ,CAACL,mBAAmB,CAACG,EAAD,EAAK;AAAEI,EAAAA;AAAF,CAAL,CAApB,CADH;AAGP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,iBAAiB,GAAG,CAACL,EAAD,EAAKM,QAAL,KAAkB,CAACJ,QAAD,EAAWK,QAAX,KAAwB;AACzE,MAAMH,KAAK,GAAGN,oBAAoB,CAACS,QAAQ,EAAT,EAAaP,EAAb,CAAlC;AACA,MAAMQ,QAAQ,GAAGF,QAAQ,CAACG,MAAT,CACfC,OAAO,IACLN,KAAK,CAACO,SAAN,CACEC,IAAI,IACFhB,SAAS,CAACgB,IAAI,CAACC,KAAN,EAAaH,OAAO,CAACG,KAArB,CAAT,IACAjB,SAAS,CAACgB,IAAI,CAACE,GAAN,EAAWJ,OAAO,CAACI,GAAnB,CAHb,IAII,CANS,CAAjB;AAQA,SAAOZ,QAAQ,CAACC,iBAAiB,CAACH,EAAD,EAAKI,KAAK,CAACW,MAAN,CAAaP,QAAb,CAAL,CAAlB,CAAf;AACD,CAXM;AAaP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMQ,oBAAoB,GAAG,CAAChB,EAAD,EAAKiB,OAAL,KAAiB,CAACf,QAAD,EAAWK,QAAX,KAAwB;AAC3E,MAAMH,KAAK,GAAGN,oBAAoB,CAACS,QAAQ,EAAT,EAAaP,EAAb,CAAlC;AACA,MAAMM,QAAQ,GAAGF,KAAK,CAACK,MAAN,CAAaG,IAAI,IAAI,CAACK,OAAO,CAACC,QAAR,CAAiBN,IAAI,CAACZ,EAAtB,CAAtB,CAAjB;AACA,SAAOE,QAAQ,CAACC,iBAAiB,CAACH,EAAD,EAAKM,QAAL,CAAlB,CAAf;AACD,CAJM;AAMP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMa,iCAAiC,GAAG,CAC/CnB,EAD+C,EAE/CoB,qBAF+C,KAG5ClB,QAAQ,IAAIA,QAAQ,CAACL,mBAAmB,CAACG,EAAD,EAAK;AAAEoB,EAAAA;AAAF,CAAL,CAApB,CAHlB;AAKP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,oCAAoC,GAAG,CAClDrB,EADkD,EAElDsB,wBAFkD,KAG/CpB,QAAQ,IACXA,QAAQ,CAACL,mBAAmB,CAACG,EAAD,EAAK;AAAEsB,EAAAA;AAAF,CAAL,CAApB,CAJH;AAMP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,2BAA2B,GAAG,CAACvB,EAAD,EAAKwB,eAAL,KAAyBtB,QAAQ,IAC1EA,QAAQ,CAACL,mBAAmB,CAACG,EAAD,EAAK;AAAEwB,EAAAA;AAAF,CAAL,CAApB,CADH;AAGP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,sBAAsB,GAAG,CAACzB,EAAD,EAAK0B,UAAL,KAAoBxB,QAAQ,IAChEA,QAAQ,CAACL,mBAAmB,CAACG,EAAD,EAAK;AAAE0B,EAAAA;AAAF,CAAL,CAApB,CADH","sourcesContent":["import deepEqual from 'deep-equal';\nimport { updateDashboardData } from '@deephaven/dashboard';\nimport { getLinksForDashboard } from './selectors';\n\n/**\n * Set the session wrapper for the dashboard specified\n * @param {string} id The ID of the dashboard to set the session for\n * @param {SessionWrapper} sessionWrapper The session wrapper object to set for the dashboard\n */\nexport const setDashboardSessionWrapper = (id, sessionWrapper) => dispatch =>\n dispatch(updateDashboardData(id, { sessionWrapper }));\n\n/**\n * Set the links for a given dashboard\n * @param {string} id The ID of the dashboard to set the links for\n * @param {Link[]} links The links to set\n */\nexport const setDashboardLinks = (id, links) => dispatch =>\n dispatch(updateDashboardData(id, { links }));\n\n/**\n * Add links to the existing links in a dashboard. Filters out any duplicate links.\n * @param {string} id The ID of the dashboard to add links to\n * @param {Link[]} newLinks The new links to add\n */\nexport const addDashboardLinks = (id, newLinks) => (dispatch, getState) => {\n const links = getLinksForDashboard(getState(), id);\n const filtered = newLinks.filter(\n newLink =>\n links.findIndex(\n link =>\n deepEqual(link.start, newLink.start) &&\n deepEqual(link.end, newLink.end)\n ) < 0\n );\n return dispatch(setDashboardLinks(id, links.concat(filtered)));\n};\n\n/**\n * Delete links from a dashboard\n * @param {string} id The ID of the dashboard to delete links from\n * @param {string[]} linkIds The link IDs to delete\n */\nexport const deleteDashboardLinks = (id, linkIds) => (dispatch, getState) => {\n const links = getLinksForDashboard(getState(), id);\n const newLinks = links.filter(link => !linkIds.includes(link.id));\n return dispatch(setDashboardLinks(id, newLinks));\n};\n\n/**\n * Set the isolated linker panel ID for a dashboard\n * @param {string} id The ID of the dashboard to set the isolated linker panel ID in\n * @param {string|undefined} isolatedLinkerPanelId The isolated panel ID, or undefined to unset\n */\nexport const setDashboardIsolatedLinkerPanelId = (\n id,\n isolatedLinkerPanelId\n) => dispatch => dispatch(updateDashboardData(id, { isolatedLinkerPanelId }));\n\n/**\n * Set the column selection validator for a dashboard\n * @param {string} id The ID of the dashboard to set the column selection validator on\n * @param {ColumnSelectionValidator|undefined} columnSelectionValidator The column selection validator to set\n */\nexport const setDashboardColumnSelectionValidator = (\n id,\n columnSelectionValidator\n) => dispatch =>\n dispatch(updateDashboardData(id, { columnSelectionValidator }));\n\n/**\n * Set the console settings for a dashboard\n * @param {string} id The ID of the dashboard to set the console settings on\n * @param {ConsoleSettings} consoleSettings The console settings to set for the dashboard\n */\nexport const setDashboardConsoleSettings = (id, consoleSettings) => dispatch =>\n dispatch(updateDashboardData(id, { consoleSettings }));\n\n/**\n * Set the filter sets for a specific dashboard\n * @param {string} id The ID of the dashboard to set the filter sets for\n * @param {FilterSet[]} filterSets The filter sets to set\n */\nexport const setDashboardFilterSets = (id, filterSets) => dispatch =>\n dispatch(updateDashboardData(id, { filterSets }));\n"],"file":"actions.js"}
1
+ {"version":3,"sources":["../../src/redux/actions.js"],"names":["deepEqual","updateDashboardData","getLinksForDashboard","setDashboardSessionWrapper","id","sessionWrapper","dispatch","setDashboardLinks","links","addDashboardLinks","newLinks","getState","filtered","filter","newLink","findIndex","link","start","end","concat","deleteDashboardLinks","linkIds","includes","setDashboardIsolatedLinkerPanelId","isolatedLinkerPanelId","setDashboardColumnSelectionValidator","columnSelectionValidator","setDashboardConsoleSettings","consoleSettings","setDashboardFilterSets","filterSets"],"mappings":"AAAA,OAAOA,SAAP,MAAsB,YAAtB;AACA,SAASC,mBAAT,QAAoC,sBAApC;SACSC,oB;AAET;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,0BAA0B,GAAG,CAACC,EAAD,EAAKC,cAAL,KAAwBC,QAAQ,IACxEA,QAAQ,CAACL,mBAAmB,CAACG,EAAD,EAAK;AAAEC,EAAAA;AAAF,CAAL,CAApB,CADH;AAGP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAME,iBAAiB,GAAG,CAACH,EAAD,EAAKI,KAAL,KAAeF,QAAQ,IACtDA,QAAQ,CAACL,mBAAmB,CAACG,EAAD,EAAK;AAAEI,EAAAA;AAAF,CAAL,CAApB,CADH;AAGP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,iBAAiB,GAAG,CAACL,EAAD,EAAKM,QAAL,KAAkB,CAACJ,QAAD,EAAWK,QAAX,KAAwB;AACzE,MAAMH,KAAK,GAAGN,oBAAoB,CAACS,QAAQ,EAAT,EAAaP,EAAb,CAAlC;AACA,MAAMQ,QAAQ,GAAGF,QAAQ,CAACG,MAAT,CACfC,OAAO,IACLN,KAAK,CAACO,SAAN,CACEC,IAAI,IACFhB,SAAS,CAACgB,IAAI,CAACC,KAAN,EAAaH,OAAO,CAACG,KAArB,CAAT,IACAjB,SAAS,CAACgB,IAAI,CAACE,GAAN,EAAWJ,OAAO,CAACI,GAAnB,CAHb,IAII,CANS,CAAjB;AAQA,SAAOZ,QAAQ,CAACC,iBAAiB,CAACH,EAAD,EAAKI,KAAK,CAACW,MAAN,CAAaP,QAAb,CAAL,CAAlB,CAAf;AACD,CAXM;AAaP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMQ,oBAAoB,GAAG,CAAChB,EAAD,EAAKiB,OAAL,KAAiB,CAACf,QAAD,EAAWK,QAAX,KAAwB;AAC3E,MAAMH,KAAK,GAAGN,oBAAoB,CAACS,QAAQ,EAAT,EAAaP,EAAb,CAAlC;AACA,MAAMM,QAAQ,GAAGF,KAAK,CAACK,MAAN,CAAaG,IAAI,IAAI,CAACK,OAAO,CAACC,QAAR,CAAiBN,IAAI,CAACZ,EAAtB,CAAtB,CAAjB;AACA,SAAOE,QAAQ,CAACC,iBAAiB,CAACH,EAAD,EAAKM,QAAL,CAAlB,CAAf;AACD,CAJM;AAMP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMa,iCAAiC,GAAG,CAC/CnB,EAD+C,EAE/CoB,qBAF+C,KAG5ClB,QAAQ,IAAIA,QAAQ,CAACL,mBAAmB,CAACG,EAAD,EAAK;AAAEoB,EAAAA;AAAF,CAAL,CAApB,CAHlB;AAKP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,oCAAoC,GAAG,CAClDrB,EADkD,EAElDsB,wBAFkD,KAG/CpB,QAAQ,IACXA,QAAQ,CAACL,mBAAmB,CAACG,EAAD,EAAK;AAAEsB,EAAAA;AAAF,CAAL,CAApB,CAJH;AAMP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,2BAA2B,GAAG,CAACvB,EAAD,EAAKwB,eAAL,KAAyBtB,QAAQ,IAC1EA,QAAQ,CAACL,mBAAmB,CAACG,EAAD,EAAK;AAAEwB,EAAAA;AAAF,CAAL,CAApB,CADH;AAGP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,sBAAsB,GAAG,CAACzB,EAAD,EAAK0B,UAAL,KAAoBxB,QAAQ,IAChEA,QAAQ,CAACL,mBAAmB,CAACG,EAAD,EAAK;AAAE0B,EAAAA;AAAF,CAAL,CAApB,CADH","sourcesContent":["import deepEqual from 'deep-equal';\nimport { updateDashboardData } from '@deephaven/dashboard';\nimport { getLinksForDashboard } from './selectors';\n\n/**\n * Set the session wrapper for the dashboard specified\n * @param {string} id The ID of the dashboard to set the session for\n * @param {SessionWrapper} sessionWrapper The session wrapper object to set for the dashboard\n */\nexport const setDashboardSessionWrapper = (id, sessionWrapper) => dispatch =>\n dispatch(updateDashboardData(id, { sessionWrapper }));\n\n/**\n * Set the links for a given dashboard\n * @param {string} id The ID of the dashboard to set the links for\n * @param {Link[]} links The links to set\n */\nexport const setDashboardLinks = (id, links) => dispatch =>\n dispatch(updateDashboardData(id, { links }));\n\n/**\n * Add links to the existing links in a dashboard. Filters out any duplicate links.\n * @param {string} id The ID of the dashboard to add links to\n * @param {Link[]} newLinks The new links to add\n */\nexport const addDashboardLinks = (id, newLinks) => (dispatch, getState) => {\n const links = getLinksForDashboard(getState(), id);\n const filtered = newLinks.filter(\n newLink =>\n links.findIndex(\n link =>\n deepEqual(link.start, newLink.start) &&\n deepEqual(link.end, newLink.end)\n ) < 0\n );\n return dispatch(setDashboardLinks(id, links.concat(filtered)));\n};\n\n/**\n * Delete links from a dashboard\n * @param {string} id The ID of the dashboard to delete links from\n * @param {string[]} linkIds The link IDs to delete\n */\nexport const deleteDashboardLinks = (id, linkIds) => (dispatch, getState) => {\n const links = getLinksForDashboard(getState(), id);\n const newLinks = links.filter(link => !linkIds.includes(link.id));\n return dispatch(setDashboardLinks(id, newLinks));\n};\n\n/**\n * Set the isolated linker panel ID for a dashboard\n * @param {string} id The ID of the dashboard to set the isolated linker panel ID in\n * @param {string | string[] | undefined} isolatedLinkerPanelId The isolated panel ID, or undefined to unset\n */\nexport const setDashboardIsolatedLinkerPanelId = (\n id,\n isolatedLinkerPanelId\n) => dispatch => dispatch(updateDashboardData(id, { isolatedLinkerPanelId }));\n\n/**\n * Set the column selection validator for a dashboard\n * @param {string} id The ID of the dashboard to set the column selection validator on\n * @param {ColumnSelectionValidator|undefined} columnSelectionValidator The column selection validator to set\n */\nexport const setDashboardColumnSelectionValidator = (\n id,\n columnSelectionValidator\n) => dispatch =>\n dispatch(updateDashboardData(id, { columnSelectionValidator }));\n\n/**\n * Set the console settings for a dashboard\n * @param {string} id The ID of the dashboard to set the console settings on\n * @param {ConsoleSettings} consoleSettings The console settings to set for the dashboard\n */\nexport const setDashboardConsoleSettings = (id, consoleSettings) => dispatch =>\n dispatch(updateDashboardData(id, { consoleSettings }));\n\n/**\n * Set the filter sets for a specific dashboard\n * @param {string} id The ID of the dashboard to set the filter sets for\n * @param {FilterSet[]} filterSets The filter sets to set\n */\nexport const setDashboardFilterSets = (id, filterSets) => dispatch =>\n dispatch(updateDashboardData(id, { filterSets }));\n"],"file":"actions.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "0.15.1",
3
+ "version": "0.15.2",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -30,18 +30,18 @@
30
30
  "start": "cross-env NODE_ENV=development npm run watch"
31
31
  },
32
32
  "dependencies": {
33
- "@deephaven/chart": "^0.15.1",
34
- "@deephaven/components": "^0.15.1",
35
- "@deephaven/console": "^0.15.1",
36
- "@deephaven/dashboard": "^0.15.1",
37
- "@deephaven/file-explorer": "^0.15.1",
38
- "@deephaven/golden-layout": "^0.15.0",
33
+ "@deephaven/chart": "^0.15.2",
34
+ "@deephaven/components": "^0.15.2",
35
+ "@deephaven/console": "^0.15.2",
36
+ "@deephaven/dashboard": "^0.15.2",
37
+ "@deephaven/file-explorer": "^0.15.2",
38
+ "@deephaven/golden-layout": "^0.15.2",
39
39
  "@deephaven/icons": "^0.15.0",
40
- "@deephaven/iris-grid": "^0.15.1",
41
- "@deephaven/jsapi-shim": "^0.15.1",
42
- "@deephaven/jsapi-utils": "^0.15.1",
43
- "@deephaven/log": "^0.15.1",
44
- "@deephaven/redux": "^0.15.1",
40
+ "@deephaven/iris-grid": "^0.15.2",
41
+ "@deephaven/jsapi-shim": "^0.15.2",
42
+ "@deephaven/jsapi-utils": "^0.15.2",
43
+ "@deephaven/log": "^0.15.2",
44
+ "@deephaven/redux": "^0.15.2",
45
45
  "@deephaven/utils": "^0.15.0",
46
46
  "@fortawesome/react-fontawesome": "^0.1.18",
47
47
  "classnames": "^2.3.1",
@@ -64,7 +64,7 @@
64
64
  },
65
65
  "devDependencies": {
66
66
  "@deephaven/mocks": "^0.15.0",
67
- "@deephaven/tsconfig": "^0.15.0"
67
+ "@deephaven/tsconfig": "^0.15.2"
68
68
  },
69
69
  "files": [
70
70
  "dist"
@@ -72,5 +72,5 @@
72
72
  "publishConfig": {
73
73
  "access": "public"
74
74
  },
75
- "gitHead": "ebdc3452ada8cca6744aee0feef98313ebaef3ba"
75
+ "gitHead": "e654e3c883bb34646325b822b0710f6e2cb61142"
76
76
  }