@deephaven/dashboard-core-plugins 0.19.2-beta.10 → 0.19.2-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ChartPlugin.js.map +1 -1
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPlugin.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.d.ts.map +1 -1
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +3 -3
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts +1 -1
- package/dist/panels/WidgetPanelTooltip.d.ts +2 -2
- package/dist/panels/WidgetPanelTooltip.d.ts.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/package.json +19 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilderPlugin.js","names":["React","useCallback","ChartModelFactory","ChartUtils","assertIsDashboardPluginProps","LayoutUtils","useListener","shortid","IrisGridEvent","ChartPanel","ChartBuilderPlugin","props","id","layout","handleCreateChart","metadata","panelId","generate","table","settings","makeModel","makeModelFromSettings","title","titleFromSettings","config","type","component","COMPONENT","localDashboardId","root","openComponent","eventHub","CREATE_CHART"],"sources":["../src/ChartBuilderPlugin.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { ChartModelFactory, ChartUtils } from '@deephaven/chart';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { SeriesPlotStyle, Table } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { IrisGridEvent } from './events';\nimport { ChartPanel } from './panels';\n\nexport type ChartBuilderPluginProps = Partial<DashboardPluginComponentProps>;\n\n/**\n * Listens for IrisGridEvent.CREATE_CHART and creates a chart from the settings provided\n * Requires the GridPlugin and ChartPlugin plugins to be loaded as well\n */\nexport const ChartBuilderPlugin = (\n props: ChartBuilderPluginProps\n): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id, layout } = props;\n const handleCreateChart = useCallback(\n ({\n metadata,\n panelId = shortid.generate(),\n table,\n }: {\n metadata: {\n settings: {\n type: keyof SeriesPlotStyle;\n series: string[];\n xAxis: string;\n isLinked: boolean;\n hiddenSeries?: string[];\n };\n sourcePanelId: string;\n table: string;\n tableSettings: Record<string, unknown>;\n };\n panelId?: string;\n table: Table;\n }) => {\n const { settings } = metadata;\n const makeModel = () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ChartModelFactory.makeModelFromSettings(settings as any, table);\n const title = ChartUtils.titleFromSettings(settings);\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,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config });\n },\n [id, layout]\n );\n\n useListener(layout.eventHub, IrisGridEvent.CREATE_CHART, handleCreateChart);\n\n return <></>;\n};\n\nexport default ChartBuilderPlugin;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,QAAmC,OAAnC;AACA,SAASC,iBAAT,EAA4BC,UAA5B,QAA8C,kBAA9C;AACA,SACEC,4BADF,EAGEC,WAHF,EAIEC,WAJF,QAKO,sBALP;AAOA,OAAOC,OAAP,MAAoB,SAApB;SACSC,a;SACAC,U;;AAIT;AACA;AACA;AACA;AACA,OAAO,IAAMC,kBAAkB,GAC7BC,KADgC,IAEhB;EAChBP,4BAA4B,CAACO,KAAD,CAA5B;EACA,IAAM;IAAEC,EAAF;IAAMC;EAAN,IAAiBF,KAAvB;EACA,IAAMG,iBAAiB,GAAGb,WAAW,CACnC,QAmBM;IAAA,IAnBL;MACCc,QADD;MAECC,OAAO,GAAGT,OAAO,CAACU,QAAR,EAFX;MAGCC;IAHD,CAmBK;IACJ,IAAM;MAAEC;IAAF,IAAeJ,QAArB;;IACA,IAAMK,SAAS,GAAG,MAChB;IACAlB,iBAAiB,CAACmB,qBAAlB,CAAwCF,QAAxC,EAAyDD,KAAzD,CAFF;;IAGA,IAAMI,KAAK,GAAGnB,UAAU,CAACoB,iBAAX,CAA6BJ,QAA7B,CAAd;IAEA,IAAMK,MAAM,GAAG;MACbC,IAAI,EAAE,iBADO;MAEbC,SAAS,EAAEjB,UAAU,CAACkB,SAFT;MAGbhB,KAAK,EAAE;QACLiB,gBAAgB,EAAEhB,EADb;QAELA,EAAE,EAAEI,OAFC;QAGLD,QAHK;QAILK;MAJK,CAHM;MASbE,KATa;MAUbV,EAAE,EAAEI;IAVS,CAAf;IAaA,IAAM;MAAEa;IAAF,IAAWhB,MAAjB;IACAR,WAAW,CAACyB,aAAZ,CAA0B;MAAED,IAAF;MAAQL;IAAR,CAA1B;EACD,CA1CkC,EA2CnC,CAACZ,EAAD,EAAKC,MAAL,CA3CmC,CAArC;EA8CAP,WAAW,CAACO,MAAM,CAACkB,QAAR,EAAkBvB,aAAa,CAACwB,YAAhC,EAA8ClB,iBAA9C,CAAX;EAEA,oBAAO,yCAAP;AACD,CAtDM;AAwDP,eAAeJ,kBAAf"}
|
|
1
|
+
{"version":3,"file":"ChartBuilderPlugin.js","names":["React","useCallback","ChartModelFactory","ChartUtils","assertIsDashboardPluginProps","LayoutUtils","useListener","shortid","IrisGridEvent","ChartPanel","ChartBuilderPlugin","props","id","layout","handleCreateChart","metadata","panelId","generate","table","settings","makeModel","makeModelFromSettings","title","titleFromSettings","config","type","component","COMPONENT","localDashboardId","root","openComponent","eventHub","CREATE_CHART"],"sources":["../src/ChartBuilderPlugin.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { ChartModelFactory, ChartUtils } from '@deephaven/chart';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { SeriesPlotStyle, Table } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { IrisGridEvent } from './events';\nimport { ChartPanel } from './panels';\n\nexport type ChartBuilderPluginProps = Partial<DashboardPluginComponentProps>;\n\n/**\n * Listens for IrisGridEvent.CREATE_CHART and creates a chart from the settings provided\n * Requires the GridPlugin and ChartPlugin plugins to be loaded as well\n */\nexport const ChartBuilderPlugin = (\n props: ChartBuilderPluginProps\n): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id, layout } = props;\n const handleCreateChart = useCallback(\n ({\n metadata,\n panelId = shortid.generate(),\n table,\n }: {\n metadata: {\n settings: {\n type: keyof SeriesPlotStyle;\n series: string[];\n xAxis: string;\n isLinked: boolean;\n hiddenSeries?: string[];\n };\n sourcePanelId: string;\n table: string;\n tableSettings: Record<string, unknown>;\n };\n panelId?: string;\n table: Table;\n }) => {\n const { settings } = metadata;\n const makeModel = () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ChartModelFactory.makeModelFromSettings(settings as any, table);\n const title = ChartUtils.titleFromSettings(settings);\n\n const config = {\n type: 'react-component' as const,\n component: ChartPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config });\n },\n [id, layout]\n );\n\n useListener(layout.eventHub, IrisGridEvent.CREATE_CHART, handleCreateChart);\n\n return <></>;\n};\n\nexport default ChartBuilderPlugin;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,QAAmC,OAAnC;AACA,SAASC,iBAAT,EAA4BC,UAA5B,QAA8C,kBAA9C;AACA,SACEC,4BADF,EAGEC,WAHF,EAIEC,WAJF,QAKO,sBALP;AAOA,OAAOC,OAAP,MAAoB,SAApB;SACSC,a;SACAC,U;;AAIT;AACA;AACA;AACA;AACA,OAAO,IAAMC,kBAAkB,GAC7BC,KADgC,IAEhB;EAChBP,4BAA4B,CAACO,KAAD,CAA5B;EACA,IAAM;IAAEC,EAAF;IAAMC;EAAN,IAAiBF,KAAvB;EACA,IAAMG,iBAAiB,GAAGb,WAAW,CACnC,QAmBM;IAAA,IAnBL;MACCc,QADD;MAECC,OAAO,GAAGT,OAAO,CAACU,QAAR,EAFX;MAGCC;IAHD,CAmBK;IACJ,IAAM;MAAEC;IAAF,IAAeJ,QAArB;;IACA,IAAMK,SAAS,GAAG,MAChB;IACAlB,iBAAiB,CAACmB,qBAAlB,CAAwCF,QAAxC,EAAyDD,KAAzD,CAFF;;IAGA,IAAMI,KAAK,GAAGnB,UAAU,CAACoB,iBAAX,CAA6BJ,QAA7B,CAAd;IAEA,IAAMK,MAAM,GAAG;MACbC,IAAI,EAAE,iBADO;MAEbC,SAAS,EAAEjB,UAAU,CAACkB,SAFT;MAGbhB,KAAK,EAAE;QACLiB,gBAAgB,EAAEhB,EADb;QAELA,EAAE,EAAEI,OAFC;QAGLD,QAHK;QAILK;MAJK,CAHM;MASbE,KATa;MAUbV,EAAE,EAAEI;IAVS,CAAf;IAaA,IAAM;MAAEa;IAAF,IAAWhB,MAAjB;IACAR,WAAW,CAACyB,aAAZ,CAA0B;MAAED,IAAF;MAAQL;IAAR,CAA1B;EACD,CA1CkC,EA2CnC,CAACZ,EAAD,EAAKC,MAAL,CA3CmC,CAArC;EA8CAP,WAAW,CAACO,MAAM,CAACkB,QAAR,EAAkBvB,aAAa,CAACwB,YAAhC,EAA8ClB,iBAA9C,CAAX;EAEA,oBAAO,yCAAP;AACD,CAtDM;AAwDP,eAAeJ,kBAAf"}
|
package/dist/ChartPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartPlugin.js","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"],"sources":["../src/ChartPlugin.tsx"],"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, ChartPanelProps } from './panels';\n\nexport type ChartPluginProps = Partial<DashboardPluginComponentProps> & {\n hydrate: PanelHydrateFunction<ChartPanelProps>;\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(\n ChartPanel.COMPONENT,\n ChartPanel,\n hydrate as PanelHydrateFunction\n ),\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"],"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;EACnEP,4BAA4B,CAACO,KAAD,CAA5B;EACA,IAAM;IAAEC,EAAF;IAAMC,MAAN;IAAcC,iBAAd;IAAiCC;EAAjC,IAA6CJ,KAAnD;EACA,IAAMK,eAAe,GAAGf,WAAW,CACjC,QAUM;IAAA,IAVL;MACCgB,SADD;MAECC,KAFD;MAGCC,OAAO,GAAGX,OAAO,CAACY,QAAR,EAHX;MAICC;IAJD,CAUK;IACJ,IAAM;MAAEC,IAAF;MAAQC;IAAR,IAAiBF,MAAvB;;IACA,IAAIE,IAAI,KAAKC,EAAE,CAACC,YAAH,CAAgBC,MAA7B,EAAqC;MACnC;IACD;;IAED,IAAMC,QAAQ,GAAG;MAAEL,IAAF;MAAQM,MAAM,EAAEN;IAAhB,CAAjB;;IACA,IAAMO,SAAS,GAAG,MAChBX,KAAK,GAAGY,IAAR,CAAcF,MAAD,IACXzB,iBAAiB,CAAC0B,SAAlB,CAA4BE,SAA5B,EAAuCH,MAAvC,CADF,CADF;;IAIA,IAAMI,MAAM,GAAG;MACbT,IAAI,EAAE,iBADO;MAEbU,SAAS,EAAExB,UAAU,CAACyB,SAFT;MAGbvB,KAAK,EAAE;QACLwB,gBAAgB,EAAEvB,EADb;QAELA,EAAE,EAAEO,OAFC;QAGLQ,QAHK;QAILE;MAJK,CAHM;MASbO,KAAK,EAAEd,IATM;MAUbV,EAAE,EAAEO;IAVS,CAAf;IAaA,IAAM;MAAEkB;IAAF,IAAWxB,MAAjB;IACAR,WAAW,CAACiC,aAAZ,CAA0B;MAAED,IAAF;MAAQL,MAAR;MAAgBf;IAAhB,CAA1B;EACD,CArCgC,EAsCjC,CAACL,EAAD,EAAKC,MAAL,CAtCiC,CAAnC;EAyCAX,SAAS,CACP,SAASqC,kCAAT,GAA8C;IAC5C,IAAMC,QAAQ,GAAG,CACf1B,iBAAiB,CACfL,UAAU,CAACyB,SADI,EAEfzB,UAFe,EAGfM,OAHe,CADF,CAAjB;IAOA,OAAO,MAAM;MACXyB,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;IACD,CAFD;EAGD,CAZM,EAaP,CAAC3B,OAAD,EAAUD,iBAAV,CAbO,CAAT;EAgBAP,WAAW,CAACM,MAAM,CAAC8B,QAAR,EAAkBrC,UAAU,CAACsC,IAA7B,EAAmC5B,eAAnC,CAAX;EAEA,oBAAO,yCAAP;AACD,CA/DM;AAiEP,eAAeN,WAAf"}
|
|
1
|
+
{"version":3,"file":"ChartPlugin.js","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"],"sources":["../src/ChartPlugin.tsx"],"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, ChartPanelProps } from './panels';\n\nexport type ChartPluginProps = Partial<DashboardPluginComponentProps> & {\n hydrate: PanelHydrateFunction<ChartPanelProps>;\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' as const,\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(\n ChartPanel.COMPONENT,\n ChartPanel,\n hydrate as PanelHydrateFunction\n ),\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"],"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;EACnEP,4BAA4B,CAACO,KAAD,CAA5B;EACA,IAAM;IAAEC,EAAF;IAAMC,MAAN;IAAcC,iBAAd;IAAiCC;EAAjC,IAA6CJ,KAAnD;EACA,IAAMK,eAAe,GAAGf,WAAW,CACjC,QAUM;IAAA,IAVL;MACCgB,SADD;MAECC,KAFD;MAGCC,OAAO,GAAGX,OAAO,CAACY,QAAR,EAHX;MAICC;IAJD,CAUK;IACJ,IAAM;MAAEC,IAAF;MAAQC;IAAR,IAAiBF,MAAvB;;IACA,IAAIE,IAAI,KAAKC,EAAE,CAACC,YAAH,CAAgBC,MAA7B,EAAqC;MACnC;IACD;;IAED,IAAMC,QAAQ,GAAG;MAAEL,IAAF;MAAQM,MAAM,EAAEN;IAAhB,CAAjB;;IACA,IAAMO,SAAS,GAAG,MAChBX,KAAK,GAAGY,IAAR,CAAcF,MAAD,IACXzB,iBAAiB,CAAC0B,SAAlB,CAA4BE,SAA5B,EAAuCH,MAAvC,CADF,CADF;;IAIA,IAAMI,MAAM,GAAG;MACbT,IAAI,EAAE,iBADO;MAEbU,SAAS,EAAExB,UAAU,CAACyB,SAFT;MAGbvB,KAAK,EAAE;QACLwB,gBAAgB,EAAEvB,EADb;QAELA,EAAE,EAAEO,OAFC;QAGLQ,QAHK;QAILE;MAJK,CAHM;MASbO,KAAK,EAAEd,IATM;MAUbV,EAAE,EAAEO;IAVS,CAAf;IAaA,IAAM;MAAEkB;IAAF,IAAWxB,MAAjB;IACAR,WAAW,CAACiC,aAAZ,CAA0B;MAAED,IAAF;MAAQL,MAAR;MAAgBf;IAAhB,CAA1B;EACD,CArCgC,EAsCjC,CAACL,EAAD,EAAKC,MAAL,CAtCiC,CAAnC;EAyCAX,SAAS,CACP,SAASqC,kCAAT,GAA8C;IAC5C,IAAMC,QAAQ,GAAG,CACf1B,iBAAiB,CACfL,UAAU,CAACyB,SADI,EAEfzB,UAFe,EAGfM,OAHe,CADF,CAAjB;IAOA,OAAO,MAAM;MACXyB,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;IACD,CAFD;EAGD,CAZM,EAaP,CAAC3B,OAAD,EAAUD,iBAAV,CAbO,CAAT;EAgBAP,WAAW,CAACM,MAAM,CAAC8B,QAAR,EAAkBrC,UAAU,CAACsC,IAA7B,EAAmC5B,eAAnC,CAAX;EAEA,oBAAO,yCAAP;AACD,CA/DM;AAiEP,eAAeN,WAAf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","DashboardUtils","LayoutUtils","useListener","FileUtils","Log","React","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","assertIsConsolePluginProps","props","ConsolePlugin","id","hydrateConsole","layout","panelManager","registerComponent","notebooksUrl","notebookIndex","openFileMap","Map","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","delete","set","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","isFocusOnShow","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewTabId","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","hydrateNotebook","panelProps","panelDashboardId","hydrate","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"sources":["../src/ConsolePlugin.tsx"],"sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n assertIsDashboardPluginProps,\n DashboardPanelProps,\n DashboardPluginComponentProps,\n DashboardUtils,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\n PanelProps,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport type ConsolePluginProps = DashboardPluginComponentProps & {\n hydrateConsole?: PanelHydrateFunction;\n notebooksUrl: string;\n};\n\nexport function assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport interface FileMetadata {\n id: string | null;\n itemName: string;\n}\n\nexport const ConsolePlugin = (\n props: Partial<ConsolePluginProps>\n): JSX.Element => {\n assertIsConsolePluginProps(props);\n const {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl,\n } = props;\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = useState(new Map<string, string>());\n const [previewFileMap] = useState(new Map<string, string>());\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (extension == null) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata: FileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId != null && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId != null && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary as boolean) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n openFileMap.delete(oldName);\n if (panelId != null) {\n openFileMap.set(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n previewFileMap.delete(oldName);\n if (panelId != null) {\n previewFileMap.set(newName, panelId);\n }\n }\n\n if (panelId === undefined) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [openFileMap, previewFileMap, renamePanel]\n );\n\n /**\n * Show the panel for the given file metadata.\n * If the panel is not already open, then it just logs an error and does nothing.\n */\n const showFilePanel = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n if (panelId == null) {\n log.error('Could not find panel id for file metadata', fileMetadata);\n return;\n }\n LayoutUtils.activateTab(layout.root, { id: panelId });\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const registerFilePanel = useCallback(\n (panelId, fileMetadata: FileMetadata, isPreview: boolean) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.set(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, FileUtils.getBaseName(itemName));\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n openFileMap.set(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n previewFileMap.delete(fileId);\n }\n },\n [openFileMap, previewFileMap, renameFilePanel]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata: FileMetadata, isPreview: boolean) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.delete(fileId);\n return;\n }\n openFileMap.delete(fileId);\n },\n [openFileMap, previewFileMap]\n );\n\n const closeFilePanel = useCallback(\n fileMetadata => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId });\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n (fileMetadata: FileMetadata) => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId != null && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId != null && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /*\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (panelId == null) {\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n },\n [panelManager]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component',\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n notebooksUrl,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id, notebooksUrl]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata) && panelId != null) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(panelId);\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n focusPanelById,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n showFilePanel,\n ]\n );\n\n const selectNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata,\n // linter recognizes shouldFocus as any if I don't specify boolean here\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n shouldFocus: boolean = false\n ) => {\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n // If the file is already open, just show and focus it if necessary\n if (isFileOpen) {\n showFilePanel(fileMetadata);\n if (shouldFocus) {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n focusPanelById(panelId);\n }\n return;\n }\n\n // If the file is already open as a preview and we're not focusing it, just show it\n // If we're focusing it, that means we need to replace the panel anyway with a non-preview panel, so just fall into the logic below\n if (isFileOpenAsPreview && !shouldFocus) {\n showFilePanel(fileMetadata);\n return;\n }\n\n const [previewTabId] = Array.from(previewFileMap.values());\n let panelId = null;\n let stack = null;\n if (previewTabId != null) {\n panelId = previewTabId;\n stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n }\n if (stack == null) {\n panelId = getPanelIdForFileMetadata(fileMetadata);\n stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n }\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview: !shouldFocus,\n });\n LayoutUtils.openComponentInStack(stack, config);\n if (shouldFocus) {\n // Focus the tab we just opened if we're supposed to\n focusPanelById(panelId);\n }\n },\n [\n showFilePanel,\n fileIsOpen,\n fileIsOpenAsPreview,\n focusPanelById,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (\n settings != null &&\n settings.value != null &&\n notebookPanel.notebook != null\n ) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary as boolean) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n const hydrateNotebook = useCallback(\n (panelProps: PanelProps, panelDashboardId: string): DashboardPanelProps =>\n DashboardUtils.hydrate(\n {\n ...panelProps,\n notebooksUrl,\n },\n panelDashboardId\n ),\n [notebooksUrl]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ConsolePanel.COMPONENT, ConsolePanel, hydrateConsole),\n registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel),\n registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel),\n registerComponent(LogPanel.COMPONENT, LogPanel),\n registerComponent(\n NotebookPanel.COMPONENT,\n NotebookPanel,\n hydrateNotebook\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent, hydrateConsole, hydrateNotebook]\n );\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return <></>;\n};\n\nexport default ConsolePlugin;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","DashboardUtils","LayoutUtils","useListener","FileUtils","Log","React","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","assertIsConsolePluginProps","props","ConsolePlugin","id","hydrateConsole","layout","panelManager","registerComponent","notebooksUrl","notebookIndex","openFileMap","Map","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","delete","set","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","isFocusOnShow","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewTabId","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","hydrateNotebook","panelProps","panelDashboardId","hydrate","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"sources":["../src/ConsolePlugin.tsx"],"sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n assertIsDashboardPluginProps,\n DashboardPanelProps,\n DashboardPluginComponentProps,\n DashboardUtils,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\n PanelProps,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport type ConsolePluginProps = DashboardPluginComponentProps & {\n hydrateConsole?: PanelHydrateFunction;\n notebooksUrl: string;\n};\n\nexport function assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport interface FileMetadata {\n id: string | null;\n itemName: string;\n}\n\nexport const ConsolePlugin = (\n props: Partial<ConsolePluginProps>\n): JSX.Element => {\n assertIsConsolePluginProps(props);\n const {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl,\n } = props;\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = useState(new Map<string, string>());\n const [previewFileMap] = useState(new Map<string, string>());\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (extension == null) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata: FileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId != null && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId != null && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary as boolean) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n openFileMap.delete(oldName);\n if (panelId != null) {\n openFileMap.set(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n previewFileMap.delete(oldName);\n if (panelId != null) {\n previewFileMap.set(newName, panelId);\n }\n }\n\n if (panelId === undefined) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [openFileMap, previewFileMap, renamePanel]\n );\n\n /**\n * Show the panel for the given file metadata.\n * If the panel is not already open, then it just logs an error and does nothing.\n */\n const showFilePanel = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n if (panelId == null) {\n log.error('Could not find panel id for file metadata', fileMetadata);\n return;\n }\n LayoutUtils.activateTab(layout.root, { id: panelId });\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const registerFilePanel = useCallback(\n (panelId, fileMetadata: FileMetadata, isPreview: boolean) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.set(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, FileUtils.getBaseName(itemName));\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n openFileMap.set(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n previewFileMap.delete(fileId);\n }\n },\n [openFileMap, previewFileMap, renameFilePanel]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata: FileMetadata, isPreview: boolean) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.delete(fileId);\n return;\n }\n openFileMap.delete(fileId);\n },\n [openFileMap, previewFileMap]\n );\n\n const closeFilePanel = useCallback(\n fileMetadata => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId });\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n (fileMetadata: FileMetadata) => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId != null && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId != null && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /*\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (panelId == null) {\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n },\n [panelManager]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component' as const,\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n notebooksUrl,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id, notebooksUrl]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata) && panelId != null) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(panelId);\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n focusPanelById,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n showFilePanel,\n ]\n );\n\n const selectNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata,\n // linter recognizes shouldFocus as any if I don't specify boolean here\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n shouldFocus: boolean = false\n ) => {\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n // If the file is already open, just show and focus it if necessary\n if (isFileOpen) {\n showFilePanel(fileMetadata);\n if (shouldFocus) {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n focusPanelById(panelId);\n }\n return;\n }\n\n // If the file is already open as a preview and we're not focusing it, just show it\n // If we're focusing it, that means we need to replace the panel anyway with a non-preview panel, so just fall into the logic below\n if (isFileOpenAsPreview && !shouldFocus) {\n showFilePanel(fileMetadata);\n return;\n }\n\n const [previewTabId] = Array.from(previewFileMap.values());\n let panelId = null;\n let stack = null;\n if (previewTabId != null) {\n panelId = previewTabId;\n stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n }\n if (stack == null) {\n panelId = getPanelIdForFileMetadata(fileMetadata);\n stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n }\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview: !shouldFocus,\n });\n LayoutUtils.openComponentInStack(stack, config);\n if (shouldFocus) {\n // Focus the tab we just opened if we're supposed to\n focusPanelById(panelId);\n }\n },\n [\n showFilePanel,\n fileIsOpen,\n fileIsOpenAsPreview,\n focusPanelById,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (\n settings != null &&\n settings.value != null &&\n notebookPanel.notebook != null\n ) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary as boolean) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n const hydrateNotebook = useCallback(\n (panelProps: PanelProps, panelDashboardId: string): DashboardPanelProps =>\n DashboardUtils.hydrate(\n {\n ...panelProps,\n notebooksUrl,\n },\n panelDashboardId\n ),\n [notebooksUrl]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ConsolePanel.COMPONENT, ConsolePanel, hydrateConsole),\n registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel),\n registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel),\n registerComponent(LogPanel.COMPONENT, LogPanel),\n registerComponent(\n NotebookPanel.COMPONENT,\n NotebookPanel,\n hydrateNotebook\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent, hydrateConsole, hydrateNotebook]\n );\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return <></>;\n};\n\nexport default ConsolePlugin;\n"],"mappings":"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"}
|
package/dist/FilterPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterPlugin.js","names":["React","useCallback","useEffect","useState","useDispatch","shortid","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","updateDashboardData","useListener","Log","TextUtils","InputFilterEvent","DropdownFilterPanel","FilterSetManagerPanel","InputFilterPanel","log","module","flattenArray","accumulator","currentValue","concat","FilterPlugin","props","id","localDashboardId","layout","registerComponent","dispatch","panelColumns","Map","panelFilters","panelTables","sendUpdate","columns","Array","from","values","reduce","sort","a","b","aName","toLower","name","bName","aType","type","bType","array","column","length","push","filters","timestamp","tableMap","debug","handleColumnsChanged","panel","debug2","set","handleFiltersChanged","handleTableChanged","table","getIdFromPanel","handlePanelUnmount","delete","handleOpenDropdown","title","metadata","panelState","generate","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","config","component","COMPONENT","root","openComponent","handleOpenInput","handleOpenFilterSetManager","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","COLUMNS_CHANGED","FILTERS_CHANGED","TABLE_CHANGED","OPEN_DROPDOWN","OPEN_INPUT","OPEN_FILTER_SET_MANAGER","UNMOUNT"],"sources":["../src/FilterPlugin.tsx"],"sourcesContent":["import React, { Component, useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n updateDashboardData,\n useListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { TextUtils } from '@deephaven/utils';\nimport { InputFilterEvent } from './events';\nimport {\n DropdownFilterPanel,\n FilterSetManagerPanel,\n InputFilterPanel,\n} from './panels';\n\nconst log = Log.module('FilterPlugin');\n\ntype Column = {\n name: string;\n type: string;\n};\n\nexport type FilterChangeEvent = Column & {\n value: string;\n timestamp: number;\n excludePanelIds?: string[];\n};\n\nexport type FilterPluginProps = Partial<DashboardPluginComponentProps>;\n\nfunction flattenArray<T>(accumulator: T[], currentValue: T | T[]): T[] {\n return accumulator.concat(currentValue);\n}\n\nexport const FilterPlugin = (props: FilterPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id: localDashboardId, layout, registerComponent } = props;\n const dispatch = useDispatch();\n const [panelColumns] = useState(() => new Map<Component, Column[]>());\n const [panelFilters] = useState(\n () => new Map<Component, FilterChangeEvent[]>()\n );\n const [panelTables] = useState(() => new Map());\n\n const sendUpdate = useCallback(() => {\n const columns = Array.from(panelColumns.values())\n .reduce(flattenArray, [] as Column[])\n .sort((a, b) => {\n const aName = TextUtils.toLower(a.name);\n const bName = TextUtils.toLower(b.name);\n if (aName !== bName) {\n return aName > bName ? 1 : -1;\n }\n\n const aType = TextUtils.toLower(a.type);\n const bType = TextUtils.toLower(b.type);\n if (aType !== bType) {\n return aType > bType ? 1 : -1;\n }\n\n return 0;\n })\n .reduce((array, column) => {\n if (\n array.length === 0 ||\n TextUtils.toLower(array[array.length - 1].name) !==\n TextUtils.toLower(column.name) ||\n TextUtils.toLower(array[array.length - 1].type) !==\n TextUtils.toLower(column.type)\n ) {\n array.push(column);\n }\n\n return array;\n }, [] as Column[]);\n\n const filters = Array.from(panelFilters.values())\n .reduce(flattenArray, [] as FilterChangeEvent[])\n .sort((a, b) => a.timestamp - b.timestamp);\n const tableMap = new Map(panelTables);\n\n log.debug('sendUpdate', { columns, filters, tableMap });\n dispatch(\n updateDashboardData(localDashboardId, { columns, filters, tableMap })\n );\n }, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);\n\n /**\n * Handler for the COLUMNS_CHANGED event.\n * @param panel The component that's emitting the filter change\n * @param columns The columns in this panel\n */\n const handleColumnsChanged = useCallback(\n (panel: Component, columns: Column | Column[]) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, ([] as Column[]).concat(columns));\n sendUpdate();\n },\n [panelColumns, sendUpdate]\n );\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param {Component} panel The component that's emitting the filter change\n * @param {FilterChangeEvent|Array<FilterChangeEvent>} filters The input filters set by the panel\n */\n const handleFiltersChanged = useCallback(\n (panel, filters) => {\n log.debug2('handleFiltersChanged', panel, filters);\n panelFilters.set(panel, [].concat(filters) as FilterChangeEvent[]);\n sendUpdate();\n },\n [panelFilters, sendUpdate]\n );\n\n const handleTableChanged = useCallback(\n (panel, table) => {\n log.debug2('handleTableChanged', panel, table);\n panelTables.set(LayoutUtils.getIdFromPanel(panel), table);\n sendUpdate();\n },\n [panelTables, sendUpdate]\n );\n\n const handlePanelUnmount = useCallback(\n panel => {\n log.debug2('handlePanelUnmount', panel);\n panelColumns.delete(panel);\n panelFilters.delete(panel);\n panelTables.delete(LayoutUtils.getIdFromPanel(panel));\n sendUpdate();\n },\n [panelColumns, panelFilters, panelTables, sendUpdate]\n );\n\n const handleOpenDropdown = useCallback(\n ({\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component',\n component: DropdownFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenInput = useCallback(\n ({\n title = 'InputFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component',\n component: InputFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenFilterSetManager = useCallback(\n ({\n title = 'FilterSets',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component',\n component: FilterSetManagerPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel),\n registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel),\n registerComponent(\n FilterSetManagerPanel.COMPONENT,\n FilterSetManagerPanel\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent]\n );\n\n useListener(\n layout.eventHub,\n InputFilterEvent.COLUMNS_CHANGED,\n handleColumnsChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.FILTERS_CHANGED,\n handleFiltersChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.TABLE_CHANGED,\n handleTableChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_DROPDOWN,\n handleOpenDropdown\n );\n useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_FILTER_SET_MANAGER,\n handleOpenFilterSetManager\n );\n useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);\n\n return <></>;\n};\n\nexport default FilterPlugin;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FilterPlugin.js","names":["React","useCallback","useEffect","useState","useDispatch","shortid","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","updateDashboardData","useListener","Log","TextUtils","InputFilterEvent","DropdownFilterPanel","FilterSetManagerPanel","InputFilterPanel","log","module","flattenArray","accumulator","currentValue","concat","FilterPlugin","props","id","localDashboardId","layout","registerComponent","dispatch","panelColumns","Map","panelFilters","panelTables","sendUpdate","columns","Array","from","values","reduce","sort","a","b","aName","toLower","name","bName","aType","type","bType","array","column","length","push","filters","timestamp","tableMap","debug","handleColumnsChanged","panel","debug2","set","handleFiltersChanged","handleTableChanged","table","getIdFromPanel","handlePanelUnmount","delete","handleOpenDropdown","title","metadata","panelState","generate","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","config","component","COMPONENT","root","openComponent","handleOpenInput","handleOpenFilterSetManager","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","COLUMNS_CHANGED","FILTERS_CHANGED","TABLE_CHANGED","OPEN_DROPDOWN","OPEN_INPUT","OPEN_FILTER_SET_MANAGER","UNMOUNT"],"sources":["../src/FilterPlugin.tsx"],"sourcesContent":["import React, { Component, useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n updateDashboardData,\n useListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { TextUtils } from '@deephaven/utils';\nimport { InputFilterEvent } from './events';\nimport {\n DropdownFilterPanel,\n FilterSetManagerPanel,\n InputFilterPanel,\n} from './panels';\n\nconst log = Log.module('FilterPlugin');\n\ntype Column = {\n name: string;\n type: string;\n};\n\nexport type FilterChangeEvent = Column & {\n value: string;\n timestamp: number;\n excludePanelIds?: string[];\n};\n\nexport type FilterPluginProps = Partial<DashboardPluginComponentProps>;\n\nfunction flattenArray<T>(accumulator: T[], currentValue: T | T[]): T[] {\n return accumulator.concat(currentValue);\n}\n\nexport const FilterPlugin = (props: FilterPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id: localDashboardId, layout, registerComponent } = props;\n const dispatch = useDispatch();\n const [panelColumns] = useState(() => new Map<Component, Column[]>());\n const [panelFilters] = useState(\n () => new Map<Component, FilterChangeEvent[]>()\n );\n const [panelTables] = useState(() => new Map());\n\n const sendUpdate = useCallback(() => {\n const columns = Array.from(panelColumns.values())\n .reduce(flattenArray, [] as Column[])\n .sort((a, b) => {\n const aName = TextUtils.toLower(a.name);\n const bName = TextUtils.toLower(b.name);\n if (aName !== bName) {\n return aName > bName ? 1 : -1;\n }\n\n const aType = TextUtils.toLower(a.type);\n const bType = TextUtils.toLower(b.type);\n if (aType !== bType) {\n return aType > bType ? 1 : -1;\n }\n\n return 0;\n })\n .reduce((array, column) => {\n if (\n array.length === 0 ||\n TextUtils.toLower(array[array.length - 1].name) !==\n TextUtils.toLower(column.name) ||\n TextUtils.toLower(array[array.length - 1].type) !==\n TextUtils.toLower(column.type)\n ) {\n array.push(column);\n }\n\n return array;\n }, [] as Column[]);\n\n const filters = Array.from(panelFilters.values())\n .reduce(flattenArray, [] as FilterChangeEvent[])\n .sort((a, b) => a.timestamp - b.timestamp);\n const tableMap = new Map(panelTables);\n\n log.debug('sendUpdate', { columns, filters, tableMap });\n dispatch(\n updateDashboardData(localDashboardId, { columns, filters, tableMap })\n );\n }, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);\n\n /**\n * Handler for the COLUMNS_CHANGED event.\n * @param panel The component that's emitting the filter change\n * @param columns The columns in this panel\n */\n const handleColumnsChanged = useCallback(\n (panel: Component, columns: Column | Column[]) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, ([] as Column[]).concat(columns));\n sendUpdate();\n },\n [panelColumns, sendUpdate]\n );\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param {Component} panel The component that's emitting the filter change\n * @param {FilterChangeEvent|Array<FilterChangeEvent>} filters The input filters set by the panel\n */\n const handleFiltersChanged = useCallback(\n (panel, filters) => {\n log.debug2('handleFiltersChanged', panel, filters);\n panelFilters.set(panel, [].concat(filters) as FilterChangeEvent[]);\n sendUpdate();\n },\n [panelFilters, sendUpdate]\n );\n\n const handleTableChanged = useCallback(\n (panel, table) => {\n log.debug2('handleTableChanged', panel, table);\n panelTables.set(LayoutUtils.getIdFromPanel(panel), table);\n sendUpdate();\n },\n [panelTables, sendUpdate]\n );\n\n const handlePanelUnmount = useCallback(\n panel => {\n log.debug2('handlePanelUnmount', panel);\n panelColumns.delete(panel);\n panelFilters.delete(panel);\n panelTables.delete(LayoutUtils.getIdFromPanel(panel));\n sendUpdate();\n },\n [panelColumns, panelFilters, panelTables, sendUpdate]\n );\n\n const handleOpenDropdown = useCallback(\n ({\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: DropdownFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenInput = useCallback(\n ({\n title = 'InputFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: InputFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenFilterSetManager = useCallback(\n ({\n title = 'FilterSets',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: FilterSetManagerPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel),\n registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel),\n registerComponent(\n FilterSetManagerPanel.COMPONENT,\n FilterSetManagerPanel\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent]\n );\n\n useListener(\n layout.eventHub,\n InputFilterEvent.COLUMNS_CHANGED,\n handleColumnsChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.FILTERS_CHANGED,\n handleFiltersChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.TABLE_CHANGED,\n handleTableChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_DROPDOWN,\n handleOpenDropdown\n );\n useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_FILTER_SET_MANAGER,\n handleOpenFilterSetManager\n );\n useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);\n\n return <></>;\n};\n\nexport default FilterPlugin;\n"],"mappings":"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"}
|
package/dist/GridPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridPlugin.js","names":["React","useCallback","useEffect","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","IrisGridModelFactory","shortid","IrisGridPanel","SUPPORTED_TYPES","dh","VariableType","TABLE","TREETABLE","GridPlugin","props","getDownloadWorker","loadPlugin","id","layout","registerComponent","hydrate","theme","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","includes","metadata","table","makeModel","then","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/GridPlugin.tsx"],"sourcesContent":["import React, { DragEvent, useCallback, useEffect } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { IrisGridModelFactory, IrisGridThemeType } from '@deephaven/iris-grid';\nimport { Table, VariableDefinition } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { IrisGridPanel, IrisGridPanelProps } from './panels';\n\nexport const SUPPORTED_TYPES: string[] = [\n dh.VariableType.TABLE,\n dh.VariableType.TREETABLE,\n];\n\nexport type GridPluginProps = Partial<DashboardPluginComponentProps> & {\n getDownloadWorker?: () => Promise<ServiceWorker>;\n loadPlugin?: (name: string) => ReturnType<typeof React.forwardRef>;\n hydrate: PanelHydrateFunction<IrisGridPanelProps>;\n theme?: Partial<IrisGridThemeType>;\n};\n\nexport const GridPlugin = (props: GridPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const {\n getDownloadWorker,\n loadPlugin,\n id,\n layout,\n registerComponent,\n hydrate,\n theme,\n } = props;\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget,\n }: {\n dragEvent?: DragEvent;\n fetch: () => Promise<Table>;\n panelId?: string;\n widget: VariableDefinition;\n }) => {\n const { name, type } = widget;\n if (!SUPPORTED_TYPES.includes(type)) {\n return;\n }\n\n const metadata = { name, table: name };\n const makeModel = () =>\n fetch().then((table: Table) => IrisGridModelFactory.makeModel(table));\n const config = {\n type: 'react-component',\n component: IrisGridPanel.COMPONENT,\n props: {\n getDownloadWorker,\n loadPlugin,\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n theme,\n },\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [getDownloadWorker, id, layout, loadPlugin, theme]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(\n IrisGridPanel.COMPONENT,\n IrisGridPanel,\n hydrate as PanelHydrateFunction\n ),\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 GridPlugin;\n"],"mappings":"AAAA,OAAOA,KAAP,IAA2BC,WAA3B,EAAwCC,SAAxC,QAAyD,OAAzD;AACA,SACEC,4BADF,EAGEC,WAHF,EAIEC,UAJF,EAMEC,WANF,QAOO,sBAPP;AAQA,SAASC,oBAAT,QAAwD,sBAAxD;AAEA,OAAOC,OAAP,MAAoB,SAApB;SACSC,a;AAET,OAAO,IAAMC,eAAyB,GAAG,CACvCC,EAAE,CAACC,YAAH,CAAgBC,KADuB,EAEvCF,EAAE,CAACC,YAAH,CAAgBE,SAFuB,CAAlC;AAYP,OAAO,IAAMC,UAAU,GAAIC,KAAD,IAAyC;EACjEb,4BAA4B,CAACa,KAAD,CAA5B;EACA,IAAM;IACJC,iBADI;IAEJC,UAFI;IAGJC,EAHI;IAIJC,MAJI;IAKJC,iBALI;IAMJC,OANI;IAOJC;EAPI,IAQFP,KARJ;EASA,IAAMQ,eAAe,GAAGvB,WAAW,CACjC,QAUM;IAAA,IAVL;MACCwB,SADD;MAECC,KAFD;MAGCC,OAAO,GAAGnB,OAAO,CAACoB,QAAR,EAHX;MAICC;IAJD,CAUK;IACJ,IAAM;MAAEC,IAAF;MAAQC;IAAR,IAAiBF,MAAvB;;IACA,IAAI,CAACnB,eAAe,CAACsB,QAAhB,CAAyBD,IAAzB,CAAL,EAAqC;MACnC;IACD;;IAED,IAAME,QAAQ,GAAG;MAAEH,IAAF;MAAQI,KAAK,EAAEJ;IAAf,CAAjB;;IACA,IAAMK,SAAS,GAAG,MAChBT,KAAK,GAAGU,IAAR,CAAcF,KAAD,IAAkB3B,oBAAoB,CAAC4B,SAArB,CAA+BD,KAA/B,CAA/B,CADF;;IAEA,IAAMG,MAAM,GAAG;MACbN,IAAI,EAAE,iBADO;MAEbO,SAAS,EAAE7B,aAAa,CAAC8B,SAFZ;MAGbvB,KAAK,EAAE;QACLC,iBADK;QAELC,UAFK;QAGLsB,gBAAgB,EAAErB,EAHb;QAILA,EAAE,EAAEQ,OAJC;QAKLM,QALK;QAMLE,SANK;QAOLZ;MAPK,CAHM;MAYbkB,KAAK,EAAEX,IAZM;MAabX,EAAE,EAAEQ;IAbS,CAAf;IAgBA,IAAM;MAAEe;IAAF,IAAWtB,MAAjB;IACAhB,WAAW,CAACuC,aAAZ,CAA0B;MAAED,IAAF;MAAQL,MAAR;MAAgBZ;IAAhB,CAA1B;EACD,CAtCgC,EAuCjC,CAACR,iBAAD,EAAoBE,EAApB,EAAwBC,MAAxB,EAAgCF,UAAhC,EAA4CK,KAA5C,CAvCiC,CAAnC;EA0CArB,SAAS,CACP,SAAS0C,kCAAT,GAA8C;IAC5C,IAAMC,QAAQ,GAAG,CACfxB,iBAAiB,CACfZ,aAAa,CAAC8B,SADC,EAEf9B,aAFe,EAGfa,OAHe,CADF,CAAjB;IAOA,OAAO,MAAM;MACXuB,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;IACD,CAFD;EAGD,CAZM,EAaP,CAACzB,OAAD,EAAUD,iBAAV,CAbO,CAAT;EAgBAf,WAAW,CAACc,MAAM,CAAC4B,QAAR,EAAkB3C,UAAU,CAAC4C,IAA7B,EAAmCzB,eAAnC,CAAX;EAEA,oBAAO,yCAAP;AACD,CAxEM;AA0EP,eAAeT,UAAf"}
|
|
1
|
+
{"version":3,"file":"GridPlugin.js","names":["React","useCallback","useEffect","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","IrisGridModelFactory","shortid","IrisGridPanel","SUPPORTED_TYPES","dh","VariableType","TABLE","TREETABLE","GridPlugin","props","getDownloadWorker","loadPlugin","id","layout","registerComponent","hydrate","theme","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","includes","metadata","table","makeModel","then","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/GridPlugin.tsx"],"sourcesContent":["import React, { DragEvent, useCallback, useEffect } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { IrisGridModelFactory, IrisGridThemeType } from '@deephaven/iris-grid';\nimport { Table, VariableDefinition } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { IrisGridPanel, IrisGridPanelProps } from './panels';\n\nexport const SUPPORTED_TYPES: string[] = [\n dh.VariableType.TABLE,\n dh.VariableType.TREETABLE,\n];\n\nexport type GridPluginProps = Partial<DashboardPluginComponentProps> & {\n getDownloadWorker?: () => Promise<ServiceWorker>;\n loadPlugin?: (name: string) => ReturnType<typeof React.forwardRef>;\n hydrate: PanelHydrateFunction<IrisGridPanelProps>;\n theme?: Partial<IrisGridThemeType>;\n};\n\nexport const GridPlugin = (props: GridPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const {\n getDownloadWorker,\n loadPlugin,\n id,\n layout,\n registerComponent,\n hydrate,\n theme,\n } = props;\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget,\n }: {\n dragEvent?: DragEvent;\n fetch: () => Promise<Table>;\n panelId?: string;\n widget: VariableDefinition;\n }) => {\n const { name, type } = widget;\n if (!SUPPORTED_TYPES.includes(type)) {\n return;\n }\n\n const metadata = { name, table: name };\n const makeModel = () =>\n fetch().then((table: Table) => IrisGridModelFactory.makeModel(table));\n const config = {\n type: 'react-component' as const,\n component: IrisGridPanel.COMPONENT,\n props: {\n getDownloadWorker,\n loadPlugin,\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n theme,\n },\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [getDownloadWorker, id, layout, loadPlugin, theme]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(\n IrisGridPanel.COMPONENT,\n IrisGridPanel,\n hydrate as PanelHydrateFunction\n ),\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 GridPlugin;\n"],"mappings":"AAAA,OAAOA,KAAP,IAA2BC,WAA3B,EAAwCC,SAAxC,QAAyD,OAAzD;AACA,SACEC,4BADF,EAGEC,WAHF,EAIEC,UAJF,EAMEC,WANF,QAOO,sBAPP;AAQA,SAASC,oBAAT,QAAwD,sBAAxD;AAEA,OAAOC,OAAP,MAAoB,SAApB;SACSC,a;AAET,OAAO,IAAMC,eAAyB,GAAG,CACvCC,EAAE,CAACC,YAAH,CAAgBC,KADuB,EAEvCF,EAAE,CAACC,YAAH,CAAgBE,SAFuB,CAAlC;AAYP,OAAO,IAAMC,UAAU,GAAIC,KAAD,IAAyC;EACjEb,4BAA4B,CAACa,KAAD,CAA5B;EACA,IAAM;IACJC,iBADI;IAEJC,UAFI;IAGJC,EAHI;IAIJC,MAJI;IAKJC,iBALI;IAMJC,OANI;IAOJC;EAPI,IAQFP,KARJ;EASA,IAAMQ,eAAe,GAAGvB,WAAW,CACjC,QAUM;IAAA,IAVL;MACCwB,SADD;MAECC,KAFD;MAGCC,OAAO,GAAGnB,OAAO,CAACoB,QAAR,EAHX;MAICC;IAJD,CAUK;IACJ,IAAM;MAAEC,IAAF;MAAQC;IAAR,IAAiBF,MAAvB;;IACA,IAAI,CAACnB,eAAe,CAACsB,QAAhB,CAAyBD,IAAzB,CAAL,EAAqC;MACnC;IACD;;IAED,IAAME,QAAQ,GAAG;MAAEH,IAAF;MAAQI,KAAK,EAAEJ;IAAf,CAAjB;;IACA,IAAMK,SAAS,GAAG,MAChBT,KAAK,GAAGU,IAAR,CAAcF,KAAD,IAAkB3B,oBAAoB,CAAC4B,SAArB,CAA+BD,KAA/B,CAA/B,CADF;;IAEA,IAAMG,MAAM,GAAG;MACbN,IAAI,EAAE,iBADO;MAEbO,SAAS,EAAE7B,aAAa,CAAC8B,SAFZ;MAGbvB,KAAK,EAAE;QACLC,iBADK;QAELC,UAFK;QAGLsB,gBAAgB,EAAErB,EAHb;QAILA,EAAE,EAAEQ,OAJC;QAKLM,QALK;QAMLE,SANK;QAOLZ;MAPK,CAHM;MAYbkB,KAAK,EAAEX,IAZM;MAabX,EAAE,EAAEQ;IAbS,CAAf;IAgBA,IAAM;MAAEe;IAAF,IAAWtB,MAAjB;IACAhB,WAAW,CAACuC,aAAZ,CAA0B;MAAED,IAAF;MAAQL,MAAR;MAAgBZ;IAAhB,CAA1B;EACD,CAtCgC,EAuCjC,CAACR,iBAAD,EAAoBE,EAApB,EAAwBC,MAAxB,EAAgCF,UAAhC,EAA4CK,KAA5C,CAvCiC,CAAnC;EA0CArB,SAAS,CACP,SAAS0C,kCAAT,GAA8C;IAC5C,IAAMC,QAAQ,GAAG,CACfxB,iBAAiB,CACfZ,aAAa,CAAC8B,SADC,EAEf9B,aAFe,EAGfa,OAHe,CADF,CAAjB;IAOA,OAAO,MAAM;MACXuB,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;IACD,CAFD;EAGD,CAZM,EAaP,CAACzB,OAAD,EAAUD,iBAAV,CAbO,CAAT;EAgBAf,WAAW,CAACc,MAAM,CAAC4B,QAAR,EAAkB3C,UAAU,CAAC4C,IAA7B,EAAmCzB,eAAnC,CAAX;EAEA,oBAAO,yCAAP;AACD,CAxEM;AA0EP,eAAeT,UAAf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownPlugin.js","names":["React","useCallback","useEffect","shortid","assertIsDashboardPluginProps","dehydrate","hydrate","LayoutUtils","useListener","MarkdownPanel","MarkdownUtils","MarkdownEvent","MarkdownPlugin","props","id","layout","panelManager","registerComponent","dehydrateMarkdown","config","title","componentState","configProps","panelState","content","length","DEFAULT_CONTENT","handleOpen","metadata","panelId","generate","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","openedMarkdowns","getOpenedPanelConfigsOfType","COMPONENT","closedMarkdowns","getClosedPanelConfigsOfType","usedTitles","map","markdown","panelTitle","getNewMarkdownTitle","type","component","localDashboardId","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/MarkdownPlugin.tsx"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport shortid from 'shortid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n dehydrate,\n hydrate,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { MarkdownPanel } from './panels';\nimport MarkdownUtils from './controls/markdown/MarkdownUtils';\nimport MarkdownEvent from './events/MarkdownEvent';\n\nexport type MarkdownPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport type MarkdownComponentState = {\n panelState?: { content: string } | null;\n};\n\nexport const MarkdownPlugin = (props: MarkdownPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id, layout, panelManager, registerComponent } = props;\n const dehydrateMarkdown = useCallback(config => {\n const { title, componentState, props: configProps } = config;\n let { panelState = null }: MarkdownComponentState = configProps;\n if (componentState != null) {\n ({ panelState = null } = componentState as MarkdownComponentState);\n }\n if (\n title == null ||\n panelState == null ||\n panelState.content == null ||\n panelState.content.length === 0 ||\n panelState.content === MarkdownUtils.DEFAULT_CONTENT\n ) {\n // We don't want to save it if there's no content\n return null;\n }\n return dehydrate(config);\n }, []);\n\n const handleOpen = useCallback(\n ({\n title = '',\n metadata = {},\n id: panelId = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n } = {}) => {\n const openedMarkdowns = panelManager.getOpenedPanelConfigsOfType(\n MarkdownPanel.COMPONENT\n );\n const closedMarkdowns = panelManager.getClosedPanelConfigsOfType(\n MarkdownPanel.COMPONENT\n );\n const usedTitles = openedMarkdowns.map(markdown => markdown.title ?? '');\n const panelTitle =\n title != null && title !== ''\n ? title\n : MarkdownUtils.getNewMarkdownTitle(usedTitles);\n const content =\n closedMarkdowns.length > 0 ? null : MarkdownUtils.DEFAULT_CONTENT;\n const config = {\n type: 'react-component',\n component: MarkdownPanel.COMPONENT,\n props: {\n id: panelId,\n metadata,\n panelState: { content },\n localDashboardId: id,\n },\n title: panelTitle,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [id, layout, panelManager]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(\n MarkdownPanel.COMPONENT,\n MarkdownPanel,\n hydrate,\n dehydrateMarkdown\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [dehydrateMarkdown, registerComponent]\n );\n\n useListener(layout.eventHub, MarkdownEvent.OPEN, handleOpen);\n\n return <></>;\n};\n\nexport default MarkdownPlugin;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,QAA8C,OAA9C;AACA,OAAOC,OAAP,MAAoB,SAApB;AACA,SACEC,4BADF,EAGEC,SAHF,EAIEC,OAJF,EAKEC,WALF,EAMEC,WANF,QAOO,sBAPP;SAQSC,a;OACFC,a;OACAC,a;AAQP,OAAO,IAAMC,cAAc,GAAIC,KAAD,IAA6C;EACzET,4BAA4B,CAACS,KAAD,CAA5B;EACA,IAAM;IAAEC,EAAF;IAAMC,MAAN;IAAcC,YAAd;IAA4BC;EAA5B,IAAkDJ,KAAxD;EACA,IAAMK,iBAAiB,GAAGjB,WAAW,CAACkB,MAAM,IAAI;IAC9C,IAAM;MAAEC,KAAF;MAASC,cAAT;MAAyBR,KAAK,EAAES;IAAhC,IAAgDH,MAAtD;IACA,IAAI;MAAEI,UAAU,GAAG;IAAf,IAAgDD,WAApD;;IACA,IAAID,cAAc,IAAI,IAAtB,EAA4B;MAC1B,CAAC;QAAEE,UAAU,GAAG;MAAf,IAAwBF,cAAzB;IACD;;IACD,IACED,KAAK,IAAI,IAAT,IACAG,UAAU,IAAI,IADd,IAEAA,UAAU,CAACC,OAAX,IAAsB,IAFtB,IAGAD,UAAU,CAACC,OAAX,CAAmBC,MAAnB,KAA8B,CAH9B,IAIAF,UAAU,CAACC,OAAX,KAAuBd,aAAa,CAACgB,eALvC,EAME;MACA;MACA,OAAO,IAAP;IACD;;IACD,OAAOrB,SAAS,CAACc,MAAD,CAAhB;EACD,CAjBoC,EAiBlC,EAjBkC,CAArC;EAmBA,IAAMQ,UAAU,GAAG1B,WAAW,CAC5B,YAOW;IAAA,IAPV;MACCmB,KAAK,GAAG,EADT;MAECQ,QAAQ,GAAG,EAFZ;MAGCd,EAAE,EAAEe,OAAO,GAAG1B,OAAO,CAAC2B,QAAR,EAHf;MAICC,YAAY,GAAGxB,WAAW,CAACyB,sBAJ5B;MAKCC,cAAc,GAAG,KALlB;MAMCC,SAAS,GAAG;IANb,CAOU,uEAAP,EAAO;IACT,IAAMC,eAAe,GAAGnB,YAAY,CAACoB,2BAAb,CACtB3B,aAAa,CAAC4B,SADQ,CAAxB;IAGA,IAAMC,eAAe,GAAGtB,YAAY,CAACuB,2BAAb,CACtB9B,aAAa,CAAC4B,SADQ,CAAxB;IAGA,IAAMG,UAAU,GAAGL,eAAe,CAACM,GAAhB,CAAoBC,QAAQ;MAAA;;MAAA,0BAAIA,QAAQ,CAACtB,KAAb,6DAAsB,EAAtB;IAAA,CAA5B,CAAnB;IACA,IAAMuB,UAAU,GACdvB,KAAK,IAAI,IAAT,IAAiBA,KAAK,KAAK,EAA3B,GACIA,KADJ,GAEIV,aAAa,CAACkC,mBAAd,CAAkCJ,UAAlC,CAHN;IAIA,IAAMhB,OAAO,GACXc,eAAe,CAACb,MAAhB,GAAyB,CAAzB,GAA6B,IAA7B,GAAoCf,aAAa,CAACgB,eADpD;IAEA,IAAMP,MAAM,GAAG;MACb0B,IAAI,EAAE,iBADO;MAEbC,SAAS,EAAErC,aAAa,CAAC4B,SAFZ;MAGbxB,KAAK,EAAE;QACLC,EAAE,EAAEe,OADC;QAELD,QAFK;QAGLL,UAAU,EAAE;UAAEC;QAAF,CAHP;QAILuB,gBAAgB,EAAEjC;MAJb,CAHM;MASbM,KAAK,EAAEuB,UATM;MAUb7B,EAAE,EAAEe;IAVS,CAAf;IAaA,IAAM;MAAEmB;IAAF,IAAWjC,MAAjB;IACAR,WAAW,CAAC0C,aAAZ,CAA0B;MACxBD,IADwB;MAExB7B,MAFwB;MAGxBY,YAHwB;MAIxBE,cAJwB;MAKxBC;IALwB,CAA1B;EAOD,CA3C2B,EA4C5B,CAACpB,EAAD,EAAKC,MAAL,EAAaC,YAAb,CA5C4B,CAA9B;EA+CAd,SAAS,CACP,SAASgD,kCAAT,GAA8C;IAC5C,IAAMC,QAAQ,GAAG,CACflC,iBAAiB,CACfR,aAAa,CAAC4B,SADC,EAEf5B,aAFe,EAGfH,OAHe,EAIfY,iBAJe,CADF,CAAjB;IASA,OAAO,MAAM;MACXiC,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;IACD,CAFD;EAGD,CAdM,EAeP,CAACnC,iBAAD,EAAoBD,iBAApB,CAfO,CAAT;EAkBAT,WAAW,CAACO,MAAM,CAACuC,QAAR,EAAkB3C,aAAa,CAAC4C,IAAhC,EAAsC5B,UAAtC,CAAX;EAEA,oBAAO,yCAAP;AACD,CA1FM;AA4FP,eAAef,cAAf"}
|
|
1
|
+
{"version":3,"file":"MarkdownPlugin.js","names":["React","useCallback","useEffect","shortid","assertIsDashboardPluginProps","dehydrate","hydrate","LayoutUtils","useListener","MarkdownPanel","MarkdownUtils","MarkdownEvent","MarkdownPlugin","props","id","layout","panelManager","registerComponent","dehydrateMarkdown","config","title","componentState","configProps","panelState","content","length","DEFAULT_CONTENT","handleOpen","metadata","panelId","generate","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","openedMarkdowns","getOpenedPanelConfigsOfType","COMPONENT","closedMarkdowns","getClosedPanelConfigsOfType","usedTitles","map","markdown","panelTitle","getNewMarkdownTitle","type","component","localDashboardId","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/MarkdownPlugin.tsx"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport shortid from 'shortid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n dehydrate,\n hydrate,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { MarkdownPanel } from './panels';\nimport MarkdownUtils from './controls/markdown/MarkdownUtils';\nimport MarkdownEvent from './events/MarkdownEvent';\n\nexport type MarkdownPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport type MarkdownComponentState = {\n panelState?: { content: string } | null;\n};\n\nexport const MarkdownPlugin = (props: MarkdownPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id, layout, panelManager, registerComponent } = props;\n const dehydrateMarkdown = useCallback(config => {\n const { title, componentState, props: configProps } = config;\n let { panelState = null }: MarkdownComponentState = configProps;\n if (componentState != null) {\n ({ panelState = null } = componentState as MarkdownComponentState);\n }\n if (\n title == null ||\n panelState == null ||\n panelState.content == null ||\n panelState.content.length === 0 ||\n panelState.content === MarkdownUtils.DEFAULT_CONTENT\n ) {\n // We don't want to save it if there's no content\n return null;\n }\n return dehydrate(config);\n }, []);\n\n const handleOpen = useCallback(\n ({\n title = '',\n metadata = {},\n id: panelId = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n } = {}) => {\n const openedMarkdowns = panelManager.getOpenedPanelConfigsOfType(\n MarkdownPanel.COMPONENT\n );\n const closedMarkdowns = panelManager.getClosedPanelConfigsOfType(\n MarkdownPanel.COMPONENT\n );\n const usedTitles = openedMarkdowns.map(markdown => markdown.title ?? '');\n const panelTitle =\n title != null && title !== ''\n ? title\n : MarkdownUtils.getNewMarkdownTitle(usedTitles);\n const content =\n closedMarkdowns.length > 0 ? null : MarkdownUtils.DEFAULT_CONTENT;\n const config = {\n type: 'react-component' as const,\n component: MarkdownPanel.COMPONENT,\n props: {\n id: panelId,\n metadata,\n panelState: { content },\n localDashboardId: id,\n },\n title: panelTitle,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [id, layout, panelManager]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(\n MarkdownPanel.COMPONENT,\n MarkdownPanel,\n hydrate,\n dehydrateMarkdown\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [dehydrateMarkdown, registerComponent]\n );\n\n useListener(layout.eventHub, MarkdownEvent.OPEN, handleOpen);\n\n return <></>;\n};\n\nexport default MarkdownPlugin;\n"],"mappings":"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"}
|
package/dist/PandasPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PandasPlugin.js","names":["React","useCallback","useEffect","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","IrisGridModelFactory","shortid","PandasPanel","PandasPlugin","props","hydrate","id","layout","registerComponent","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","dh","VariableType","PANDAS","metadata","table","makeModel","then","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/PandasPlugin.tsx"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { Table } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { PandasPanel, PandasPanelProps } from './panels';\n\nexport type PandasPluginProps = Partial<DashboardPluginComponentProps> & {\n hydrate: PanelHydrateFunction<PandasPanelProps>;\n};\n\nexport const PandasPlugin = (props: PandasPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { hydrate, id, layout, registerComponent } = props;\n\n const handlePanelOpen = useCallback(\n ({ dragEvent, fetch, panelId = shortid.generate(), widget }) => {\n const { name, type } = widget;\n if (type !== dh.VariableType.PANDAS) {\n return;\n }\n\n const metadata = { name, table: name };\n const makeModel = () =>\n fetch().then((table: Table) => IrisGridModelFactory.makeModel(table));\n const config = {\n type: 'react-component',\n component: PandasPanel.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(PandasPanel.COMPONENT, PandasPanel, hydrate),\n ];\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 PandasPlugin;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,QAA8C,OAA9C;AACA,SACEC,4BADF,EAGEC,WAHF,EAIEC,UAJF,EAMEC,WANF,QAOO,sBAPP;AAQA,SAASC,oBAAT,QAAqC,sBAArC;AAEA,OAAOC,OAAP,MAAoB,SAApB;SACSC,W;AAMT,OAAO,IAAMC,YAAY,GAAIC,KAAD,IAA2C;EACrER,4BAA4B,CAACQ,KAAD,CAA5B;EACA,IAAM;IAAEC,OAAF;IAAWC,EAAX;IAAeC,MAAf;IAAuBC;EAAvB,IAA6CJ,KAAnD;EAEA,IAAMK,eAAe,GAAGf,WAAW,CACjC,QAAgE;IAAA,IAA/D;MAAEgB,SAAF;MAAaC,KAAb;MAAoBC,OAAO,GAAGX,OAAO,CAACY,QAAR,EAA9B;MAAkDC;IAAlD,CAA+D;IAC9D,IAAM;MAAEC,IAAF;MAAQC;IAAR,IAAiBF,MAAvB;;IACA,IAAIE,IAAI,KAAKC,EAAE,CAACC,YAAH,CAAgBC,MAA7B,EAAqC;MACnC;IACD;;IAED,IAAMC,QAAQ,GAAG;MAAEL,IAAF;MAAQM,KAAK,EAAEN;IAAf,CAAjB;;IACA,IAAMO,SAAS,GAAG,MAChBX,KAAK,GAAGY,IAAR,CAAcF,KAAD,IAAkBrB,oBAAoB,CAACsB,SAArB,CAA+BD,KAA/B,CAA/B,CADF;;IAEA,IAAMG,MAAM,GAAG;MACbR,IAAI,EAAE,iBADO;MAEbS,SAAS,EAAEvB,WAAW,CAACwB,SAFV;MAGbtB,KAAK,EAAE;QACLuB,gBAAgB,EAAErB,EADb;QAELA,EAAE,EAAEM,OAFC;QAGLQ,QAHK;QAILE;MAJK,CAHM;MASbM,KAAK,EAAEb,IATM;MAUbT,EAAE,EAAEM;IAVS,CAAf;IAaA,IAAM;MAAEiB;IAAF,IAAWtB,MAAjB;IACAV,WAAW,CAACiC,aAAZ,CAA0B;MAAED,IAAF;MAAQL,MAAR;MAAgBd;IAAhB,CAA1B;EACD,CAzBgC,EA0BjC,CAACJ,EAAD,EAAKC,MAAL,CA1BiC,CAAnC;EA6BAZ,SAAS,CACP,SAASoC,kCAAT,GAA8C;IAC5C,IAAMC,QAAQ,GAAG,CACfxB,iBAAiB,CAACN,WAAW,CAACwB,SAAb,EAAwBxB,WAAxB,EAAqCG,OAArC,CADF,CAAjB;IAIA,OAAO,MAAM;MACX2B,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;IACD,CAFD;EAGD,CATM,EAUP,CAAC7B,OAAD,EAAUG,iBAAV,CAVO,CAAT;EAaAT,WAAW,CAACQ,MAAM,CAAC4B,QAAR,EAAkBrC,UAAU,CAACsC,IAA7B,EAAmC3B,eAAnC,CAAX;EAEA,oBAAO,yCAAP;AACD,CAjDM;AAmDP,eAAeN,YAAf"}
|
|
1
|
+
{"version":3,"file":"PandasPlugin.js","names":["React","useCallback","useEffect","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","IrisGridModelFactory","shortid","PandasPanel","PandasPlugin","props","hydrate","id","layout","registerComponent","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","dh","VariableType","PANDAS","metadata","table","makeModel","then","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/PandasPlugin.tsx"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { Table } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { PandasPanel, PandasPanelProps } from './panels';\n\nexport type PandasPluginProps = Partial<DashboardPluginComponentProps> & {\n hydrate: PanelHydrateFunction<PandasPanelProps>;\n};\n\nexport const PandasPlugin = (props: PandasPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { hydrate, id, layout, registerComponent } = props;\n\n const handlePanelOpen = useCallback(\n ({ dragEvent, fetch, panelId = shortid.generate(), widget }) => {\n const { name, type } = widget;\n if (type !== dh.VariableType.PANDAS) {\n return;\n }\n\n const metadata = { name, table: name };\n const makeModel = () =>\n fetch().then((table: Table) => IrisGridModelFactory.makeModel(table));\n const config = {\n type: 'react-component' as const,\n component: PandasPanel.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(PandasPanel.COMPONENT, PandasPanel, hydrate),\n ];\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 PandasPlugin;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,QAA8C,OAA9C;AACA,SACEC,4BADF,EAGEC,WAHF,EAIEC,UAJF,EAMEC,WANF,QAOO,sBAPP;AAQA,SAASC,oBAAT,QAAqC,sBAArC;AAEA,OAAOC,OAAP,MAAoB,SAApB;SACSC,W;AAMT,OAAO,IAAMC,YAAY,GAAIC,KAAD,IAA2C;EACrER,4BAA4B,CAACQ,KAAD,CAA5B;EACA,IAAM;IAAEC,OAAF;IAAWC,EAAX;IAAeC,MAAf;IAAuBC;EAAvB,IAA6CJ,KAAnD;EAEA,IAAMK,eAAe,GAAGf,WAAW,CACjC,QAAgE;IAAA,IAA/D;MAAEgB,SAAF;MAAaC,KAAb;MAAoBC,OAAO,GAAGX,OAAO,CAACY,QAAR,EAA9B;MAAkDC;IAAlD,CAA+D;IAC9D,IAAM;MAAEC,IAAF;MAAQC;IAAR,IAAiBF,MAAvB;;IACA,IAAIE,IAAI,KAAKC,EAAE,CAACC,YAAH,CAAgBC,MAA7B,EAAqC;MACnC;IACD;;IAED,IAAMC,QAAQ,GAAG;MAAEL,IAAF;MAAQM,KAAK,EAAEN;IAAf,CAAjB;;IACA,IAAMO,SAAS,GAAG,MAChBX,KAAK,GAAGY,IAAR,CAAcF,KAAD,IAAkBrB,oBAAoB,CAACsB,SAArB,CAA+BD,KAA/B,CAA/B,CADF;;IAEA,IAAMG,MAAM,GAAG;MACbR,IAAI,EAAE,iBADO;MAEbS,SAAS,EAAEvB,WAAW,CAACwB,SAFV;MAGbtB,KAAK,EAAE;QACLuB,gBAAgB,EAAErB,EADb;QAELA,EAAE,EAAEM,OAFC;QAGLQ,QAHK;QAILE;MAJK,CAHM;MASbM,KAAK,EAAEb,IATM;MAUbT,EAAE,EAAEM;IAVS,CAAf;IAaA,IAAM;MAAEiB;IAAF,IAAWtB,MAAjB;IACAV,WAAW,CAACiC,aAAZ,CAA0B;MAAED,IAAF;MAAQL,MAAR;MAAgBd;IAAhB,CAA1B;EACD,CAzBgC,EA0BjC,CAACJ,EAAD,EAAKC,MAAL,CA1BiC,CAAnC;EA6BAZ,SAAS,CACP,SAASoC,kCAAT,GAA8C;IAC5C,IAAMC,QAAQ,GAAG,CACfxB,iBAAiB,CAACN,WAAW,CAACwB,SAAb,EAAwBxB,WAAxB,EAAqCG,OAArC,CADF,CAAjB;IAIA,OAAO,MAAM;MACX2B,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;IACD,CAFD;EAGD,CATM,EAUP,CAAC7B,OAAD,EAAUG,iBAAV,CAVO,CAAT;EAaAT,WAAW,CAACQ,MAAM,CAAC4B,QAAR,EAAkBrC,UAAU,CAACsC,IAA7B,EAAmC3B,eAAnC,CAAX;EAEA,oBAAO,yCAAP;AACD,CAjDM;AAmDP,eAAeN,YAAf"}
|
|
@@ -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;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;
|
|
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;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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerOverlayContent.js","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"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"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 type 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 != null && isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null }\n );\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LinkerOverlayContent.js","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"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"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 type { Container } 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((glContainer as unknown) as Container);\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 != null && isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null }\n );\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"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { InputFilter, ColumnName } from '@deephaven/iris-grid';
|
|
|
5
5
|
import { SeriesPlotStyle, TableTemplate } from '@deephaven/jsapi-shim';
|
|
6
6
|
import { WorkspaceSettings } from '@deephaven/redux';
|
|
7
7
|
import { Pending } from '@deephaven/utils';
|
|
8
|
-
import
|
|
8
|
+
import type { Container, EventEmitter } from '@deephaven/golden-layout';
|
|
9
9
|
import { ModelIndex } from '@deephaven/grid';
|
|
10
10
|
import { AdvancedFilterOptions, SortDirection } from '@deephaven/jsapi-utils';
|
|
11
11
|
import { ColumnMap } from './ChartFilterOverlay';
|
|
@@ -76,8 +76,8 @@ export interface GLChartPanelState {
|
|
|
76
76
|
figure?: string;
|
|
77
77
|
}
|
|
78
78
|
export interface ChartPanelProps {
|
|
79
|
-
glContainer:
|
|
80
|
-
glEventHub:
|
|
79
|
+
glContainer: Container;
|
|
80
|
+
glEventHub: EventEmitter;
|
|
81
81
|
metadata: ChartPanelMetadata;
|
|
82
82
|
/** Function to build the ChartModel used by this ChartPanel. Can return a promise. */
|
|
83
83
|
makeModel: () => Promise<ChartModel>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMlE,OAAO,EACL,KAAK,EACL,UAAU,EACV,kBAAkB,EAGnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAiB,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAW,EAET,eAAe,EACf,aAAa,EACd,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAKL,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,OAAO,EAGR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,YAAY,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ChartPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartPanel.js","names":["React","Component","classNames","memoize","connect","CSSTransition","debounce","Chart","ChartUtils","isFigureChartModel","getOpenedPanelMapForDashboard","LayoutUtils","IrisGridUtils","dh","ThemeExport","Log","getActiveTool","getSettings","setActiveTool","setActiveToolAction","assertNotNull","Pending","PromiseUtils","TextUtils","WidgetPanel","ToolType","InputFilterEvent","ChartEvent","getColumnSelectionValidatorForDashboard","getInputFiltersForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","ChartFilterOverlay","ChartColumnSelectorOverlay","log","module","UPDATE_MODEL_DEBOUNCE","isChartPanelTableMetadata","metadata","settings","undefined","hasInputFilter","panel","inputFilters","hasPanelState","panelState","ChartPanel","constructor","props","isFilterRequired","columnMap","filterMap","Map","waitingInputMap","forEach","filter","name","delete","linkedColumnMap","inputFilterMap","waitingFilterMap","value","column","i","length","inputFilter","type","get","set","links","panelId","getIdFromPanel","link","columnName","start","has","end","columnSelectionValidator","Array","from","values","map","isValid","isActive","handleColumnSelected","bind","handleColumnMouseEnter","handleColumnMouseLeave","handleDisconnect","handleReconnect","handleFilterAdd","handleHide","handleError","handleLoadError","handleLoadSuccess","handleResize","handleSettingsChanged","handleOpenLinker","handleShow","handleSourceColumnChange","handleSourceFilterChange","handleSourceSortChange","handleTabBlur","handleTabFocus","handleUpdate","updateModelFromSource","handleClearAllFilters","panelContainer","createRef","chart","pending","filterValueMap","state","error","isDisconnected","isLoading","isLoaded","isLinked","model","componentDidMount","isHidden","setState","initModel","componentDidUpdate","prevProps","prevState","source","pruneFilterMaps","updateChangedInputFilters","updateFilters","updatePanelState","updateSettings","startListeningToSource","stopListeningToSource","componentWillUnmount","cancel","makeModel","add","resolved","close","then","table","debug","addEventListener","Table","EVENT_CUSTOMCOLUMNSCHANGED","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","removeEventListener","loadModelIfNecessary","glContainer","glEventHub","emit","COLUMN_SELECTED","Error","columns","openInputFilter","localDashboardId","LINKER","sendColumnChange","updateColumnFilters","prevModel","updateInputFilters","size","isCanceled","debug2","plot","Figure","create","makeFigureSettings","figure","setFigure","catch","sourcePanel","tableSettings","sourcePanelState","extractTableSettings","updateChart","update","prevSettings","setActive","OPEN_INPUT","title","isValueShown","createNewStack","focusElement","COLUMNS_CHANGED","getFilterColumnMap","getCoordinateForColumn","className","makeButtonClassName","current","element","querySelector","rect","getBoundingClientRect","width","height","x","left","y","bottom","setFilterMap","filterMapParam","updatedFilterMap","columnType","unsetFilterValue","getInputFilterColumnMap","filterValue","inputFilterValue","prevInputFilters","deletedInputFilters","prevInputFilter","find","deleteInputFilters","changedInputFilters","includes","forceUpdate","needsUpdate","linkValue","getWaitingInputMap","setFilter","defaultTitle","getDefaultTitle","filterTitle","join","entries","setTitle","newState","updateDimensions","render","isLinkerActive","getLinkedColumnMap","getWaitingFilterMap","errorMessage","isWaitingForFilter","isSelectingColumn","transitionMs","getSelectorColumns","mapStateToProps","ownProps","sourcePanelId","panelTableMap","openedPanelMap","activeTool","isolatedLinkerPanelId","forwardRef"],"sources":["../../src/panels/ChartPanel.tsx"],"sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { CSSTransition } from 'react-transition-group';\nimport debounce from 'lodash.debounce';\nimport {\n Chart,\n ChartModel,\n ChartModelSettings,\n ChartUtils,\n isFigureChartModel,\n} from '@deephaven/chart';\nimport {\n getOpenedPanelMapForDashboard,\n LayoutUtils,\n PanelComponent,\n PanelProps,\n} from '@deephaven/dashboard';\nimport { IrisGridUtils, InputFilter, ColumnName } from '@deephaven/iris-grid';\nimport dh, {\n FigureDescriptor,\n SeriesPlotStyle,\n TableTemplate,\n} from '@deephaven/jsapi-shim';\nimport { ThemeExport } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getSettings,\n RootState,\n setActiveTool as setActiveToolAction,\n WorkspaceSettings,\n} from '@deephaven/redux';\nimport {\n assertNotNull,\n Pending,\n PromiseUtils,\n TextUtils,\n} from '@deephaven/utils';\nimport GoldenLayout from '@deephaven/golden-layout';\nimport { ModelIndex } from '@deephaven/grid';\nimport { AdvancedFilterOptions, SortDirection } from '@deephaven/jsapi-utils';\nimport WidgetPanel from './WidgetPanel';\nimport ToolType from '../linker/ToolType';\nimport { InputFilterEvent, ChartEvent } from '../events';\nimport {\n getColumnSelectionValidatorForDashboard,\n getInputFiltersForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n} from '../redux';\nimport ChartFilterOverlay, { ColumnMap } from './ChartFilterOverlay';\nimport ChartColumnSelectorOverlay, {\n SelectorColumn,\n} from './ChartColumnSelectorOverlay';\nimport './ChartPanel.scss';\nimport { Link } from '../linker/LinkerUtils';\nimport { PanelState as IrisGridPanelState } from './IrisGridPanel';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst log = Log.module('ChartPanel');\nconst UPDATE_MODEL_DEBOUNCE = 150;\n\nexport type InputFilterMap = Map<string, InputFilter>;\n\nexport type FilterMap = Map<string, string>;\n\nexport type LinkedColumnMap = Map<string, { name: string; type: string }>;\n\nexport function isChartPanelTableMetadata(\n metadata: ChartPanelMetadata\n): metadata is ChartPanelTableMetadata {\n return (metadata as ChartPanelTableMetadata).settings !== undefined;\n}\nexport type ChartPanelFigureMetadata = {\n figure: string;\n};\n\nexport type ChartPanelTableMetadata = {\n table: string;\n sourcePanelId: string;\n settings: {\n isLinked: boolean;\n title: string;\n xAxis: string;\n series: string[];\n type: keyof SeriesPlotStyle;\n };\n tableSettings: ChartPanelTableSettings;\n};\n\nexport type ChartPanelMetadata =\n | ChartPanelFigureMetadata\n | ChartPanelTableMetadata;\n\ntype Settings = Record<string, unknown>;\n\nexport interface ChartPanelTableSettings {\n quickFilters?: [\n ModelIndex,\n {\n text: string;\n }\n ][];\n advancedFilters?: [\n ModelIndex,\n {\n options: AdvancedFilterOptions;\n }\n ][];\n inputFilters?: InputFilter[];\n sorts?: {\n column: ModelIndex;\n isAbs: boolean;\n direction: SortDirection;\n }[];\n partition?: unknown;\n partitionColumn?: string;\n}\nexport interface GLChartPanelState {\n filterValueMap: [string, string][];\n settings: Partial<ChartModelSettings>;\n tableSettings: ChartPanelTableSettings;\n irisGridState?: {\n advancedFilters: unknown;\n quickFilters: unknown;\n sorts: unknown;\n };\n irisGridPanelState?: {\n partitionColumn: string;\n partition: unknown;\n };\n table?: string;\n figure?: string;\n}\nexport interface ChartPanelProps {\n glContainer: GoldenLayout.Container;\n glEventHub: GoldenLayout.EventEmitter;\n\n metadata: ChartPanelMetadata;\n /** Function to build the ChartModel used by this ChartPanel. Can return a promise. */\n makeModel: () => Promise<ChartModel>;\n inputFilters: InputFilter[];\n links: Link[];\n localDashboardId: string;\n isLinkerActive: boolean;\n source?: TableTemplate;\n sourcePanel?: PanelComponent;\n columnSelectionValidator?: ColumnSelectionValidator;\n setActiveTool: (tool: string) => void;\n setDashboardIsolatedLinkerPanelId: (\n id: string,\n secondParam: undefined\n ) => void;\n\n panelState: GLChartPanelState;\n settings: Partial<WorkspaceSettings>;\n}\n\ninterface ChartPanelState {\n settings: Partial<ChartModelSettings>;\n error?: unknown;\n isActive: boolean;\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isLinked: boolean;\n\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: Map<string, string>;\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: Map<string, string>;\n model?: ChartModel;\n columnMap: ColumnMap;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: GLChartPanelState;\n}\n\nfunction hasInputFilter(\n panel: PanelProps\n): panel is PanelProps & { inputFilters: InputFilter[] } {\n return (\n (panel as PanelProps & { inputFilters: InputFilter[] }).inputFilters != null\n );\n}\n\nfunction hasPanelState(\n panel: unknown\n): panel is { panelState: IrisGridPanelState } {\n return (panel as { panelState: IrisGridPanelState }).panelState != null;\n}\n\nexport class ChartPanel extends Component<ChartPanelProps, ChartPanelState> {\n static defaultProps = {\n columnSelectionValidator: null,\n isLinkerActive: false,\n source: null,\n sourcePanel: null,\n panelState: null,\n settings: {},\n };\n\n static displayName = 'ChartPanel';\n\n static COMPONENT = 'ChartPanel';\n\n constructor(props: ChartPanelProps) {\n super(props);\n\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleColumnMouseEnter = this.handleColumnMouseEnter.bind(this);\n this.handleColumnMouseLeave = this.handleColumnMouseLeave.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleFilterAdd = this.handleFilterAdd.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSettingsChanged = this.handleSettingsChanged.bind(this);\n this.handleOpenLinker = this.handleOpenLinker.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleSourceColumnChange = this.handleSourceColumnChange.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.updateModelFromSource = debounce(\n this.updateModelFromSource.bind(this),\n UPDATE_MODEL_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n\n this.panelContainer = React.createRef();\n this.chart = React.createRef();\n this.pending = new Pending();\n\n const { metadata, panelState } = props;\n const { filterValueMap = [], settings = {} } = panelState ?? {};\n\n this.state = {\n settings,\n error: undefined,\n isActive: false,\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n isLinked:\n metadata != null &&\n isChartPanelTableMetadata(metadata) &&\n metadata.settings &&\n metadata.settings.isLinked,\n\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: new Map(filterValueMap),\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: new Map(filterValueMap),\n model: undefined,\n columnMap: new Map(),\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n }\n\n componentDidMount(): void {\n if (!this.isHidden()) {\n this.setState({ isActive: true });\n this.initModel();\n }\n }\n\n componentDidUpdate(\n prevProps: ChartPanelProps,\n prevState: ChartPanelState\n ): void {\n const { inputFilters, source } = this.props;\n const {\n columnMap,\n model,\n filterMap,\n filterValueMap,\n isLinked,\n settings,\n } = this.state;\n\n if (!model) {\n return;\n }\n\n if (columnMap !== prevState.columnMap) {\n this.pruneFilterMaps();\n }\n\n if (inputFilters !== prevProps.inputFilters) {\n this.updateChangedInputFilters(inputFilters, prevProps.inputFilters);\n }\n\n if (filterMap !== prevState.filterMap) {\n this.updateFilters();\n } else if (filterValueMap !== prevState.filterValueMap) {\n this.updatePanelState();\n }\n\n if (settings !== prevState.settings && isFigureChartModel(model)) {\n model.updateSettings(settings);\n this.updatePanelState();\n }\n\n if (isLinked !== prevState.isLinked) {\n if (source) {\n if (isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n } else {\n this.stopListeningToSource(source);\n }\n }\n } else if (isLinked && source !== prevProps.source) {\n if (prevProps.source) {\n this.stopListeningToSource(prevProps.source);\n }\n if (source) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n\n const { source } = this.props;\n if (source) {\n this.stopListeningToSource(source);\n }\n }\n\n panelContainer: RefObject<HTMLDivElement>;\n\n chart: RefObject<Chart>;\n\n pending: Pending;\n\n initModel(): void {\n this.setState({ isLoading: true, isLoaded: false, error: undefined });\n\n const { makeModel } = this.props;\n this.pending\n .add(makeModel(), resolved => {\n resolved.close();\n })\n .then(this.handleLoadSuccess, this.handleLoadError);\n }\n\n getWaitingInputMap = memoize(\n (\n isFilterRequired: boolean,\n columnMap: ColumnMap,\n filterMap: FilterMap\n ): Map<string, { name: string; type: string }> => {\n if (!isFilterRequired) {\n return new Map();\n }\n const waitingInputMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingInputMap.delete(name);\n });\n return waitingInputMap;\n }\n );\n\n getWaitingFilterMap = memoize(\n (\n isFilterRequired: boolean,\n columnMap: ColumnMap,\n filterMap: FilterMap,\n linkedColumnMap: LinkedColumnMap,\n inputFilterMap: InputFilterMap\n ) => {\n if (!isFilterRequired) {\n return new Map();\n }\n\n const waitingFilterMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingFilterMap.delete(name);\n });\n inputFilterMap.forEach((value, name) => {\n waitingFilterMap.delete(name);\n });\n linkedColumnMap.forEach((column, name) => {\n waitingFilterMap.delete(name);\n });\n return waitingFilterMap;\n }\n );\n\n getInputFilterColumnMap = memoize(\n (columnMap: ColumnMap, inputFilters: InputFilter[]) => {\n const inputFilterMap = new Map<string, InputFilter>();\n for (let i = 0; i < inputFilters.length; i += 1) {\n const inputFilter = inputFilters[i];\n const { name, type } = inputFilter;\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n inputFilterMap.set(name, inputFilter);\n }\n }\n return inputFilterMap;\n }\n );\n\n getLinkedColumnMap = memoize((columnMap: ColumnMap, links: Link[]) => {\n const linkedColumnMap = new Map<string, { name: string; type: string }>();\n const panelId = LayoutUtils.getIdFromPanel(this);\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n let columnName = null;\n if (\n link.start != null &&\n link.start.panelId === panelId &&\n columnMap.has(link.start.columnName)\n ) {\n columnName = link.start.columnName;\n } else if (\n link.end &&\n link.end.panelId === panelId &&\n columnMap.has(link.end.columnName)\n ) {\n columnName = link.end.columnName;\n }\n\n if (columnName != null && columnMap.has(columnName)) {\n const column = columnMap.get(columnName);\n assertNotNull(column);\n linkedColumnMap.set(columnName, column);\n }\n }\n return linkedColumnMap;\n });\n\n getSelectorColumns = memoize(\n (\n columnMap: ColumnMap,\n linkedColumnMap: LinkedColumnMap,\n columnSelectionValidator?: ColumnSelectionValidator\n ) =>\n Array.from(columnMap.values()).map(column => ({\n name: column.name,\n type: column.type,\n isValid: columnSelectionValidator\n ? columnSelectionValidator(this, column)\n : false,\n isActive: linkedColumnMap.has(column.name),\n }))\n );\n\n startListeningToSource(table: TableTemplate): void {\n log.debug('startListeningToSource', table);\n\n table.addEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleSourceColumnChange\n );\n table.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n table.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n }\n\n stopListeningToSource(table: TableTemplate): void {\n log.debug('stopListeningToSource', table);\n\n table.removeEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleSourceColumnChange\n );\n table.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n table.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n }\n\n loadModelIfNecessary(): void {\n const { isActive, isLoaded, isLoading } = this.state;\n if (isActive && !isLoaded && !isLoading) {\n this.initModel();\n }\n }\n\n isHidden(): boolean {\n const { glContainer } = this.props;\n const { isHidden } = glContainer;\n return isHidden;\n }\n\n handleColumnSelected(columnName: string): void {\n const { glEventHub } = this.props;\n const { columnMap } = this.state;\n glEventHub.emit(\n ChartEvent.COLUMN_SELECTED,\n this,\n columnMap.get(columnName)\n );\n }\n\n handleColumnMouseEnter({ type, name }: SelectorColumn): void {\n const { columnSelectionValidator } = this.props;\n log.debug('handleColumnMouseEnter', columnSelectionValidator, type, name);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, { type, name });\n }\n\n handleColumnMouseLeave(): void {\n const { columnSelectionValidator } = this.props;\n log.debug('handleColumnMouseLeave', columnSelectionValidator);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n handleDisconnect(): void {\n this.setState({\n error: new Error('Figure disconnected'),\n isDisconnected: true,\n });\n }\n\n handleFilterAdd(columns: InputFilter[]): void {\n for (let i = 0; i < columns.length; i += 1) {\n this.openInputFilter(columns[i]);\n }\n }\n\n handleOpenLinker(): void {\n const {\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n setActiveTool(ToolType.LINKER);\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: undefined });\n this.sendColumnChange();\n this.updateColumnFilters();\n }\n\n handleLoadSuccess(model: ChartModel): void {\n log.debug('handleLoadSuccess');\n\n const { model: prevModel } = this.state;\n this.setState(\n {\n model,\n isLoaded: true,\n },\n () => {\n const { inputFilters, source } = this.props;\n const { filterMap, isLinked } = this.state;\n if (model !== prevModel) {\n this.sendColumnChange();\n this.updateColumnFilters();\n this.updateInputFilters(\n inputFilters,\n filterMap.size > 0 || model.isFilterRequired()\n );\n if (source && isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n );\n }\n\n handleLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error('handleLoadError', error);\n this.setState({ error, isLoading: false });\n }\n\n handleSourceColumnChange(): void {\n this.updateModelFromSource();\n }\n\n handleSourceFilterChange(): void {\n this.updateModelFromSource();\n }\n\n handleSourceSortChange(): void {\n this.updateModelFromSource();\n }\n\n updateModelFromSource(): void {\n const { metadata, source } = this.props;\n const { isLinked, model } = this.state;\n if (!isLinked || !model || !source) {\n log.debug2('updateModelFromSource ignoring', isLinked, model, source);\n return;\n }\n\n // By now the model has already been loaded, which is the only other cancelable thing in pending\n this.pending.cancel();\n if (isChartPanelTableMetadata(metadata)) {\n const { settings } = metadata;\n this.pending\n .add(\n dh.plot.Figure.create(\n (ChartUtils.makeFigureSettings(\n settings,\n source\n ) as unknown) as FigureDescriptor\n )\n )\n .then(figure => {\n if (isFigureChartModel(model)) {\n model.setFigure(figure);\n }\n })\n .catch(this.handleLoadError);\n }\n\n this.updatePanelState();\n }\n\n updatePanelState(): void {\n const { sourcePanel } = this.props;\n const { panelState, filterValueMap, settings } = this.state;\n let { tableSettings } = panelState ?? {};\n if (sourcePanel) {\n // Right now just update the panel state from the source\n // If the source isn't available, just keep the state that's already saved\n if (\n hasInputFilter(sourcePanel.props) &&\n hasPanelState(sourcePanel.state)\n ) {\n const { inputFilters } = sourcePanel.props;\n const { panelState: sourcePanelState } = sourcePanel.state;\n if (sourcePanelState != null) {\n tableSettings = IrisGridUtils.extractTableSettings(\n sourcePanelState,\n inputFilters\n );\n }\n }\n }\n\n // eslint-disable-next-line react/no-unused-state\n this.setState({\n panelState: {\n settings,\n tableSettings,\n filterValueMap: Array.from(filterValueMap),\n },\n });\n }\n\n handleError(): void {\n // Don't want to set an error state, because the user can fix a chart error within the chart itself.\n // We're not loading anymore either so stop showing the spinner so the user can actually click those buttons.\n this.setState({ isLoading: false });\n }\n\n handleResize(): void {\n this.updateChart();\n }\n\n handleSettingsChanged(update: Partial<Settings>): void {\n this.setState(({ settings: prevSettings }) => {\n const settings = {\n ...prevSettings,\n ...update,\n };\n log.debug('Updated settings', settings);\n return { settings };\n });\n }\n\n handleHide(): void {\n this.setActive(false);\n }\n\n handleShow(): void {\n this.setActive(true);\n }\n\n handleTabBlur(): void {\n this.setActive(false);\n }\n\n handleTabFocus(): void {\n const isHidden = this.isHidden();\n this.setActive(!isHidden);\n }\n\n handleUpdate(): void {\n this.setState({ isLoading: false });\n }\n\n handleClearAllFilters(): void {\n // nuke link filter and input filter map\n // input filters only clear themselves if they are not yet empty\n this.setState({\n filterValueMap: new Map(),\n filterMap: new Map(),\n });\n this.updatePanelState();\n }\n\n /**\n * Create an input filter panel for the provided column\n * @param column The column to create the input filter for\n */\n openInputFilter(column: InputFilter): void {\n const { glEventHub } = this.props;\n const { name, type } = column;\n glEventHub.emit(InputFilterEvent.OPEN_INPUT, {\n title: `${name} Filter`,\n panelState: {\n name,\n type,\n isValueShown: true,\n },\n createNewStack: true,\n focusElement: 'input',\n });\n }\n\n setActive(isActive: boolean): void {\n this.setState({ isActive }, () => {\n if (isActive) {\n this.loadModelIfNecessary();\n this.updateChart();\n }\n });\n }\n\n sendColumnChange(): void {\n const { model } = this.state;\n if (!model) {\n return;\n }\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMNS_CHANGED,\n this,\n Array.from(model.getFilterColumnMap().values())\n );\n }\n\n getCoordinateForColumn(columnName: ColumnName): [number, number] | null {\n const className = ChartColumnSelectorOverlay.makeButtonClassName(\n columnName\n );\n\n if (!this.panelContainer.current) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(`.${className}`);\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n /**\n * Set chart filters based on the filter map\n * @param filterMapParam Filter map\n */\n setFilterMap(\n filterMapParam: Map<string, { columnType: string; value: string }>\n ): void {\n log.debug('setFilterMap', filterMapParam);\n this.setState(state => {\n const { columnMap, filterMap } = state;\n let updatedFilterMap: null | Map<string, string> = null;\n const filterValueMap = new Map(state.filterValueMap);\n\n filterMapParam.forEach(({ columnType, value }, columnName) => {\n const column = columnMap.get(columnName);\n if (column == null || column.type !== columnType) {\n return;\n }\n filterValueMap.set(columnName, value);\n if (filterMap.get(columnName) !== value) {\n if (updatedFilterMap === null) {\n updatedFilterMap = new Map(filterMap);\n }\n updatedFilterMap.set(columnName, value);\n }\n });\n\n // Don't update filterMap unless the filters actually changed.\n // Otherwise the chart gets stuck on a spinner\n // because it never gets an update event for unchanged filters.\n return { filterValueMap, filterMap: updatedFilterMap ?? filterMap };\n });\n }\n\n unsetFilterValue(columnName: ColumnName): void {\n this.setState(state => {\n // We want to unset a value unless there's an input filter for it\n // If there's an input filter, then we want to just set it to that value\n // This way if the user has an input filter and a link, when they delete the link the input filter value takes effect\n const { inputFilters } = this.props;\n const { columnMap } = state;\n let { filterMap, filterValueMap } = state;\n if (!filterValueMap.has(columnName)) {\n return null;\n }\n\n filterValueMap = new Map(state.filterValueMap);\n filterValueMap.delete(columnName);\n\n const inputFilterMap = this.getInputFilterColumnMap(\n columnMap,\n inputFilters\n );\n\n if (inputFilterMap.has(columnName)) {\n const filterValue = filterMap.get(columnName);\n const inputFilterValue = inputFilterMap.get(columnName)?.value;\n if (inputFilterValue != null && filterValue !== inputFilterValue) {\n filterMap = new Map(state.filterMap);\n if (inputFilterValue.length > 0) {\n filterMap.set(columnName, inputFilterValue);\n } else {\n filterMap.delete(columnName);\n }\n }\n } else {\n filterMap = new Map(state.filterMap);\n filterMap.delete(columnName);\n }\n return { filterMap, filterValueMap };\n });\n }\n\n updateChangedInputFilters(\n inputFilters: InputFilter[],\n prevInputFilters: InputFilter[]\n ): void {\n const deletedInputFilters = prevInputFilters.filter(\n prevInputFilter =>\n inputFilters.find(\n inputFilter =>\n inputFilter.name === prevInputFilter.name &&\n inputFilter.type === prevInputFilter.type\n ) === undefined\n );\n if (deletedInputFilters.length > 0) {\n this.deleteInputFilters(deletedInputFilters);\n }\n\n const changedInputFilters = inputFilters.filter(\n inputFilter => !prevInputFilters.includes(inputFilter)\n );\n if (changedInputFilters.length > 0) {\n this.updateInputFilters(changedInputFilters);\n }\n }\n\n updateInputFilters(inputFilters: InputFilter[], forceUpdate = false): void {\n this.setState(state => {\n const { columnMap } = state;\n const filterValueMap = new Map(state.filterValueMap);\n const filterMap = new Map(state.filterMap);\n const update = forceUpdate ? { filterMap, filterValueMap } : {};\n\n for (let i = 0; i < inputFilters.length; i += 1) {\n const { name, type, value } = inputFilters[i];\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (value != null && filterMap.get(name) !== value) {\n if (value === '') {\n filterMap.delete(name);\n } else {\n filterMap.set(name, value);\n }\n update.filterMap = filterMap;\n }\n\n if (filterValueMap.has(name)) {\n // Need to unset whatever the linked value was - if they want that value again, they need to double click the link again\n filterValueMap.delete(name);\n update.filterValueMap = filterValueMap;\n }\n }\n }\n\n log.debug('updateInputFilters', update);\n return update as unknown;\n });\n }\n\n deleteInputFilters(inputFilters: InputFilter[], forceUpdate = false): void {\n this.setState(state => {\n const { columnMap, filterValueMap } = state;\n const filterMap = new Map(state.filterMap);\n let needsUpdate = forceUpdate;\n\n for (let i = 0; i < inputFilters.length; i += 1) {\n const { name, type } = inputFilters[i];\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (filterMap.has(name)) {\n const filterValue = filterMap.get(name);\n if (filterValueMap.has(name)) {\n const linkValue = filterValueMap.get(name);\n if (linkValue !== filterValue && linkValue != null) {\n needsUpdate = true;\n filterMap.set(name, linkValue);\n }\n } else {\n needsUpdate = true;\n filterMap.delete(name);\n }\n }\n }\n }\n\n log.debug('deleteInputFilters', needsUpdate);\n return needsUpdate ? { filterMap } : null;\n });\n }\n\n updateColumnFilters(): void {\n this.setState(({ model }) => {\n if (!model) {\n return null;\n }\n\n return { columnMap: model.getFilterColumnMap() };\n });\n }\n\n updateFilters(): void {\n const { columnMap, filterMap, model } = this.state;\n assertNotNull(model);\n const waitingInputMap = this.getWaitingInputMap(\n model.isFilterRequired(),\n columnMap,\n filterMap\n );\n model.setFilter(filterMap);\n\n if (filterMap.size > 0 && waitingInputMap.size === 0) {\n const defaultTitle = model.getDefaultTitle();\n const filterTitle = TextUtils.join(\n Array.from(filterMap.entries()).map(\n ([name, value]) => `${name}: ${value}`\n )\n );\n if (defaultTitle) {\n model.setTitle(\n `${defaultTitle}<br><span style=\"font-size: smaller\">${filterTitle}</span>`\n );\n } else {\n model.setTitle(filterTitle);\n }\n\n log.debug2('updateFilters filters set', filterMap);\n this.setState({ isLoading: true });\n } else {\n log.debug2('updateFilters waiting on inputs', waitingInputMap);\n model.setTitle(model.getDefaultTitle());\n this.setState({ isLoading: false });\n }\n\n this.updatePanelState();\n }\n\n /**\n * Removes any set filter values that are no longer part of the model\n */\n pruneFilterMaps(): void {\n this.setState(state => {\n const { columnMap } = state;\n const filterMap = new Map(state.filterMap);\n const filterValueMap = new Map(state.filterValueMap);\n const newState: Pick<\n Partial<ChartPanelState>,\n 'filterMap' | 'filterValueMap'\n > = {};\n\n state.filterValueMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterValueMap.delete(name);\n newState.filterValueMap = filterValueMap;\n }\n });\n state.filterMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterMap.delete(name);\n newState.filterMap = filterMap;\n }\n });\n return newState as unknown;\n });\n }\n\n updateChart(): void {\n if (this.chart.current) {\n this.chart.current.updateDimensions();\n }\n }\n\n render(): ReactElement {\n const {\n columnSelectionValidator,\n glContainer,\n glEventHub,\n inputFilters,\n isLinkerActive,\n links,\n metadata,\n settings,\n } = this.props;\n const {\n columnMap,\n filterMap,\n error,\n model,\n isActive,\n isDisconnected,\n isLoaded,\n isLoading,\n } = this.state;\n let name;\n if (isChartPanelTableMetadata(metadata)) {\n name = metadata.table;\n } else {\n name = metadata.figure;\n }\n const inputFilterMap = this.getInputFilterColumnMap(\n columnMap,\n inputFilters\n );\n const linkedColumnMap = this.getLinkedColumnMap(columnMap, links);\n const waitingInputMap =\n model != null\n ? this.getWaitingInputMap(\n model.isFilterRequired(),\n columnMap,\n filterMap\n )\n : new Map();\n const waitingFilterMap =\n model != null\n ? this.getWaitingFilterMap(\n model.isFilterRequired(),\n columnMap,\n filterMap,\n linkedColumnMap,\n inputFilterMap\n )\n : new Map();\n const errorMessage =\n error != null ? `Unable to open chart. ${error}` : undefined;\n const isWaitingForFilter = waitingInputMap.size > 0;\n const isSelectingColumn = columnMap.size > 0 && isLinkerActive;\n return (\n <WidgetPanel\n className={classNames('iris-chart-panel', {\n 'input-required': isWaitingForFilter,\n })}\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onHide={this.handleHide}\n onClearAllFilters={this.handleClearAllFilters}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabBlur={this.handleTabBlur}\n onTabFocus={this.handleTabFocus}\n errorMessage={errorMessage}\n isDisconnected={isDisconnected}\n isLoading={isLoading}\n isLoaded={isLoaded}\n widgetName={name}\n widgetType=\"Chart\"\n >\n <div\n ref={this.panelContainer}\n className=\"chart-panel-container h-100 w-100\"\n >\n <div className=\"chart-container h-100 w-100\">\n {isLoaded && model && (\n <Chart\n isActive={isActive}\n model={model}\n settings={settings}\n ref={this.chart}\n onDisconnect={this.handleDisconnect}\n onReconnect={this.handleReconnect}\n onUpdate={this.handleUpdate}\n onError={this.handleError}\n onSettingsChanged={this.handleSettingsChanged}\n />\n )}\n </div>\n <CSSTransition\n in={isWaitingForFilter && !isSelectingColumn && !isLoading}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <ChartFilterOverlay\n inputFilterMap={inputFilterMap}\n linkedColumnMap={linkedColumnMap}\n onAdd={this.handleFilterAdd}\n onOpenLinker={this.handleOpenLinker}\n columnMap={columnMap}\n waitingFilterMap={waitingFilterMap}\n waitingInputMap={waitingInputMap}\n />\n </CSSTransition>\n <CSSTransition\n in={isSelectingColumn}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <ChartColumnSelectorOverlay\n columns={this.getSelectorColumns(\n columnMap,\n linkedColumnMap,\n columnSelectionValidator\n )}\n onColumnSelected={this.handleColumnSelected}\n onMouseEnter={this.handleColumnMouseEnter}\n onMouseLeave={this.handleColumnMouseLeave}\n />\n </CSSTransition>\n </div>\n </WidgetPanel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string; metadata: { sourcePanelId: string } }\n) => {\n const { localDashboardId, metadata } = ownProps;\n\n let sourcePanelId;\n if (metadata != null) {\n sourcePanelId = metadata.sourcePanelId;\n }\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const openedPanelMap = getOpenedPanelMapForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER && isolatedLinkerPanelId === undefined;\n return {\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n isLinkerActive,\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n source:\n sourcePanelId != null ? panelTableMap.get(sourcePanelId) : undefined,\n sourcePanel:\n sourcePanelId != null ? openedPanelMap.get(sourcePanelId) : undefined,\n settings: getSettings(state),\n };\n};\n\nexport default connect(\n mapStateToProps,\n {\n setActiveTool: setActiveToolAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n },\n null,\n { forwardRef: true }\n)(ChartPanel);\n"],"mappings":";;;;;;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAA0D,OAA1D;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,OAAP,MAAoB,aAApB;AACA,SAASC,OAAT,QAAwB,aAAxB;AACA,SAASC,aAAT,QAA8B,wBAA9B;AACA,OAAOC,QAAP,MAAqB,iBAArB;AACA,SACEC,KADF,EAIEC,UAJF,EAKEC,kBALF,QAMO,kBANP;AAOA,SACEC,6BADF,EAEEC,WAFF,QAKO,sBALP;AAMA,SAASC,aAAT,QAAuD,sBAAvD;AACA,OAAOC,EAAP,MAIO,uBAJP;AAKA,SAASC,WAAT,QAA4B,uBAA5B;AACA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SACEC,aADF,EAEEC,WAFF,EAIEC,aAAa,IAAIC,mBAJnB,QAMO,kBANP;AAOA,SACEC,aADF,EAEEC,OAFF,EAGEC,YAHF,EAIEC,SAJF,QAKO,kBALP;OASOC,W;OACAC,Q;SACEC,gB,EAAkBC,U;SAEzBC,uC,EACAC,2B,EACAC,oC,EACAC,oB,EACAC,uB,EACAC,iCAAiC,IAAIC,uC;OAEhCC,kB;OACAC,0B;;AAQP,IAAMC,GAAG,GAAGtB,GAAG,CAACuB,MAAJ,CAAW,YAAX,CAAZ;AACA,IAAMC,qBAAqB,GAAG,GAA9B;AAQA,OAAO,SAASC,yBAAT,CACLC,QADK,EAEgC;EACrC,OAAQA,QAAD,CAAsCC,QAAtC,KAAmDC,SAA1D;AACD;;AA4GD,SAASC,cAAT,CACEC,KADF,EAEyD;EACvD,OACGA,KAAD,CAAwDC,YAAxD,IAAwE,IAD1E;AAGD;;AAED,SAASC,aAAT,CACEF,KADF,EAE+C;EAC7C,OAAQA,KAAD,CAA8CG,UAA9C,IAA4D,IAAnE;AACD;;AAED,OAAO,MAAMC,UAAN,SAAyBhD,SAAzB,CAAqE;EAc1EiD,WAAW,CAACC,KAAD,EAAyB;IAClC,MAAMA,KAAN;;IADkC;;IAAA;;IAAA;;IAAA,4CAyJfhD,OAAO,CAC1B,CACEiD,gBADF,EAEEC,SAFF,EAGEC,SAHF,KAIkD;MAChD,IAAI,CAACF,gBAAL,EAAuB;QACrB,OAAO,IAAIG,GAAJ,EAAP;MACD;;MACD,IAAMC,eAAe,GAAG,IAAID,GAAJ,CAAQF,SAAR,CAAxB;MACAC,SAAS,CAACG,OAAV,CAAkB,CAACC,MAAD,EAASC,IAAT,KAAkB;QAClCH,eAAe,CAACI,MAAhB,CAAuBD,IAAvB;MACD,CAFD;MAGA,OAAOH,eAAP;IACD,CAdyB,CAzJQ;;IAAA,6CA0KdrD,OAAO,CAC3B,CACEiD,gBADF,EAEEC,SAFF,EAGEC,SAHF,EAIEO,eAJF,EAKEC,cALF,KAMK;MACH,IAAI,CAACV,gBAAL,EAAuB;QACrB,OAAO,IAAIG,GAAJ,EAAP;MACD;;MAED,IAAMQ,gBAAgB,GAAG,IAAIR,GAAJ,CAAQF,SAAR,CAAzB;MACAC,SAAS,CAACG,OAAV,CAAkB,CAACC,MAAD,EAASC,IAAT,KAAkB;QAClCI,gBAAgB,CAACH,MAAjB,CAAwBD,IAAxB;MACD,CAFD;MAGAG,cAAc,CAACL,OAAf,CAAuB,CAACO,KAAD,EAAQL,IAAR,KAAiB;QACtCI,gBAAgB,CAACH,MAAjB,CAAwBD,IAAxB;MACD,CAFD;MAGAE,eAAe,CAACJ,OAAhB,CAAwB,CAACQ,MAAD,EAASN,IAAT,KAAkB;QACxCI,gBAAgB,CAACH,MAAjB,CAAwBD,IAAxB;MACD,CAFD;MAGA,OAAOI,gBAAP;IACD,CAvB0B,CA1KO;;IAAA,iDAoMV5D,OAAO,CAC/B,CAACkD,SAAD,EAAuBP,YAAvB,KAAuD;MACrD,IAAMgB,cAAc,GAAG,IAAIP,GAAJ,EAAvB;;MACA,KAAK,IAAIW,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpB,YAAY,CAACqB,MAAjC,EAAyCD,CAAC,IAAI,CAA9C,EAAiD;QAC/C,IAAME,WAAW,GAAGtB,YAAY,CAACoB,CAAD,CAAhC;QACA,IAAM;UAAEP,IAAF;UAAQU;QAAR,IAAiBD,WAAvB;QACA,IAAMH,MAAM,GAAGZ,SAAS,CAACiB,GAAV,CAAcX,IAAd,CAAf;;QACA,IAAIM,MAAM,IAAI,IAAV,IAAkBA,MAAM,CAACI,IAAP,KAAgBA,IAAtC,EAA4C;UAC1CP,cAAc,CAACS,GAAf,CAAmBZ,IAAnB,EAAyBS,WAAzB;QACD;MACF;;MACD,OAAON,cAAP;IACD,CAZ8B,CApMG;;IAAA,4CAmNf3D,OAAO,CAAC,CAACkD,SAAD,EAAuBmB,KAAvB,KAAyC;MACpE,IAAMX,eAAe,GAAG,IAAIN,GAAJ,EAAxB;MACA,IAAMkB,OAAO,GAAG9D,WAAW,CAAC+D,cAAZ,CAA2B,IAA3B,CAAhB;;MACA,KAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGM,KAAK,CAACL,MAA1B,EAAkCD,CAAC,IAAI,CAAvC,EAA0C;QACxC,IAAMS,IAAI,GAAGH,KAAK,CAACN,CAAD,CAAlB;QACA,IAAIU,UAAU,GAAG,IAAjB;;QACA,IACED,IAAI,CAACE,KAAL,IAAc,IAAd,IACAF,IAAI,CAACE,KAAL,CAAWJ,OAAX,KAAuBA,OADvB,IAEApB,SAAS,CAACyB,GAAV,CAAcH,IAAI,CAACE,KAAL,CAAWD,UAAzB,CAHF,EAIE;UACAA,UAAU,GAAGD,IAAI,CAACE,KAAL,CAAWD,UAAxB;QACD,CAND,MAMO,IACLD,IAAI,CAACI,GAAL,IACAJ,IAAI,CAACI,GAAL,CAASN,OAAT,KAAqBA,OADrB,IAEApB,SAAS,CAACyB,GAAV,CAAcH,IAAI,CAACI,GAAL,CAASH,UAAvB,CAHK,EAIL;UACAA,UAAU,GAAGD,IAAI,CAACI,GAAL,CAASH,UAAtB;QACD;;QAED,IAAIA,UAAU,IAAI,IAAd,IAAsBvB,SAAS,CAACyB,GAAV,CAAcF,UAAd,CAA1B,EAAqD;UACnD,IAAMX,MAAM,GAAGZ,SAAS,CAACiB,GAAV,CAAcM,UAAd,CAAf;UACAxD,aAAa,CAAC6C,MAAD,CAAb;UACAJ,eAAe,CAACU,GAAhB,CAAoBK,UAApB,EAAgCX,MAAhC;QACD;MACF;;MACD,OAAOJ,eAAP;IACD,CA3B2B,CAnNQ;;IAAA,4CAgPf1D,OAAO,CAC1B,CACEkD,SADF,EAEEQ,eAFF,EAGEmB,wBAHF,KAKEC,KAAK,CAACC,IAAN,CAAW7B,SAAS,CAAC8B,MAAV,EAAX,EAA+BC,GAA/B,CAAmCnB,MAAM,KAAK;MAC5CN,IAAI,EAAEM,MAAM,CAACN,IAD+B;MAE5CU,IAAI,EAAEJ,MAAM,CAACI,IAF+B;MAG5CgB,OAAO,EAAEL,wBAAwB,GAC7BA,wBAAwB,CAAC,IAAD,EAAOf,MAAP,CADK,GAE7B,KALwC;MAM5CqB,QAAQ,EAAEzB,eAAe,CAACiB,GAAhB,CAAoBb,MAAM,CAACN,IAA3B;IANkC,CAAL,CAAzC,CANwB,CAhPQ;;IAGlC,KAAK4B,oBAAL,GAA4B,KAAKA,oBAAL,CAA0BC,IAA1B,CAA+B,IAA/B,CAA5B;IACA,KAAKC,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BD,IAA5B,CAAiC,IAAjC,CAA9B;IACA,KAAKE,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BF,IAA5B,CAAiC,IAAjC,CAA9B;IACA,KAAKG,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBH,IAAtB,CAA2B,IAA3B,CAAxB;IACA,KAAKI,eAAL,GAAuB,KAAKA,eAAL,CAAqBJ,IAArB,CAA0B,IAA1B,CAAvB;IACA,KAAKK,eAAL,GAAuB,KAAKA,eAAL,CAAqBL,IAArB,CAA0B,IAA1B,CAAvB;IACA,KAAKM,UAAL,GAAkB,KAAKA,UAAL,CAAgBN,IAAhB,CAAqB,IAArB,CAAlB;IACA,KAAKO,WAAL,GAAmB,KAAKA,WAAL,CAAiBP,IAAjB,CAAsB,IAAtB,CAAnB;IACA,KAAKQ,eAAL,GAAuB,KAAKA,eAAL,CAAqBR,IAArB,CAA0B,IAA1B,CAAvB;IACA,KAAKS,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBT,IAAvB,CAA4B,IAA5B,CAAzB;IACA,KAAKU,YAAL,GAAoB,KAAKA,YAAL,CAAkBV,IAAlB,CAAuB,IAAvB,CAApB;IACA,KAAKW,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BX,IAA3B,CAAgC,IAAhC,CAA7B;IACA,KAAKY,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBZ,IAAtB,CAA2B,IAA3B,CAAxB;IACA,KAAKa,UAAL,GAAkB,KAAKA,UAAL,CAAgBb,IAAhB,CAAqB,IAArB,CAAlB;IACA,KAAKc,wBAAL,GAAgC,KAAKA,wBAAL,CAA8Bd,IAA9B,CAAmC,IAAnC,CAAhC;IACA,KAAKe,wBAAL,GAAgC,KAAKA,wBAAL,CAA8Bf,IAA9B,CAAmC,IAAnC,CAAhC;IACA,KAAKgB,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BhB,IAA5B,CAAiC,IAAjC,CAA9B;IACA,KAAKiB,aAAL,GAAqB,KAAKA,aAAL,CAAmBjB,IAAnB,CAAwB,IAAxB,CAArB;IACA,KAAKkB,cAAL,GAAsB,KAAKA,cAAL,CAAoBlB,IAApB,CAAyB,IAAzB,CAAtB;IACA,KAAKmB,YAAL,GAAoB,KAAKA,YAAL,CAAkBnB,IAAlB,CAAuB,IAAvB,CAApB;IACA,KAAKoB,qBAAL,GAA6BtG,QAAQ,CACnC,KAAKsG,qBAAL,CAA2BpB,IAA3B,CAAgC,IAAhC,CADmC,EAEnCjD,qBAFmC,CAArC;IAIA,KAAKsE,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BrB,IAA3B,CAAgC,IAAhC,CAA7B;IAEA,KAAKsB,cAAL,gBAAsB9G,KAAK,CAAC+G,SAAN,EAAtB;IACA,KAAKC,KAAL,gBAAahH,KAAK,CAAC+G,SAAN,EAAb;IACA,KAAKE,OAAL,GAAe,IAAI5F,OAAJ,EAAf;IAEA,IAAM;MAAEoB,QAAF;MAAYO;IAAZ,IAA2BG,KAAjC;IACA,IAAM;MAAE+D,cAAc,GAAG,EAAnB;MAAuBxE,QAAQ,GAAG;IAAlC,IAAyCM,UAAzC,aAAyCA,UAAzC,cAAyCA,UAAzC,GAAuD,EAA7D;IAEA,KAAKmE,KAAL,GAAa;MACXzE,QADW;MAEX0E,KAAK,EAAEzE,SAFI;MAGX2C,QAAQ,EAAE,KAHC;MAIX+B,cAAc,EAAE,KAJL;MAKXC,SAAS,EAAE,KALA;MAMXC,QAAQ,EAAE,KANC;MAOXC,QAAQ,EACN/E,QAAQ,IAAI,IAAZ,IACAD,yBAAyB,CAACC,QAAD,CADzB,IAEAA,QAAQ,CAACC,QAFT,IAGAD,QAAQ,CAACC,QAAT,CAAkB8E,QAXT;MAaX;MACA;MACAlE,SAAS,EAAE,IAAIC,GAAJ,CAAQ2D,cAAR,CAfA;MAgBX;MACA;MACAA,cAAc,EAAE,IAAI3D,GAAJ,CAAQ2D,cAAR,CAlBL;MAmBXO,KAAK,EAAE9E,SAnBI;MAoBXU,SAAS,EAAE,IAAIE,GAAJ,EApBA;MAsBX;MACAP;IAvBW,CAAb;EAyBD;;EAED0E,iBAAiB,GAAS;IACxB,IAAI,CAAC,KAAKC,QAAL,EAAL,EAAsB;MACpB,KAAKC,QAAL,CAAc;QAAEtC,QAAQ,EAAE;MAAZ,CAAd;MACA,KAAKuC,SAAL;IACD;EACF;;EAEDC,kBAAkB,CAChBC,SADgB,EAEhBC,SAFgB,EAGV;IACN,IAAM;MAAElF,YAAF;MAAgBmF;IAAhB,IAA2B,KAAK9E,KAAtC;IACA,IAAM;MACJE,SADI;MAEJoE,KAFI;MAGJnE,SAHI;MAIJ4D,cAJI;MAKJM,QALI;MAMJ9E;IANI,IAOF,KAAKyE,KAPT;;IASA,IAAI,CAACM,KAAL,EAAY;MACV;IACD;;IAED,IAAIpE,SAAS,KAAK2E,SAAS,CAAC3E,SAA5B,EAAuC;MACrC,KAAK6E,eAAL;IACD;;IAED,IAAIpF,YAAY,KAAKiF,SAAS,CAACjF,YAA/B,EAA6C;MAC3C,KAAKqF,yBAAL,CAA+BrF,YAA/B,EAA6CiF,SAAS,CAACjF,YAAvD;IACD;;IAED,IAAIQ,SAAS,KAAK0E,SAAS,CAAC1E,SAA5B,EAAuC;MACrC,KAAK8E,aAAL;IACD,CAFD,MAEO,IAAIlB,cAAc,KAAKc,SAAS,CAACd,cAAjC,EAAiD;MACtD,KAAKmB,gBAAL;IACD;;IAED,IAAI3F,QAAQ,KAAKsF,SAAS,CAACtF,QAAvB,IAAmCjC,kBAAkB,CAACgH,KAAD,CAAzD,EAAkE;MAChEA,KAAK,CAACa,cAAN,CAAqB5F,QAArB;MACA,KAAK2F,gBAAL;IACD;;IAED,IAAIb,QAAQ,KAAKQ,SAAS,CAACR,QAA3B,EAAqC;MACnC,IAAIS,MAAJ,EAAY;QACV,IAAIT,QAAJ,EAAc;UACZ,KAAKe,sBAAL,CAA4BN,MAA5B;UACA,KAAKrB,qBAAL;QACD,CAHD,MAGO;UACL,KAAK4B,qBAAL,CAA2BP,MAA3B;QACD;MACF;IACF,CATD,MASO,IAAIT,QAAQ,IAAIS,MAAM,KAAKF,SAAS,CAACE,MAArC,EAA6C;MAClD,IAAIF,SAAS,CAACE,MAAd,EAAsB;QACpB,KAAKO,qBAAL,CAA2BT,SAAS,CAACE,MAArC;MACD;;MACD,IAAIA,MAAJ,EAAY;QACV,KAAKM,sBAAL,CAA4BN,MAA5B;QACA,KAAKrB,qBAAL;MACD;IACF;EACF;;EAED6B,oBAAoB,GAAS;IAC3B,KAAKxB,OAAL,CAAayB,MAAb;IAEA,IAAM;MAAET;IAAF,IAAa,KAAK9E,KAAxB;;IACA,IAAI8E,MAAJ,EAAY;MACV,KAAKO,qBAAL,CAA2BP,MAA3B;IACD;EACF;;EAQDJ,SAAS,GAAS;IAChB,KAAKD,QAAL,CAAc;MAAEN,SAAS,EAAE,IAAb;MAAmBC,QAAQ,EAAE,KAA7B;MAAoCH,KAAK,EAAEzE;IAA3C,CAAd;IAEA,IAAM;MAAEgG;IAAF,IAAgB,KAAKxF,KAA3B;IACA,KAAK8D,OAAL,CACG2B,GADH,CACOD,SAAS,EADhB,EACoBE,QAAQ,IAAI;MAC5BA,QAAQ,CAACC,KAAT;IACD,CAHH,EAIGC,IAJH,CAIQ,KAAK9C,iBAJb,EAIgC,KAAKD,eAJrC;EAKD;;EAyGDuC,sBAAsB,CAACS,KAAD,EAA6B;IACjD3G,GAAG,CAAC4G,KAAJ,CAAU,wBAAV,EAAoCD,KAApC;IAEAA,KAAK,CAACE,gBAAN,CACErI,EAAE,CAACsI,KAAH,CAASC,0BADX,EAEE,KAAK9C,wBAFP;IAIA0C,KAAK,CAACE,gBAAN,CACErI,EAAE,CAACsI,KAAH,CAASE,mBADX,EAEE,KAAK9C,wBAFP;IAIAyC,KAAK,CAACE,gBAAN,CACErI,EAAE,CAACsI,KAAH,CAASG,iBADX,EAEE,KAAK9C,sBAFP;EAID;;EAEDgC,qBAAqB,CAACQ,KAAD,EAA6B;IAChD3G,GAAG,CAAC4G,KAAJ,CAAU,uBAAV,EAAmCD,KAAnC;IAEAA,KAAK,CAACO,mBAAN,CACE1I,EAAE,CAACsI,KAAH,CAASC,0BADX,EAEE,KAAK9C,wBAFP;IAIA0C,KAAK,CAACO,mBAAN,CACE1I,EAAE,CAACsI,KAAH,CAASE,mBADX,EAEE,KAAK9C,wBAFP;IAIAyC,KAAK,CAACO,mBAAN,CACE1I,EAAE,CAACsI,KAAH,CAASG,iBADX,EAEE,KAAK9C,sBAFP;EAID;;EAEDgD,oBAAoB,GAAS;IAC3B,IAAM;MAAElE,QAAF;MAAYiC,QAAZ;MAAsBD;IAAtB,IAAoC,KAAKH,KAA/C;;IACA,IAAI7B,QAAQ,IAAI,CAACiC,QAAb,IAAyB,CAACD,SAA9B,EAAyC;MACvC,KAAKO,SAAL;IACD;EACF;;EAEDF,QAAQ,GAAY;IAClB,IAAM;MAAE8B;IAAF,IAAkB,KAAKtG,KAA7B;IACA,IAAM;MAAEwE;IAAF,IAAe8B,WAArB;IACA,OAAO9B,QAAP;EACD;;EAEDpC,oBAAoB,CAACX,UAAD,EAA2B;IAC7C,IAAM;MAAE8E;IAAF,IAAiB,KAAKvG,KAA5B;IACA,IAAM;MAAEE;IAAF,IAAgB,KAAK8D,KAA3B;IACAuC,UAAU,CAACC,IAAX,CACEhI,UAAU,CAACiI,eADb,EAEE,IAFF,EAGEvG,SAAS,CAACiB,GAAV,CAAcM,UAAd,CAHF;EAKD;;EAEDa,sBAAsB,OAAuC;IAAA,IAAtC;MAAEpB,IAAF;MAAQV;IAAR,CAAsC;IAC3D,IAAM;MAAEqB;IAAF,IAA+B,KAAK7B,KAA1C;IACAd,GAAG,CAAC4G,KAAJ,CAAU,wBAAV,EAAoCjE,wBAApC,EAA8DX,IAA9D,EAAoEV,IAApE;;IACA,IAAI,CAACqB,wBAAL,EAA+B;MAC7B;IACD;;IACDA,wBAAwB,CAAC,IAAD,EAAO;MAAEX,IAAF;MAAQV;IAAR,CAAP,CAAxB;EACD;;EAED+B,sBAAsB,GAAS;IAC7B,IAAM;MAAEV;IAAF,IAA+B,KAAK7B,KAA1C;IACAd,GAAG,CAAC4G,KAAJ,CAAU,wBAAV,EAAoCjE,wBAApC;;IACA,IAAI,CAACA,wBAAL,EAA+B;MAC7B;IACD;;IACDA,wBAAwB,CAAC,IAAD,EAAOrC,SAAP,CAAxB;EACD;;EAEDgD,gBAAgB,GAAS;IACvB,KAAKiC,QAAL,CAAc;MACZR,KAAK,EAAE,IAAIyC,KAAJ,CAAU,qBAAV,CADK;MAEZxC,cAAc,EAAE;IAFJ,CAAd;EAID;;EAEDxB,eAAe,CAACiE,OAAD,EAA+B;IAC5C,KAAK,IAAI5F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4F,OAAO,CAAC3F,MAA5B,EAAoCD,CAAC,IAAI,CAAzC,EAA4C;MAC1C,KAAK6F,eAAL,CAAqBD,OAAO,CAAC5F,CAAD,CAA5B;IACD;EACF;;EAEDkC,gBAAgB,GAAS;IACvB,IAAM;MACJ4D,gBADI;MAEJ9I,aAFI;MAGJe;IAHI,IAIF,KAAKkB,KAJT;IAKAlB,iCAAiC,CAAC+H,gBAAD,EAAmBrH,SAAnB,CAAjC;IACAzB,aAAa,CAACO,QAAQ,CAACwI,MAAV,CAAb;EACD;;EAEDrE,eAAe,GAAS;IACtB,KAAKgC,QAAL,CAAc;MAAEP,cAAc,EAAE,KAAlB;MAAyBD,KAAK,EAAEzE;IAAhC,CAAd;IACA,KAAKuH,gBAAL;IACA,KAAKC,mBAAL;EACD;;EAEDlE,iBAAiB,CAACwB,KAAD,EAA0B;IACzCpF,GAAG,CAAC4G,KAAJ,CAAU,mBAAV;IAEA,IAAM;MAAExB,KAAK,EAAE2C;IAAT,IAAuB,KAAKjD,KAAlC;IACA,KAAKS,QAAL,CACE;MACEH,KADF;MAEEF,QAAQ,EAAE;IAFZ,CADF,EAKE,MAAM;MACJ,IAAM;QAAEzE,YAAF;QAAgBmF;MAAhB,IAA2B,KAAK9E,KAAtC;MACA,IAAM;QAAEG,SAAF;QAAakE;MAAb,IAA0B,KAAKL,KAArC;;MACA,IAAIM,KAAK,KAAK2C,SAAd,EAAyB;QACvB,KAAKF,gBAAL;QACA,KAAKC,mBAAL;QACA,KAAKE,kBAAL,CACEvH,YADF,EAEEQ,SAAS,CAACgH,IAAV,GAAiB,CAAjB,IAAsB7C,KAAK,CAACrE,gBAAN,EAFxB;;QAIA,IAAI6E,MAAM,IAAIT,QAAd,EAAwB;UACtB,KAAKe,sBAAL,CAA4BN,MAA5B;UACA,KAAKrB,qBAAL;QACD;MACF;IACF,CApBH;EAsBD;;EAEDZ,eAAe,CAACoB,KAAD,EAAuB;IACpC,IAAI9F,YAAY,CAACiJ,UAAb,CAAwBnD,KAAxB,CAAJ,EAAoC;MAClC;IACD;;IAED/E,GAAG,CAAC+E,KAAJ,CAAU,iBAAV,EAA6BA,KAA7B;IACA,KAAKQ,QAAL,CAAc;MAAER,KAAF;MAASE,SAAS,EAAE;IAApB,CAAd;EACD;;EAEDhB,wBAAwB,GAAS;IAC/B,KAAKM,qBAAL;EACD;;EAEDL,wBAAwB,GAAS;IAC/B,KAAKK,qBAAL;EACD;;EAEDJ,sBAAsB,GAAS;IAC7B,KAAKI,qBAAL;EACD;;EAEDA,qBAAqB,GAAS;IAC5B,IAAM;MAAEnE,QAAF;MAAYwF;IAAZ,IAAuB,KAAK9E,KAAlC;IACA,IAAM;MAAEqE,QAAF;MAAYC;IAAZ,IAAsB,KAAKN,KAAjC;;IACA,IAAI,CAACK,QAAD,IAAa,CAACC,KAAd,IAAuB,CAACQ,MAA5B,EAAoC;MAClC5F,GAAG,CAACmI,MAAJ,CAAW,gCAAX,EAA6ChD,QAA7C,EAAuDC,KAAvD,EAA8DQ,MAA9D;MACA;IACD,CAN2B,CAQ5B;;;IACA,KAAKhB,OAAL,CAAayB,MAAb;;IACA,IAAIlG,yBAAyB,CAACC,QAAD,CAA7B,EAAyC;MACvC,IAAM;QAAEC;MAAF,IAAeD,QAArB;MACA,KAAKwE,OAAL,CACG2B,GADH,CAEI/H,EAAE,CAAC4J,IAAH,CAAQC,MAAR,CAAeC,MAAf,CACGnK,UAAU,CAACoK,kBAAX,CACClI,QADD,EAECuF,MAFD,CADH,CAFJ,EASGc,IATH,CASQ8B,MAAM,IAAI;QACd,IAAIpK,kBAAkB,CAACgH,KAAD,CAAtB,EAA+B;UAC7BA,KAAK,CAACqD,SAAN,CAAgBD,MAAhB;QACD;MACF,CAbH,EAcGE,KAdH,CAcS,KAAK/E,eAdd;IAeD;;IAED,KAAKqC,gBAAL;EACD;;EAEDA,gBAAgB,GAAS;IACvB,IAAM;MAAE2C;IAAF,IAAkB,KAAK7H,KAA7B;IACA,IAAM;MAAEH,UAAF;MAAckE,cAAd;MAA8BxE;IAA9B,IAA2C,KAAKyE,KAAtD;IACA,IAAI;MAAE8D;IAAF,IAAoBjI,UAApB,aAAoBA,UAApB,cAAoBA,UAApB,GAAkC,EAAtC;;IACA,IAAIgI,WAAJ,EAAiB;MACf;MACA;MACA,IACEpI,cAAc,CAACoI,WAAW,CAAC7H,KAAb,CAAd,IACAJ,aAAa,CAACiI,WAAW,CAAC7D,KAAb,CAFf,EAGE;QACA,IAAM;UAAErE;QAAF,IAAmBkI,WAAW,CAAC7H,KAArC;QACA,IAAM;UAAEH,UAAU,EAAEkI;QAAd,IAAmCF,WAAW,CAAC7D,KAArD;;QACA,IAAI+D,gBAAgB,IAAI,IAAxB,EAA8B;UAC5BD,aAAa,GAAGrK,aAAa,CAACuK,oBAAd,CACdD,gBADc,EAEdpI,YAFc,CAAhB;QAID;MACF;IACF,CApBsB,CAsBvB;;;IACA,KAAK8E,QAAL,CAAc;MACZ5E,UAAU,EAAE;QACVN,QADU;QAEVuI,aAFU;QAGV/D,cAAc,EAAEjC,KAAK,CAACC,IAAN,CAAWgC,cAAX;MAHN;IADA,CAAd;EAOD;;EAEDnB,WAAW,GAAS;IAClB;IACA;IACA,KAAK6B,QAAL,CAAc;MAAEN,SAAS,EAAE;IAAb,CAAd;EACD;;EAEDpB,YAAY,GAAS;IACnB,KAAKkF,WAAL;EACD;;EAEDjF,qBAAqB,CAACkF,MAAD,EAAkC;IACrD,KAAKzD,QAAL,CAAc,SAAgC;MAAA,IAA/B;QAAElF,QAAQ,EAAE4I;MAAZ,CAA+B;;MAC5C,IAAM5I,QAAQ,mCACT4I,YADS,GAETD,MAFS,CAAd;;MAIAhJ,GAAG,CAAC4G,KAAJ,CAAU,kBAAV,EAA8BvG,QAA9B;MACA,OAAO;QAAEA;MAAF,CAAP;IACD,CAPD;EAQD;;EAEDoD,UAAU,GAAS;IACjB,KAAKyF,SAAL,CAAe,KAAf;EACD;;EAEDlF,UAAU,GAAS;IACjB,KAAKkF,SAAL,CAAe,IAAf;EACD;;EAED9E,aAAa,GAAS;IACpB,KAAK8E,SAAL,CAAe,KAAf;EACD;;EAED7E,cAAc,GAAS;IACrB,IAAMiB,QAAQ,GAAG,KAAKA,QAAL,EAAjB;IACA,KAAK4D,SAAL,CAAe,CAAC5D,QAAhB;EACD;;EAEDhB,YAAY,GAAS;IACnB,KAAKiB,QAAL,CAAc;MAAEN,SAAS,EAAE;IAAb,CAAd;EACD;;EAEDT,qBAAqB,GAAS;IAC5B;IACA;IACA,KAAKe,QAAL,CAAc;MACZV,cAAc,EAAE,IAAI3D,GAAJ,EADJ;MAEZD,SAAS,EAAE,IAAIC,GAAJ;IAFC,CAAd;IAIA,KAAK8E,gBAAL;EACD;EAED;AACF;AACA;AACA;;;EACE0B,eAAe,CAAC9F,MAAD,EAA4B;IACzC,IAAM;MAAEyF;IAAF,IAAiB,KAAKvG,KAA5B;IACA,IAAM;MAAEQ,IAAF;MAAQU;IAAR,IAAiBJ,MAAvB;IACAyF,UAAU,CAACC,IAAX,CAAgBjI,gBAAgB,CAAC8J,UAAjC,EAA6C;MAC3CC,KAAK,YAAK9H,IAAL,YADsC;MAE3CX,UAAU,EAAE;QACVW,IADU;QAEVU,IAFU;QAGVqH,YAAY,EAAE;MAHJ,CAF+B;MAO3CC,cAAc,EAAE,IAP2B;MAQ3CC,YAAY,EAAE;IAR6B,CAA7C;EAUD;;EAEDL,SAAS,CAACjG,QAAD,EAA0B;IACjC,KAAKsC,QAAL,CAAc;MAAEtC;IAAF,CAAd,EAA4B,MAAM;MAChC,IAAIA,QAAJ,EAAc;QACZ,KAAKkE,oBAAL;QACA,KAAK4B,WAAL;MACD;IACF,CALD;EAMD;;EAEDlB,gBAAgB,GAAS;IACvB,IAAM;MAAEzC;IAAF,IAAY,KAAKN,KAAvB;;IACA,IAAI,CAACM,KAAL,EAAY;MACV;IACD;;IACD,IAAM;MAAEiC;IAAF,IAAiB,KAAKvG,KAA5B;IACAuG,UAAU,CAACC,IAAX,CACEjI,gBAAgB,CAACmK,eADnB,EAEE,IAFF,EAGE5G,KAAK,CAACC,IAAN,CAAWuC,KAAK,CAACqE,kBAAN,GAA2B3G,MAA3B,EAAX,CAHF;EAKD;;EAED4G,sBAAsB,CAACnH,UAAD,EAAkD;IAAA;;IACtE,IAAMoH,SAAS,GAAG5J,0BAA0B,CAAC6J,mBAA3B,CAChBrH,UADgB,CAAlB;;IAIA,IAAI,CAAC,KAAKkC,cAAL,CAAoBoF,OAAzB,EAAkC;MAChC,OAAO,IAAP;IACD;;IAED,IAAMC,OAAO,GAAG,KAAKrF,cAAL,CAAoBoF,OAApB,CAA4BE,aAA5B,YAA8CJ,SAA9C,EAAhB;IACA,IAAMK,IAAI,4BAAGF,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAEG,qBAAT,EAAH,yEAAuC,IAAjD;;IACA,IAAID,IAAI,IAAI,IAAR,IAAgBA,IAAI,CAACE,KAAL,IAAc,CAA9B,IAAmCF,IAAI,CAACG,MAAL,IAAe,CAAtD,EAAyD;MACvD,OAAO,IAAP;IACD;;IACD,IAAMC,CAAC,GAAGJ,IAAI,CAACK,IAAL,GAAYL,IAAI,CAACE,KAAL,GAAa,CAAnC;IACA,IAAMI,CAAC,GAAGN,IAAI,CAACO,MAAf;IACA,OAAO,CAACH,CAAD,EAAIE,CAAJ,CAAP;EACD;EAED;AACF;AACA;AACA;;;EACEE,YAAY,CACVC,cADU,EAEJ;IACNzK,GAAG,CAAC4G,KAAJ,CAAU,cAAV,EAA0B6D,cAA1B;IACA,KAAKlF,QAAL,CAAcT,KAAK,IAAI;MAAA;;MACrB,IAAM;QAAE9D,SAAF;QAAaC;MAAb,IAA2B6D,KAAjC;MACA,IAAI4F,gBAA4C,GAAG,IAAnD;MACA,IAAM7F,cAAc,GAAG,IAAI3D,GAAJ,CAAQ4D,KAAK,CAACD,cAAd,CAAvB;MAEA4F,cAAc,CAACrJ,OAAf,CAAuB,QAAwBmB,UAAxB,KAAuC;QAAA,IAAtC;UAAEoI,UAAF;UAAchJ;QAAd,CAAsC;QAC5D,IAAMC,MAAM,GAAGZ,SAAS,CAACiB,GAAV,CAAcM,UAAd,CAAf;;QACA,IAAIX,MAAM,IAAI,IAAV,IAAkBA,MAAM,CAACI,IAAP,KAAgB2I,UAAtC,EAAkD;UAChD;QACD;;QACD9F,cAAc,CAAC3C,GAAf,CAAmBK,UAAnB,EAA+BZ,KAA/B;;QACA,IAAIV,SAAS,CAACgB,GAAV,CAAcM,UAAd,MAA8BZ,KAAlC,EAAyC;UACvC,IAAI+I,gBAAgB,KAAK,IAAzB,EAA+B;YAC7BA,gBAAgB,GAAG,IAAIxJ,GAAJ,CAAQD,SAAR,CAAnB;UACD;;UACDyJ,gBAAgB,CAACxI,GAAjB,CAAqBK,UAArB,EAAiCZ,KAAjC;QACD;MACF,CAZD,EALqB,CAmBrB;MACA;MACA;;MACA,OAAO;QAAEkD,cAAF;QAAkB5D,SAAS,uBAAEyJ,gBAAF,iEAAsBzJ;MAAjD,CAAP;IACD,CAvBD;EAwBD;;EAED2J,gBAAgB,CAACrI,UAAD,EAA+B;IAC7C,KAAKgD,QAAL,CAAcT,KAAK,IAAI;MACrB;MACA;MACA;MACA,IAAM;QAAErE;MAAF,IAAmB,KAAKK,KAA9B;MACA,IAAM;QAAEE;MAAF,IAAgB8D,KAAtB;MACA,IAAI;QAAE7D,SAAF;QAAa4D;MAAb,IAAgCC,KAApC;;MACA,IAAI,CAACD,cAAc,CAACpC,GAAf,CAAmBF,UAAnB,CAAL,EAAqC;QACnC,OAAO,IAAP;MACD;;MAEDsC,cAAc,GAAG,IAAI3D,GAAJ,CAAQ4D,KAAK,CAACD,cAAd,CAAjB;MACAA,cAAc,CAACtD,MAAf,CAAsBgB,UAAtB;MAEA,IAAMd,cAAc,GAAG,KAAKoJ,uBAAL,CACrB7J,SADqB,EAErBP,YAFqB,CAAvB;;MAKA,IAAIgB,cAAc,CAACgB,GAAf,CAAmBF,UAAnB,CAAJ,EAAoC;QAAA;;QAClC,IAAMuI,WAAW,GAAG7J,SAAS,CAACgB,GAAV,CAAcM,UAAd,CAApB;QACA,IAAMwI,gBAAgB,0BAAGtJ,cAAc,CAACQ,GAAf,CAAmBM,UAAnB,CAAH,wDAAG,oBAAgCZ,KAAzD;;QACA,IAAIoJ,gBAAgB,IAAI,IAApB,IAA4BD,WAAW,KAAKC,gBAAhD,EAAkE;UAChE9J,SAAS,GAAG,IAAIC,GAAJ,CAAQ4D,KAAK,CAAC7D,SAAd,CAAZ;;UACA,IAAI8J,gBAAgB,CAACjJ,MAAjB,GAA0B,CAA9B,EAAiC;YAC/Bb,SAAS,CAACiB,GAAV,CAAcK,UAAd,EAA0BwI,gBAA1B;UACD,CAFD,MAEO;YACL9J,SAAS,CAACM,MAAV,CAAiBgB,UAAjB;UACD;QACF;MACF,CAXD,MAWO;QACLtB,SAAS,GAAG,IAAIC,GAAJ,CAAQ4D,KAAK,CAAC7D,SAAd,CAAZ;QACAA,SAAS,CAACM,MAAV,CAAiBgB,UAAjB;MACD;;MACD,OAAO;QAAEtB,SAAF;QAAa4D;MAAb,CAAP;IACD,CAnCD;EAoCD;;EAEDiB,yBAAyB,CACvBrF,YADuB,EAEvBuK,gBAFuB,EAGjB;IACN,IAAMC,mBAAmB,GAAGD,gBAAgB,CAAC3J,MAAjB,CAC1B6J,eAAe,IACbzK,YAAY,CAAC0K,IAAb,CACEpJ,WAAW,IACTA,WAAW,CAACT,IAAZ,KAAqB4J,eAAe,CAAC5J,IAArC,IACAS,WAAW,CAACC,IAAZ,KAAqBkJ,eAAe,CAAClJ,IAHzC,MAIM1B,SANkB,CAA5B;;IAQA,IAAI2K,mBAAmB,CAACnJ,MAApB,GAA6B,CAAjC,EAAoC;MAClC,KAAKsJ,kBAAL,CAAwBH,mBAAxB;IACD;;IAED,IAAMI,mBAAmB,GAAG5K,YAAY,CAACY,MAAb,CAC1BU,WAAW,IAAI,CAACiJ,gBAAgB,CAACM,QAAjB,CAA0BvJ,WAA1B,CADU,CAA5B;;IAGA,IAAIsJ,mBAAmB,CAACvJ,MAApB,GAA6B,CAAjC,EAAoC;MAClC,KAAKkG,kBAAL,CAAwBqD,mBAAxB;IACD;EACF;;EAEDrD,kBAAkB,CAACvH,YAAD,EAAyD;IAAA,IAA3B8K,WAA2B,uEAAb,KAAa;IACzE,KAAKhG,QAAL,CAAcT,KAAK,IAAI;MACrB,IAAM;QAAE9D;MAAF,IAAgB8D,KAAtB;MACA,IAAMD,cAAc,GAAG,IAAI3D,GAAJ,CAAQ4D,KAAK,CAACD,cAAd,CAAvB;MACA,IAAM5D,SAAS,GAAG,IAAIC,GAAJ,CAAQ4D,KAAK,CAAC7D,SAAd,CAAlB;MACA,IAAM+H,MAAM,GAAGuC,WAAW,GAAG;QAAEtK,SAAF;QAAa4D;MAAb,CAAH,GAAmC,EAA7D;;MAEA,KAAK,IAAIhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpB,YAAY,CAACqB,MAAjC,EAAyCD,CAAC,IAAI,CAA9C,EAAiD;QAC/C,IAAM;UAAEP,IAAF;UAAQU,IAAR;UAAcL;QAAd,IAAwBlB,YAAY,CAACoB,CAAD,CAA1C;QACA,IAAMD,MAAM,GAAGZ,SAAS,CAACiB,GAAV,CAAcX,IAAd,CAAf;;QACA,IAAIM,MAAM,IAAI,IAAV,IAAkBA,MAAM,CAACI,IAAP,KAAgBA,IAAtC,EAA4C;UAC1C,IAAIL,KAAK,IAAI,IAAT,IAAiBV,SAAS,CAACgB,GAAV,CAAcX,IAAd,MAAwBK,KAA7C,EAAoD;YAClD,IAAIA,KAAK,KAAK,EAAd,EAAkB;cAChBV,SAAS,CAACM,MAAV,CAAiBD,IAAjB;YACD,CAFD,MAEO;cACLL,SAAS,CAACiB,GAAV,CAAcZ,IAAd,EAAoBK,KAApB;YACD;;YACDqH,MAAM,CAAC/H,SAAP,GAAmBA,SAAnB;UACD;;UAED,IAAI4D,cAAc,CAACpC,GAAf,CAAmBnB,IAAnB,CAAJ,EAA8B;YAC5B;YACAuD,cAAc,CAACtD,MAAf,CAAsBD,IAAtB;YACA0H,MAAM,CAACnE,cAAP,GAAwBA,cAAxB;UACD;QACF;MACF;;MAED7E,GAAG,CAAC4G,KAAJ,CAAU,oBAAV,EAAgCoC,MAAhC;MACA,OAAOA,MAAP;IACD,CA7BD;EA8BD;;EAEDoC,kBAAkB,CAAC3K,YAAD,EAAyD;IAAA,IAA3B8K,WAA2B,uEAAb,KAAa;IACzE,KAAKhG,QAAL,CAAcT,KAAK,IAAI;MACrB,IAAM;QAAE9D,SAAF;QAAa6D;MAAb,IAAgCC,KAAtC;MACA,IAAM7D,SAAS,GAAG,IAAIC,GAAJ,CAAQ4D,KAAK,CAAC7D,SAAd,CAAlB;MACA,IAAIuK,WAAW,GAAGD,WAAlB;;MAEA,KAAK,IAAI1J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpB,YAAY,CAACqB,MAAjC,EAAyCD,CAAC,IAAI,CAA9C,EAAiD;QAC/C,IAAM;UAAEP,IAAF;UAAQU;QAAR,IAAiBvB,YAAY,CAACoB,CAAD,CAAnC;QACA,IAAMD,MAAM,GAAGZ,SAAS,CAACiB,GAAV,CAAcX,IAAd,CAAf;;QACA,IAAIM,MAAM,IAAI,IAAV,IAAkBA,MAAM,CAACI,IAAP,KAAgBA,IAAtC,EAA4C;UAC1C,IAAIf,SAAS,CAACwB,GAAV,CAAcnB,IAAd,CAAJ,EAAyB;YACvB,IAAMwJ,WAAW,GAAG7J,SAAS,CAACgB,GAAV,CAAcX,IAAd,CAApB;;YACA,IAAIuD,cAAc,CAACpC,GAAf,CAAmBnB,IAAnB,CAAJ,EAA8B;cAC5B,IAAMmK,SAAS,GAAG5G,cAAc,CAAC5C,GAAf,CAAmBX,IAAnB,CAAlB;;cACA,IAAImK,SAAS,KAAKX,WAAd,IAA6BW,SAAS,IAAI,IAA9C,EAAoD;gBAClDD,WAAW,GAAG,IAAd;gBACAvK,SAAS,CAACiB,GAAV,CAAcZ,IAAd,EAAoBmK,SAApB;cACD;YACF,CAND,MAMO;cACLD,WAAW,GAAG,IAAd;cACAvK,SAAS,CAACM,MAAV,CAAiBD,IAAjB;YACD;UACF;QACF;MACF;;MAEDtB,GAAG,CAAC4G,KAAJ,CAAU,oBAAV,EAAgC4E,WAAhC;MACA,OAAOA,WAAW,GAAG;QAAEvK;MAAF,CAAH,GAAmB,IAArC;IACD,CA3BD;EA4BD;;EAED6G,mBAAmB,GAAS;IAC1B,KAAKvC,QAAL,CAAc,SAAe;MAAA,IAAd;QAAEH;MAAF,CAAc;;MAC3B,IAAI,CAACA,KAAL,EAAY;QACV,OAAO,IAAP;MACD;;MAED,OAAO;QAAEpE,SAAS,EAAEoE,KAAK,CAACqE,kBAAN;MAAb,CAAP;IACD,CAND;EAOD;;EAED1D,aAAa,GAAS;IACpB,IAAM;MAAE/E,SAAF;MAAaC,SAAb;MAAwBmE;IAAxB,IAAkC,KAAKN,KAA7C;IACA/F,aAAa,CAACqG,KAAD,CAAb;IACA,IAAMjE,eAAe,GAAG,KAAKuK,kBAAL,CACtBtG,KAAK,CAACrE,gBAAN,EADsB,EAEtBC,SAFsB,EAGtBC,SAHsB,CAAxB;IAKAmE,KAAK,CAACuG,SAAN,CAAgB1K,SAAhB;;IAEA,IAAIA,SAAS,CAACgH,IAAV,GAAiB,CAAjB,IAAsB9G,eAAe,CAAC8G,IAAhB,KAAyB,CAAnD,EAAsD;MACpD,IAAM2D,YAAY,GAAGxG,KAAK,CAACyG,eAAN,EAArB;MACA,IAAMC,WAAW,GAAG5M,SAAS,CAAC6M,IAAV,CAClBnJ,KAAK,CAACC,IAAN,CAAW5B,SAAS,CAAC+K,OAAV,EAAX,EAAgCjJ,GAAhC,CACE;QAAA,IAAC,CAACzB,IAAD,EAAOK,KAAP,CAAD;QAAA,iBAAsBL,IAAtB,eAA+BK,KAA/B;MAAA,CADF,CADkB,CAApB;;MAKA,IAAIiK,YAAJ,EAAkB;QAChBxG,KAAK,CAAC6G,QAAN,WACKL,YADL,oDACyDE,WADzD;MAGD,CAJD,MAIO;QACL1G,KAAK,CAAC6G,QAAN,CAAeH,WAAf;MACD;;MAED9L,GAAG,CAACmI,MAAJ,CAAW,2BAAX,EAAwClH,SAAxC;MACA,KAAKsE,QAAL,CAAc;QAAEN,SAAS,EAAE;MAAb,CAAd;IACD,CAjBD,MAiBO;MACLjF,GAAG,CAACmI,MAAJ,CAAW,iCAAX,EAA8ChH,eAA9C;MACAiE,KAAK,CAAC6G,QAAN,CAAe7G,KAAK,CAACyG,eAAN,EAAf;MACA,KAAKtG,QAAL,CAAc;QAAEN,SAAS,EAAE;MAAb,CAAd;IACD;;IAED,KAAKe,gBAAL;EACD;EAED;AACF;AACA;;;EACEH,eAAe,GAAS;IACtB,KAAKN,QAAL,CAAcT,KAAK,IAAI;MACrB,IAAM;QAAE9D;MAAF,IAAgB8D,KAAtB;MACA,IAAM7D,SAAS,GAAG,IAAIC,GAAJ,CAAQ4D,KAAK,CAAC7D,SAAd,CAAlB;MACA,IAAM4D,cAAc,GAAG,IAAI3D,GAAJ,CAAQ4D,KAAK,CAACD,cAAd,CAAvB;MACA,IAAMqH,QAGL,GAAG,EAHJ;MAKApH,KAAK,CAACD,cAAN,CAAqBzD,OAArB,CAA6B,CAACO,KAAD,EAAQL,IAAR,KAAiB;QAC5C,IAAI,CAACN,SAAS,CAACyB,GAAV,CAAcnB,IAAd,CAAL,EAA0B;UACxBuD,cAAc,CAACtD,MAAf,CAAsBD,IAAtB;UACA4K,QAAQ,CAACrH,cAAT,GAA0BA,cAA1B;QACD;MACF,CALD;MAMAC,KAAK,CAAC7D,SAAN,CAAgBG,OAAhB,CAAwB,CAACO,KAAD,EAAQL,IAAR,KAAiB;QACvC,IAAI,CAACN,SAAS,CAACyB,GAAV,CAAcnB,IAAd,CAAL,EAA0B;UACxBL,SAAS,CAACM,MAAV,CAAiBD,IAAjB;UACA4K,QAAQ,CAACjL,SAAT,GAAqBA,SAArB;QACD;MACF,CALD;MAMA,OAAOiL,QAAP;IACD,CAtBD;EAuBD;;EAEDnD,WAAW,GAAS;IAClB,IAAI,KAAKpE,KAAL,CAAWkF,OAAf,EAAwB;MACtB,KAAKlF,KAAL,CAAWkF,OAAX,CAAmBsC,gBAAnB;IACD;EACF;;EAEDC,MAAM,GAAiB;IACrB,IAAM;MACJzJ,wBADI;MAEJyE,WAFI;MAGJC,UAHI;MAIJ5G,YAJI;MAKJ4L,cALI;MAMJlK,KANI;MAOJ/B,QAPI;MAQJC;IARI,IASF,KAAKS,KATT;IAUA,IAAM;MACJE,SADI;MAEJC,SAFI;MAGJ8D,KAHI;MAIJK,KAJI;MAKJnC,QALI;MAMJ+B,cANI;MAOJE,QAPI;MAQJD;IARI,IASF,KAAKH,KATT;IAUA,IAAIxD,IAAJ;;IACA,IAAInB,yBAAyB,CAACC,QAAD,CAA7B,EAAyC;MACvCkB,IAAI,GAAGlB,QAAQ,CAACuG,KAAhB;IACD,CAFD,MAEO;MACLrF,IAAI,GAAGlB,QAAQ,CAACoI,MAAhB;IACD;;IACD,IAAM/G,cAAc,GAAG,KAAKoJ,uBAAL,CACrB7J,SADqB,EAErBP,YAFqB,CAAvB;IAIA,IAAMe,eAAe,GAAG,KAAK8K,kBAAL,CAAwBtL,SAAxB,EAAmCmB,KAAnC,CAAxB;IACA,IAAMhB,eAAe,GACnBiE,KAAK,IAAI,IAAT,GACI,KAAKsG,kBAAL,CACEtG,KAAK,CAACrE,gBAAN,EADF,EAEEC,SAFF,EAGEC,SAHF,CADJ,GAMI,IAAIC,GAAJ,EAPN;IAQA,IAAMQ,gBAAgB,GACpB0D,KAAK,IAAI,IAAT,GACI,KAAKmH,mBAAL,CACEnH,KAAK,CAACrE,gBAAN,EADF,EAEEC,SAFF,EAGEC,SAHF,EAIEO,eAJF,EAKEC,cALF,CADJ,GAQI,IAAIP,GAAJ,EATN;IAUA,IAAMsL,YAAY,GAChBzH,KAAK,IAAI,IAAT,mCAAyCA,KAAzC,IAAmDzE,SADrD;IAEA,IAAMmM,kBAAkB,GAAGtL,eAAe,CAAC8G,IAAhB,GAAuB,CAAlD;IACA,IAAMyE,iBAAiB,GAAG1L,SAAS,CAACiH,IAAV,GAAiB,CAAjB,IAAsBoE,cAAhD;IACA,oBACE,oBAAC,WAAD;MACE,SAAS,EAAExO,UAAU,CAAC,kBAAD,EAAqB;QACxC,kBAAkB4O;MADsB,CAArB,CADvB;MAIE,cAAc,EAAE,IAJlB;MAKE,WAAW,EAAErF,WALf;MAME,UAAU,EAAEC,UANd;MAOE,MAAM,EAAE,KAAK5D,UAPf;MAQE,iBAAiB,EAAE,KAAKe,qBAR1B;MASE,QAAQ,EAAE,KAAKX,YATjB;MAUE,MAAM,EAAE,KAAKG,UAVf;MAWE,SAAS,EAAE,KAAKI,aAXlB;MAYE,UAAU,EAAE,KAAKC,cAZnB;MAaE,YAAY,EAAEmI,YAbhB;MAcE,cAAc,EAAExH,cAdlB;MAeE,SAAS,EAAEC,SAfb;MAgBE,QAAQ,EAAEC,QAhBZ;MAiBE,UAAU,EAAE5D,IAjBd;MAkBE,UAAU,EAAC;IAlBb,gBAoBE;MACE,GAAG,EAAE,KAAKmD,cADZ;MAEE,SAAS,EAAC;IAFZ,gBAIE;MAAK,SAAS,EAAC;IAAf,GACGS,QAAQ,IAAIE,KAAZ,iBACC,oBAAC,KAAD;MACE,QAAQ,EAAEnC,QADZ;MAEE,KAAK,EAAEmC,KAFT;MAGE,QAAQ,EAAE/E,QAHZ;MAIE,GAAG,EAAE,KAAKsE,KAJZ;MAKE,YAAY,EAAE,KAAKrB,gBALrB;MAME,WAAW,EAAE,KAAKC,eANpB;MAOE,QAAQ,EAAE,KAAKe,YAPjB;MAQE,OAAO,EAAE,KAAKZ,WARhB;MASE,iBAAiB,EAAE,KAAKI;IAT1B,EAFJ,CAJF,eAmBE,oBAAC,aAAD;MACE,EAAE,EAAE2I,kBAAkB,IAAI,CAACC,iBAAvB,IAA4C,CAACzH,SADnD;MAEE,OAAO,EAAExG,WAAW,CAACkO,YAFvB;MAGE,UAAU,EAAC,MAHb;MAIE,YAAY,MAJd;MAKE,aAAa;IALf,gBAOE,oBAAC,kBAAD;MACE,cAAc,EAAElL,cADlB;MAEE,eAAe,EAAED,eAFnB;MAGE,KAAK,EAAE,KAAKgC,eAHd;MAIE,YAAY,EAAE,KAAKO,gBAJrB;MAKE,SAAS,EAAE/C,SALb;MAME,gBAAgB,EAAEU,gBANpB;MAOE,eAAe,EAAEP;IAPnB,EAPF,CAnBF,eAoCE,oBAAC,aAAD;MACE,EAAE,EAAEuL,iBADN;MAEE,OAAO,EAAEjO,WAAW,CAACkO,YAFvB;MAGE,UAAU,EAAC,MAHb;MAIE,YAAY,MAJd;MAKE,aAAa;IALf,gBAOE,oBAAC,0BAAD;MACE,OAAO,EAAE,KAAKC,kBAAL,CACP5L,SADO,EAEPQ,eAFO,EAGPmB,wBAHO,CADX;MAME,gBAAgB,EAAE,KAAKO,oBANzB;MAOE,YAAY,EAAE,KAAKE,sBAPrB;MAQE,YAAY,EAAE,KAAKC;IARrB,EAPF,CApCF,CApBF,CADF;EA8ED;;AA78ByE;;gBAA/DzC,U,kBACW;EACpB+B,wBAAwB,EAAE,IADN;EAEpB0J,cAAc,EAAE,KAFI;EAGpBzG,MAAM,EAAE,IAHY;EAIpB+C,WAAW,EAAE,IAJO;EAKpBhI,UAAU,EAAE,IALQ;EAMpBN,QAAQ,EAAE;AANU,C;;gBADXO,U,iBAUU,Y;;gBAVVA,U,eAYQ,Y;;AAo8BrB,IAAMiM,eAAe,GAAG,CACtB/H,KADsB,EAEtBgI,QAFsB,KAGnB;EACH,IAAM;IAAEnF,gBAAF;IAAoBvH;EAApB,IAAiC0M,QAAvC;EAEA,IAAIC,aAAJ;;EACA,IAAI3M,QAAQ,IAAI,IAAhB,EAAsB;IACpB2M,aAAa,GAAG3M,QAAQ,CAAC2M,aAAzB;EACD;;EACD,IAAMC,aAAa,GAAGrN,uBAAuB,CAACmF,KAAD,EAAQ6C,gBAAR,CAA7C;EACA,IAAMsF,cAAc,GAAG5O,6BAA6B,CAACyG,KAAD,EAAQ6C,gBAAR,CAApD;EACA,IAAMuF,UAAU,GAAGvO,aAAa,CAACmG,KAAD,CAAhC;EACA,IAAMqI,qBAAqB,GAAG1N,oCAAoC,CAChEqF,KADgE,EAEhE6C,gBAFgE,CAAlE;EAIA,IAAM0E,cAAc,GAClBa,UAAU,KAAK9N,QAAQ,CAACwI,MAAxB,IAAkCuF,qBAAqB,KAAK7M,SAD9D;EAEA,OAAO;IACLqC,wBAAwB,EAAEpD,uCAAuC,CAC/DuF,KAD+D,EAE/D6C,gBAF+D,CAD5D;IAKL0E,cALK;IAML5L,YAAY,EAAEjB,2BAA2B,CAACsF,KAAD,EAAQ6C,gBAAR,CANpC;IAOLxF,KAAK,EAAEzC,oBAAoB,CAACoF,KAAD,EAAQ6C,gBAAR,CAPtB;IAQL/B,MAAM,EACJmH,aAAa,IAAI,IAAjB,GAAwBC,aAAa,CAAC/K,GAAd,CAAkB8K,aAAlB,CAAxB,GAA2DzM,SATxD;IAULqI,WAAW,EACToE,aAAa,IAAI,IAAjB,GAAwBE,cAAc,CAAChL,GAAf,CAAmB8K,aAAnB,CAAxB,GAA4DzM,SAXzD;IAYLD,QAAQ,EAAEzB,WAAW,CAACkG,KAAD;EAZhB,CAAP;AAcD,CAjCD;;AAmCA,eAAe/G,OAAO,CACpB8O,eADoB,EAEpB;EACEhO,aAAa,EAAEC,mBADjB;EAEEc,iCAAiC,EAAEC;AAFrC,CAFoB,EAMpB,IANoB,EAOpB;EAAEuN,UAAU,EAAE;AAAd,CAPoB,CAAP,CAQbxM,UARa,CAAf"}
|
|
1
|
+
{"version":3,"file":"ChartPanel.js","names":["React","Component","classNames","memoize","connect","CSSTransition","debounce","Chart","ChartUtils","isFigureChartModel","getOpenedPanelMapForDashboard","LayoutUtils","IrisGridUtils","dh","ThemeExport","Log","getActiveTool","getSettings","setActiveTool","setActiveToolAction","assertNotNull","Pending","PromiseUtils","TextUtils","WidgetPanel","ToolType","InputFilterEvent","ChartEvent","getColumnSelectionValidatorForDashboard","getInputFiltersForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","ChartFilterOverlay","ChartColumnSelectorOverlay","log","module","UPDATE_MODEL_DEBOUNCE","isChartPanelTableMetadata","metadata","settings","undefined","hasInputFilter","panel","inputFilters","hasPanelState","panelState","ChartPanel","constructor","props","isFilterRequired","columnMap","filterMap","Map","waitingInputMap","forEach","filter","name","delete","linkedColumnMap","inputFilterMap","waitingFilterMap","value","column","i","length","inputFilter","type","get","set","links","panelId","getIdFromPanel","link","columnName","start","has","end","columnSelectionValidator","Array","from","values","map","isValid","isActive","handleColumnSelected","bind","handleColumnMouseEnter","handleColumnMouseLeave","handleDisconnect","handleReconnect","handleFilterAdd","handleHide","handleError","handleLoadError","handleLoadSuccess","handleResize","handleSettingsChanged","handleOpenLinker","handleShow","handleSourceColumnChange","handleSourceFilterChange","handleSourceSortChange","handleTabBlur","handleTabFocus","handleUpdate","updateModelFromSource","handleClearAllFilters","panelContainer","createRef","chart","pending","filterValueMap","state","error","isDisconnected","isLoading","isLoaded","isLinked","model","componentDidMount","isHidden","setState","initModel","componentDidUpdate","prevProps","prevState","source","pruneFilterMaps","updateChangedInputFilters","updateFilters","updatePanelState","updateSettings","startListeningToSource","stopListeningToSource","componentWillUnmount","cancel","makeModel","add","resolved","close","then","table","debug","addEventListener","Table","EVENT_CUSTOMCOLUMNSCHANGED","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","removeEventListener","loadModelIfNecessary","glContainer","glEventHub","emit","COLUMN_SELECTED","Error","columns","openInputFilter","localDashboardId","LINKER","sendColumnChange","updateColumnFilters","prevModel","updateInputFilters","size","isCanceled","debug2","plot","Figure","create","makeFigureSettings","figure","setFigure","catch","sourcePanel","tableSettings","sourcePanelState","extractTableSettings","updateChart","update","prevSettings","setActive","OPEN_INPUT","title","isValueShown","createNewStack","focusElement","COLUMNS_CHANGED","getFilterColumnMap","getCoordinateForColumn","className","makeButtonClassName","current","element","querySelector","rect","getBoundingClientRect","width","height","x","left","y","bottom","setFilterMap","filterMapParam","updatedFilterMap","columnType","unsetFilterValue","getInputFilterColumnMap","filterValue","inputFilterValue","prevInputFilters","deletedInputFilters","prevInputFilter","find","deleteInputFilters","changedInputFilters","includes","forceUpdate","needsUpdate","linkValue","getWaitingInputMap","setFilter","defaultTitle","getDefaultTitle","filterTitle","join","entries","setTitle","newState","updateDimensions","render","isLinkerActive","getLinkedColumnMap","getWaitingFilterMap","errorMessage","isWaitingForFilter","isSelectingColumn","transitionMs","getSelectorColumns","mapStateToProps","ownProps","sourcePanelId","panelTableMap","openedPanelMap","activeTool","isolatedLinkerPanelId","forwardRef"],"sources":["../../src/panels/ChartPanel.tsx"],"sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport { CSSTransition } from 'react-transition-group';\nimport debounce from 'lodash.debounce';\nimport {\n Chart,\n ChartModel,\n ChartModelSettings,\n ChartUtils,\n isFigureChartModel,\n} from '@deephaven/chart';\nimport {\n getOpenedPanelMapForDashboard,\n LayoutUtils,\n PanelComponent,\n PanelProps,\n} from '@deephaven/dashboard';\nimport { IrisGridUtils, InputFilter, ColumnName } from '@deephaven/iris-grid';\nimport dh, {\n FigureDescriptor,\n SeriesPlotStyle,\n TableTemplate,\n} from '@deephaven/jsapi-shim';\nimport { ThemeExport } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getSettings,\n RootState,\n setActiveTool as setActiveToolAction,\n WorkspaceSettings,\n} from '@deephaven/redux';\nimport {\n assertNotNull,\n Pending,\n PromiseUtils,\n TextUtils,\n} from '@deephaven/utils';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport { ModelIndex } from '@deephaven/grid';\nimport { AdvancedFilterOptions, SortDirection } from '@deephaven/jsapi-utils';\nimport WidgetPanel from './WidgetPanel';\nimport ToolType from '../linker/ToolType';\nimport { InputFilterEvent, ChartEvent } from '../events';\nimport {\n getColumnSelectionValidatorForDashboard,\n getInputFiltersForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n} from '../redux';\nimport ChartFilterOverlay, { ColumnMap } from './ChartFilterOverlay';\nimport ChartColumnSelectorOverlay, {\n SelectorColumn,\n} from './ChartColumnSelectorOverlay';\nimport './ChartPanel.scss';\nimport { Link } from '../linker/LinkerUtils';\nimport { PanelState as IrisGridPanelState } from './IrisGridPanel';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst log = Log.module('ChartPanel');\nconst UPDATE_MODEL_DEBOUNCE = 150;\n\nexport type InputFilterMap = Map<string, InputFilter>;\n\nexport type FilterMap = Map<string, string>;\n\nexport type LinkedColumnMap = Map<string, { name: string; type: string }>;\n\nexport function isChartPanelTableMetadata(\n metadata: ChartPanelMetadata\n): metadata is ChartPanelTableMetadata {\n return (metadata as ChartPanelTableMetadata).settings !== undefined;\n}\nexport type ChartPanelFigureMetadata = {\n figure: string;\n};\n\nexport type ChartPanelTableMetadata = {\n table: string;\n sourcePanelId: string;\n settings: {\n isLinked: boolean;\n title: string;\n xAxis: string;\n series: string[];\n type: keyof SeriesPlotStyle;\n };\n tableSettings: ChartPanelTableSettings;\n};\n\nexport type ChartPanelMetadata =\n | ChartPanelFigureMetadata\n | ChartPanelTableMetadata;\n\ntype Settings = Record<string, unknown>;\n\nexport interface ChartPanelTableSettings {\n quickFilters?: [\n ModelIndex,\n {\n text: string;\n }\n ][];\n advancedFilters?: [\n ModelIndex,\n {\n options: AdvancedFilterOptions;\n }\n ][];\n inputFilters?: InputFilter[];\n sorts?: {\n column: ModelIndex;\n isAbs: boolean;\n direction: SortDirection;\n }[];\n partition?: unknown;\n partitionColumn?: string;\n}\nexport interface GLChartPanelState {\n filterValueMap: [string, string][];\n settings: Partial<ChartModelSettings>;\n tableSettings: ChartPanelTableSettings;\n irisGridState?: {\n advancedFilters: unknown;\n quickFilters: unknown;\n sorts: unknown;\n };\n irisGridPanelState?: {\n partitionColumn: string;\n partition: unknown;\n };\n table?: string;\n figure?: string;\n}\nexport interface ChartPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n\n metadata: ChartPanelMetadata;\n /** Function to build the ChartModel used by this ChartPanel. Can return a promise. */\n makeModel: () => Promise<ChartModel>;\n inputFilters: InputFilter[];\n links: Link[];\n localDashboardId: string;\n isLinkerActive: boolean;\n source?: TableTemplate;\n sourcePanel?: PanelComponent;\n columnSelectionValidator?: ColumnSelectionValidator;\n setActiveTool: (tool: string) => void;\n setDashboardIsolatedLinkerPanelId: (\n id: string,\n secondParam: undefined\n ) => void;\n\n panelState: GLChartPanelState;\n settings: Partial<WorkspaceSettings>;\n}\n\ninterface ChartPanelState {\n settings: Partial<ChartModelSettings>;\n error?: unknown;\n isActive: boolean;\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isLinked: boolean;\n\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: Map<string, string>;\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: Map<string, string>;\n model?: ChartModel;\n columnMap: ColumnMap;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: GLChartPanelState;\n}\n\nfunction hasInputFilter(\n panel: PanelProps\n): panel is PanelProps & { inputFilters: InputFilter[] } {\n return (\n (panel as PanelProps & { inputFilters: InputFilter[] }).inputFilters != null\n );\n}\n\nfunction hasPanelState(\n panel: unknown\n): panel is { panelState: IrisGridPanelState } {\n return (panel as { panelState: IrisGridPanelState }).panelState != null;\n}\n\nexport class ChartPanel extends Component<ChartPanelProps, ChartPanelState> {\n static defaultProps = {\n columnSelectionValidator: null,\n isLinkerActive: false,\n source: null,\n sourcePanel: null,\n panelState: null,\n settings: {},\n };\n\n static displayName = 'ChartPanel';\n\n static COMPONENT = 'ChartPanel';\n\n constructor(props: ChartPanelProps) {\n super(props);\n\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleColumnMouseEnter = this.handleColumnMouseEnter.bind(this);\n this.handleColumnMouseLeave = this.handleColumnMouseLeave.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleFilterAdd = this.handleFilterAdd.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSettingsChanged = this.handleSettingsChanged.bind(this);\n this.handleOpenLinker = this.handleOpenLinker.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleSourceColumnChange = this.handleSourceColumnChange.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.updateModelFromSource = debounce(\n this.updateModelFromSource.bind(this),\n UPDATE_MODEL_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n\n this.panelContainer = React.createRef();\n this.chart = React.createRef();\n this.pending = new Pending();\n\n const { metadata, panelState } = props;\n const { filterValueMap = [], settings = {} } = panelState ?? {};\n\n this.state = {\n settings,\n error: undefined,\n isActive: false,\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n isLinked:\n metadata != null &&\n isChartPanelTableMetadata(metadata) &&\n metadata.settings &&\n metadata.settings.isLinked,\n\n // Map of all non-empty filters applied to the chart.\n // Initialize the filter map to the previously stored values; input filters will be applied after load.\n filterMap: new Map(filterValueMap),\n // Map of filter values set from links, stored in panelState.\n // Combined with inputFilters to get applied filters (filterMap).\n filterValueMap: new Map(filterValueMap),\n model: undefined,\n columnMap: new Map(),\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n }\n\n componentDidMount(): void {\n if (!this.isHidden()) {\n this.setState({ isActive: true });\n this.initModel();\n }\n }\n\n componentDidUpdate(\n prevProps: ChartPanelProps,\n prevState: ChartPanelState\n ): void {\n const { inputFilters, source } = this.props;\n const {\n columnMap,\n model,\n filterMap,\n filterValueMap,\n isLinked,\n settings,\n } = this.state;\n\n if (!model) {\n return;\n }\n\n if (columnMap !== prevState.columnMap) {\n this.pruneFilterMaps();\n }\n\n if (inputFilters !== prevProps.inputFilters) {\n this.updateChangedInputFilters(inputFilters, prevProps.inputFilters);\n }\n\n if (filterMap !== prevState.filterMap) {\n this.updateFilters();\n } else if (filterValueMap !== prevState.filterValueMap) {\n this.updatePanelState();\n }\n\n if (settings !== prevState.settings && isFigureChartModel(model)) {\n model.updateSettings(settings);\n this.updatePanelState();\n }\n\n if (isLinked !== prevState.isLinked) {\n if (source) {\n if (isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n } else {\n this.stopListeningToSource(source);\n }\n }\n } else if (isLinked && source !== prevProps.source) {\n if (prevProps.source) {\n this.stopListeningToSource(prevProps.source);\n }\n if (source) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n\n const { source } = this.props;\n if (source) {\n this.stopListeningToSource(source);\n }\n }\n\n panelContainer: RefObject<HTMLDivElement>;\n\n chart: RefObject<Chart>;\n\n pending: Pending;\n\n initModel(): void {\n this.setState({ isLoading: true, isLoaded: false, error: undefined });\n\n const { makeModel } = this.props;\n this.pending\n .add(makeModel(), resolved => {\n resolved.close();\n })\n .then(this.handleLoadSuccess, this.handleLoadError);\n }\n\n getWaitingInputMap = memoize(\n (\n isFilterRequired: boolean,\n columnMap: ColumnMap,\n filterMap: FilterMap\n ): Map<string, { name: string; type: string }> => {\n if (!isFilterRequired) {\n return new Map();\n }\n const waitingInputMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingInputMap.delete(name);\n });\n return waitingInputMap;\n }\n );\n\n getWaitingFilterMap = memoize(\n (\n isFilterRequired: boolean,\n columnMap: ColumnMap,\n filterMap: FilterMap,\n linkedColumnMap: LinkedColumnMap,\n inputFilterMap: InputFilterMap\n ) => {\n if (!isFilterRequired) {\n return new Map();\n }\n\n const waitingFilterMap = new Map(columnMap);\n filterMap.forEach((filter, name) => {\n waitingFilterMap.delete(name);\n });\n inputFilterMap.forEach((value, name) => {\n waitingFilterMap.delete(name);\n });\n linkedColumnMap.forEach((column, name) => {\n waitingFilterMap.delete(name);\n });\n return waitingFilterMap;\n }\n );\n\n getInputFilterColumnMap = memoize(\n (columnMap: ColumnMap, inputFilters: InputFilter[]) => {\n const inputFilterMap = new Map<string, InputFilter>();\n for (let i = 0; i < inputFilters.length; i += 1) {\n const inputFilter = inputFilters[i];\n const { name, type } = inputFilter;\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n inputFilterMap.set(name, inputFilter);\n }\n }\n return inputFilterMap;\n }\n );\n\n getLinkedColumnMap = memoize((columnMap: ColumnMap, links: Link[]) => {\n const linkedColumnMap = new Map<string, { name: string; type: string }>();\n const panelId = LayoutUtils.getIdFromPanel(this);\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n let columnName = null;\n if (\n link.start != null &&\n link.start.panelId === panelId &&\n columnMap.has(link.start.columnName)\n ) {\n columnName = link.start.columnName;\n } else if (\n link.end &&\n link.end.panelId === panelId &&\n columnMap.has(link.end.columnName)\n ) {\n columnName = link.end.columnName;\n }\n\n if (columnName != null && columnMap.has(columnName)) {\n const column = columnMap.get(columnName);\n assertNotNull(column);\n linkedColumnMap.set(columnName, column);\n }\n }\n return linkedColumnMap;\n });\n\n getSelectorColumns = memoize(\n (\n columnMap: ColumnMap,\n linkedColumnMap: LinkedColumnMap,\n columnSelectionValidator?: ColumnSelectionValidator\n ) =>\n Array.from(columnMap.values()).map(column => ({\n name: column.name,\n type: column.type,\n isValid: columnSelectionValidator\n ? columnSelectionValidator(this, column)\n : false,\n isActive: linkedColumnMap.has(column.name),\n }))\n );\n\n startListeningToSource(table: TableTemplate): void {\n log.debug('startListeningToSource', table);\n\n table.addEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleSourceColumnChange\n );\n table.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n table.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n }\n\n stopListeningToSource(table: TableTemplate): void {\n log.debug('stopListeningToSource', table);\n\n table.removeEventListener(\n dh.Table.EVENT_CUSTOMCOLUMNSCHANGED,\n this.handleSourceColumnChange\n );\n table.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n table.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n }\n\n loadModelIfNecessary(): void {\n const { isActive, isLoaded, isLoading } = this.state;\n if (isActive && !isLoaded && !isLoading) {\n this.initModel();\n }\n }\n\n isHidden(): boolean {\n const { glContainer } = this.props;\n const { isHidden } = glContainer;\n return isHidden;\n }\n\n handleColumnSelected(columnName: string): void {\n const { glEventHub } = this.props;\n const { columnMap } = this.state;\n glEventHub.emit(\n ChartEvent.COLUMN_SELECTED,\n this,\n columnMap.get(columnName)\n );\n }\n\n handleColumnMouseEnter({ type, name }: SelectorColumn): void {\n const { columnSelectionValidator } = this.props;\n log.debug('handleColumnMouseEnter', columnSelectionValidator, type, name);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, { type, name });\n }\n\n handleColumnMouseLeave(): void {\n const { columnSelectionValidator } = this.props;\n log.debug('handleColumnMouseLeave', columnSelectionValidator);\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n handleDisconnect(): void {\n this.setState({\n error: new Error('Figure disconnected'),\n isDisconnected: true,\n });\n }\n\n handleFilterAdd(columns: InputFilter[]): void {\n for (let i = 0; i < columns.length; i += 1) {\n this.openInputFilter(columns[i]);\n }\n }\n\n handleOpenLinker(): void {\n const {\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n setActiveTool(ToolType.LINKER);\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: undefined });\n this.sendColumnChange();\n this.updateColumnFilters();\n }\n\n handleLoadSuccess(model: ChartModel): void {\n log.debug('handleLoadSuccess');\n\n const { model: prevModel } = this.state;\n this.setState(\n {\n model,\n isLoaded: true,\n },\n () => {\n const { inputFilters, source } = this.props;\n const { filterMap, isLinked } = this.state;\n if (model !== prevModel) {\n this.sendColumnChange();\n this.updateColumnFilters();\n this.updateInputFilters(\n inputFilters,\n filterMap.size > 0 || model.isFilterRequired()\n );\n if (source && isLinked) {\n this.startListeningToSource(source);\n this.updateModelFromSource();\n }\n }\n }\n );\n }\n\n handleLoadError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error('handleLoadError', error);\n this.setState({ error, isLoading: false });\n }\n\n handleSourceColumnChange(): void {\n this.updateModelFromSource();\n }\n\n handleSourceFilterChange(): void {\n this.updateModelFromSource();\n }\n\n handleSourceSortChange(): void {\n this.updateModelFromSource();\n }\n\n updateModelFromSource(): void {\n const { metadata, source } = this.props;\n const { isLinked, model } = this.state;\n if (!isLinked || !model || !source) {\n log.debug2('updateModelFromSource ignoring', isLinked, model, source);\n return;\n }\n\n // By now the model has already been loaded, which is the only other cancelable thing in pending\n this.pending.cancel();\n if (isChartPanelTableMetadata(metadata)) {\n const { settings } = metadata;\n this.pending\n .add(\n dh.plot.Figure.create(\n (ChartUtils.makeFigureSettings(\n settings,\n source\n ) as unknown) as FigureDescriptor\n )\n )\n .then(figure => {\n if (isFigureChartModel(model)) {\n model.setFigure(figure);\n }\n })\n .catch(this.handleLoadError);\n }\n\n this.updatePanelState();\n }\n\n updatePanelState(): void {\n const { sourcePanel } = this.props;\n const { panelState, filterValueMap, settings } = this.state;\n let { tableSettings } = panelState ?? {};\n if (sourcePanel) {\n // Right now just update the panel state from the source\n // If the source isn't available, just keep the state that's already saved\n if (\n hasInputFilter(sourcePanel.props) &&\n hasPanelState(sourcePanel.state)\n ) {\n const { inputFilters } = sourcePanel.props;\n const { panelState: sourcePanelState } = sourcePanel.state;\n if (sourcePanelState != null) {\n tableSettings = IrisGridUtils.extractTableSettings(\n sourcePanelState,\n inputFilters\n );\n }\n }\n }\n\n // eslint-disable-next-line react/no-unused-state\n this.setState({\n panelState: {\n settings,\n tableSettings,\n filterValueMap: Array.from(filterValueMap),\n },\n });\n }\n\n handleError(): void {\n // Don't want to set an error state, because the user can fix a chart error within the chart itself.\n // We're not loading anymore either so stop showing the spinner so the user can actually click those buttons.\n this.setState({ isLoading: false });\n }\n\n handleResize(): void {\n this.updateChart();\n }\n\n handleSettingsChanged(update: Partial<Settings>): void {\n this.setState(({ settings: prevSettings }) => {\n const settings = {\n ...prevSettings,\n ...update,\n };\n log.debug('Updated settings', settings);\n return { settings };\n });\n }\n\n handleHide(): void {\n this.setActive(false);\n }\n\n handleShow(): void {\n this.setActive(true);\n }\n\n handleTabBlur(): void {\n this.setActive(false);\n }\n\n handleTabFocus(): void {\n const isHidden = this.isHidden();\n this.setActive(!isHidden);\n }\n\n handleUpdate(): void {\n this.setState({ isLoading: false });\n }\n\n handleClearAllFilters(): void {\n // nuke link filter and input filter map\n // input filters only clear themselves if they are not yet empty\n this.setState({\n filterValueMap: new Map(),\n filterMap: new Map(),\n });\n this.updatePanelState();\n }\n\n /**\n * Create an input filter panel for the provided column\n * @param column The column to create the input filter for\n */\n openInputFilter(column: InputFilter): void {\n const { glEventHub } = this.props;\n const { name, type } = column;\n glEventHub.emit(InputFilterEvent.OPEN_INPUT, {\n title: `${name} Filter`,\n panelState: {\n name,\n type,\n isValueShown: true,\n },\n createNewStack: true,\n focusElement: 'input',\n });\n }\n\n setActive(isActive: boolean): void {\n this.setState({ isActive }, () => {\n if (isActive) {\n this.loadModelIfNecessary();\n this.updateChart();\n }\n });\n }\n\n sendColumnChange(): void {\n const { model } = this.state;\n if (!model) {\n return;\n }\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMNS_CHANGED,\n this,\n Array.from(model.getFilterColumnMap().values())\n );\n }\n\n getCoordinateForColumn(columnName: ColumnName): [number, number] | null {\n const className = ChartColumnSelectorOverlay.makeButtonClassName(\n columnName\n );\n\n if (!this.panelContainer.current) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(`.${className}`);\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n /**\n * Set chart filters based on the filter map\n * @param filterMapParam Filter map\n */\n setFilterMap(\n filterMapParam: Map<string, { columnType: string; value: string }>\n ): void {\n log.debug('setFilterMap', filterMapParam);\n this.setState(state => {\n const { columnMap, filterMap } = state;\n let updatedFilterMap: null | Map<string, string> = null;\n const filterValueMap = new Map(state.filterValueMap);\n\n filterMapParam.forEach(({ columnType, value }, columnName) => {\n const column = columnMap.get(columnName);\n if (column == null || column.type !== columnType) {\n return;\n }\n filterValueMap.set(columnName, value);\n if (filterMap.get(columnName) !== value) {\n if (updatedFilterMap === null) {\n updatedFilterMap = new Map(filterMap);\n }\n updatedFilterMap.set(columnName, value);\n }\n });\n\n // Don't update filterMap unless the filters actually changed.\n // Otherwise the chart gets stuck on a spinner\n // because it never gets an update event for unchanged filters.\n return { filterValueMap, filterMap: updatedFilterMap ?? filterMap };\n });\n }\n\n unsetFilterValue(columnName: ColumnName): void {\n this.setState(state => {\n // We want to unset a value unless there's an input filter for it\n // If there's an input filter, then we want to just set it to that value\n // This way if the user has an input filter and a link, when they delete the link the input filter value takes effect\n const { inputFilters } = this.props;\n const { columnMap } = state;\n let { filterMap, filterValueMap } = state;\n if (!filterValueMap.has(columnName)) {\n return null;\n }\n\n filterValueMap = new Map(state.filterValueMap);\n filterValueMap.delete(columnName);\n\n const inputFilterMap = this.getInputFilterColumnMap(\n columnMap,\n inputFilters\n );\n\n if (inputFilterMap.has(columnName)) {\n const filterValue = filterMap.get(columnName);\n const inputFilterValue = inputFilterMap.get(columnName)?.value;\n if (inputFilterValue != null && filterValue !== inputFilterValue) {\n filterMap = new Map(state.filterMap);\n if (inputFilterValue.length > 0) {\n filterMap.set(columnName, inputFilterValue);\n } else {\n filterMap.delete(columnName);\n }\n }\n } else {\n filterMap = new Map(state.filterMap);\n filterMap.delete(columnName);\n }\n return { filterMap, filterValueMap };\n });\n }\n\n updateChangedInputFilters(\n inputFilters: InputFilter[],\n prevInputFilters: InputFilter[]\n ): void {\n const deletedInputFilters = prevInputFilters.filter(\n prevInputFilter =>\n inputFilters.find(\n inputFilter =>\n inputFilter.name === prevInputFilter.name &&\n inputFilter.type === prevInputFilter.type\n ) === undefined\n );\n if (deletedInputFilters.length > 0) {\n this.deleteInputFilters(deletedInputFilters);\n }\n\n const changedInputFilters = inputFilters.filter(\n inputFilter => !prevInputFilters.includes(inputFilter)\n );\n if (changedInputFilters.length > 0) {\n this.updateInputFilters(changedInputFilters);\n }\n }\n\n updateInputFilters(inputFilters: InputFilter[], forceUpdate = false): void {\n this.setState(state => {\n const { columnMap } = state;\n const filterValueMap = new Map(state.filterValueMap);\n const filterMap = new Map(state.filterMap);\n const update = forceUpdate ? { filterMap, filterValueMap } : {};\n\n for (let i = 0; i < inputFilters.length; i += 1) {\n const { name, type, value } = inputFilters[i];\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (value != null && filterMap.get(name) !== value) {\n if (value === '') {\n filterMap.delete(name);\n } else {\n filterMap.set(name, value);\n }\n update.filterMap = filterMap;\n }\n\n if (filterValueMap.has(name)) {\n // Need to unset whatever the linked value was - if they want that value again, they need to double click the link again\n filterValueMap.delete(name);\n update.filterValueMap = filterValueMap;\n }\n }\n }\n\n log.debug('updateInputFilters', update);\n return update as unknown;\n });\n }\n\n deleteInputFilters(inputFilters: InputFilter[], forceUpdate = false): void {\n this.setState(state => {\n const { columnMap, filterValueMap } = state;\n const filterMap = new Map(state.filterMap);\n let needsUpdate = forceUpdate;\n\n for (let i = 0; i < inputFilters.length; i += 1) {\n const { name, type } = inputFilters[i];\n const column = columnMap.get(name);\n if (column != null && column.type === type) {\n if (filterMap.has(name)) {\n const filterValue = filterMap.get(name);\n if (filterValueMap.has(name)) {\n const linkValue = filterValueMap.get(name);\n if (linkValue !== filterValue && linkValue != null) {\n needsUpdate = true;\n filterMap.set(name, linkValue);\n }\n } else {\n needsUpdate = true;\n filterMap.delete(name);\n }\n }\n }\n }\n\n log.debug('deleteInputFilters', needsUpdate);\n return needsUpdate ? { filterMap } : null;\n });\n }\n\n updateColumnFilters(): void {\n this.setState(({ model }) => {\n if (!model) {\n return null;\n }\n\n return { columnMap: model.getFilterColumnMap() };\n });\n }\n\n updateFilters(): void {\n const { columnMap, filterMap, model } = this.state;\n assertNotNull(model);\n const waitingInputMap = this.getWaitingInputMap(\n model.isFilterRequired(),\n columnMap,\n filterMap\n );\n model.setFilter(filterMap);\n\n if (filterMap.size > 0 && waitingInputMap.size === 0) {\n const defaultTitle = model.getDefaultTitle();\n const filterTitle = TextUtils.join(\n Array.from(filterMap.entries()).map(\n ([name, value]) => `${name}: ${value}`\n )\n );\n if (defaultTitle) {\n model.setTitle(\n `${defaultTitle}<br><span style=\"font-size: smaller\">${filterTitle}</span>`\n );\n } else {\n model.setTitle(filterTitle);\n }\n\n log.debug2('updateFilters filters set', filterMap);\n this.setState({ isLoading: true });\n } else {\n log.debug2('updateFilters waiting on inputs', waitingInputMap);\n model.setTitle(model.getDefaultTitle());\n this.setState({ isLoading: false });\n }\n\n this.updatePanelState();\n }\n\n /**\n * Removes any set filter values that are no longer part of the model\n */\n pruneFilterMaps(): void {\n this.setState(state => {\n const { columnMap } = state;\n const filterMap = new Map(state.filterMap);\n const filterValueMap = new Map(state.filterValueMap);\n const newState: Pick<\n Partial<ChartPanelState>,\n 'filterMap' | 'filterValueMap'\n > = {};\n\n state.filterValueMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterValueMap.delete(name);\n newState.filterValueMap = filterValueMap;\n }\n });\n state.filterMap.forEach((value, name) => {\n if (!columnMap.has(name)) {\n filterMap.delete(name);\n newState.filterMap = filterMap;\n }\n });\n return newState as unknown;\n });\n }\n\n updateChart(): void {\n if (this.chart.current) {\n this.chart.current.updateDimensions();\n }\n }\n\n render(): ReactElement {\n const {\n columnSelectionValidator,\n glContainer,\n glEventHub,\n inputFilters,\n isLinkerActive,\n links,\n metadata,\n settings,\n } = this.props;\n const {\n columnMap,\n filterMap,\n error,\n model,\n isActive,\n isDisconnected,\n isLoaded,\n isLoading,\n } = this.state;\n let name;\n if (isChartPanelTableMetadata(metadata)) {\n name = metadata.table;\n } else {\n name = metadata.figure;\n }\n const inputFilterMap = this.getInputFilterColumnMap(\n columnMap,\n inputFilters\n );\n const linkedColumnMap = this.getLinkedColumnMap(columnMap, links);\n const waitingInputMap =\n model != null\n ? this.getWaitingInputMap(\n model.isFilterRequired(),\n columnMap,\n filterMap\n )\n : new Map();\n const waitingFilterMap =\n model != null\n ? this.getWaitingFilterMap(\n model.isFilterRequired(),\n columnMap,\n filterMap,\n linkedColumnMap,\n inputFilterMap\n )\n : new Map();\n const errorMessage =\n error != null ? `Unable to open chart. ${error}` : undefined;\n const isWaitingForFilter = waitingInputMap.size > 0;\n const isSelectingColumn = columnMap.size > 0 && isLinkerActive;\n return (\n <WidgetPanel\n className={classNames('iris-chart-panel', {\n 'input-required': isWaitingForFilter,\n })}\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onHide={this.handleHide}\n onClearAllFilters={this.handleClearAllFilters}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabBlur={this.handleTabBlur}\n onTabFocus={this.handleTabFocus}\n errorMessage={errorMessage}\n isDisconnected={isDisconnected}\n isLoading={isLoading}\n isLoaded={isLoaded}\n widgetName={name}\n widgetType=\"Chart\"\n >\n <div\n ref={this.panelContainer}\n className=\"chart-panel-container h-100 w-100\"\n >\n <div className=\"chart-container h-100 w-100\">\n {isLoaded && model && (\n <Chart\n isActive={isActive}\n model={model}\n settings={settings}\n ref={this.chart}\n onDisconnect={this.handleDisconnect}\n onReconnect={this.handleReconnect}\n onUpdate={this.handleUpdate}\n onError={this.handleError}\n onSettingsChanged={this.handleSettingsChanged}\n />\n )}\n </div>\n <CSSTransition\n in={isWaitingForFilter && !isSelectingColumn && !isLoading}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <ChartFilterOverlay\n inputFilterMap={inputFilterMap}\n linkedColumnMap={linkedColumnMap}\n onAdd={this.handleFilterAdd}\n onOpenLinker={this.handleOpenLinker}\n columnMap={columnMap}\n waitingFilterMap={waitingFilterMap}\n waitingInputMap={waitingInputMap}\n />\n </CSSTransition>\n <CSSTransition\n in={isSelectingColumn}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <ChartColumnSelectorOverlay\n columns={this.getSelectorColumns(\n columnMap,\n linkedColumnMap,\n columnSelectionValidator\n )}\n onColumnSelected={this.handleColumnSelected}\n onMouseEnter={this.handleColumnMouseEnter}\n onMouseLeave={this.handleColumnMouseLeave}\n />\n </CSSTransition>\n </div>\n </WidgetPanel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string; metadata: { sourcePanelId: string } }\n) => {\n const { localDashboardId, metadata } = ownProps;\n\n let sourcePanelId;\n if (metadata != null) {\n sourcePanelId = metadata.sourcePanelId;\n }\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const openedPanelMap = getOpenedPanelMapForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER && isolatedLinkerPanelId === undefined;\n return {\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n isLinkerActive,\n inputFilters: getInputFiltersForDashboard(state, localDashboardId),\n links: getLinksForDashboard(state, localDashboardId),\n source:\n sourcePanelId != null ? panelTableMap.get(sourcePanelId) : undefined,\n sourcePanel:\n sourcePanelId != null ? openedPanelMap.get(sourcePanelId) : undefined,\n settings: getSettings(state),\n };\n};\n\nexport default connect(\n mapStateToProps,\n {\n setActiveTool: setActiveToolAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n },\n null,\n { forwardRef: true }\n)(ChartPanel);\n"],"mappings":"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"}
|
|
@@ -126,7 +126,7 @@ declare class DropdownFilterPanel extends Component<DropdownFilterPanelProps, Dr
|
|
|
126
126
|
}
|
|
127
127
|
declare const _default: import("react-redux").ConnectedComponent<typeof DropdownFilterPanel, import("react-redux").Omit<React.ClassAttributes<DropdownFilterPanel> & DropdownFilterPanelProps, "columns" | "columnSelectionValidator" | "isLinkerActive" | "disableLinking" | "settings" | "panelTableMap" | "dashboardLinks"> & {
|
|
128
128
|
localDashboardId: string;
|
|
129
|
-
glContainer: Container
|
|
129
|
+
glContainer: Container<import("@deephaven/golden-layout").ComponentConfig>;
|
|
130
130
|
}>;
|
|
131
131
|
export default _default;
|
|
132
132
|
//# sourceMappingURL=DropdownFilterPanel.d.ts.map
|
|
@@ -2,9 +2,9 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import './WidgetPanelTooltip.scss';
|
|
4
4
|
import { ReactElement } from 'react-markdown';
|
|
5
|
-
import
|
|
5
|
+
import type { Container } from '@deephaven/golden-layout';
|
|
6
6
|
interface WidgetPanelTooltipProps {
|
|
7
|
-
glContainer:
|
|
7
|
+
glContainer: Container;
|
|
8
8
|
widgetType: string;
|
|
9
9
|
widgetName: string;
|
|
10
10
|
description: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetPanelTooltip.d.ts","sourceRoot":"","sources":["../../src/panels/WidgetPanelTooltip.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AACnD,OAAO,SAAS,MAAM,YAAY,CAAC;AAKnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"WidgetPanelTooltip.d.ts","sourceRoot":"","sources":["../../src/panels/WidgetPanelTooltip.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AACnD,OAAO,SAAS,MAAM,YAAY,CAAC;AAKnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAI1D,UAAU,uBAAuB;IAC/B,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB;AACD,QAAA,MAAM,kBAAkB;YAAW,uBAAuB,GAAG,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCxE,CAAC;AAiBF,eAAe,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetPanelTooltip.js","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"],"sources":["../../src/panels/WidgetPanelTooltip.tsx"],"sourcesContent":["import React, { ReactNode, 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';\nimport { ReactElement } from 'react-markdown';\nimport
|
|
1
|
+
{"version":3,"file":"WidgetPanelTooltip.js","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"],"sources":["../../src/panels/WidgetPanelTooltip.tsx"],"sourcesContent":["import React, { ReactNode, 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';\nimport { ReactElement } from 'react-markdown';\nimport type { Container } from '@deephaven/golden-layout';\n\nconst log = Log.module('WidgetPanelTooltip');\n\ninterface WidgetPanelTooltipProps {\n glContainer: Container;\n widgetType: string;\n widgetName: string;\n description: string;\n children: ReactNode;\n}\nconst WidgetPanelTooltip = (props: WidgetPanelTooltipProps): ReactElement => {\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"],"mappings":"AAAA,OAAOA,KAAP,IAA2BC,QAA3B,QAA2C,OAA3C;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;;AAKA,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAJ,CAAW,oBAAX,CAAZ;;AASA,IAAMC,kBAAkB,GAAIC,KAAD,IAAkD;EAC3E,IAAM;IAAEC,UAAF;IAAcC,UAAd;IAA0BC,WAA1B;IAAuCC,WAAvC;IAAoDC;EAApD,IAAiEL,KAAvE;EACA,IAAMM,UAAU,GAAGX,WAAW,CAACY,qBAAZ,CAAkCJ,WAAlC,CAAnB;EACA,IAAM,CAACK,MAAD,EAASC,SAAT,IAAsBrB,QAAQ,CAAC,KAAD,CAApC;EAEA,oBACE;IAAK,SAAS,EAAC;EAAf,gBACE;IAAK,SAAS,EAAC;EAAf,gBACE;IAAM,SAAS,EAAC;EAAhB,gBACE,+BAAIa,UAAJ,WADF,CADF,eAIE;IAAM,SAAS,EAAC;EAAhB,GAAoCC,UAApC,CAJF,eAME,oBAAC,MAAD;IACE,IAAI,EAAC,OADP;IAEE,SAAS,EAAC,kBAFZ;IAGE,IAAI,EAAEM,MAAM,GAAGf,YAAH,GAAkBD,MAHhC;IAIE,OAAO,EAAE,MAAM;MACbD,kBAAkB,CAACmB,eAAnB,CAAmCR,UAAnC,EACGS,IADH,CACQ,MAAMF,SAAS,CAAC,IAAD,CADvB,EAEGG,KAFH,CAESC,CAAC,IAAIhB,GAAG,CAACiB,KAAJ,CAAU,uBAAV,EAAmCD,CAAnC,CAFd;IAGD,CARH;IASE,OAAO,EAAEL,MAAM,GAAG,aAAH,GAAmB;EATpC,EANF,CADF,EAmBGN,UAAU,KAAKI,UAAf,iBACC;IAAK,SAAS,EAAC;EAAf,gBACE;IAAM,SAAS,EAAC;EAAhB,gBACE,8CADF,CADF,eAIE;IAAM,SAAS,EAAC;EAAhB,GAAoCA,UAApC,CAJF,CApBJ,EA2BGF,WAAW,iBACV;IAAK,SAAS,EAAC;EAAf,gBACE;IAAM,SAAS,EAAC;EAAhB,GAA2CA,WAA3C,CADF,CA5BJ,EAgCGC,QAhCH,CADF;AAoCD,CAzCD;;AA2CAN,kBAAkB,CAACgB,SAAnB,GAA+B;EAC7BZ,WAAW,EAAET,WAAW,CAACsB,SAAZ,CAAsBC,UADN;EAE7BhB,UAAU,EAAEZ,SAAS,CAAC6B,MAFO;EAG7BhB,UAAU,EAAEb,SAAS,CAAC6B,MAHO;EAI7Bd,WAAW,EAAEf,SAAS,CAAC6B,MAJM;EAK7Bb,QAAQ,EAAEhB,SAAS,CAAC8B;AALS,CAA/B;AAQApB,kBAAkB,CAACqB,YAAnB,GAAkC;EAChCnB,UAAU,EAAE,EADoB;EAEhCC,UAAU,EAAE,EAFoB;EAGhCE,WAAW,EAAE,IAHmB;EAIhCC,QAAQ,EAAE;AAJsB,CAAlC;AAOA,eAAeN,kBAAf"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/dashboard-core-plugins",
|
|
3
|
-
"version": "0.19.2-beta.
|
|
3
|
+
"version": "0.19.2-beta.11+f18f946",
|
|
4
4
|
"description": "Deephaven Dashboard Core Plugins",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -30,21 +30,21 @@
|
|
|
30
30
|
"start": "cross-env NODE_ENV=development npm run watch"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@deephaven/chart": "^0.19.2-beta.
|
|
34
|
-
"@deephaven/components": "^0.19.2-beta.
|
|
35
|
-
"@deephaven/console": "^0.19.2-beta.
|
|
36
|
-
"@deephaven/dashboard": "^0.19.2-beta.
|
|
37
|
-
"@deephaven/file-explorer": "^0.19.2-beta.
|
|
38
|
-
"@deephaven/golden-layout": "^0.19.2-beta.
|
|
39
|
-
"@deephaven/grid": "^0.19.2-beta.
|
|
40
|
-
"@deephaven/icons": "^0.19.2-beta.
|
|
41
|
-
"@deephaven/iris-grid": "^0.19.2-beta.
|
|
42
|
-
"@deephaven/jsapi-shim": "^0.19.2-beta.
|
|
43
|
-
"@deephaven/jsapi-utils": "^0.19.2-beta.
|
|
44
|
-
"@deephaven/log": "^0.19.2-beta.
|
|
45
|
-
"@deephaven/redux": "^0.19.2-beta.
|
|
46
|
-
"@deephaven/storage": "^0.19.2-beta.
|
|
47
|
-
"@deephaven/utils": "^0.19.2-beta.
|
|
33
|
+
"@deephaven/chart": "^0.19.2-beta.11+f18f946",
|
|
34
|
+
"@deephaven/components": "^0.19.2-beta.11+f18f946",
|
|
35
|
+
"@deephaven/console": "^0.19.2-beta.11+f18f946",
|
|
36
|
+
"@deephaven/dashboard": "^0.19.2-beta.11+f18f946",
|
|
37
|
+
"@deephaven/file-explorer": "^0.19.2-beta.11+f18f946",
|
|
38
|
+
"@deephaven/golden-layout": "^0.19.2-beta.11+f18f946",
|
|
39
|
+
"@deephaven/grid": "^0.19.2-beta.11+f18f946",
|
|
40
|
+
"@deephaven/icons": "^0.19.2-beta.11+f18f946",
|
|
41
|
+
"@deephaven/iris-grid": "^0.19.2-beta.11+f18f946",
|
|
42
|
+
"@deephaven/jsapi-shim": "^0.19.2-beta.11+f18f946",
|
|
43
|
+
"@deephaven/jsapi-utils": "^0.19.2-beta.11+f18f946",
|
|
44
|
+
"@deephaven/log": "^0.19.2-beta.11+f18f946",
|
|
45
|
+
"@deephaven/redux": "^0.19.2-beta.11+f18f946",
|
|
46
|
+
"@deephaven/storage": "^0.19.2-beta.11+f18f946",
|
|
47
|
+
"@deephaven/utils": "^0.19.2-beta.11+f18f946",
|
|
48
48
|
"@fortawesome/react-fontawesome": "^0.1.18",
|
|
49
49
|
"classnames": "^2.3.1",
|
|
50
50
|
"deep-equal": "^2.0.5",
|
|
@@ -66,8 +66,8 @@
|
|
|
66
66
|
"react-redux": "^7.2.4"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"@deephaven/mocks": "^0.19.2-beta.
|
|
70
|
-
"@deephaven/tsconfig": "^0.19.2-beta.
|
|
69
|
+
"@deephaven/mocks": "^0.19.2-beta.11+f18f946",
|
|
70
|
+
"@deephaven/tsconfig": "^0.19.2-beta.11+f18f946"
|
|
71
71
|
},
|
|
72
72
|
"files": [
|
|
73
73
|
"dist"
|
|
@@ -75,5 +75,5 @@
|
|
|
75
75
|
"publishConfig": {
|
|
76
76
|
"access": "public"
|
|
77
77
|
},
|
|
78
|
-
"gitHead": "
|
|
78
|
+
"gitHead": "f18f946d4434de72b97a8bfd8cba8b172e057e3c"
|
|
79
79
|
}
|