@finos/legend-application-repl 0.0.30 → 0.0.32

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 (229) hide show
  1. package/lib/components/LegendREPLFrameworkProvider.js +1 -1
  2. package/lib/components/LegendREPLFrameworkProvider.js.map +1 -1
  3. package/lib/components/REPLStoreProvider.d.ts +1 -1
  4. package/lib/components/REPLStoreProvider.d.ts.map +1 -1
  5. package/lib/components/REPLStoreProvider.js +1 -1
  6. package/lib/components/REPLStoreProvider.js.map +1 -1
  7. package/lib/components/REPLWindow.d.ts +33 -0
  8. package/lib/components/REPLWindow.d.ts.map +1 -0
  9. package/lib/components/REPLWindow.js +117 -0
  10. package/lib/components/REPLWindow.js.map +1 -0
  11. package/lib/components/dataCube/DataCube.d.ts.map +1 -1
  12. package/lib/components/dataCube/DataCube.js +13 -9
  13. package/lib/components/dataCube/DataCube.js.map +1 -1
  14. package/lib/components/dataCube/editor/DataCubeEditor.d.ts.map +1 -1
  15. package/lib/components/dataCube/editor/DataCubeEditor.js +13 -90
  16. package/lib/components/dataCube/editor/DataCubeEditor.js.map +1 -1
  17. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.d.ts.map +1 -1
  18. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.js +3 -2
  19. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.js.map +1 -1
  20. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.d.ts.map +1 -1
  21. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js +237 -6
  22. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js.map +1 -1
  23. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js +2 -2
  24. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js.map +1 -1
  25. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts +5 -0
  26. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts.map +1 -1
  27. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js +130 -48
  28. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js.map +1 -1
  29. package/lib/{stores/dataCube/DataCubeDefaultConfig.d.ts → components/dataCube/editor/DataCubeEditorDeveloperPanel.d.ts} +4 -2
  30. package/lib/components/dataCube/editor/DataCubeEditorDeveloperPanel.d.ts.map +1 -0
  31. package/lib/components/dataCube/editor/DataCubeEditorDeveloperPanel.js +28 -0
  32. package/lib/components/dataCube/editor/DataCubeEditorDeveloperPanel.js.map +1 -0
  33. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.d.ts.map +1 -1
  34. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js +3 -2
  35. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js.map +1 -1
  36. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.d.ts.map +1 -1
  37. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.js +3 -2
  38. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.js.map +1 -1
  39. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.d.ts.map +1 -1
  40. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js +145 -5
  41. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js.map +1 -1
  42. package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.d.ts.map +1 -1
  43. package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.js +3 -2
  44. package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.js.map +1 -1
  45. package/lib/components/dataCube/editor/DataCubeEditorShared.d.ts +47 -0
  46. package/lib/components/dataCube/editor/DataCubeEditorShared.d.ts.map +1 -0
  47. package/lib/components/dataCube/editor/DataCubeEditorShared.js +188 -0
  48. package/lib/components/dataCube/editor/DataCubeEditorShared.js.map +1 -0
  49. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.d.ts.map +1 -1
  50. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js +36 -3
  51. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js.map +1 -1
  52. package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.d.ts.map +1 -1
  53. package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.js +3 -2
  54. package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.js.map +1 -1
  55. package/lib/components/dataCube/grid/DataCubeGrid.d.ts +3 -0
  56. package/lib/components/dataCube/grid/DataCubeGrid.d.ts.map +1 -1
  57. package/lib/components/dataCube/grid/DataCubeGrid.js +190 -63
  58. package/lib/components/dataCube/grid/DataCubeGrid.js.map +1 -1
  59. package/lib/{stores/dataCube/DataCubeDefaultConfig.js → components/dataCube/grid/DataCubeGridShared.d.ts} +3 -2
  60. package/lib/components/dataCube/grid/DataCubeGridShared.d.ts.map +1 -0
  61. package/lib/components/dataCube/grid/DataCubeGridShared.js +25 -0
  62. package/lib/components/dataCube/grid/DataCubeGridShared.js.map +1 -0
  63. package/lib/components/dataCube/grid/menu/DataCubeGridMenu.d.ts +23 -0
  64. package/lib/components/dataCube/grid/menu/DataCubeGridMenu.d.ts.map +1 -0
  65. package/lib/components/dataCube/grid/menu/DataCubeGridMenu.js +413 -0
  66. package/lib/components/dataCube/grid/menu/DataCubeGridMenu.js.map +1 -0
  67. package/{src/stores/dataCube/DataCubeDefaultConfig.ts → lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.d.ts} +4 -2
  68. package/lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.d.ts.map +1 -0
  69. package/lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.js +83 -0
  70. package/lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.js.map +1 -0
  71. package/lib/index.css +2 -2
  72. package/lib/index.css.map +1 -1
  73. package/lib/package.json +14 -12
  74. package/lib/server/models/DataCubeQuery.d.ts +3 -5
  75. package/lib/server/models/DataCubeQuery.d.ts.map +1 -1
  76. package/lib/server/models/DataCubeQuery.js +0 -2
  77. package/lib/server/models/DataCubeQuery.js.map +1 -1
  78. package/lib/stores/{dataCube/REPLStore.d.ts → REPLStore.d.ts} +6 -4
  79. package/lib/stores/REPLStore.d.ts.map +1 -0
  80. package/lib/stores/{dataCube/REPLStore.js → REPLStore.js} +8 -5
  81. package/lib/stores/REPLStore.js.map +1 -0
  82. package/lib/stores/dataCube/{core/DataCubeEngine.d.ts → DataCubeInfrastructure.d.ts} +20 -4
  83. package/lib/stores/dataCube/DataCubeInfrastructure.d.ts.map +1 -0
  84. package/lib/stores/dataCube/{core/DataCubeEngine.js → DataCubeInfrastructure.js} +31 -3
  85. package/lib/stores/dataCube/DataCubeInfrastructure.js.map +1 -0
  86. package/lib/stores/dataCube/DataCubeState.d.ts +14 -5
  87. package/lib/stores/dataCube/DataCubeState.d.ts.map +1 -1
  88. package/lib/stores/dataCube/DataCubeState.js +37 -9
  89. package/lib/stores/dataCube/DataCubeState.js.map +1 -1
  90. package/lib/stores/dataCube/core/DataCubeConfiguration.d.ts +93 -0
  91. package/lib/stores/dataCube/core/DataCubeConfiguration.d.ts.map +1 -0
  92. package/lib/stores/dataCube/core/DataCubeConfiguration.js +167 -0
  93. package/lib/stores/dataCube/core/DataCubeConfiguration.js.map +1 -0
  94. package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.d.ts +25 -0
  95. package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.d.ts.map +1 -0
  96. package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.js +45 -0
  97. package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.js.map +1 -0
  98. package/lib/stores/dataCube/core/DataCubeCoreState.d.ts +1 -1
  99. package/lib/stores/dataCube/core/DataCubeCoreState.d.ts.map +1 -1
  100. package/lib/stores/dataCube/core/DataCubeCoreState.js +4 -4
  101. package/lib/stores/dataCube/core/DataCubeCoreState.js.map +1 -1
  102. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js +12 -12
  103. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js.map +1 -1
  104. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts +99 -4
  105. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts.map +1 -1
  106. package/lib/stores/dataCube/core/DataCubeQueryEngine.js +149 -3
  107. package/lib/stores/dataCube/core/DataCubeQueryEngine.js.map +1 -1
  108. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts +19 -5
  109. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts.map +1 -1
  110. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js +36 -6
  111. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js.map +1 -1
  112. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.d.ts.map +1 -1
  113. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js +42 -23
  114. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js.map +1 -1
  115. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.d.ts.map +1 -1
  116. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.js +6 -2
  117. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.js.map +1 -1
  118. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.d.ts +1 -3
  119. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.d.ts.map +1 -1
  120. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.js +2 -3
  121. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.js.map +1 -1
  122. package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.d.ts +3 -1
  123. package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.d.ts.map +1 -1
  124. package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.js +4 -2
  125. package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.js.map +1 -1
  126. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts +36 -0
  127. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts.map +1 -0
  128. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js +66 -0
  129. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js.map +1 -0
  130. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts +3 -0
  131. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts.map +1 -1
  132. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js +10 -0
  133. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js.map +1 -1
  134. package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.d.ts +8 -3
  135. package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.d.ts.map +1 -1
  136. package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.js +20 -24
  137. package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.js.map +1 -1
  138. package/lib/stores/dataCube/editor/DataCubeEditorHPivotPanelState.d.ts +27 -0
  139. package/lib/stores/dataCube/editor/DataCubeEditorHPivotPanelState.d.ts.map +1 -0
  140. package/lib/stores/dataCube/editor/DataCubeEditorHPivotPanelState.js +30 -0
  141. package/lib/stores/dataCube/editor/DataCubeEditorHPivotPanelState.js.map +1 -0
  142. package/lib/stores/dataCube/editor/DataCubeEditorPanelState.d.ts +1 -1
  143. package/lib/stores/dataCube/editor/DataCubeEditorPanelState.d.ts.map +1 -1
  144. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts +13 -6
  145. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts.map +1 -1
  146. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js +64 -19
  147. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js.map +1 -1
  148. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts +8 -4
  149. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts.map +1 -1
  150. package/lib/stores/dataCube/editor/DataCubeEditorState.js +26 -17
  151. package/lib/stores/dataCube/editor/DataCubeEditorState.js.map +1 -1
  152. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts +100 -0
  153. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts.map +1 -0
  154. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js +450 -0
  155. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js.map +1 -0
  156. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts +39 -2
  157. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts.map +1 -1
  158. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js +63 -3
  159. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js.map +1 -1
  160. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.d.ts.map +1 -1
  161. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js +0 -9
  162. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js.map +1 -1
  163. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.d.ts +4 -1
  164. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.d.ts.map +1 -1
  165. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js +330 -38
  166. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js.map +1 -1
  167. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts.map +1 -1
  168. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js +16 -28
  169. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js.map +1 -1
  170. package/lib/stores/dataCube/grid/DataCubeGridState.d.ts +16 -2
  171. package/lib/stores/dataCube/grid/DataCubeGridState.d.ts.map +1 -1
  172. package/lib/stores/dataCube/grid/DataCubeGridState.js +51 -21
  173. package/lib/stores/dataCube/grid/DataCubeGridState.js.map +1 -1
  174. package/package.json +20 -18
  175. package/src/components/LegendREPLFrameworkProvider.tsx +1 -1
  176. package/src/components/REPLStoreProvider.tsx +1 -1
  177. package/src/components/REPLWindow.tsx +179 -0
  178. package/src/components/dataCube/DataCube.tsx +44 -23
  179. package/src/components/dataCube/editor/DataCubeEditor.tsx +80 -186
  180. package/src/components/dataCube/editor/DataCubeEditorCodePanel.tsx +4 -2
  181. package/src/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.tsx +1044 -13
  182. package/src/components/dataCube/editor/DataCubeEditorColumnsPanel.tsx +2 -2
  183. package/src/components/dataCube/editor/DataCubeEditorColumnsSelector.tsx +264 -51
  184. package/src/components/dataCube/editor/DataCubeEditorDeveloperPanel.tsx +43 -0
  185. package/src/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.tsx +4 -2
  186. package/src/components/dataCube/editor/DataCubeEditorFilterPanel.tsx +4 -2
  187. package/src/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.tsx +743 -13
  188. package/src/components/dataCube/editor/DataCubeEditorHPivotsPanel.tsx +4 -2
  189. package/src/components/dataCube/editor/DataCubeEditorShared.tsx +484 -0
  190. package/src/components/dataCube/editor/DataCubeEditorSortsPanel.tsx +103 -4
  191. package/src/components/dataCube/editor/DataCubeEditorVPivotsPanel.tsx +4 -2
  192. package/src/components/dataCube/grid/DataCubeGrid.tsx +314 -120
  193. package/src/components/dataCube/grid/DataCubeGridShared.tsx +45 -0
  194. package/src/components/dataCube/grid/menu/DataCubeGridMenu.tsx +441 -0
  195. package/src/components/dataCube/grid/menu/DataCubeGridSortsMenu.tsx +119 -0
  196. package/src/server/models/DataCubeQuery.ts +2 -6
  197. package/src/stores/{dataCube/REPLStore.ts → REPLStore.ts} +9 -6
  198. package/src/stores/dataCube/{core/DataCubeEngine.ts → DataCubeInfrastructure.ts} +40 -3
  199. package/src/stores/dataCube/DataCubeState.ts +44 -10
  200. package/src/stores/dataCube/core/DataCubeConfiguration.ts +220 -0
  201. package/src/stores/dataCube/core/DataCubeConfigurationBuilder.ts +60 -0
  202. package/src/stores/dataCube/core/DataCubeCoreState.ts +7 -4
  203. package/src/stores/dataCube/core/DataCubeQueryBuilder.ts +18 -18
  204. package/src/stores/dataCube/core/DataCubeQueryEngine.ts +157 -4
  205. package/src/stores/dataCube/core/DataCubeQuerySnapshot.ts +43 -6
  206. package/src/stores/dataCube/core/DataCubeQuerySnapshotBuilder.ts +49 -29
  207. package/src/stores/dataCube/core/DataCubeQuerySnapshotManager.ts +9 -2
  208. package/src/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.ts +6 -5
  209. package/src/stores/dataCube/editor/DataCubeEditorCodePanelState.ts +5 -2
  210. package/src/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.ts +96 -0
  211. package/src/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.ts +12 -0
  212. package/src/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.ts +31 -28
  213. package/src/stores/dataCube/editor/DataCubeEditorHPivotPanelState.ts +43 -0
  214. package/src/stores/dataCube/editor/DataCubeEditorPanelState.ts +1 -1
  215. package/src/stores/dataCube/editor/DataCubeEditorSortsPanelState.ts +92 -25
  216. package/src/stores/dataCube/editor/DataCubeEditorState.ts +32 -18
  217. package/src/stores/dataCube/editor/DataCubeMutableConfiguration.ts +641 -0
  218. package/src/stores/dataCube/grid/DataCubeGridClientEngine.ts +88 -3
  219. package/src/stores/dataCube/grid/DataCubeGridQueryBuilder.ts +0 -10
  220. package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.tsx +494 -45
  221. package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.ts +16 -36
  222. package/src/stores/dataCube/grid/DataCubeGridState.ts +73 -20
  223. package/tsconfig.json +13 -3
  224. package/lib/stores/dataCube/DataCubeDefaultConfig.d.ts.map +0 -1
  225. package/lib/stores/dataCube/DataCubeDefaultConfig.js.map +0 -1
  226. package/lib/stores/dataCube/REPLStore.d.ts.map +0 -1
  227. package/lib/stores/dataCube/REPLStore.js.map +0 -1
  228. package/lib/stores/dataCube/core/DataCubeEngine.d.ts.map +0 -1
  229. package/lib/stores/dataCube/core/DataCubeEngine.js.map +0 -1
@@ -21,12 +21,12 @@ import { useEffect } from 'react';
21
21
 
22
22
  export const DataCubeEditorColumnsPanel = observer(() => {
23
23
  const replStore = useREPLStore();
24
- const panel = replStore.dataCubeState.editor.sortsPanel;
24
+ const panel = replStore.dataCube.editor.sorts;
25
25
 
26
26
  useEffect(() => {}, [panel]); // TODO: @akphi - remove this dummy useEffect
27
27
 
28
28
  return (
29
- <div className="data-cube-column-selector h-full w-full p-2">
29
+ <div className="h-full w-full select-none p-2">
30
30
  <div className="flex h-6">
31
31
  <div className="flex h-6 items-center text-xl font-medium">
32
32
  <DataCubeIcon.TableColumns />
@@ -15,20 +15,21 @@
15
15
  */
16
16
 
17
17
  import { observer } from 'mobx-react-lite';
18
- import { DataCubeIcon } from '@finos/legend-art';
18
+ import { cn, DataCubeIcon } from '@finos/legend-art';
19
19
  import type {
20
20
  ColDef,
21
21
  ColDefField,
22
22
  GridApi,
23
- IRowNode,
23
+ ModelUpdatedEvent,
24
24
  RowDragEndEvent,
25
25
  SelectionChangedEvent,
26
26
  } from '@ag-grid-community/core';
27
- import { useCallback, useEffect, useState } from 'react';
27
+ import { useCallback, useEffect, useRef, useState } from 'react';
28
28
  import {
29
29
  AgGridReact,
30
30
  type AgGridReactProps,
31
31
  type CustomCellRendererProps,
32
+ type CustomNoRowsOverlayProps,
32
33
  } from '@ag-grid-community/react';
33
34
  import { ClientSideRowModelModule } from '@ag-grid-community/client-side-row-model';
34
35
  import type {
@@ -36,6 +37,10 @@ import type {
36
37
  DataCubeEditorColumnsSelectorState,
37
38
  } from '../../../stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js';
38
39
  import { isNonNullable } from '@finos/legend-shared';
40
+ import {
41
+ getDataForAllFilteredNodes,
42
+ getDataForAllNodes,
43
+ } from '../../../stores/dataCube/grid/DataCubeGridClientEngine.js';
39
44
 
40
45
  function getBaseGridProps<
41
46
  T extends DataCubeEditorColumnsSelectorColumnState,
@@ -54,8 +59,50 @@ function getBaseGridProps<
54
59
  rowHeight: 20,
55
60
  headerHeight: 20,
56
61
  suppressRowHoverHighlight: false,
57
- reactiveCustomComponents: true, // TODO: remove on v32 as this would be default to `true` then
58
- noRowsOverlayComponent: () => <div />,
62
+ noRowsOverlayComponent: (
63
+ params: CustomNoRowsOverlayProps<T> & {
64
+ violationSeverity?: 'warning' | 'error' | undefined;
65
+ },
66
+ ) => {
67
+ if (params.api.getQuickFilter()) {
68
+ return (
69
+ <div className="flex items-center border-[1.5px] border-neutral-300 p-2 font-semibold text-neutral-400">
70
+ <div>
71
+ <DataCubeIcon.WarningCircle className="mr-1 text-lg" />
72
+ </div>
73
+ No match found
74
+ </div>
75
+ );
76
+ }
77
+ if (params.violationSeverity) {
78
+ return (
79
+ <div
80
+ className={cn(
81
+ 'flex items-center border-[1.5px] p-2 font-semibold',
82
+ {
83
+ 'border-amber-400 text-amber-500':
84
+ params.violationSeverity === 'warning',
85
+ 'border-red-400 text-red-500':
86
+ params.violationSeverity === 'error',
87
+ },
88
+ )}
89
+ >
90
+ <div>
91
+ <DataCubeIcon.Warning className="mr-1 text-lg" />
92
+ </div>
93
+ No columns selected
94
+ </div>
95
+ );
96
+ }
97
+ return <div />;
98
+ },
99
+ // Show no rows overlay when there are no search results
100
+ // See https://stackoverflow.com/a/72637410
101
+ onModelUpdated: (event: ModelUpdatedEvent<T>) => {
102
+ event.api.getDisplayedRowCount() === 0
103
+ ? event.api.showNoRowsOverlay()
104
+ : event.api.hideOverlay();
105
+ },
59
106
  };
60
107
  }
61
108
 
@@ -80,14 +127,54 @@ function getBaseColumnDef<
80
127
  }
81
128
  return (params.rowNode?.data as T).name;
82
129
  },
130
+ getQuickFilterText: (params) => params.value,
83
131
  };
84
132
  }
85
133
 
134
+ /**
135
+ * Move this display to a separate component to avoid re-rendering the header too frequently
136
+ */
137
+ const ColumnsSearchResultCountBadge = observer(
138
+ function ColumnsSearchResultCountBadge<
139
+ T extends DataCubeEditorColumnsSelectorColumnState,
140
+ >(props: {
141
+ selector: DataCubeEditorColumnsSelectorState<T>;
142
+ gridApi: GridApi<T>;
143
+ scope: 'available' | 'selected';
144
+ }) {
145
+ const { selector, gridApi, scope } = props;
146
+ return (
147
+ <div className="flex items-center justify-center rounded-lg bg-neutral-500 px-1 py-0.5 font-mono text-xs font-bold text-white">
148
+ {`${getDataForAllFilteredNodes(gridApi).length}/${scope === 'available' ? selector.availableColumns.length : selector.selectedColumns.length}`}
149
+ <span className="hidden">
150
+ {scope === 'available'
151
+ ? // subscribing to the search text to trigger re-render as it changes
152
+ selector.availableColumnsSearchText
153
+ : selector.selectedColumnsSearchText}
154
+ </span>
155
+ </div>
156
+ );
157
+ },
158
+ );
159
+
86
160
  export const DataCubeEditorColumnsSelector = observer(
87
161
  function DataCubeEditorColumnsSelector<
88
162
  T extends DataCubeEditorColumnsSelectorColumnState,
89
- >(props: { selector: DataCubeEditorColumnsSelectorState<T> }) {
90
- const { selector } = props;
163
+ >(props: {
164
+ selector: DataCubeEditorColumnsSelectorState<T>;
165
+ extraColumnComponent?:
166
+ | React.FC<{
167
+ selector: DataCubeEditorColumnsSelectorState<T>;
168
+ column: T;
169
+ }>
170
+ | undefined;
171
+ noColumnsSelectedViolationSeverity?: 'warning' | 'error' | undefined;
172
+ }) {
173
+ const {
174
+ selector,
175
+ extraColumnComponent,
176
+ noColumnsSelectedViolationSeverity,
177
+ } = props;
91
178
  const [selectedAvailableColumns, setSelectedAvailableColumns] = useState<
92
179
  T[]
93
180
  >([]);
@@ -98,6 +185,10 @@ export const DataCubeEditorColumnsSelector = observer(
98
185
  useState<GridApi | null>(null);
99
186
  const [selectedColumnsGridApi, setSelectedColumnsGridApi] =
100
187
  useState<GridApi | null>(null);
188
+ const searchAvailableColumnsInputRef = useRef<HTMLInputElement | null>(
189
+ null,
190
+ );
191
+ const searchSelectedColumnsInputRef = useRef<HTMLInputElement | null>(null);
101
192
 
102
193
  /**
103
194
  * Since we use managed row dragging for selected columns,
@@ -107,16 +198,11 @@ export const DataCubeEditorColumnsSelector = observer(
107
198
  */
108
199
  const onSelectedColumnsDragStop = useCallback(
109
200
  (params: RowDragEndEvent<T>) => {
110
- const newRowData: T[] = [];
111
- params.api.forEachNode((node: IRowNode<T>) => {
112
- if (node.data) {
113
- newRowData.push(node.data);
114
- }
115
- });
116
- selector.setSelectedColumns(newRowData);
201
+ const newData = getDataForAllNodes(params.api);
202
+ selector.setSelectedColumns(newData);
117
203
  selector.setAvailableColumns(
118
204
  selector.availableColumns.filter(
119
- (column) => !newRowData.includes(column),
205
+ (column) => !newData.includes(column),
120
206
  ),
121
207
  );
122
208
  },
@@ -154,17 +240,16 @@ export const DataCubeEditorColumnsSelector = observer(
154
240
  if (event.overIndex === -1) {
155
241
  return;
156
242
  }
157
- const newRowData: T[] = [];
158
- event.api.forEachNode((node: IRowNode<T>) => {
159
- if (node.data) {
160
- newRowData.push(node.data);
161
- }
162
- });
163
- selector.setSelectedColumns(newRowData);
243
+ const newData = getDataForAllNodes(event.api);
244
+ selector.setSelectedColumns(newData);
164
245
  },
165
246
  [selector],
166
247
  );
167
248
 
249
+ /**
250
+ * Setup row drop zones for each grid to be the other
251
+ * See https://www.ag-grid.com/react-data-grid/row-dragging-to-grid/
252
+ */
168
253
  useEffect(() => {
169
254
  if (!availableColumnsGridApi || !selectedColumnsGridApi) {
170
255
  return;
@@ -196,7 +281,7 @@ export const DataCubeEditorColumnsSelector = observer(
196
281
  ]);
197
282
 
198
283
  return (
199
- <div className="flex h-full w-full">
284
+ <div className="data-cube-column-selector flex h-full w-full">
200
285
  <div className="h-full w-[calc(50%_-_20px)]">
201
286
  <div className="flex h-5 items-center text-sm">
202
287
  Available columns:
@@ -204,12 +289,35 @@ export const DataCubeEditorColumnsSelector = observer(
204
289
  <div className="h-[calc(100%_-_20px)] rounded-sm border border-neutral-200">
205
290
  <div className="relative h-6 border-b border-neutral-200">
206
291
  <input
207
- className="h-full w-full pl-10 placeholder-neutral-400"
292
+ className="h-full w-full pl-10 pr-6 placeholder-neutral-400"
293
+ ref={searchAvailableColumnsInputRef}
208
294
  placeholder="Click here to search..."
295
+ value={selector.availableColumnsSearchText}
296
+ onChange={(event) =>
297
+ selector.setAvailableColumnsSearchText(event.target.value)
298
+ }
299
+ onKeyDown={(event) => {
300
+ if (event.code === 'Escape') {
301
+ event.stopPropagation();
302
+ searchAvailableColumnsInputRef.current?.select();
303
+ selector.setAvailableColumnsSearchText('');
304
+ }
305
+ }}
209
306
  />
210
307
  <div className="absolute left-0 top-0 flex h-6 w-10 items-center justify-center">
211
308
  <DataCubeIcon.Search className="stroke-[3px] text-lg text-neutral-500" />
212
309
  </div>
310
+ <button
311
+ className="absolute right-0 top-0 flex h-6 w-6 items-center justify-center text-neutral-500 disabled:text-neutral-300"
312
+ disabled={!selector.availableColumnsSearchText}
313
+ title="Clear search [Esc]"
314
+ onClick={() => {
315
+ selector.setAvailableColumnsSearchText('');
316
+ searchAvailableColumnsInputRef.current?.focus();
317
+ }}
318
+ >
319
+ <DataCubeIcon.X className="text-lg" />
320
+ </button>
213
321
  </div>
214
322
  <div className="h-[calc(100%_-_24px)]">
215
323
  <AgGridReact
@@ -218,7 +326,6 @@ export const DataCubeEditorColumnsSelector = observer(
218
326
  // and to make sure the row data and the available columns state are in sync
219
327
  rowDragManaged={false}
220
328
  onGridReady={(params) => setAvailableColumnsGridApi(params.api)}
221
- rowData={selector.availableColumns}
222
329
  onSelectionChanged={(event: SelectionChangedEvent<T>) => {
223
330
  setSelectedAvailableColumns(
224
331
  event.api
@@ -227,23 +334,43 @@ export const DataCubeEditorColumnsSelector = observer(
227
334
  .filter(isNonNullable),
228
335
  );
229
336
  }}
337
+ // Using ag-grid quick filter is a cheap way to implement search
338
+ quickFilterText={selector.availableColumnsSearchText}
339
+ rowData={selector.availableColumns}
230
340
  columnDefs={[
231
341
  {
232
342
  ...getBaseColumnDef<T>(),
343
+ /**
344
+ * Support double-click to add all (filtered by search) columns
345
+ */
233
346
  headerComponent: (params: CustomCellRendererProps<T>) => (
234
- <div
347
+ <button
235
348
  title="Double-click to add all columns"
236
- className="flex h-full w-full cursor-pointer items-center pl-0.5"
349
+ className="flex h-full w-full items-center justify-between pl-0.5"
237
350
  onDoubleClick={() => {
238
- // TODO: scope this by the current search
351
+ // The columns being moved are scoped by the current search
352
+ const filteredData = getDataForAllFilteredNodes(
353
+ params.api,
354
+ );
239
355
  selector.setSelectedColumns([
240
356
  ...selector.selectedColumns,
241
- ...selector.availableColumns,
357
+ ...filteredData,
242
358
  ]);
243
- selector.setAvailableColumns([]);
359
+ selector.setAvailableColumns(
360
+ selector.availableColumns.filter(
361
+ (column) => !filteredData.includes(column),
362
+ ),
363
+ );
244
364
  params.api.clearFocusedCell();
245
365
  }}
246
- >{`[All Columns]`}</div>
366
+ >
367
+ <div>{`[All Columns]`}</div>
368
+ <ColumnsSearchResultCountBadge
369
+ selector={selector}
370
+ gridApi={params.api}
371
+ scope="available"
372
+ />
373
+ </button>
247
374
  ),
248
375
  cellRenderer: (params: CustomCellRendererProps<T>) => {
249
376
  const data = params.data;
@@ -252,7 +379,7 @@ export const DataCubeEditorColumnsSelector = observer(
252
379
  }
253
380
  return (
254
381
  <div
255
- className="h-full w-full cursor-pointer pl-2"
382
+ className="flex h-full w-full cursor-pointer"
256
383
  title={`[${data.name}]\nDouble-click to add column`}
257
384
  onDoubleClick={() => {
258
385
  selector.setSelectedColumns([
@@ -267,7 +394,15 @@ export const DataCubeEditorColumnsSelector = observer(
267
394
  params.api.clearFocusedCell();
268
395
  }}
269
396
  >
270
- {data.name}
397
+ <div className="h-full flex-1 items-center overflow-hidden overflow-ellipsis whitespace-nowrap pl-2">
398
+ {data.name}
399
+ </div>
400
+ <div className="flex h-full">
401
+ {extraColumnComponent?.({
402
+ selector,
403
+ column: data,
404
+ }) ?? null}
405
+ </div>
271
406
  </div>
272
407
  );
273
408
  },
@@ -280,40 +415,66 @@ export const DataCubeEditorColumnsSelector = observer(
280
415
  <div className="flex h-full w-10 items-center justify-center">
281
416
  <div className="flex flex-col">
282
417
  <button
283
- className="flex cursor-pointer items-center justify-center rounded-sm border border-neutral-300 bg-neutral-100 text-neutral-500 hover:bg-neutral-200 disabled:cursor-not-allowed disabled:bg-neutral-200 disabled:text-neutral-400"
418
+ className="flex items-center justify-center rounded-sm border border-neutral-300 bg-neutral-100 text-neutral-500 hover:bg-neutral-200 disabled:bg-neutral-200 disabled:text-neutral-400"
284
419
  title="Add selected columns"
420
+ /**
421
+ * Support add selected (filtered by search) columns
422
+ * We reset the selection after this operation
423
+ */
285
424
  onClick={() => {
286
- // TODO: scope this by the current search
425
+ if (!availableColumnsGridApi) {
426
+ return;
427
+ }
428
+ // The columns being moved are scoped by the current search
429
+ const filteredData = getDataForAllFilteredNodes(
430
+ availableColumnsGridApi,
431
+ );
432
+ const columnsToMove = selectedAvailableColumns.filter(
433
+ (column) => filteredData.includes(column),
434
+ );
287
435
  selector.setSelectedColumns([
288
436
  ...selector.selectedColumns,
289
- ...selectedAvailableColumns,
437
+ ...columnsToMove,
290
438
  ]);
291
439
  selector.setAvailableColumns(
292
440
  selector.availableColumns.filter(
293
- (column) => !selectedAvailableColumns.includes(column),
441
+ (column) => !columnsToMove.includes(column),
294
442
  ),
295
443
  );
296
- availableColumnsGridApi?.clearFocusedCell();
444
+ availableColumnsGridApi.clearFocusedCell();
297
445
  }}
298
446
  disabled={selectedAvailableColumns.length === 0}
299
447
  >
300
448
  <DataCubeIcon.ChevronRight className="text-2xl" />
301
449
  </button>
302
450
  <button
303
- className="mt-2 flex cursor-pointer items-center justify-center rounded-sm border border-neutral-300 bg-neutral-100 text-neutral-500 hover:bg-neutral-200 disabled:cursor-not-allowed disabled:bg-neutral-200 disabled:text-neutral-400"
451
+ className="mt-2 flex items-center justify-center rounded-sm border border-neutral-300 bg-neutral-100 text-neutral-500 hover:bg-neutral-200 disabled:bg-neutral-200 disabled:text-neutral-400"
304
452
  title="Remove selected columns"
453
+ /**
454
+ * Support remove selected (filtered by search) columns
455
+ * We reset the selection after this operation
456
+ */
305
457
  onClick={() => {
306
- // TODO: scope this by the current search
458
+ if (!selectedColumnsGridApi) {
459
+ return;
460
+ }
461
+ // The columns being moved are scoped by the current search
462
+ const filteredData = getDataForAllFilteredNodes(
463
+ selectedColumnsGridApi,
464
+ );
465
+ const columnsToMove = selectedSelectedColumns.filter((column) =>
466
+ filteredData.includes(column),
467
+ );
307
468
  selector.setAvailableColumns([
308
469
  ...selector.availableColumns,
309
- ...selectedSelectedColumns,
470
+ ...columnsToMove,
310
471
  ]);
311
472
  selector.setSelectedColumns(
312
473
  selector.selectedColumns.filter(
313
- (column) => !selectedSelectedColumns.includes(column),
474
+ (column) => !columnsToMove.includes(column),
314
475
  ),
315
476
  );
316
- selectedColumnsGridApi?.clearFocusedCell();
477
+ selectedColumnsGridApi.clearFocusedCell();
317
478
  }}
318
479
  disabled={selectedSelectedColumns.length === 0}
319
480
  >
@@ -327,11 +488,33 @@ export const DataCubeEditorColumnsSelector = observer(
327
488
  <div className="relative h-6 border-b border-neutral-200">
328
489
  <input
329
490
  className="h-full w-full pl-10 placeholder-neutral-400"
491
+ ref={searchSelectedColumnsInputRef}
330
492
  placeholder="Click here to search..."
493
+ value={selector.selectedColumnsSearchText}
494
+ onChange={(event) =>
495
+ selector.setSelectedColumnsSearchText(event.target.value)
496
+ }
497
+ onKeyDown={(event) => {
498
+ if (event.code === 'Escape') {
499
+ event.stopPropagation();
500
+ selector.setSelectedColumnsSearchText('');
501
+ }
502
+ }}
331
503
  />
332
504
  <div className="absolute left-0 top-0 flex h-6 w-10 items-center justify-center">
333
505
  <DataCubeIcon.Search className="stroke-[3px] text-lg text-neutral-500" />
334
506
  </div>
507
+ <button
508
+ className="absolute right-0 top-0 flex h-6 w-6 items-center justify-center text-neutral-500 disabled:text-neutral-300"
509
+ disabled={!selector.selectedColumnsSearchText}
510
+ title="Clear search [Esc]"
511
+ onClick={() => {
512
+ selector.setSelectedColumnsSearchText('');
513
+ searchSelectedColumnsInputRef.current?.focus();
514
+ }}
515
+ >
516
+ <DataCubeIcon.X className="text-lg" />
517
+ </button>
335
518
  </div>
336
519
  <div className="h-[calc(100%_-_24px)]">
337
520
  <AgGridReact
@@ -351,24 +534,46 @@ export const DataCubeEditorColumnsSelector = observer(
351
534
  .filter(isNonNullable),
352
535
  );
353
536
  }}
537
+ // Using ag-grid quick filter is a cheap way to implement search
538
+ quickFilterText={selector.selectedColumnsSearchText}
539
+ noRowsOverlayComponentParams={{
540
+ violationSeverity: noColumnsSelectedViolationSeverity,
541
+ }}
354
542
  rowData={selector.selectedColumns}
355
543
  columnDefs={[
356
544
  {
357
545
  ...getBaseColumnDef<T>(),
546
+ /**
547
+ * Support double-click to remove all (filtered by search) columns
548
+ */
358
549
  headerComponent: (params: CustomCellRendererProps<T>) => (
359
- <div
550
+ <button
360
551
  title="Double-click to remove all columns"
361
- className="flex h-full w-full cursor-pointer items-center pl-0.5"
552
+ className="flex h-full w-full items-center justify-between pl-0.5"
362
553
  onDoubleClick={() => {
363
- // TODO: scope this by the current search
554
+ // The columns being moved are scoped by the current search
555
+ const filteredData = getDataForAllFilteredNodes(
556
+ params.api,
557
+ );
364
558
  selector.setAvailableColumns([
365
559
  ...selector.availableColumns,
366
- ...selector.selectedColumns,
560
+ ...filteredData,
367
561
  ]);
368
- selector.setSelectedColumns([]);
562
+ selector.setSelectedColumns(
563
+ selector.selectedColumns.filter(
564
+ (column) => !filteredData.includes(column),
565
+ ),
566
+ );
369
567
  params.api.clearFocusedCell();
370
568
  }}
371
- >{`[All Columns]`}</div>
569
+ >
570
+ <div>{`[All Columns]`}</div>
571
+ <ColumnsSearchResultCountBadge
572
+ selector={selector}
573
+ gridApi={params.api}
574
+ scope="selected"
575
+ />
576
+ </button>
372
577
  ),
373
578
  cellRenderer: (params: CustomCellRendererProps<T>) => {
374
579
  const data = params.data;
@@ -377,7 +582,7 @@ export const DataCubeEditorColumnsSelector = observer(
377
582
  }
378
583
  return (
379
584
  <div
380
- className="h-full w-full cursor-pointer pl-2"
585
+ className="flex h-full w-full cursor-pointer"
381
586
  title={`[${data.name}]\nDouble-click to remove column`}
382
587
  onDoubleClick={() => {
383
588
  selector.setAvailableColumns([
@@ -392,7 +597,15 @@ export const DataCubeEditorColumnsSelector = observer(
392
597
  params.api.clearFocusedCell();
393
598
  }}
394
599
  >
395
- {data.name}
600
+ <div className="h-full flex-1 items-center overflow-hidden overflow-ellipsis whitespace-nowrap pl-2">
601
+ {data.name}
602
+ </div>
603
+ <div className="flex h-full">
604
+ {extraColumnComponent?.({
605
+ selector,
606
+ column: data,
607
+ }) ?? null}
608
+ </div>
396
609
  </div>
397
610
  );
398
611
  },
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { DataCubeIcon } from '@finos/legend-art';
18
+ import { observer } from 'mobx-react-lite';
19
+ import { useREPLStore } from '../../REPLStoreProvider.js';
20
+ import { useEffect } from 'react';
21
+ import { WIP_Badge } from './DataCubeEditorShared.js';
22
+
23
+ export const DataCubeEditorDeveloperPanel = observer(() => {
24
+ const replStore = useREPLStore();
25
+ const panel = replStore.dataCube.editor.sorts;
26
+
27
+ useEffect(() => {}, [panel]); // TODO: @akphi - remove this dummy useEffect
28
+
29
+ return (
30
+ <div className="h-full w-full select-none p-2">
31
+ <div className="flex h-6">
32
+ <div className="flex h-6 items-center text-xl font-medium">
33
+ <DataCubeIcon.AdvancedSettings />
34
+ </div>
35
+ <div className="ml-1 flex h-6 items-center text-xl font-medium">
36
+ Developer
37
+ <WIP_Badge />
38
+ </div>
39
+ </div>
40
+ <div className="flex h-[calc(100%_-_24px)] w-full"></div>
41
+ </div>
42
+ );
43
+ });
@@ -18,21 +18,23 @@ import { DataCubeIcon } from '@finos/legend-art';
18
18
  import { observer } from 'mobx-react-lite';
19
19
  import { useREPLStore } from '../../REPLStoreProvider.js';
20
20
  import { useEffect } from 'react';
21
+ import { WIP_Badge } from './DataCubeEditorShared.js';
21
22
 
22
23
  export const DataCubeEditorExtendedColumnsPanel = observer(() => {
23
24
  const replStore = useREPLStore();
24
- const panel = replStore.dataCubeState.editor.sortsPanel;
25
+ const panel = replStore.dataCube.editor.sorts;
25
26
 
26
27
  useEffect(() => {}, [panel]); // TODO: @akphi - remove this dummy useEffect
27
28
 
28
29
  return (
29
- <div className="data-cube-column-selector h-full w-full p-2">
30
+ <div className="h-full w-full select-none p-2">
30
31
  <div className="flex h-6">
31
32
  <div className="flex h-6 items-center text-xl font-medium">
32
33
  <DataCubeIcon.TablePlus />
33
34
  </div>
34
35
  <div className="ml-1 flex h-6 items-center text-xl font-medium">
35
36
  Extended Columns
37
+ <WIP_Badge />
36
38
  </div>
37
39
  </div>
38
40
  <div className="flex h-[calc(100%_-_24px)] w-full"></div>
@@ -18,21 +18,23 @@ import { DataCubeIcon } from '@finos/legend-art';
18
18
  import { observer } from 'mobx-react-lite';
19
19
  import { useREPLStore } from '../../REPLStoreProvider.js';
20
20
  import { useEffect } from 'react';
21
+ import { WIP_Badge } from './DataCubeEditorShared.js';
21
22
 
22
23
  export const DataCubeEditorFilterPanel = observer(() => {
23
24
  const replStore = useREPLStore();
24
- const panel = replStore.dataCubeState.editor.sortsPanel;
25
+ const panel = replStore.dataCube.editor.sorts;
25
26
 
26
27
  useEffect(() => {}, [panel]); // TODO: @akphi - remove this dummy useEffect
27
28
 
28
29
  return (
29
- <div className="data-cube-column-selector h-full w-full p-2">
30
+ <div className="h-full w-full select-none p-2">
30
31
  <div className="flex h-6">
31
32
  <div className="flex h-6 items-center text-xl font-medium">
32
33
  <DataCubeIcon.TableFilter />
33
34
  </div>
34
35
  <div className="ml-1 flex h-6 items-center text-xl font-medium">
35
36
  Filter
37
+ <WIP_Badge />
36
38
  </div>
37
39
  </div>
38
40
  <div className="flex h-[calc(100%_-_24px)] w-full"></div>