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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/dist/ChartBuilderPlugin.d.ts.map +1 -1
  2. package/dist/ChartBuilderPlugin.js +2 -1
  3. package/dist/ChartBuilderPlugin.js.map +1 -1
  4. package/dist/ConsolePlugin.d.ts +1 -0
  5. package/dist/ConsolePlugin.d.ts.map +1 -1
  6. package/dist/ConsolePlugin.js +5 -3
  7. package/dist/ConsolePlugin.js.map +1 -1
  8. package/dist/FilterPlugin.js +1 -1
  9. package/dist/FilterPlugin.js.map +1 -1
  10. package/dist/controls/ControlType.d.ts +1 -1
  11. package/dist/controls/ControlType.d.ts.map +1 -1
  12. package/dist/controls/ControlType.js.map +1 -1
  13. package/dist/controls/dropdown-filter/DropdownFilter.d.ts +73 -81
  14. package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
  15. package/dist/controls/dropdown-filter/DropdownFilter.js +41 -58
  16. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  17. package/dist/controls/input-filter/InputFilter.d.ts +46 -46
  18. package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
  19. package/dist/controls/input-filter/InputFilter.js +32 -39
  20. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  21. package/dist/controls/markdown/MarkdownContainer.d.ts +11 -16
  22. package/dist/controls/markdown/MarkdownContainer.d.ts.map +1 -1
  23. package/dist/controls/markdown/MarkdownContainer.js +5 -8
  24. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  25. package/dist/controls/markdown/MarkdownEditor.d.ts +17 -19
  26. package/dist/controls/markdown/MarkdownEditor.d.ts.map +1 -1
  27. package/dist/controls/markdown/MarkdownEditor.js +5 -8
  28. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  29. package/dist/controls/markdown/MarkdownStartPage.d.ts +24 -28
  30. package/dist/controls/markdown/MarkdownStartPage.d.ts.map +1 -1
  31. package/dist/controls/markdown/MarkdownStartPage.js +19 -23
  32. package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
  33. package/dist/controls/markdown/MarkdownUtils.d.ts +4 -4
  34. package/dist/controls/markdown/MarkdownUtils.d.ts.map +1 -1
  35. package/dist/controls/markdown/MarkdownUtils.js +2 -2
  36. package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
  37. package/dist/events/ChartEvent.d.ts +1 -1
  38. package/dist/events/ChartEvent.d.ts.map +1 -1
  39. package/dist/events/ChartEvent.js.map +1 -1
  40. package/dist/events/ConsoleEvent.d.ts +1 -1
  41. package/dist/events/ConsoleEvent.d.ts.map +1 -1
  42. package/dist/events/ConsoleEvent.js.map +1 -1
  43. package/dist/events/InputFilterEvent.d.ts +1 -1
  44. package/dist/events/InputFilterEvent.d.ts.map +1 -1
  45. package/dist/events/InputFilterEvent.js.map +1 -1
  46. package/dist/events/IrisGridEvent.d.ts +1 -1
  47. package/dist/events/IrisGridEvent.d.ts.map +1 -1
  48. package/dist/events/IrisGridEvent.js.map +1 -1
  49. package/dist/events/NotebookEvent.d.ts +1 -1
  50. package/dist/events/NotebookEvent.d.ts.map +1 -1
  51. package/dist/events/NotebookEvent.js.map +1 -1
  52. package/dist/events/PQEvent.d.ts +1 -1
  53. package/dist/events/PQEvent.d.ts.map +1 -1
  54. package/dist/events/PQEvent.js.map +1 -1
  55. package/dist/events/PandasEvent.d.ts +1 -1
  56. package/dist/events/PandasEvent.d.ts.map +1 -1
  57. package/dist/events/PandasEvent.js.map +1 -1
  58. package/dist/events/TabEvent.d.ts +1 -1
  59. package/dist/events/TabEvent.d.ts.map +1 -1
  60. package/dist/events/TabEvent.js.map +1 -1
  61. package/dist/events/index.d.ts +8 -8
  62. package/dist/events/index.d.ts.map +1 -1
  63. package/dist/events/index.js.map +1 -1
  64. package/dist/linker/ColumnSelectionValidator.d.ts +4 -0
  65. package/dist/linker/ColumnSelectionValidator.d.ts.map +1 -0
  66. package/dist/linker/ColumnSelectionValidator.js +2 -0
  67. package/dist/linker/ColumnSelectionValidator.js.map +1 -0
  68. package/dist/linker/Linker.d.ts +11 -11
  69. package/dist/linker/Linker.js +1 -1
  70. package/dist/linker/Linker.js.map +1 -1
  71. package/dist/linker/LinkerUtils.d.ts +3 -3
  72. package/dist/linker/LinkerUtils.d.ts.map +1 -1
  73. package/dist/linker/LinkerUtils.js.map +1 -1
  74. package/dist/linker/ToolType.d.ts +1 -1
  75. package/dist/linker/ToolType.d.ts.map +1 -1
  76. package/dist/linker/ToolType.js.map +1 -1
  77. package/dist/panels/ChartColumnSelectorOverlay.d.ts +22 -26
  78. package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -1
  79. package/dist/panels/ChartColumnSelectorOverlay.js +5 -14
  80. package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
  81. package/dist/panels/ChartFilterOverlay.d.ts +27 -21
  82. package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
  83. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  84. package/dist/panels/ChartPanel.d.ts +149 -152
  85. package/dist/panels/ChartPanel.d.ts.map +1 -1
  86. package/dist/panels/ChartPanel.js +65 -73
  87. package/dist/panels/ChartPanel.js.map +1 -1
  88. package/dist/panels/CommandHistoryPanel.d.ts +41 -56
  89. package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
  90. package/dist/panels/CommandHistoryPanel.js +13 -35
  91. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  92. package/dist/panels/ConsolePanel.d.ts +63 -73
  93. package/dist/panels/ConsolePanel.d.ts.map +1 -1
  94. package/dist/panels/ConsolePanel.js +67 -83
  95. package/dist/panels/ConsolePanel.js.map +1 -1
  96. package/dist/panels/DropdownFilterPanel.d.ts +110 -106
  97. package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
  98. package/dist/panels/DropdownFilterPanel.js +60 -62
  99. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  100. package/dist/panels/FileExplorerPanel.d.ts +5 -7
  101. package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
  102. package/dist/panels/FileExplorerPanel.js.map +1 -1
  103. package/dist/panels/FilterSetManager.d.ts +3 -1
  104. package/dist/panels/FilterSetManager.d.ts.map +1 -1
  105. package/dist/panels/FilterSetManager.js.map +1 -1
  106. package/dist/panels/FilterSetManagerPanel.d.ts +83 -62
  107. package/dist/panels/FilterSetManagerPanel.d.ts.map +1 -1
  108. package/dist/panels/FilterSetManagerPanel.js +58 -36
  109. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  110. package/dist/panels/InputFilterPanel.d.ts +50 -51
  111. package/dist/panels/InputFilterPanel.d.ts.map +1 -1
  112. package/dist/panels/InputFilterPanel.js +35 -34
  113. package/dist/panels/InputFilterPanel.js.map +1 -1
  114. package/dist/panels/IrisGridPanel.d.ts +191 -178
  115. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  116. package/dist/panels/IrisGridPanel.js +150 -179
  117. package/dist/panels/IrisGridPanel.js.map +1 -1
  118. package/dist/panels/LogPanel.d.ts +29 -45
  119. package/dist/panels/LogPanel.d.ts.map +1 -1
  120. package/dist/panels/LogPanel.js +9 -11
  121. package/dist/panels/LogPanel.js.map +1 -1
  122. package/dist/panels/MarkdownNotebook.d.ts +34 -34
  123. package/dist/panels/MarkdownNotebook.d.ts.map +1 -1
  124. package/dist/panels/MarkdownNotebook.js +21 -18
  125. package/dist/panels/MarkdownNotebook.js.map +1 -1
  126. package/dist/panels/MarkdownPanel.d.ts +41 -47
  127. package/dist/panels/MarkdownPanel.d.ts.map +1 -1
  128. package/dist/panels/MarkdownPanel.js +17 -19
  129. package/dist/panels/MarkdownPanel.js.map +1 -1
  130. package/dist/panels/NotebookPanel.d.ts +137 -117
  131. package/dist/panels/NotebookPanel.d.ts.map +1 -1
  132. package/dist/panels/NotebookPanel.js +94 -68
  133. package/dist/panels/NotebookPanel.js.map +1 -1
  134. package/dist/panels/PandasPanel.d.ts +20 -17
  135. package/dist/panels/PandasPanel.d.ts.map +1 -1
  136. package/dist/panels/PandasPanel.js +17 -13
  137. package/dist/panels/PandasPanel.js.map +1 -1
  138. package/dist/panels/Panel.d.ts +87 -123
  139. package/dist/panels/Panel.d.ts.map +1 -1
  140. package/dist/panels/Panel.js +29 -54
  141. package/dist/panels/Panel.js.map +1 -1
  142. package/dist/panels/PanelContextMenu.d.ts +16 -31
  143. package/dist/panels/PanelContextMenu.d.ts.map +1 -1
  144. package/dist/panels/PanelContextMenu.js +12 -15
  145. package/dist/panels/PanelContextMenu.js.map +1 -1
  146. package/dist/panels/RenameDialog.d.ts +26 -28
  147. package/dist/panels/RenameDialog.d.ts.map +1 -1
  148. package/dist/panels/RenameDialog.js +15 -19
  149. package/dist/panels/RenameDialog.js.map +1 -1
  150. package/dist/panels/WidgetPanel.d.ts +72 -106
  151. package/dist/panels/WidgetPanel.d.ts.map +1 -1
  152. package/dist/panels/WidgetPanel.js +17 -47
  153. package/dist/panels/WidgetPanel.js.map +1 -1
  154. package/dist/panels/WidgetPanelTooltip.d.ts +29 -22
  155. package/dist/panels/WidgetPanelTooltip.d.ts.map +1 -1
  156. package/dist/panels/WidgetPanelTooltip.js +1 -1
  157. package/dist/panels/WidgetPanelTooltip.js.map +1 -1
  158. package/dist/prop-types/CommonPropTypes.d.ts +4 -4
  159. package/dist/prop-types/CommonPropTypes.d.ts.map +1 -1
  160. package/dist/prop-types/CommonPropTypes.js +1 -1
  161. package/dist/prop-types/CommonPropTypes.js.map +1 -1
  162. package/dist/prop-types/UIPropTypes.d.ts +2 -7
  163. package/dist/prop-types/UIPropTypes.d.ts.map +1 -1
  164. package/dist/prop-types/UIPropTypes.js +0 -7
  165. package/dist/prop-types/UIPropTypes.js.map +1 -1
  166. package/dist/prop-types/index.d.ts +2 -2
  167. package/dist/prop-types/index.d.ts.map +1 -1
  168. package/dist/prop-types/index.js.map +1 -1
  169. package/dist/redux/actionTypes.d.ts +1 -1
  170. package/dist/redux/actionTypes.d.ts.map +1 -1
  171. package/dist/redux/actionTypes.js.map +1 -1
  172. package/dist/redux/actions.d.ts +63 -8
  173. package/dist/redux/actions.d.ts.map +1 -1
  174. package/dist/redux/actions.js +17 -17
  175. package/dist/redux/actions.js.map +1 -1
  176. package/dist/redux/reducers/index.d.ts +3 -4
  177. package/dist/redux/reducers/index.d.ts.map +1 -1
  178. package/dist/redux/reducers/index.js.map +1 -1
  179. package/dist/redux/reducers/sessionWrapper.d.ts +1 -1
  180. package/dist/redux/reducers/sessionWrapper.d.ts.map +1 -1
  181. package/dist/redux/reducers/sessionWrapper.js.map +1 -1
  182. package/dist/redux/selectors.d.ts +63 -9
  183. package/dist/redux/selectors.d.ts.map +1 -1
  184. package/dist/redux/selectors.js +24 -24
  185. package/dist/redux/selectors.js.map +1 -1
  186. package/package.json +20 -17
@@ -1 +1 @@
1
- {"version":3,"file":"ChartBuilderPlugin.d.ts","sourceRoot":"","sources":["../src/ChartBuilderPlugin.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,6BAA6B,EAG9B,MAAM,sBAAsB,CAAC;AAM9B,oBAAY,uBAAuB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAE7E;;;GAGG;AACH,eAAO,MAAM,kBAAkB,UACtB,uBAAuB,KAC7B,WAmDF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"ChartBuilderPlugin.d.ts","sourceRoot":"","sources":["../src/ChartBuilderPlugin.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,6BAA6B,EAG9B,MAAM,sBAAsB,CAAC;AAM9B,oBAAY,uBAAuB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAE7E;;;GAGG;AACH,eAAO,MAAM,kBAAkB,UACtB,uBAAuB,KAC7B,WAoDF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -25,7 +25,8 @@ export var ChartBuilderPlugin = props => {
25
25
  settings
26
26
  } = metadata;
27
27
 
28
- var makeModel = () => ChartModelFactory.makeModelFromSettings(settings, table);
28
+ var makeModel = () => // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ ChartModelFactory.makeModelFromSettings(settings, table);
29
30
 
30
31
  var title = ChartUtils.titleFromSettings(settings);
31
32
  var config = {
@@ -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,"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,MAChB;AACAlB,IAAAA,iBAAiB,CAACmB,qBAAlB,CAAwCF,QAAxC,EAAyDD,KAAzD,CAFF;;AAGA,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,GA1CkC,EA2CnC,CAACZ,EAAD,EAAKC,MAAL,CA3CmC,CAArC;AA8CAP,EAAAA,WAAW,CAACO,MAAM,CAACkB,QAAR,EAAkBvB,aAAa,CAACwB,YAAhC,EAA8ClB,iBAA9C,CAAX;AAEA,sBAAO,yCAAP;AACD,CAtDM;AAwDP,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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ChartModelFactory.makeModelFromSettings(settings as any, table);\n const title = ChartUtils.titleFromSettings(settings);\n\n const config = {\n type: 'react-component',\n component: ChartPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config });\n },\n [id, layout]\n );\n\n useListener(layout.eventHub, IrisGridEvent.CREATE_CHART, handleCreateChart);\n\n return <></>;\n};\n\nexport default ChartBuilderPlugin;\n"],"file":"ChartBuilderPlugin.js"}
@@ -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,"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","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"],"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 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"],"file":"ConsolePlugin.js"}
@@ -63,7 +63,7 @@ export var FilterPlugin = props => {
63
63
  /**
64
64
  * Handler for the COLUMNS_CHANGED event.
65
65
  * @param panel The component that's emitting the filter change
66
- * @param {Column|Array<Column>} columns The columns in this panel
66
+ * @param columns The columns in this panel
67
67
  */
68
68
 
69
69
  var handleColumnsChanged = useCallback((panel, columns) => {
@@ -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,"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":"AAAA,OAAOA,KAAP,IAA2BC,WAA3B,EAAwCC,SAAxC,EAAmDC,QAAnD,QAAmE,OAAnE;AACA,SAASC,WAAT,QAA4B,aAA5B;AACA,OAAOC,OAAP,MAAoB,SAApB;AACA,SACEC,4BADF,EAGEC,WAHF,EAIEC,UAJF,EAKEC,mBALF,EAMEC,WANF,QAOO,sBAPP;AAQA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SAASC,SAAT,QAA0B,kBAA1B;SACSC,gB;SAEPC,mB,EACAC,qB,EACAC,gB;AAGF,IAAMC,GAAG,GAAGN,GAAG,CAACO,MAAJ,CAAW,cAAX,CAAZ;;AAeA,SAASC,YAAT,CAAyBC,WAAzB,EAA2CC,YAA3C,EAAuE;AACrE,SAAOD,WAAW,CAACE,MAAZ,CAAmBD,YAAnB,CAAP;AACD;;AAED,OAAO,IAAME,YAAY,GAAIC,KAAD,IAA2C;AACrElB,EAAAA,4BAA4B,CAACkB,KAAD,CAA5B;AACA,MAAM;AAAEC,IAAAA,EAAE,EAAEC,gBAAN;AAAwBC,IAAAA,MAAxB;AAAgCC,IAAAA;AAAhC,MAAsDJ,KAA5D;AACA,MAAMK,QAAQ,GAAGzB,WAAW,EAA5B;AACA,MAAM,CAAC0B,YAAD,IAAiB3B,QAAQ,CAAC,MAAM,IAAI4B,GAAJ,EAAP,CAA/B;AACA,MAAM,CAACC,YAAD,IAAiB7B,QAAQ,CAC7B,MAAM,IAAI4B,GAAJ,EADuB,CAA/B;AAGA,MAAM,CAACE,WAAD,IAAgB9B,QAAQ,CAAC,MAAM,IAAI4B,GAAJ,EAAP,CAA9B;AAEA,MAAMG,UAAU,GAAGjC,WAAW,CAAC,MAAM;AACnC,QAAMkC,OAAO,GAAGC,KAAK,CAACC,IAAN,CAAWP,YAAY,CAACQ,MAAb,EAAX,EACbC,MADa,CACNpB,YADM,EACQ,EADR,EAEbqB,IAFa,CAER,CAACC,CAAD,EAAIC,CAAJ,KAAU;AACd,UAAMC,KAAK,GAAG/B,SAAS,CAACgC,OAAV,CAAkBH,CAAC,CAACI,IAApB,CAAd;AACA,UAAMC,KAAK,GAAGlC,SAAS,CAACgC,OAAV,CAAkBF,CAAC,CAACG,IAApB,CAAd;;AACA,UAAIF,KAAK,KAAKG,KAAd,EAAqB;AACnB,eAAOH,KAAK,GAAGG,KAAR,GAAgB,CAAhB,GAAoB,CAAC,CAA5B;AACD;;AAED,UAAMC,KAAK,GAAGnC,SAAS,CAACgC,OAAV,CAAkBH,CAAC,CAACO,IAApB,CAAd;AACA,UAAMC,KAAK,GAAGrC,SAAS,CAACgC,OAAV,CAAkBF,CAAC,CAACM,IAApB,CAAd;;AACA,UAAID,KAAK,KAAKE,KAAd,EAAqB;AACnB,eAAOF,KAAK,GAAGE,KAAR,GAAgB,CAAhB,GAAoB,CAAC,CAA5B;AACD;;AAED,aAAO,CAAP;AACD,KAhBa,EAiBbV,MAjBa,CAiBN,CAACW,KAAD,EAAQC,MAAR,KAAmB;AACzB,UACED,KAAK,CAACE,MAAN,KAAiB,CAAjB,IACAxC,SAAS,CAACgC,OAAV,CAAkBM,KAAK,CAACA,KAAK,CAACE,MAAN,GAAe,CAAhB,CAAL,CAAwBP,IAA1C,MACEjC,SAAS,CAACgC,OAAV,CAAkBO,MAAM,CAACN,IAAzB,CAFF,IAGAjC,SAAS,CAACgC,OAAV,CAAkBM,KAAK,CAACA,KAAK,CAACE,MAAN,GAAe,CAAhB,CAAL,CAAwBJ,IAA1C,MACEpC,SAAS,CAACgC,OAAV,CAAkBO,MAAM,CAACH,IAAzB,CALJ,EAME;AACAE,QAAAA,KAAK,CAACG,IAAN,CAAWF,MAAX;AACD;;AAED,aAAOD,KAAP;AACD,KA7Ba,EA6BX,EA7BW,CAAhB;AA+BA,QAAMI,OAAO,GAAGlB,KAAK,CAACC,IAAN,CAAWL,YAAY,CAACM,MAAb,EAAX,EACbC,MADa,CACNpB,YADM,EACQ,EADR,EAEbqB,IAFa,CAER,CAACC,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAACc,SAAF,GAAcb,CAAC,CAACa,SAFlB,CAAhB;AAGA,QAAMC,QAAQ,GAAG,IAAIzB,GAAJ,CAAQE,WAAR,CAAjB;AAEAhB,IAAAA,GAAG,CAACwC,KAAJ,CAAU,YAAV,EAAwB;AAAEtB,MAAAA,OAAF;AAAWmB,MAAAA,OAAX;AAAoBE,MAAAA;AAApB,KAAxB;AACA3B,IAAAA,QAAQ,CACNpB,mBAAmB,CAACiB,gBAAD,EAAmB;AAAES,MAAAA,OAAF;AAAWmB,MAAAA,OAAX;AAAoBE,MAAAA;AAApB,KAAnB,CADb,CAAR;AAGD,GAzC6B,EAyC3B,CAAC3B,QAAD,EAAWH,gBAAX,EAA6BI,YAA7B,EAA2CE,YAA3C,EAAyDC,WAAzD,CAzC2B,CAA9B;AA2CA;AACF;AACA;AACA;AACA;;AACE,MAAMyB,oBAAoB,GAAGzD,WAAW,CACtC,CAAC0D,KAAD,EAAmBxB,OAAnB,KAAkD;AAChDlB,IAAAA,GAAG,CAAC2C,MAAJ,CAAW,sBAAX,EAAmCD,KAAnC,EAA0CxB,OAA1C;AACAL,IAAAA,YAAY,CAAC+B,GAAb,CAAiBF,KAAjB,EAAyB,EAAD,CAAiBrC,MAAjB,CAAwBa,OAAxB,CAAxB;AACAD,IAAAA,UAAU;AACX,GALqC,EAMtC,CAACJ,YAAD,EAAeI,UAAf,CANsC,CAAxC;AASA;AACF;AACA;AACA;AACA;;AACE,MAAM4B,oBAAoB,GAAG7D,WAAW,CACtC,CAAC0D,KAAD,EAAQL,OAAR,KAAoB;AAClBrC,IAAAA,GAAG,CAAC2C,MAAJ,CAAW,sBAAX,EAAmCD,KAAnC,EAA0CL,OAA1C;AACAtB,IAAAA,YAAY,CAAC6B,GAAb,CAAiBF,KAAjB,EAAwB,GAAGrC,MAAH,CAAUgC,OAAV,CAAxB;AACApB,IAAAA,UAAU;AACX,GALqC,EAMtC,CAACF,YAAD,EAAeE,UAAf,CANsC,CAAxC;AASA,MAAM6B,kBAAkB,GAAG9D,WAAW,CACpC,CAAC0D,KAAD,EAAQK,KAAR,KAAkB;AAChB/C,IAAAA,GAAG,CAAC2C,MAAJ,CAAW,oBAAX,EAAiCD,KAAjC,EAAwCK,KAAxC;AACA/B,IAAAA,WAAW,CAAC4B,GAAZ,CAAgBtD,WAAW,CAAC0D,cAAZ,CAA2BN,KAA3B,CAAhB,EAAmDK,KAAnD;AACA9B,IAAAA,UAAU;AACX,GALmC,EAMpC,CAACD,WAAD,EAAcC,UAAd,CANoC,CAAtC;AASA,MAAMgC,kBAAkB,GAAGjE,WAAW,CACpC0D,KAAK,IAAI;AACP1C,IAAAA,GAAG,CAAC2C,MAAJ,CAAW,oBAAX,EAAiCD,KAAjC;AACA7B,IAAAA,YAAY,CAACqC,MAAb,CAAoBR,KAApB;AACA3B,IAAAA,YAAY,CAACmC,MAAb,CAAoBR,KAApB;AACA1B,IAAAA,WAAW,CAACkC,MAAZ,CAAmB5D,WAAW,CAAC0D,cAAZ,CAA2BN,KAA3B,CAAnB;AACAzB,IAAAA,UAAU;AACX,GAPmC,EAQpC,CAACJ,YAAD,EAAeE,YAAf,EAA6BC,WAA7B,EAA0CC,UAA1C,CARoC,CAAtC;AAWA,MAAMkC,kBAAkB,GAAGnE,WAAW,CACpC,QAQM;AAAA,QARL;AACCoE,MAAAA,KAAK,GAAG,gBADT;AAECC,MAAAA,QAAQ,GAAG,EAFZ;AAGCC,MAAAA,UAAU,GAAG,IAHd;AAIC9C,MAAAA,EAAE,GAAGpB,OAAO,CAACmE,QAAR,EAJN;AAKCC,MAAAA,YAAY,GAAGlE,WAAW,CAACmE,sBAL5B;AAMCC,MAAAA,cAAc,GAAG,KANlB;AAOCC,MAAAA,SAAS,GAAG;AAPb,KAQK;AACJ,QAAMC,MAAM,GAAG;AACb7B,MAAAA,IAAI,EAAE,iBADO;AAEb8B,MAAAA,SAAS,EAAEhE,mBAAmB,CAACiE,SAFlB;AAGbvD,MAAAA,KAAK,EAAE;AAAEC,QAAAA,EAAF;AAAM6C,QAAAA,QAAN;AAAgBC,QAAAA,UAAhB;AAA4B7C,QAAAA;AAA5B,OAHM;AAIb2C,MAAAA,KAJa;AAKb5C,MAAAA;AALa,KAAf;AAQA,QAAM;AAAEuD,MAAAA;AAAF,QAAWrD,MAAjB;AACApB,IAAAA,WAAW,CAAC0E,aAAZ,CAA0B;AACxBD,MAAAA,IADwB;AAExBH,MAAAA,MAFwB;AAGxBJ,MAAAA,YAHwB;AAIxBE,MAAAA,cAJwB;AAKxBC,MAAAA;AALwB,KAA1B;AAOD,GA1BmC,EA2BpC,CAACjD,MAAD,EAASD,gBAAT,CA3BoC,CAAtC;AA8BA,MAAMwD,eAAe,GAAGjF,WAAW,CACjC,SAQM;AAAA,QARL;AACCoE,MAAAA,KAAK,GAAG,aADT;AAECC,MAAAA,QAAQ,GAAG,EAFZ;AAGCC,MAAAA,UAAU,GAAG,IAHd;AAIC9C,MAAAA,EAAE,GAAGpB,OAAO,CAACmE,QAAR,EAJN;AAKCC,MAAAA,YAAY,GAAGlE,WAAW,CAACmE,sBAL5B;AAMCC,MAAAA,cAAc,GAAG,KANlB;AAOCC,MAAAA,SAAS,GAAG;AAPb,KAQK;AACJ,QAAMC,MAAM,GAAG;AACb7B,MAAAA,IAAI,EAAE,iBADO;AAEb8B,MAAAA,SAAS,EAAE9D,gBAAgB,CAAC+D,SAFf;AAGbvD,MAAAA,KAAK,EAAE;AAAEC,QAAAA,EAAF;AAAM6C,QAAAA,QAAN;AAAgBC,QAAAA,UAAhB;AAA4B7C,QAAAA;AAA5B,OAHM;AAIb2C,MAAAA,KAJa;AAKb5C,MAAAA;AALa,KAAf;AAQA,QAAM;AAAEuD,MAAAA;AAAF,QAAWrD,MAAjB;AACApB,IAAAA,WAAW,CAAC0E,aAAZ,CAA0B;AACxBD,MAAAA,IADwB;AAExBH,MAAAA,MAFwB;AAGxBJ,MAAAA,YAHwB;AAIxBE,MAAAA,cAJwB;AAKxBC,MAAAA;AALwB,KAA1B;AAOD,GA1BgC,EA2BjC,CAACjD,MAAD,EAASD,gBAAT,CA3BiC,CAAnC;AA8BA,MAAMyD,0BAA0B,GAAGlF,WAAW,CAC5C,SAQM;AAAA,QARL;AACCoE,MAAAA,KAAK,GAAG,YADT;AAECC,MAAAA,QAAQ,GAAG,EAFZ;AAGCC,MAAAA,UAAU,GAAG,IAHd;AAIC9C,MAAAA,EAAE,GAAGpB,OAAO,CAACmE,QAAR,EAJN;AAKCC,MAAAA,YAAY,GAAGlE,WAAW,CAACmE,sBAL5B;AAMCC,MAAAA,cAAc,GAAG,KANlB;AAOCC,MAAAA,SAAS,GAAG;AAPb,KAQK;AACJ,QAAMC,MAAM,GAAG;AACb7B,MAAAA,IAAI,EAAE,iBADO;AAEb8B,MAAAA,SAAS,EAAE/D,qBAAqB,CAACgE,SAFpB;AAGbvD,MAAAA,KAAK,EAAE;AAAEC,QAAAA,EAAF;AAAM6C,QAAAA,QAAN;AAAgBC,QAAAA,UAAhB;AAA4B7C,QAAAA;AAA5B,OAHM;AAIb2C,MAAAA,KAJa;AAKb5C,MAAAA;AALa,KAAf;AAQA,QAAM;AAAEuD,MAAAA;AAAF,QAAWrD,MAAjB;AACApB,IAAAA,WAAW,CAAC0E,aAAZ,CAA0B;AACxBD,MAAAA,IADwB;AAExBH,MAAAA,MAFwB;AAGxBJ,MAAAA,YAHwB;AAIxBE,MAAAA,cAJwB;AAKxBC,MAAAA;AALwB,KAA1B;AAOD,GA1B2C,EA2B5C,CAACjD,MAAD,EAASD,gBAAT,CA3B4C,CAA9C;AA8BAxB,EAAAA,SAAS,CACP,SAASkF,kCAAT,GAA8C;AAC5C,QAAMC,QAAQ,GAAG,CACfzD,iBAAiB,CAACd,mBAAmB,CAACiE,SAArB,EAAgCjE,mBAAhC,CADF,EAEfc,iBAAiB,CAACZ,gBAAgB,CAAC+D,SAAlB,EAA6B/D,gBAA7B,CAFF,EAGfY,iBAAiB,CACfb,qBAAqB,CAACgE,SADP,EAEfhE,qBAFe,CAHF,CAAjB;AASA,WAAO,MAAM;AACXsE,MAAAA,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;AACD,KAFD;AAGD,GAdM,EAeP,CAAC3D,iBAAD,CAfO,CAAT;AAkBAlB,EAAAA,WAAW,CACTiB,MAAM,CAAC6D,QADE,EAET3E,gBAAgB,CAAC4E,eAFR,EAGT/B,oBAHS,CAAX;AAKAhD,EAAAA,WAAW,CACTiB,MAAM,CAAC6D,QADE,EAET3E,gBAAgB,CAAC6E,eAFR,EAGT5B,oBAHS,CAAX;AAKApD,EAAAA,WAAW,CACTiB,MAAM,CAAC6D,QADE,EAET3E,gBAAgB,CAAC8E,aAFR,EAGT5B,kBAHS,CAAX;AAKArD,EAAAA,WAAW,CACTiB,MAAM,CAAC6D,QADE,EAET3E,gBAAgB,CAAC+E,aAFR,EAGTxB,kBAHS,CAAX;AAKA1D,EAAAA,WAAW,CAACiB,MAAM,CAAC6D,QAAR,EAAkB3E,gBAAgB,CAACgF,UAAnC,EAA+CX,eAA/C,CAAX;AACAxE,EAAAA,WAAW,CACTiB,MAAM,CAAC6D,QADE,EAET3E,gBAAgB,CAACiF,uBAFR,EAGTX,0BAHS,CAAX;AAKAzE,EAAAA,WAAW,CAACiB,MAAM,CAAC6D,QAAR,EAAkBhF,UAAU,CAACuF,OAA7B,EAAsC7B,kBAAtC,CAAX;AAEA,sBAAO,yCAAP;AACD,CA9OM;AAgPP,eAAe3C,YAAf","sourcesContent":["import React, { Component, useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n updateDashboardData,\n useListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { TextUtils } from '@deephaven/utils';\nimport { InputFilterEvent } from './events';\nimport {\n DropdownFilterPanel,\n FilterSetManagerPanel,\n InputFilterPanel,\n} from './panels';\n\nconst log = Log.module('FilterPlugin');\n\ntype Column = {\n name: string;\n type: string;\n};\n\nexport type FilterChangeEvent = Column & {\n value: string;\n timestamp: number;\n excludePanelIds?: string[];\n};\n\nexport type FilterPluginProps = Partial<DashboardPluginComponentProps>;\n\nfunction flattenArray<T>(accumulator: T[], currentValue: T | T[]): T[] {\n return accumulator.concat(currentValue);\n}\n\nexport const FilterPlugin = (props: FilterPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id: localDashboardId, layout, registerComponent } = props;\n const dispatch = useDispatch();\n const [panelColumns] = useState(() => new Map<Component, Column[]>());\n const [panelFilters] = useState(\n () => new Map<Component, FilterChangeEvent[]>()\n );\n const [panelTables] = useState(() => new Map());\n\n const sendUpdate = useCallback(() => {\n const columns = Array.from(panelColumns.values())\n .reduce(flattenArray, [] as Column[])\n .sort((a, b) => {\n const aName = TextUtils.toLower(a.name);\n const bName = TextUtils.toLower(b.name);\n if (aName !== bName) {\n return aName > bName ? 1 : -1;\n }\n\n const aType = TextUtils.toLower(a.type);\n const bType = TextUtils.toLower(b.type);\n if (aType !== bType) {\n return aType > bType ? 1 : -1;\n }\n\n return 0;\n })\n .reduce((array, column) => {\n if (\n array.length === 0 ||\n TextUtils.toLower(array[array.length - 1].name) !==\n TextUtils.toLower(column.name) ||\n TextUtils.toLower(array[array.length - 1].type) !==\n TextUtils.toLower(column.type)\n ) {\n array.push(column);\n }\n\n return array;\n }, [] as Column[]);\n\n const filters = Array.from(panelFilters.values())\n .reduce(flattenArray, [] as FilterChangeEvent[])\n .sort((a, b) => a.timestamp - b.timestamp);\n const tableMap = new Map(panelTables);\n\n log.debug('sendUpdate', { columns, filters, tableMap });\n dispatch(\n updateDashboardData(localDashboardId, { columns, filters, tableMap })\n );\n }, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);\n\n /**\n * Handler for the COLUMNS_CHANGED event.\n * @param panel The component that's emitting the filter change\n * @param columns The columns in this panel\n */\n const handleColumnsChanged = useCallback(\n (panel: Component, columns: Column | Column[]) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, ([] as Column[]).concat(columns));\n sendUpdate();\n },\n [panelColumns, sendUpdate]\n );\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param {Component} panel The component that's emitting the filter change\n * @param {FilterChangeEvent|Array<FilterChangeEvent>} filters The input filters set by the panel\n */\n const handleFiltersChanged = useCallback(\n (panel, filters) => {\n log.debug2('handleFiltersChanged', panel, filters);\n panelFilters.set(panel, [].concat(filters) as FilterChangeEvent[]);\n sendUpdate();\n },\n [panelFilters, sendUpdate]\n );\n\n const handleTableChanged = useCallback(\n (panel, table) => {\n log.debug2('handleTableChanged', panel, table);\n panelTables.set(LayoutUtils.getIdFromPanel(panel), table);\n sendUpdate();\n },\n [panelTables, sendUpdate]\n );\n\n const handlePanelUnmount = useCallback(\n panel => {\n log.debug2('handlePanelUnmount', panel);\n panelColumns.delete(panel);\n panelFilters.delete(panel);\n panelTables.delete(LayoutUtils.getIdFromPanel(panel));\n sendUpdate();\n },\n [panelColumns, panelFilters, panelTables, sendUpdate]\n );\n\n const handleOpenDropdown = useCallback(\n ({\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component',\n component: DropdownFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenInput = useCallback(\n ({\n title = 'InputFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component',\n component: InputFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenFilterSetManager = useCallback(\n ({\n title = 'FilterSets',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component',\n component: FilterSetManagerPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel),\n registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel),\n registerComponent(\n FilterSetManagerPanel.COMPONENT,\n FilterSetManagerPanel\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent]\n );\n\n useListener(\n layout.eventHub,\n InputFilterEvent.COLUMNS_CHANGED,\n handleColumnsChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.FILTERS_CHANGED,\n handleFiltersChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.TABLE_CHANGED,\n handleTableChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_DROPDOWN,\n handleOpenDropdown\n );\n useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_FILTER_SET_MANAGER,\n handleOpenFilterSetManager\n );\n useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);\n\n return <></>;\n};\n\nexport default FilterPlugin;\n"],"file":"FilterPlugin.js"}
@@ -1,8 +1,8 @@
1
- export default ControlType;
2
1
  declare class ControlType {
3
2
  static DROPDOWN_FILTER: string;
4
3
  static INPUT_FILTER: string;
5
4
  static MARKDOWN: string;
6
5
  static FILTER_SET_MANAGER: string;
7
6
  }
7
+ export default ControlType;
8
8
  //# sourceMappingURL=ControlType.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ControlType.d.ts","sourceRoot":"","sources":["../../src/controls/ControlType.js"],"names":[],"mappings":";AAAA;IACE,+BAAuD;IAEvD,4BAAiD;IAEjD,wBAAyC;IAEzC,kCAA6D;CAC9D"}
1
+ {"version":3,"file":"ControlType.d.ts","sourceRoot":"","sources":["../../src/controls/ControlType.ts"],"names":[],"mappings":"AAAA,cAAM,WAAW;IACf,MAAM,CAAC,eAAe,SAAiC;IAEvD,MAAM,CAAC,YAAY,SAA8B;IAEjD,MAAM,CAAC,QAAQ,SAA0B;IAEzC,MAAM,CAAC,kBAAkB,SAAoC;CAC9D;AAED,eAAe,WAAW,CAAC"}
@@ -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,"sources":["../../src/controls/ControlType.ts"],"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,23 +1,73 @@
1
- export default DropdownFilter;
2
- declare class DropdownFilter extends React.Component<any, any, any> {
1
+ import { ChangeEvent, Component, KeyboardEvent, MouseEvent, ReactElement, RefObject } from 'react';
2
+ import { Column } from '@deephaven/jsapi-shim';
3
+ import memoizee from 'memoizee';
4
+ import './DropdownFilter.scss';
5
+ import { LinkPoint } from '../../linker/LinkerUtils';
6
+ export interface DropdownFilterColumn {
7
+ name: string;
8
+ type?: string;
9
+ }
10
+ interface DropdownFilterProps {
11
+ column: DropdownFilterColumn;
12
+ columns: DropdownFilterColumn[];
13
+ onSourceMouseEnter: () => void;
14
+ onSourceMouseLeave: () => void;
15
+ disableLinking: boolean;
16
+ isLinkerActive: boolean;
17
+ isLoaded: boolean;
18
+ isValueShown: boolean;
19
+ settingsError: string;
20
+ source: LinkPoint;
21
+ value: string;
22
+ values: (string | null)[];
23
+ onChange: (change: {
24
+ column: Partial<Column> | null;
25
+ isValueShown?: boolean;
26
+ value?: string;
27
+ }) => void;
28
+ onColumnSelected: () => void;
29
+ }
30
+ interface DropdownFilterState {
31
+ column: DropdownFilterColumn | null;
32
+ selectedColumn: DropdownFilterColumn | null;
33
+ disableCancel: boolean;
34
+ isValueShown: boolean;
35
+ value: string | null;
36
+ }
37
+ declare class DropdownFilter extends Component<DropdownFilterProps, DropdownFilterState> {
38
+ static defaultProps: {
39
+ column: null;
40
+ disableLinking: boolean;
41
+ isLinkerActive: boolean;
42
+ isLoaded: boolean;
43
+ isValueShown: boolean;
44
+ settingsError: null;
45
+ source: null;
46
+ value: string;
47
+ values: never[];
48
+ onColumnSelected: () => void;
49
+ onSourceMouseEnter: () => void;
50
+ onSourceMouseLeave: () => void;
51
+ };
3
52
  static PLACEHOLDER: string;
4
53
  static SOURCE_BUTTON_CLASS_NAME: string;
5
54
  static SOURCE_BUTTON_PLACEHOLDER: string;
6
- constructor(props: any);
7
- handleColumnChange(event: any): void;
55
+ constructor(props: DropdownFilterProps);
56
+ componentDidUpdate(prevProps: DropdownFilterProps, prevState: DropdownFilterState): void;
57
+ componentWillUnmount(): void;
58
+ dropdownRef: RefObject<HTMLSelectElement>;
59
+ getCompatibleColumns: (source: LinkPoint, columns: DropdownFilterColumn[]) => DropdownFilterColumn[];
60
+ getColumnOptions: (columns: DropdownFilterColumn[], selectedColumn: DropdownFilterColumn | null) => [JSX.Element[], number];
61
+ getSelectedOptionIndex: (values: (string | null)[], value: string | null) => number;
62
+ getValueOptions: (values: (string | null)[]) => JSX.Element[];
63
+ getItemLabel: ((columns: any, index: any) => any) & memoizee.Memoized<(columns: any, index: any) => any>;
64
+ handleColumnChange(event: ChangeEvent<HTMLSelectElement>): void;
65
+ handleDropdownKeyPress(event: KeyboardEvent<HTMLSelectElement>): void;
66
+ handleValueChange(event: ChangeEvent<HTMLSelectElement>): void;
8
67
  handleSettingsCancel(): void;
9
- handleSettingsClick(event: any): void;
10
68
  handleSettingsSave(): void;
11
- handleBackgroundClick(event: any): void;
12
- handleDropdownKeyPress(event: any): void;
13
- handleValueChange(event: any): void;
14
- sendUpdate(): void;
15
- dropdownRef: React.RefObject<any>;
16
- getCompatibleColumns: (this: any, source: any, columns: any) => any;
17
- getColumnOptions: (this: any, columns: any, selectedColumn: any) => (number | JSX.Element[])[];
18
- getSelectedOptionIndex: (this: any, values: any, value: any) => any;
19
- getValueOptions: (this: any, values: any) => any[];
20
- getItemLabel: ((columns: any, index: any) => any) & memoizee.Memoized<(columns: any, index: any) => any>;
69
+ handleSettingsClick(event: MouseEvent<HTMLButtonElement>): void;
70
+ handleBackgroundClick(event: MouseEvent<HTMLDivElement>): void;
21
71
  handleMouseEnter(): void;
22
72
  handleMouseLeave(): void;
23
73
  sourceUpdated(): void;
@@ -25,72 +75,14 @@ declare class DropdownFilter extends React.Component<any, any, any> {
25
75
  focusInput(): void;
26
76
  resetValue(): void;
27
77
  clearFilter(): void;
28
- setFilterState({ name, type, value, isValueShown }: {
29
- name: any;
30
- type: any;
31
- value: any;
32
- isValueShown: any;
78
+ setFilterState({ name, type, value, isValueShown, }: {
79
+ name: string;
80
+ type: string;
81
+ value: string;
82
+ isValueShown: boolean;
33
83
  }): void;
84
+ sendUpdate: import("lodash").DebouncedFunc<() => void>;
85
+ render(): ReactElement;
34
86
  }
35
- declare namespace DropdownFilter {
36
- namespace propTypes {
37
- const column: PropTypes.Requireable<PropTypes.InferProps<{
38
- name: PropTypes.Validator<string>;
39
- type: PropTypes.Validator<string>;
40
- description: PropTypes.Requireable<string>;
41
- constituentType: PropTypes.Requireable<string>;
42
- }>>;
43
- const columns: PropTypes.Validator<(PropTypes.InferProps<{
44
- name: PropTypes.Validator<string>;
45
- type: PropTypes.Validator<string>;
46
- description: PropTypes.Requireable<string>;
47
- constituentType: PropTypes.Requireable<string>;
48
- }> | null | undefined)[]>;
49
- const onSourceMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
50
- const onSourceMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
51
- const disableLinking: PropTypes.Requireable<boolean>;
52
- const isLinkerActive: PropTypes.Requireable<boolean>;
53
- const isLoaded: PropTypes.Requireable<boolean>;
54
- const isValueShown: PropTypes.Requireable<boolean>;
55
- const settingsError: PropTypes.Requireable<string>;
56
- const source: PropTypes.Requireable<PropTypes.InferProps<{
57
- panelId: PropTypes.Validator<string>;
58
- columnName: PropTypes.Validator<string>;
59
- columnType: PropTypes.Validator<string>;
60
- }>>;
61
- const value: PropTypes.Requireable<string>;
62
- const values: PropTypes.Requireable<(string | null | undefined)[]>;
63
- const onChange: PropTypes.Validator<(...args: any[]) => any>;
64
- const onColumnSelected: PropTypes.Requireable<(...args: any[]) => any>;
65
- }
66
- namespace defaultProps {
67
- const column_1: null;
68
- export { column_1 as column };
69
- const disableLinking_1: boolean;
70
- export { disableLinking_1 as disableLinking };
71
- const isLinkerActive_1: boolean;
72
- export { isLinkerActive_1 as isLinkerActive };
73
- const isLoaded_1: boolean;
74
- export { isLoaded_1 as isLoaded };
75
- const isValueShown_1: boolean;
76
- export { isValueShown_1 as isValueShown };
77
- const settingsError_1: null;
78
- export { settingsError_1 as settingsError };
79
- const source_1: null;
80
- export { source_1 as source };
81
- const value_1: string;
82
- export { value_1 as value };
83
- const values_1: never[];
84
- export { values_1 as values };
85
- export function onColumnSelected_1(): void;
86
- export { onColumnSelected_1 as onColumnSelected };
87
- export function onSourceMouseEnter_1(): void;
88
- export { onSourceMouseEnter_1 as onSourceMouseEnter };
89
- export function onSourceMouseLeave_1(): void;
90
- export { onSourceMouseLeave_1 as onSourceMouseLeave };
91
- }
92
- }
93
- import React from "react";
94
- import memoizee from "memoizee";
95
- import PropTypes from "prop-types";
87
+ export default DropdownFilter;
96
88
  //# sourceMappingURL=DropdownFilter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownFilter.d.ts","sourceRoot":"","sources":["../../../src/controls/dropdown-filter/DropdownFilter.jsx"],"names":[],"mappings":";AAqBA;IACE,2BAAyC;IAEzC,wCAAiE;IAEjE,yCAAqD;IAErD,wBAuBC;IAwGD,qCAcC;IAkCD,6BAKC;IAYD,sCAGC;IAbD,2BAQC;IAOD,wCAKC;IA3DD,yCAUC;IAED,oCAkBC;IA4ED,mBAIC;IAhPC,kCAAoC;IAkDtC,oEAME;IAEF,+FAuBG;IAEH,oEAA2E;IAE3E,mDAaG;IAEH,yGAYG;IA+EH,yBAGC;IAED,yBAGC;IAED,sBAQC;IAED,qBAGC;IAED,mBAIC;IAED,mBAEC;IAGD,oBAEC;IAED;;;;;aAGC;CA+JF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8BmB,2CAAQ;;QACN,6CAAQ;;QACR,6CAAQ"}
1
+ {"version":3,"file":"DropdownFilter.d.ts","sourceRoot":"","sources":["../../../src/controls/dropdown-filter/DropdownFilter.tsx"],"names":[],"mappings":"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"}