@deephaven/dashboard-core-plugins 0.15.5-beta.0 → 0.15.5-vite.12

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.
Files changed (69) hide show
  1. package/dist/ChartBuilderPlugin.js.map +1 -1
  2. package/dist/ChartPlugin.js.map +1 -1
  3. package/dist/ConsolePlugin.d.ts +1 -0
  4. package/dist/ConsolePlugin.d.ts.map +1 -1
  5. package/dist/ConsolePlugin.js +5 -3
  6. package/dist/ConsolePlugin.js.map +1 -1
  7. package/dist/FilterPlugin.js.map +1 -1
  8. package/dist/GridPlugin.js.map +1 -1
  9. package/dist/LinkerPlugin.js.map +1 -1
  10. package/dist/MarkdownPlugin.js.map +1 -1
  11. package/dist/PandasPlugin.js.map +1 -1
  12. package/dist/controls/ControlType.js.map +1 -1
  13. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  14. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  15. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  16. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  17. package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
  18. package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
  19. package/dist/events/ChartEvent.js.map +1 -1
  20. package/dist/events/ConsoleEvent.js.map +1 -1
  21. package/dist/events/InputFilterEvent.js.map +1 -1
  22. package/dist/events/IrisGridEvent.js.map +1 -1
  23. package/dist/events/MarkdownEvent.js.map +1 -1
  24. package/dist/events/NotebookEvent.js.map +1 -1
  25. package/dist/events/PQEvent.js.map +1 -1
  26. package/dist/events/PandasEvent.js.map +1 -1
  27. package/dist/events/TabEvent.js.map +1 -1
  28. package/dist/events/index.js.map +1 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/linker/Linker.js.map +1 -1
  31. package/dist/linker/LinkerLink.js.map +1 -1
  32. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  33. package/dist/linker/LinkerUtils.js.map +1 -1
  34. package/dist/linker/ToolType.js.map +1 -1
  35. package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
  36. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  37. package/dist/panels/ChartPanel.js.map +1 -1
  38. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  39. package/dist/panels/ConsolePanel.js.map +1 -1
  40. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  41. package/dist/panels/FileExplorerPanel.js.map +1 -1
  42. package/dist/panels/FilterSetManager.js.map +1 -1
  43. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  44. package/dist/panels/InputFilterPanel.js.map +1 -1
  45. package/dist/panels/IrisGridPanel.js.map +1 -1
  46. package/dist/panels/LogPanel.js.map +1 -1
  47. package/dist/panels/MarkdownNotebook.js.map +1 -1
  48. package/dist/panels/MarkdownPanel.js.map +1 -1
  49. package/dist/panels/NotebookPanel.d.ts +1 -3
  50. package/dist/panels/NotebookPanel.js +2 -3
  51. package/dist/panels/NotebookPanel.js.map +1 -1
  52. package/dist/panels/PandasPanel.js +1 -1
  53. package/dist/panels/PandasPanel.js.map +1 -1
  54. package/dist/panels/Panel.js.map +1 -1
  55. package/dist/panels/PanelContextMenu.js.map +1 -1
  56. package/dist/panels/RenameDialog.js.map +1 -1
  57. package/dist/panels/WidgetPanel.js.map +1 -1
  58. package/dist/panels/WidgetPanelTooltip.js.map +1 -1
  59. package/dist/panels/index.js.map +1 -1
  60. package/dist/prop-types/CommonPropTypes.js.map +1 -1
  61. package/dist/prop-types/UIPropTypes.js.map +1 -1
  62. package/dist/prop-types/index.js.map +1 -1
  63. package/dist/redux/actionTypes.js.map +1 -1
  64. package/dist/redux/actions.js.map +1 -1
  65. package/dist/redux/index.js.map +1 -1
  66. package/dist/redux/reducers/index.js.map +1 -1
  67. package/dist/redux/reducers/sessionWrapper.js.map +1 -1
  68. package/dist/redux/selectors.js.map +1 -1
  69. package/package.json +17 -18
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ChartBuilderPlugin.tsx"],"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"],"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;AAChBP,EAAAA,4BAA4B,CAACO,KAAD,CAA5B;AACA,MAAM;AAAEC,IAAAA,EAAF;AAAMC,IAAAA;AAAN,MAAiBF,KAAvB;AACA,MAAMG,iBAAiB,GAAGb,WAAW,CACnC,QAmBM;AAAA,QAnBL;AACCc,MAAAA,QADD;AAECC,MAAAA,OAAO,GAAGT,OAAO,CAACU,QAAR,EAFX;AAGCC,MAAAA;AAHD,KAmBK;AACJ,QAAM;AAAEC,MAAAA;AAAF,QAAeJ,QAArB;;AACA,QAAMK,SAAS,GAAG,MAChBlB,iBAAiB,CAACmB,qBAAlB,CAAwCF,QAAxC,EAAkDD,KAAlD,CADF;;AAEA,QAAMI,KAAK,GAAGnB,UAAU,CAACoB,iBAAX,CAA6BJ,QAA7B,CAAd;AAEA,QAAMK,MAAM,GAAG;AACbC,MAAAA,IAAI,EAAE,iBADO;AAEbC,MAAAA,SAAS,EAAEjB,UAAU,CAACkB,SAFT;AAGbhB,MAAAA,KAAK,EAAE;AACLiB,QAAAA,gBAAgB,EAAEhB,EADb;AAELA,QAAAA,EAAE,EAAEI,OAFC;AAGLD,QAAAA,QAHK;AAILK,QAAAA;AAJK,OAHM;AASbE,MAAAA,KATa;AAUbV,MAAAA,EAAE,EAAEI;AAVS,KAAf;AAaA,QAAM;AAAEa,MAAAA;AAAF,QAAWhB,MAAjB;AACAR,IAAAA,WAAW,CAACyB,aAAZ,CAA0B;AAAED,MAAAA,IAAF;AAAQL,MAAAA;AAAR,KAA1B;AACD,GAzCkC,EA0CnC,CAACZ,EAAD,EAAKC,MAAL,CA1CmC,CAArC;AA6CAP,EAAAA,WAAW,CAACO,MAAM,CAACkB,QAAR,EAAkBvB,aAAa,CAACwB,YAAhC,EAA8ClB,iBAA9C,CAAX;AAEA,sBAAO,yCAAP;AACD,CArDM;AAuDP,eAAeJ,kBAAf","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 { 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: string;\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 ChartModelFactory.makeModelFromSettings(settings, 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"],"file":"ChartBuilderPlugin.js"}
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 { 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: string;\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 ChartModelFactory.makeModelFromSettings(settings, 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,MAChBlB,iBAAiB,CAACmB,qBAAlB,CAAwCF,QAAxC,EAAkDD,KAAlD,CADF;;IAEA,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,CAzCkC,EA0CnC,CAACZ,EAAD,EAAKC,MAAL,CA1CmC,CAArC;EA6CAP,WAAW,CAACO,MAAM,CAACkB,QAAR,EAAkBvB,aAAa,CAACwB,YAAhC,EAA8ClB,iBAA9C,CAAX;EAEA,oBAAO,yCAAP;AACD,CArDM;AAuDP,eAAeJ,kBAAf"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ChartPlugin.tsx"],"names":["React","useCallback","useEffect","ChartModelFactory","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","shortid","ChartPanel","ChartPlugin","props","id","layout","registerComponent","hydrate","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","dh","VariableType","FIGURE","metadata","figure","makeModel","then","undefined","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,QAAyD,OAAzD;AACA,SAASC,iBAAT,QAAkC,kBAAlC;AACA,SACEC,4BADF,EAGEC,WAHF,EAIEC,UAJF,EAMEC,WANF,QAOO,sBAPP;AASA,OAAOC,OAAP,MAAoB,SAApB;SACSC,U;AAMT,OAAO,IAAMC,WAAW,GAAIC,KAAD,IAA0C;AACnEP,EAAAA,4BAA4B,CAACO,KAAD,CAA5B;AACA,MAAM;AAAEC,IAAAA,EAAF;AAAMC,IAAAA,MAAN;AAAcC,IAAAA,iBAAd;AAAiCC,IAAAA;AAAjC,MAA6CJ,KAAnD;AACA,MAAMK,eAAe,GAAGf,WAAW,CACjC,QAUM;AAAA,QAVL;AACCgB,MAAAA,SADD;AAECC,MAAAA,KAFD;AAGCC,MAAAA,OAAO,GAAGX,OAAO,CAACY,QAAR,EAHX;AAICC,MAAAA;AAJD,KAUK;AACJ,QAAM;AAAEC,MAAAA,IAAF;AAAQC,MAAAA;AAAR,QAAiBF,MAAvB;;AACA,QAAIE,IAAI,KAAKC,EAAE,CAACC,YAAH,CAAgBC,MAA7B,EAAqC;AACnC;AACD;;AAED,QAAMC,QAAQ,GAAG;AAAEL,MAAAA,IAAF;AAAQM,MAAAA,MAAM,EAAEN;AAAhB,KAAjB;;AACA,QAAMO,SAAS,GAAG,MAChBX,KAAK,GAAGY,IAAR,CAAcF,MAAD,IACXzB,iBAAiB,CAAC0B,SAAlB,CAA4BE,SAA5B,EAAuCH,MAAvC,CADF,CADF;;AAIA,QAAMI,MAAM,GAAG;AACbT,MAAAA,IAAI,EAAE,iBADO;AAEbU,MAAAA,SAAS,EAAExB,UAAU,CAACyB,SAFT;AAGbvB,MAAAA,KAAK,EAAE;AACLwB,QAAAA,gBAAgB,EAAEvB,EADb;AAELA,QAAAA,EAAE,EAAEO,OAFC;AAGLQ,QAAAA,QAHK;AAILE,QAAAA;AAJK,OAHM;AASbO,MAAAA,KAAK,EAAEd,IATM;AAUbV,MAAAA,EAAE,EAAEO;AAVS,KAAf;AAaA,QAAM;AAAEkB,MAAAA;AAAF,QAAWxB,MAAjB;AACAR,IAAAA,WAAW,CAACiC,aAAZ,CAA0B;AAAED,MAAAA,IAAF;AAAQL,MAAAA,MAAR;AAAgBf,MAAAA;AAAhB,KAA1B;AACD,GArCgC,EAsCjC,CAACL,EAAD,EAAKC,MAAL,CAtCiC,CAAnC;AAyCAX,EAAAA,SAAS,CACP,SAASqC,kCAAT,GAA8C;AAC5C,QAAMC,QAAQ,GAAG,CACf1B,iBAAiB,CAACL,UAAU,CAACyB,SAAZ,EAAuBzB,UAAvB,EAAmCM,OAAnC,CADF,CAAjB;AAGA,WAAO,MAAM;AACXyB,MAAAA,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;AACD,KAFD;AAGD,GARM,EASP,CAAC3B,OAAD,EAAUD,iBAAV,CATO,CAAT;AAYAP,EAAAA,WAAW,CAACM,MAAM,CAAC8B,QAAR,EAAkBrC,UAAU,CAACsC,IAA7B,EAAmC5B,eAAnC,CAAX;AAEA,sBAAO,yCAAP;AACD,CA3DM;AA6DP,eAAeN,WAAf","sourcesContent":["import React, { useCallback, useEffect, DragEvent } from 'react';\nimport { ChartModelFactory } from '@deephaven/chart';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { Figure, VariableDefinition } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { ChartPanel } from './panels';\n\nexport type ChartPluginProps = Partial<DashboardPluginComponentProps> & {\n hydrate: PanelHydrateFunction;\n};\n\nexport const ChartPlugin = (props: ChartPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id, layout, registerComponent, hydrate } = props;\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget,\n }: {\n dragEvent?: DragEvent;\n fetch: () => Promise<Figure>;\n panelId?: string;\n widget: VariableDefinition;\n }) => {\n const { name, type } = widget;\n if (type !== dh.VariableType.FIGURE) {\n return;\n }\n\n const metadata = { name, figure: name };\n const makeModel = () =>\n fetch().then((figure: Figure) =>\n ChartModelFactory.makeModel(undefined, figure)\n );\n const config = {\n type: 'react-component',\n component: ChartPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [id, layout]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ChartPanel.COMPONENT, ChartPanel, hydrate),\n ];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [hydrate, registerComponent]\n );\n\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return <></>;\n};\n\nexport default ChartPlugin;\n"],"file":"ChartPlugin.js"}
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 } from './panels';\n\nexport type ChartPluginProps = Partial<DashboardPluginComponentProps> & {\n hydrate: PanelHydrateFunction;\n};\n\nexport const ChartPlugin = (props: ChartPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id, layout, registerComponent, hydrate } = props;\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget,\n }: {\n dragEvent?: DragEvent;\n fetch: () => Promise<Figure>;\n panelId?: string;\n widget: VariableDefinition;\n }) => {\n const { name, type } = widget;\n if (type !== dh.VariableType.FIGURE) {\n return;\n }\n\n const metadata = { name, figure: name };\n const makeModel = () =>\n fetch().then((figure: Figure) =>\n ChartModelFactory.makeModel(undefined, figure)\n );\n const config = {\n type: 'react-component',\n component: ChartPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [id, layout]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ChartPanel.COMPONENT, ChartPanel, hydrate),\n ];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [hydrate, registerComponent]\n );\n\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return <></>;\n};\n\nexport default ChartPlugin;\n"],"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,CAACL,UAAU,CAACyB,SAAZ,EAAuBzB,UAAvB,EAAmCM,OAAnC,CADF,CAAjB;IAGA,OAAO,MAAM;MACXyB,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;IACD,CAFD;EAGD,CARM,EASP,CAAC3B,OAAD,EAAUD,iBAAV,CATO,CAAT;EAYAP,WAAW,CAACM,MAAM,CAAC8B,QAAR,EAAkBrC,UAAU,CAACsC,IAA7B,EAAmC5B,eAAnC,CAAX;EAEA,oBAAO,yCAAP;AACD,CA3DM;AA6DP,eAAeN,WAAf"}
@@ -2,6 +2,7 @@
2
2
  import { DashboardPluginComponentProps, PanelHydrateFunction } from '@deephaven/dashboard';
3
3
  export declare type ConsolePluginProps = DashboardPluginComponentProps & {
4
4
  hydrateConsole?: PanelHydrateFunction;
5
+ notebooksUrl: string;
5
6
  };
6
7
  export declare function assertIsConsolePluginProps(props: Partial<ConsolePluginProps>): asserts props is ConsolePluginProps;
7
8
  export declare const ConsolePlugin: (props: Partial<ConsolePluginProps>) => JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"ConsolePlugin.d.ts","sourceRoot":"","sources":["../src/ConsolePlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAEL,6BAA6B,EAG7B,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AA6B9B,oBAAY,kBAAkB,GAAG,6BAA6B,GAAG;IAC/D,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC,CAAC;AAEF,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACjC,OAAO,CAAC,KAAK,IAAI,kBAAkB,CAErC;AAED,eAAO,MAAM,aAAa,UACjB,QAAQ,kBAAkB,CAAC,KACjC,WAibF,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ConsolePlugin.d.ts","sourceRoot":"","sources":["../src/ConsolePlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAEL,6BAA6B,EAG7B,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AA6B9B,oBAAY,kBAAkB,GAAG,6BAA6B,GAAG;IAC/D,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACjC,OAAO,CAAC,KAAK,IAAI,kBAAkB,CAErC;AAED,eAAO,MAAM,aAAa,UACjB,QAAQ,kBAAkB,CAAC,KACjC,WAybF,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -23,7 +23,8 @@ export var ConsolePlugin = props => {
23
23
  hydrateConsole,
24
24
  layout,
25
25
  panelManager,
26
- registerComponent
26
+ registerComponent,
27
+ notebooksUrl
27
28
  } = props;
28
29
  var notebookIndex = useRef(0); // Map from file ID to panel ID
29
30
 
@@ -288,12 +289,13 @@ export var ConsolePlugin = props => {
288
289
  session,
289
290
  sessionLanguage,
290
291
  panelState,
291
- isPreview
292
+ isPreview,
293
+ notebooksUrl
292
294
  },
293
295
  title,
294
296
  id: panelId
295
297
  };
296
- }, [getNotebookTitle, id]);
298
+ }, [getNotebookTitle, id, notebooksUrl]);
297
299
  var createNotebook = useCallback(function (session, sessionLanguage, settings) {
298
300
  var fileMetadata = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {
299
301
  id: null,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ConsolePlugin.tsx"],"names":["assertIsDashboardPluginProps","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","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","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"],"mappings":"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","sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\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};\n\nexport function assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport const ConsolePlugin = (\n props: Partial<ConsolePluginProps>\n): JSX.Element => {\n assertIsConsolePluginProps(props);\n const { id, hydrateConsole, layout, panelManager, registerComponent } = 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) {\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, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary) {\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) {\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, isPreview) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\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, isPreview) => {\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 || !fileMetadata.id) {\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 => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId && 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 && 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) {\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 },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id]\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) {\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 (session, sessionLanguage, settings, fileMetadata, shouldFocus = false) => {\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 (settings && settings.value && notebookPanel.notebook) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\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(NotebookPanel.COMPONENT, NotebookPanel),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent, hydrateConsole]\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"],"file":"ConsolePlugin.js"}
1
+ {"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","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","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 DashboardPluginComponentProps,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\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 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) {\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, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary) {\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) {\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, isPreview) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\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, isPreview) => {\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 || !fileMetadata.id) {\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 => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId && 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 && 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) {\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) {\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 (session, sessionLanguage, settings, fileMetadata, shouldFocus = false) => {\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 (settings && settings.value && notebookPanel.notebook) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\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(NotebookPanel.COMPONENT, NotebookPanel),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent, hydrateConsole]\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 +1 @@
1
- {"version":3,"sources":["../src/FilterPlugin.tsx"],"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"],"mappings":"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","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 {Column|Array<Column>} columns The columns in this panel\n */\n const handleColumnsChanged = useCallback(\n (panel: Component, columns) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, [].concat(columns) as Column[]);\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"],"file":"FilterPlugin.js"}
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 {Column|Array<Column>} columns The columns in this panel\n */\n const handleColumnsChanged = useCallback(\n (panel: Component, columns) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, [].concat(columns) as Column[]);\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 +1 @@
1
- {"version":3,"sources":["../src/GridPlugin.tsx"],"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"],"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;AACjEb,EAAAA,4BAA4B,CAACa,KAAD,CAA5B;AACA,MAAM;AACJC,IAAAA,iBADI;AAEJC,IAAAA,UAFI;AAGJC,IAAAA,EAHI;AAIJC,IAAAA,MAJI;AAKJC,IAAAA,iBALI;AAMJC,IAAAA,OANI;AAOJC,IAAAA;AAPI,MAQFP,KARJ;AASA,MAAMQ,eAAe,GAAGvB,WAAW,CACjC,QAUM;AAAA,QAVL;AACCwB,MAAAA,SADD;AAECC,MAAAA,KAFD;AAGCC,MAAAA,OAAO,GAAGnB,OAAO,CAACoB,QAAR,EAHX;AAICC,MAAAA;AAJD,KAUK;AACJ,QAAM;AAAEC,MAAAA,IAAF;AAAQC,MAAAA;AAAR,QAAiBF,MAAvB;;AACA,QAAI,CAACnB,eAAe,CAACsB,QAAhB,CAAyBD,IAAzB,CAAL,EAAqC;AACnC;AACD;;AAED,QAAME,QAAQ,GAAG;AAAEH,MAAAA,IAAF;AAAQI,MAAAA,KAAK,EAAEJ;AAAf,KAAjB;;AACA,QAAMK,SAAS,GAAG,MAChBT,KAAK,GAAGU,IAAR,CAAcF,KAAD,IAAkB3B,oBAAoB,CAAC4B,SAArB,CAA+BD,KAA/B,CAA/B,CADF;;AAEA,QAAMG,MAAM,GAAG;AACbN,MAAAA,IAAI,EAAE,iBADO;AAEbO,MAAAA,SAAS,EAAE7B,aAAa,CAAC8B,SAFZ;AAGbvB,MAAAA,KAAK,EAAE;AACLC,QAAAA,iBADK;AAELC,QAAAA,UAFK;AAGLsB,QAAAA,gBAAgB,EAAErB,EAHb;AAILA,QAAAA,EAAE,EAAEQ,OAJC;AAKLM,QAAAA,QALK;AAMLE,QAAAA,SANK;AAOLZ,QAAAA;AAPK,OAHM;AAYbkB,MAAAA,KAAK,EAAEX,IAZM;AAabX,MAAAA,EAAE,EAAEQ;AAbS,KAAf;AAgBA,QAAM;AAAEe,MAAAA;AAAF,QAAWtB,MAAjB;AACAhB,IAAAA,WAAW,CAACuC,aAAZ,CAA0B;AAAED,MAAAA,IAAF;AAAQL,MAAAA,MAAR;AAAgBZ,MAAAA;AAAhB,KAA1B;AACD,GAtCgC,EAuCjC,CAACR,iBAAD,EAAoBE,EAApB,EAAwBC,MAAxB,EAAgCF,UAAhC,EAA4CK,KAA5C,CAvCiC,CAAnC;AA0CArB,EAAAA,SAAS,CACP,SAAS0C,kCAAT,GAA8C;AAC5C,QAAMC,QAAQ,GAAG,CACfxB,iBAAiB,CAACZ,aAAa,CAAC8B,SAAf,EAA0B9B,aAA1B,EAAyCa,OAAzC,CADF,CAAjB;AAGA,WAAO,MAAM;AACXuB,MAAAA,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;AACD,KAFD;AAGD,GARM,EASP,CAACzB,OAAD,EAAUD,iBAAV,CATO,CAAT;AAYAf,EAAAA,WAAW,CAACc,MAAM,CAAC4B,QAAR,EAAkB3C,UAAU,CAAC4C,IAA7B,EAAmCzB,eAAnC,CAAX;AAEA,sBAAO,yCAAP;AACD,CApEM;AAsEP,eAAeT,UAAf","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 } 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;\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(IrisGridPanel.COMPONENT, IrisGridPanel, hydrate),\n ];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [hydrate, registerComponent]\n );\n\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return <></>;\n};\n\nexport default GridPlugin;\n"],"file":"GridPlugin.js"}
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 } 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;\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(IrisGridPanel.COMPONENT, IrisGridPanel, hydrate),\n ];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [hydrate, registerComponent]\n );\n\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return <></>;\n};\n\nexport default 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,CAACZ,aAAa,CAAC8B,SAAf,EAA0B9B,aAA1B,EAAyCa,OAAzC,CADF,CAAjB;IAGA,OAAO,MAAM;MACXuB,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;IACD,CAFD;EAGD,CARM,EASP,CAACzB,OAAD,EAAUD,iBAAV,CATO,CAAT;EAYAf,WAAW,CAACc,MAAM,CAAC4B,QAAR,EAAkB3C,UAAU,CAAC4C,IAA7B,EAAmCzB,eAAnC,CAAX;EAEA,oBAAO,yCAAP;AACD,CApEM;AAsEP,eAAeT,UAAf"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/LinkerPlugin.tsx"],"names":["React","assertIsDashboardPluginProps","Linker","LinkerPlugin","props","id","layout","panelManager"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SACEC,4BADF,QAGO,sBAHP;OAIOC,M;AAIP,OAAO,IAAMC,YAAY,GAAIC,KAAD,IAA2C;AACrEH,EAAAA,4BAA4B,CAACG,KAAD,CAA5B;AACA,MAAM;AAAEC,IAAAA,EAAF;AAAMC,IAAAA,MAAN;AAAcC,IAAAA;AAAd,MAA+BH,KAArC;AACA,sBACE,oBAAC,MAAD;AAAQ,IAAA,MAAM,EAAEE,MAAhB;AAAwB,IAAA,gBAAgB,EAAED,EAA1C;AAA8C,IAAA,YAAY,EAAEE;AAA5D,IADF;AAGD,CANM;AAQP,eAAeJ,YAAf","sourcesContent":["import React from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n} from '@deephaven/dashboard';\nimport Linker from './linker/Linker';\n\nexport type LinkerPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport const LinkerPlugin = (props: LinkerPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id, layout, panelManager } = props;\n return (\n <Linker layout={layout} localDashboardId={id} panelManager={panelManager} />\n );\n};\n\nexport default LinkerPlugin;\n"],"file":"LinkerPlugin.js"}
1
+ {"version":3,"file":"LinkerPlugin.js","names":["React","assertIsDashboardPluginProps","Linker","LinkerPlugin","props","id","layout","panelManager"],"sources":["../src/LinkerPlugin.tsx"],"sourcesContent":["import React from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n} from '@deephaven/dashboard';\nimport Linker from './linker/Linker';\n\nexport type LinkerPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport const LinkerPlugin = (props: LinkerPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id, layout, panelManager } = props;\n return (\n <Linker layout={layout} localDashboardId={id} panelManager={panelManager} />\n );\n};\n\nexport default LinkerPlugin;\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SACEC,4BADF,QAGO,sBAHP;OAIOC,M;AAIP,OAAO,IAAMC,YAAY,GAAIC,KAAD,IAA2C;EACrEH,4BAA4B,CAACG,KAAD,CAA5B;EACA,IAAM;IAAEC,EAAF;IAAMC,MAAN;IAAcC;EAAd,IAA+BH,KAArC;EACA,oBACE,oBAAC,MAAD;IAAQ,MAAM,EAAEE,MAAhB;IAAwB,gBAAgB,EAAED,EAA1C;IAA8C,YAAY,EAAEE;EAA5D,EADF;AAGD,CANM;AAQP,eAAeJ,YAAf"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MarkdownPlugin.tsx"],"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"],"mappings":"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","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) {\n ({ panelState = null } = componentState as MarkdownComponentState);\n }\n if (\n !title ||\n !panelState ||\n !panelState.content ||\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 = title || 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"],"file":"MarkdownPlugin.js"}
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) {\n ({ panelState = null } = componentState as MarkdownComponentState);\n }\n if (\n !title ||\n !panelState ||\n !panelState.content ||\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 = title || 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":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/PandasPlugin.tsx"],"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"],"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;AACrER,EAAAA,4BAA4B,CAACQ,KAAD,CAA5B;AACA,MAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,EAAX;AAAeC,IAAAA,MAAf;AAAuBC,IAAAA;AAAvB,MAA6CJ,KAAnD;AAEA,MAAMK,eAAe,GAAGf,WAAW,CACjC,QAAgE;AAAA,QAA/D;AAAEgB,MAAAA,SAAF;AAAaC,MAAAA,KAAb;AAAoBC,MAAAA,OAAO,GAAGX,OAAO,CAACY,QAAR,EAA9B;AAAkDC,MAAAA;AAAlD,KAA+D;AAC9D,QAAM;AAAEC,MAAAA,IAAF;AAAQC,MAAAA;AAAR,QAAiBF,MAAvB;;AACA,QAAIE,IAAI,KAAKC,EAAE,CAACC,YAAH,CAAgBC,MAA7B,EAAqC;AACnC;AACD;;AAED,QAAMC,QAAQ,GAAG;AAAEL,MAAAA,IAAF;AAAQM,MAAAA,KAAK,EAAEN;AAAf,KAAjB;;AACA,QAAMO,SAAS,GAAG,MAChBX,KAAK,GAAGY,IAAR,CAAcF,KAAD,IAAkBrB,oBAAoB,CAACsB,SAArB,CAA+BD,KAA/B,CAA/B,CADF;;AAEA,QAAMG,MAAM,GAAG;AACbR,MAAAA,IAAI,EAAE,iBADO;AAEbS,MAAAA,SAAS,EAAEvB,WAAW,CAACwB,SAFV;AAGbtB,MAAAA,KAAK,EAAE;AACLuB,QAAAA,gBAAgB,EAAErB,EADb;AAELA,QAAAA,EAAE,EAAEM,OAFC;AAGLQ,QAAAA,QAHK;AAILE,QAAAA;AAJK,OAHM;AASbM,MAAAA,KAAK,EAAEb,IATM;AAUbT,MAAAA,EAAE,EAAEM;AAVS,KAAf;AAaA,QAAM;AAAEiB,MAAAA;AAAF,QAAWtB,MAAjB;AACAV,IAAAA,WAAW,CAACiC,aAAZ,CAA0B;AAAED,MAAAA,IAAF;AAAQL,MAAAA,MAAR;AAAgBd,MAAAA;AAAhB,KAA1B;AACD,GAzBgC,EA0BjC,CAACJ,EAAD,EAAKC,MAAL,CA1BiC,CAAnC;AA6BAZ,EAAAA,SAAS,CACP,SAASoC,kCAAT,GAA8C;AAC5C,QAAMC,QAAQ,GAAG,CACfxB,iBAAiB,CAACN,WAAW,CAACwB,SAAb,EAAwBxB,WAAxB,EAAqCG,OAArC,CADF,CAAjB;AAIA,WAAO,MAAM;AACX2B,MAAAA,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;AACD,KAFD;AAGD,GATM,EAUP,CAAC7B,OAAD,EAAUG,iBAAV,CAVO,CAAT;AAaAT,EAAAA,WAAW,CAACQ,MAAM,CAAC4B,QAAR,EAAkBrC,UAAU,CAACsC,IAA7B,EAAmC3B,eAAnC,CAAX;AAEA,sBAAO,yCAAP;AACD,CAjDM;AAmDP,eAAeN,YAAf","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 } from './panels';\n\nexport type PandasPluginProps = Partial<DashboardPluginComponentProps> & {\n hydrate: PanelHydrateFunction;\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"],"file":"PandasPlugin.js"}
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 } from './panels';\n\nexport type PandasPluginProps = Partial<DashboardPluginComponentProps> & {\n hydrate: PanelHydrateFunction;\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 +1 @@
1
- {"version":3,"sources":["../../src/controls/ControlType.js"],"names":["ControlType"],"mappings":";;AAAA,MAAMA,WAAN,CAAkB;;gBAAZA,W,qBACqB,6B;;gBADrBA,W,kBAGkB,0B;;gBAHlBA,W,cAKc,sB;;gBALdA,W,wBAOwB,gC;;AAG9B,eAAeA,WAAf","sourcesContent":["class ControlType {\n static DROPDOWN_FILTER = 'ControlType.DROPDOWN_FILTER';\n\n static INPUT_FILTER = 'ControlType.INPUT_FILTER';\n\n static MARKDOWN = 'ControlType.MARKDOWN';\n\n static FILTER_SET_MANAGER = 'ControlType.FILTER_SET_MANAGER';\n}\n\nexport default ControlType;\n"],"file":"ControlType.js"}
1
+ {"version":3,"file":"ControlType.js","names":["ControlType"],"sources":["../../src/controls/ControlType.js"],"sourcesContent":["class ControlType {\n static DROPDOWN_FILTER = 'ControlType.DROPDOWN_FILTER';\n\n static INPUT_FILTER = 'ControlType.INPUT_FILTER';\n\n static MARKDOWN = 'ControlType.MARKDOWN';\n\n static FILTER_SET_MANAGER = 'ControlType.FILTER_SET_MANAGER';\n}\n\nexport default ControlType;\n"],"mappings":";;AAAA,MAAMA,WAAN,CAAkB;;gBAAZA,W,qBACqB,6B;;gBADrBA,W,kBAGkB,0B;;gBAHlBA,W,cAKc,sB;;gBALdA,W,wBAOwB,gC;;AAG9B,eAAeA,WAAf"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/controls/dropdown-filter/DropdownFilter.jsx"],"names":["React","Component","PropTypes","FontAwesomeIcon","Button","CardFlip","SocketedButton","vsGear","APIPropTypes","TableUtils","memoizee","memoize","debounce","Log","UIPropTypes","log","module","UPDATE_DEBOUNCE","DropdownFilter","constructor","props","source","columns","filter","type","isCompatibleType","columnType","selectedColumn","selectedIndex","options","push","forEach","columnItem","index","name","getItemLabel","values","value","indexOf","PLACEHOLDER","map","val","length","shortType","substring","lastIndexOf","handleColumnChange","bind","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleDropdownKeyPress","handleValueChange","sendUpdate","dropdownRef","createRef","column","isValueShown","state","disableCancel","componentDidUpdate","prevProps","prevState","isLoaded","sourceUpdated","includes","resetValue","focusInput","componentWillUnmount","flush","event","target","debug2","setState","allColumns","getCompatibleColumns","key","preventDefault","stopPropagation","valueIndex","parseInt","error","showSettings","current","handleMouseEnter","onSourceMouseEnter","handleMouseLeave","onSourceMouseLeave","focus","clearFilter","setFilterState","onChange","render","disableLinking","isLinkerActive","onColumnSelected","settingsError","columnSelectionDisabled","isLinked","sourceButtonLabel","columnName","SOURCE_BUTTON_PLACEHOLDER","filterTitle","columnOptions","getColumnOptions","valueOptions","getValueOptions","selectedOption","getSelectedOptionIndex","disableSave","isFlipped","SOURCE_BUTTON_CLASS_NAME","propTypes","Column","arrayOf","isRequired","func","bool","string","LinkPoint","defaultProps"],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CardFlip, SocketedButton } from '@deephaven/components';\nimport { vsGear } from '@deephaven/icons';\nimport { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport memoizee from 'memoizee';\nimport memoize from 'memoize-one';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { UIPropTypes } from '../../prop-types';\nimport './DropdownFilter.scss';\n\nconst log = Log.module('DropdownFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nclass DropdownFilter extends Component {\n static PLACEHOLDER = 'Select a value...';\n\n static SOURCE_BUTTON_CLASS_NAME = 'btn-dropdown-filter-selector';\n\n static SOURCE_BUTTON_PLACEHOLDER = 'Select a column';\n\n constructor(props) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleDropdownKeyPress = this.handleDropdownKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n\n this.sendUpdate = debounce(this.sendUpdate.bind(this), UPDATE_DEBOUNCE);\n\n this.dropdownRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n selectedColumn: column,\n disableCancel: !isValueShown,\n isValueShown,\n value,\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { source, values, isLoaded } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (isLoaded) {\n if (source !== prevProps.source) {\n this.sourceUpdated();\n }\n\n if (\n values !== prevProps.values &&\n value !== '' &&\n !values.includes(value)\n ) {\n // Value list loaded, but doesn't contain the current value\n this.resetValue();\n }\n\n if (isValueShown !== prevState.isValueShown) {\n if (isValueShown) {\n this.focusInput();\n }\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n }\n\n componentWillUnmount() {\n this.sendUpdate.flush();\n }\n\n getCompatibleColumns = memoize((source, columns) =>\n source\n ? columns.filter(({ type }) =>\n TableUtils.isCompatibleType(type, source.columnType)\n )\n : []\n );\n\n getColumnOptions = memoize((columns, selectedColumn) => {\n let selectedIndex = -1;\n const options = [];\n options.push(\n <option key=\"placeholder\" value=\"-1\">\n Select a column\n </option>\n );\n columns.forEach((columnItem, index) => {\n options.push(\n <option key={`${columnItem.name}/${columnItem.type}`} value={index}>\n {this.getItemLabel(columns, index)}\n </option>\n );\n if (\n selectedColumn !== null &&\n columnItem.name === selectedColumn.name &&\n columnItem.type === selectedColumn.type\n ) {\n selectedIndex = index;\n }\n });\n return [options, selectedIndex];\n });\n\n getSelectedOptionIndex = memoize((values, value) => values.indexOf(value));\n\n getValueOptions = memoize(values => [\n <option value=\"-1\" key=\"-1\">\n {DropdownFilter.PLACEHOLDER}\n </option>,\n ...values.map((val, index) => (\n <option\n value={index}\n // eslint-disable-next-line react/no-array-index-key\n key={`${index}/${val}`}\n >\n {val}\n </option>\n )),\n ]);\n\n getItemLabel = memoizee((columns, index) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event) {\n const { value } = event.target;\n log.debug2('handleColumnChange', value);\n if (value < 0) {\n this.setState({\n selectedColumn: null,\n });\n return;\n }\n const { columns: allColumns, source } = this.props;\n const columns = this.getCompatibleColumns(source, allColumns);\n this.setState({\n selectedColumn: columns[value],\n });\n }\n\n handleDropdownKeyPress(event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n\n log.debug2('handleDropdownKeyPress');\n\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n }\n\n handleValueChange(event) {\n const { value: valueIndex } = event.target;\n const index = parseInt(valueIndex, 10);\n // Default empty string value for 'clear filter'\n let value = '';\n const { values } = this.props;\n if (index === -1) {\n log.debug2('Selected default item');\n } else if (index >= 0 && index < values.length) {\n value = values[index];\n } else {\n log.error('Invalid index', index, values);\n return;\n }\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel() {\n this.setState(({ column }) => ({\n selectedColumn: column,\n isValueShown: true,\n }));\n }\n\n handleSettingsSave() {\n this.setState(({ column, selectedColumn, value }) => ({\n column: selectedColumn,\n // Reset value if column changed\n value: column === selectedColumn ? value : '',\n isValueShown: true,\n disableCancel: false,\n }));\n }\n\n handleSettingsClick(event) {\n event.stopPropagation();\n this.showSettings();\n }\n\n handleBackgroundClick(event) {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n\n handleMouseEnter() {\n const { onSourceMouseEnter } = this.props;\n onSourceMouseEnter();\n }\n\n handleMouseLeave() {\n const { onSourceMouseLeave } = this.props;\n onSourceMouseLeave();\n }\n\n sourceUpdated() {\n this.setState({\n column: null,\n selectedColumn: null,\n isValueShown: false,\n disableCancel: true,\n value: '',\n });\n }\n\n showSettings() {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n }\n\n focusInput() {\n if (this.dropdownRef.current !== null) {\n this.dropdownRef.current.focus();\n }\n }\n\n resetValue() {\n this.setState({ value: '' });\n }\n\n // Called by the parent component via ref\n clearFilter() {\n this.resetValue();\n }\n\n setFilterState({ name, type, value, isValueShown }) {\n const column = name != null && type != null ? { name, type } : null;\n this.setState({ column, value, isValueShown });\n }\n\n sendUpdate() {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value });\n }\n\n render() {\n const {\n columns: allColumns,\n disableLinking,\n isLinkerActive,\n isLoaded,\n source,\n onColumnSelected,\n onSourceMouseEnter,\n onSourceMouseLeave,\n values,\n settingsError,\n } = this.props;\n const {\n column,\n disableCancel,\n isValueShown,\n selectedColumn,\n value,\n } = this.state;\n const columnSelectionDisabled = source === null;\n const columns = this.getCompatibleColumns(source, allColumns);\n const isLinked = source != null;\n const sourceButtonLabel =\n source?.columnName ?? DropdownFilter.SOURCE_BUTTON_PLACEHOLDER;\n const filterTitle = column != null ? `${column.name} Filter` : null;\n const [columnOptions, selectedIndex] = this.getColumnOptions(\n columns,\n selectedColumn\n );\n const valueOptions = this.getValueOptions(values);\n const selectedOption = this.getSelectedOptionIndex(values, value);\n const disableSave = !isLinked || selectedColumn == null;\n\n const isFlipped = isValueShown && !isLinkerActive;\n\n return (\n <CardFlip\n className=\"dropdown-filter fill-parent-absolute\"\n isFlipped={isFlipped}\n >\n <div className=\"dropdown-filter-settings-card\">\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-settings-grid\">\n <label>Source Column</label>\n <SocketedButton\n isLinked={isLinked}\n onClick={onColumnSelected}\n onMouseEnter={onSourceMouseEnter}\n onMouseLeave={onSourceMouseLeave}\n className={DropdownFilter.SOURCE_BUTTON_CLASS_NAME}\n disabled={disableLinking}\n >\n {sourceButtonLabel}\n </SocketedButton>\n\n <div className=\"text-muted small\">\n Select a source column for the list by linking to a table.\n </div>\n\n <label>Filter Column</label>\n <select\n value={selectedIndex}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n disabled={columnSelectionDisabled}\n >\n {columnOptions}\n </select>\n <div className=\"text-muted small\">\n Dropdown filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n {settingsError && (\n <div className=\"error-message text-center\">{settingsError}</div>\n )}\n {isLinked && (\n <div className=\"dropdown-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n type=\"button\"\n onClick={this.handleSettingsCancel}\n disabled={disableCancel || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive ? 'Cancel disabled while linker open' : null\n }\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n type=\"button\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={disableSave || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive ? 'Save disabled while linker open' : null\n }\n >\n Save\n </Button>\n </div>\n )}\n </div>\n </div>\n\n <div\n className=\"dropdown-filter-value-card\"\n onClick={this.handleBackgroundClick}\n >\n {isLoaded && (\n <>\n <div className=\"dropdown-filter-column\">\n <div className=\"dropdown-filter-column-title\">\n {filterTitle}\n </div>\n </div>\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-value-input d-flex flex-column justify-content-center\">\n <select\n className=\"custom-select\"\n value={selectedOption}\n ref={this.dropdownRef}\n onChange={this.handleValueChange}\n onKeyPress={this.handleDropdownKeyPress}\n >\n {valueOptions}\n </select>\n </div>\n {settingsError && (\n <div className=\"error-message mt-3 text-center\">\n {settingsError}\n </div>\n )}\n </div>\n <div className=\"dropdown-filter-menu\">\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon m-2 px-2\"\n onClick={this.handleSettingsClick}\n >\n <FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />\n </button>\n </div>\n </>\n )}\n </div>\n </CardFlip>\n );\n }\n}\n\nDropdownFilter.propTypes = {\n column: APIPropTypes.Column,\n columns: PropTypes.arrayOf(APIPropTypes.Column).isRequired,\n onSourceMouseEnter: PropTypes.func,\n onSourceMouseLeave: PropTypes.func,\n disableLinking: PropTypes.bool,\n isLinkerActive: PropTypes.bool,\n isLoaded: PropTypes.bool,\n isValueShown: PropTypes.bool,\n settingsError: PropTypes.string,\n source: UIPropTypes.LinkPoint,\n value: PropTypes.string,\n values: PropTypes.arrayOf(PropTypes.string),\n onChange: PropTypes.func.isRequired,\n onColumnSelected: PropTypes.func,\n};\n\nDropdownFilter.defaultProps = {\n column: null,\n disableLinking: false,\n isLinkerActive: false,\n isLoaded: false,\n isValueShown: false,\n\n settingsError: null,\n source: null,\n value: '',\n values: [],\n onColumnSelected: () => {},\n onSourceMouseEnter: () => {},\n onSourceMouseLeave: () => {},\n};\n\nexport default DropdownFilter;\n"],"file":"DropdownFilter.js"}
1
+ {"version":3,"file":"DropdownFilter.js","names":["React","Component","PropTypes","FontAwesomeIcon","Button","CardFlip","SocketedButton","vsGear","APIPropTypes","TableUtils","memoizee","memoize","debounce","Log","UIPropTypes","log","module","UPDATE_DEBOUNCE","DropdownFilter","constructor","props","source","columns","filter","type","isCompatibleType","columnType","selectedColumn","selectedIndex","options","push","forEach","columnItem","index","name","getItemLabel","values","value","indexOf","PLACEHOLDER","map","val","length","shortType","substring","lastIndexOf","handleColumnChange","bind","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleDropdownKeyPress","handleValueChange","sendUpdate","dropdownRef","createRef","column","isValueShown","state","disableCancel","componentDidUpdate","prevProps","prevState","isLoaded","sourceUpdated","includes","resetValue","focusInput","componentWillUnmount","flush","event","target","debug2","setState","allColumns","getCompatibleColumns","key","preventDefault","stopPropagation","valueIndex","parseInt","error","showSettings","current","handleMouseEnter","onSourceMouseEnter","handleMouseLeave","onSourceMouseLeave","focus","clearFilter","setFilterState","onChange","render","disableLinking","isLinkerActive","onColumnSelected","settingsError","columnSelectionDisabled","isLinked","sourceButtonLabel","columnName","SOURCE_BUTTON_PLACEHOLDER","filterTitle","columnOptions","getColumnOptions","valueOptions","getValueOptions","selectedOption","getSelectedOptionIndex","disableSave","isFlipped","SOURCE_BUTTON_CLASS_NAME","propTypes","Column","arrayOf","isRequired","func","bool","string","LinkPoint","defaultProps"],"sources":["../../../src/controls/dropdown-filter/DropdownFilter.jsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CardFlip, SocketedButton } from '@deephaven/components';\nimport { vsGear } from '@deephaven/icons';\nimport { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport memoizee from 'memoizee';\nimport memoize from 'memoize-one';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { UIPropTypes } from '../../prop-types';\nimport './DropdownFilter.scss';\n\nconst log = Log.module('DropdownFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nclass DropdownFilter extends Component {\n static PLACEHOLDER = 'Select a value...';\n\n static SOURCE_BUTTON_CLASS_NAME = 'btn-dropdown-filter-selector';\n\n static SOURCE_BUTTON_PLACEHOLDER = 'Select a column';\n\n constructor(props) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleDropdownKeyPress = this.handleDropdownKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n\n this.sendUpdate = debounce(this.sendUpdate.bind(this), UPDATE_DEBOUNCE);\n\n this.dropdownRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n selectedColumn: column,\n disableCancel: !isValueShown,\n isValueShown,\n value,\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { source, values, isLoaded } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (isLoaded) {\n if (source !== prevProps.source) {\n this.sourceUpdated();\n }\n\n if (\n values !== prevProps.values &&\n value !== '' &&\n !values.includes(value)\n ) {\n // Value list loaded, but doesn't contain the current value\n this.resetValue();\n }\n\n if (isValueShown !== prevState.isValueShown) {\n if (isValueShown) {\n this.focusInput();\n }\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n }\n\n componentWillUnmount() {\n this.sendUpdate.flush();\n }\n\n getCompatibleColumns = memoize((source, columns) =>\n source\n ? columns.filter(({ type }) =>\n TableUtils.isCompatibleType(type, source.columnType)\n )\n : []\n );\n\n getColumnOptions = memoize((columns, selectedColumn) => {\n let selectedIndex = -1;\n const options = [];\n options.push(\n <option key=\"placeholder\" value=\"-1\">\n Select a column\n </option>\n );\n columns.forEach((columnItem, index) => {\n options.push(\n <option key={`${columnItem.name}/${columnItem.type}`} value={index}>\n {this.getItemLabel(columns, index)}\n </option>\n );\n if (\n selectedColumn !== null &&\n columnItem.name === selectedColumn.name &&\n columnItem.type === selectedColumn.type\n ) {\n selectedIndex = index;\n }\n });\n return [options, selectedIndex];\n });\n\n getSelectedOptionIndex = memoize((values, value) => values.indexOf(value));\n\n getValueOptions = memoize(values => [\n <option value=\"-1\" key=\"-1\">\n {DropdownFilter.PLACEHOLDER}\n </option>,\n ...values.map((val, index) => (\n <option\n value={index}\n // eslint-disable-next-line react/no-array-index-key\n key={`${index}/${val}`}\n >\n {val}\n </option>\n )),\n ]);\n\n getItemLabel = memoizee((columns, index) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event) {\n const { value } = event.target;\n log.debug2('handleColumnChange', value);\n if (value < 0) {\n this.setState({\n selectedColumn: null,\n });\n return;\n }\n const { columns: allColumns, source } = this.props;\n const columns = this.getCompatibleColumns(source, allColumns);\n this.setState({\n selectedColumn: columns[value],\n });\n }\n\n handleDropdownKeyPress(event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n\n log.debug2('handleDropdownKeyPress');\n\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n }\n\n handleValueChange(event) {\n const { value: valueIndex } = event.target;\n const index = parseInt(valueIndex, 10);\n // Default empty string value for 'clear filter'\n let value = '';\n const { values } = this.props;\n if (index === -1) {\n log.debug2('Selected default item');\n } else if (index >= 0 && index < values.length) {\n value = values[index];\n } else {\n log.error('Invalid index', index, values);\n return;\n }\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel() {\n this.setState(({ column }) => ({\n selectedColumn: column,\n isValueShown: true,\n }));\n }\n\n handleSettingsSave() {\n this.setState(({ column, selectedColumn, value }) => ({\n column: selectedColumn,\n // Reset value if column changed\n value: column === selectedColumn ? value : '',\n isValueShown: true,\n disableCancel: false,\n }));\n }\n\n handleSettingsClick(event) {\n event.stopPropagation();\n this.showSettings();\n }\n\n handleBackgroundClick(event) {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n\n handleMouseEnter() {\n const { onSourceMouseEnter } = this.props;\n onSourceMouseEnter();\n }\n\n handleMouseLeave() {\n const { onSourceMouseLeave } = this.props;\n onSourceMouseLeave();\n }\n\n sourceUpdated() {\n this.setState({\n column: null,\n selectedColumn: null,\n isValueShown: false,\n disableCancel: true,\n value: '',\n });\n }\n\n showSettings() {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n }\n\n focusInput() {\n if (this.dropdownRef.current !== null) {\n this.dropdownRef.current.focus();\n }\n }\n\n resetValue() {\n this.setState({ value: '' });\n }\n\n // Called by the parent component via ref\n clearFilter() {\n this.resetValue();\n }\n\n setFilterState({ name, type, value, isValueShown }) {\n const column = name != null && type != null ? { name, type } : null;\n this.setState({ column, value, isValueShown });\n }\n\n sendUpdate() {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value });\n }\n\n render() {\n const {\n columns: allColumns,\n disableLinking,\n isLinkerActive,\n isLoaded,\n source,\n onColumnSelected,\n onSourceMouseEnter,\n onSourceMouseLeave,\n values,\n settingsError,\n } = this.props;\n const {\n column,\n disableCancel,\n isValueShown,\n selectedColumn,\n value,\n } = this.state;\n const columnSelectionDisabled = source === null;\n const columns = this.getCompatibleColumns(source, allColumns);\n const isLinked = source != null;\n const sourceButtonLabel =\n source?.columnName ?? DropdownFilter.SOURCE_BUTTON_PLACEHOLDER;\n const filterTitle = column != null ? `${column.name} Filter` : null;\n const [columnOptions, selectedIndex] = this.getColumnOptions(\n columns,\n selectedColumn\n );\n const valueOptions = this.getValueOptions(values);\n const selectedOption = this.getSelectedOptionIndex(values, value);\n const disableSave = !isLinked || selectedColumn == null;\n\n const isFlipped = isValueShown && !isLinkerActive;\n\n return (\n <CardFlip\n className=\"dropdown-filter fill-parent-absolute\"\n isFlipped={isFlipped}\n >\n <div className=\"dropdown-filter-settings-card\">\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-settings-grid\">\n <label>Source Column</label>\n <SocketedButton\n isLinked={isLinked}\n onClick={onColumnSelected}\n onMouseEnter={onSourceMouseEnter}\n onMouseLeave={onSourceMouseLeave}\n className={DropdownFilter.SOURCE_BUTTON_CLASS_NAME}\n disabled={disableLinking}\n >\n {sourceButtonLabel}\n </SocketedButton>\n\n <div className=\"text-muted small\">\n Select a source column for the list by linking to a table.\n </div>\n\n <label>Filter Column</label>\n <select\n value={selectedIndex}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n disabled={columnSelectionDisabled}\n >\n {columnOptions}\n </select>\n <div className=\"text-muted small\">\n Dropdown filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n {settingsError && (\n <div className=\"error-message text-center\">{settingsError}</div>\n )}\n {isLinked && (\n <div className=\"dropdown-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n type=\"button\"\n onClick={this.handleSettingsCancel}\n disabled={disableCancel || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive ? 'Cancel disabled while linker open' : null\n }\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n type=\"button\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={disableSave || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive ? 'Save disabled while linker open' : null\n }\n >\n Save\n </Button>\n </div>\n )}\n </div>\n </div>\n\n <div\n className=\"dropdown-filter-value-card\"\n onClick={this.handleBackgroundClick}\n >\n {isLoaded && (\n <>\n <div className=\"dropdown-filter-column\">\n <div className=\"dropdown-filter-column-title\">\n {filterTitle}\n </div>\n </div>\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-value-input d-flex flex-column justify-content-center\">\n <select\n className=\"custom-select\"\n value={selectedOption}\n ref={this.dropdownRef}\n onChange={this.handleValueChange}\n onKeyPress={this.handleDropdownKeyPress}\n >\n {valueOptions}\n </select>\n </div>\n {settingsError && (\n <div className=\"error-message mt-3 text-center\">\n {settingsError}\n </div>\n )}\n </div>\n <div className=\"dropdown-filter-menu\">\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon m-2 px-2\"\n onClick={this.handleSettingsClick}\n >\n <FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />\n </button>\n </div>\n </>\n )}\n </div>\n </CardFlip>\n );\n }\n}\n\nDropdownFilter.propTypes = {\n column: APIPropTypes.Column,\n columns: PropTypes.arrayOf(APIPropTypes.Column).isRequired,\n onSourceMouseEnter: PropTypes.func,\n onSourceMouseLeave: PropTypes.func,\n disableLinking: PropTypes.bool,\n isLinkerActive: PropTypes.bool,\n isLoaded: PropTypes.bool,\n isValueShown: PropTypes.bool,\n settingsError: PropTypes.string,\n source: UIPropTypes.LinkPoint,\n value: PropTypes.string,\n values: PropTypes.arrayOf(PropTypes.string),\n onChange: PropTypes.func.isRequired,\n onColumnSelected: PropTypes.func,\n};\n\nDropdownFilter.defaultProps = {\n column: null,\n disableLinking: false,\n isLinkerActive: false,\n isLoaded: false,\n isValueShown: false,\n\n settingsError: null,\n source: null,\n value: '',\n values: [],\n onColumnSelected: () => {},\n onSourceMouseEnter: () => {},\n onSourceMouseLeave: () => {},\n};\n\nexport default DropdownFilter;\n"],"mappings":"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"}