@finos/legend-application-repl 0.0.28 → 0.0.30

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 (245) hide show
  1. package/grammar/datacube_filter__lexer.g4 +40 -0
  2. package/grammar/datacube_filter__parser.g4 +14 -0
  3. package/grammar/generateGrammar.js +43 -0
  4. package/grammar/parser/generated/datacube_filter__lexer.interp +59 -0
  5. package/grammar/parser/generated/datacube_filter__lexer.tokens +14 -0
  6. package/grammar/parser/generated/datacube_filter__lexer.ts +142 -0
  7. package/grammar/parser/generated/datacube_filter__parser.interp +38 -0
  8. package/grammar/parser/generated/datacube_filter__parser.tokens +14 -0
  9. package/grammar/parser/generated/datacube_filter__parser.ts +514 -0
  10. package/grammar/parser/parser.ts +55 -0
  11. package/lib/components/Core_LegendREPLApplicationPlugin.d.ts.map +1 -1
  12. package/lib/components/Core_LegendREPLApplicationPlugin.js +0 -7
  13. package/lib/components/Core_LegendREPLApplicationPlugin.js.map +1 -1
  14. package/lib/components/LegendREPLApplication.d.ts +0 -1
  15. package/lib/components/LegendREPLApplication.d.ts.map +1 -1
  16. package/lib/components/LegendREPLFrameworkProvider.d.ts +0 -1
  17. package/lib/components/LegendREPLFrameworkProvider.d.ts.map +1 -1
  18. package/lib/components/REPLStoreProvider.d.ts +1 -1
  19. package/lib/components/REPLStoreProvider.d.ts.map +1 -1
  20. package/lib/components/REPLStoreProvider.js +1 -1
  21. package/lib/components/REPLStoreProvider.js.map +1 -1
  22. package/lib/components/dataCube/DataCube.d.ts.map +1 -1
  23. package/lib/components/dataCube/DataCube.js +15 -4
  24. package/lib/components/dataCube/DataCube.js.map +1 -1
  25. package/lib/components/dataCube/editor/DataCubeEditor.d.ts +2 -4
  26. package/lib/components/dataCube/editor/DataCubeEditor.d.ts.map +1 -1
  27. package/lib/components/dataCube/editor/DataCubeEditor.js +109 -32
  28. package/lib/components/dataCube/editor/DataCubeEditor.js.map +1 -1
  29. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.d.ts +1 -1
  30. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.d.ts.map +1 -1
  31. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.js +178 -104
  32. package/lib/components/dataCube/editor/DataCubeEditorCodePanel.js.map +1 -1
  33. package/lib/components/dataCube/editor/{DataCubeEditorSortPanel.d.ts → DataCubeEditorColumnPropertiesPanel.d.ts} +2 -5
  34. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.d.ts.map +1 -0
  35. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js +27 -0
  36. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js.map +1 -0
  37. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.d.ts +19 -0
  38. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.d.ts.map +1 -0
  39. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js +27 -0
  40. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js.map +1 -0
  41. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts +22 -0
  42. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts.map +1 -0
  43. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js +230 -0
  44. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js.map +1 -0
  45. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.d.ts +19 -0
  46. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.d.ts.map +1 -0
  47. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js +27 -0
  48. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js.map +1 -0
  49. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.d.ts +19 -0
  50. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.d.ts.map +1 -0
  51. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.js +27 -0
  52. package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.js.map +1 -0
  53. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.d.ts +19 -0
  54. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.d.ts.map +1 -0
  55. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js +27 -0
  56. package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js.map +1 -0
  57. package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.d.ts +19 -0
  58. package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.d.ts.map +1 -0
  59. package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.js +27 -0
  60. package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.js.map +1 -0
  61. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.d.ts +19 -0
  62. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.d.ts.map +1 -0
  63. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js +26 -0
  64. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js.map +1 -0
  65. package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.d.ts +19 -0
  66. package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.d.ts.map +1 -0
  67. package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.js +27 -0
  68. package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.js.map +1 -0
  69. package/lib/components/dataCube/grid/DataCubeGrid.d.ts +1 -4
  70. package/lib/components/dataCube/grid/DataCubeGrid.d.ts.map +1 -1
  71. package/lib/components/dataCube/grid/DataCubeGrid.js +75 -30
  72. package/lib/components/dataCube/grid/DataCubeGrid.js.map +1 -1
  73. package/lib/grammar/generated/datacube_filter__lexer.d.ts +31 -0
  74. package/lib/grammar/generated/datacube_filter__lexer.js +118 -0
  75. package/lib/grammar/generated/datacube_filter__parser.d.ts +91 -0
  76. package/lib/grammar/generated/datacube_filter__parser.js +485 -0
  77. package/lib/grammar/parser.d.ts +16 -0
  78. package/lib/grammar/parser.js +39 -0
  79. package/lib/index.css +2 -2
  80. package/lib/index.css.map +1 -1
  81. package/lib/package.json +9 -6
  82. package/lib/server/REPLServerClient.d.ts +2 -3
  83. package/lib/server/REPLServerClient.d.ts.map +1 -1
  84. package/lib/server/models/DataCubeEngineModels.d.ts +8 -1
  85. package/lib/server/models/DataCubeEngineModels.d.ts.map +1 -1
  86. package/lib/server/models/DataCubeEngineModels.js +13 -0
  87. package/lib/server/models/DataCubeEngineModels.js.map +1 -1
  88. package/lib/stores/dataCube/DataCubeDefaultConfig.d.ts +17 -0
  89. package/lib/stores/dataCube/DataCubeDefaultConfig.d.ts.map +1 -0
  90. package/lib/stores/dataCube/DataCubeDefaultConfig.js +17 -0
  91. package/lib/stores/dataCube/DataCubeDefaultConfig.js.map +1 -0
  92. package/lib/stores/dataCube/DataCubeState.d.ts +6 -6
  93. package/lib/stores/dataCube/DataCubeState.d.ts.map +1 -1
  94. package/lib/stores/dataCube/DataCubeState.js +18 -14
  95. package/lib/stores/dataCube/DataCubeState.js.map +1 -1
  96. package/lib/stores/dataCube/{DataCubeStore.d.ts → REPLStore.d.ts} +1 -1
  97. package/lib/stores/dataCube/REPLStore.d.ts.map +1 -0
  98. package/lib/stores/dataCube/{DataCubeStore.js → REPLStore.js} +1 -1
  99. package/lib/stores/dataCube/REPLStore.js.map +1 -0
  100. package/lib/stores/dataCube/core/DataCubeCoreState.d.ts +29 -0
  101. package/lib/stores/dataCube/core/DataCubeCoreState.d.ts.map +1 -0
  102. package/lib/stores/dataCube/core/DataCubeCoreState.js +46 -0
  103. package/lib/stores/dataCube/core/DataCubeCoreState.js.map +1 -0
  104. package/lib/stores/dataCube/core/DataCubeEngine.d.ts +2 -3
  105. package/lib/stores/dataCube/core/DataCubeEngine.d.ts.map +1 -1
  106. package/lib/stores/dataCube/core/DataCubeEngine.js +2 -3
  107. package/lib/stores/dataCube/core/DataCubeEngine.js.map +1 -1
  108. package/lib/stores/dataCube/core/DataCubeQueryBuilder.d.ts +27 -3
  109. package/lib/stores/dataCube/core/DataCubeQueryBuilder.d.ts.map +1 -1
  110. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js +210 -278
  111. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js.map +1 -1
  112. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts +72 -0
  113. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts.map +1 -0
  114. package/lib/stores/dataCube/core/DataCubeQueryEngine.js +67 -0
  115. package/lib/stores/dataCube/core/DataCubeQueryEngine.js.map +1 -0
  116. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts +73 -38
  117. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts.map +1 -1
  118. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js +101 -40
  119. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js.map +1 -1
  120. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.d.ts +32 -0
  121. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.d.ts.map +1 -0
  122. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js +232 -0
  123. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js.map +1 -0
  124. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.d.ts +8 -2
  125. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.d.ts.map +1 -1
  126. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.js +20 -5
  127. package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.js.map +1 -1
  128. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.d.ts +8 -3
  129. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.d.ts.map +1 -1
  130. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.js +8 -4
  131. package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.js.map +1 -1
  132. package/lib/stores/dataCube/editor/{DataCubeEditorCodeState.d.ts → DataCubeEditorCodePanelState.d.ts} +6 -5
  133. package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.d.ts.map +1 -0
  134. package/lib/stores/dataCube/editor/{DataCubeEditorCodeState.js → DataCubeEditorCodePanelState.js} +7 -7
  135. package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.js.map +1 -0
  136. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts +30 -0
  137. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts.map +1 -0
  138. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js +51 -0
  139. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js.map +1 -0
  140. package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.d.ts +29 -0
  141. package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.d.ts.map +1 -0
  142. package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.js +63 -0
  143. package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.js.map +1 -0
  144. package/lib/stores/dataCube/editor/{DataCubeEditorQuerySnapshotBuilder.d.ts → DataCubeEditorPanelState.d.ts} +2 -2
  145. package/lib/stores/dataCube/editor/DataCubeEditorPanelState.d.ts.map +1 -0
  146. package/lib/stores/dataCube/editor/{DataCubeEditorQuerySnapshotBuilder.js → DataCubeEditorPanelState.js} +1 -1
  147. package/lib/stores/dataCube/editor/DataCubeEditorPanelState.js.map +1 -0
  148. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts +34 -0
  149. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts.map +1 -0
  150. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js +67 -0
  151. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js.map +1 -0
  152. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts +10 -7
  153. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts.map +1 -1
  154. package/lib/stores/dataCube/editor/DataCubeEditorState.js +25 -17
  155. package/lib/stores/dataCube/editor/DataCubeEditorState.js.map +1 -1
  156. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts +13 -7
  157. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts.map +1 -1
  158. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js +87 -86
  159. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js.map +1 -1
  160. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.d.ts +20 -0
  161. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.d.ts.map +1 -0
  162. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js +103 -0
  163. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js.map +1 -0
  164. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.d.ts +7 -1
  165. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.d.ts.map +1 -1
  166. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js +121 -214
  167. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js.map +1 -1
  168. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts +25 -0
  169. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts.map +1 -0
  170. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js +83 -0
  171. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js.map +1 -0
  172. package/lib/stores/dataCube/grid/DataCubeGridState.d.ts +6 -5
  173. package/lib/stores/dataCube/grid/DataCubeGridState.d.ts.map +1 -1
  174. package/lib/stores/dataCube/grid/DataCubeGridState.js +32 -10
  175. package/lib/stores/dataCube/grid/DataCubeGridState.js.map +1 -1
  176. package/package.json +15 -12
  177. package/src/components/Core_LegendREPLApplicationPlugin.tsx +0 -7
  178. package/src/components/REPLStoreProvider.tsx +1 -1
  179. package/src/components/dataCube/DataCube.tsx +51 -29
  180. package/src/components/dataCube/editor/DataCubeEditor.tsx +204 -95
  181. package/src/components/dataCube/editor/DataCubeEditorCodePanel.tsx +186 -190
  182. package/src/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.tsx +42 -0
  183. package/src/components/dataCube/editor/DataCubeEditorColumnsPanel.tsx +41 -0
  184. package/src/components/dataCube/editor/DataCubeEditorColumnsSelector.tsx +408 -0
  185. package/src/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.tsx +41 -0
  186. package/src/components/dataCube/editor/DataCubeEditorFilterPanel.tsx +41 -0
  187. package/src/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.tsx +48 -0
  188. package/src/components/dataCube/editor/DataCubeEditorHPivotsPanel.tsx +41 -0
  189. package/src/components/dataCube/editor/DataCubeEditorSortsPanel.tsx +41 -0
  190. package/src/components/dataCube/editor/DataCubeEditorVPivotsPanel.tsx +41 -0
  191. package/src/components/dataCube/grid/DataCubeGrid.tsx +134 -43
  192. package/src/server/REPLServerClient.ts +2 -2
  193. package/src/server/models/DataCubeEngineModels.ts +23 -1
  194. package/{lib/grid.css → src/stores/dataCube/DataCubeDefaultConfig.ts} +2 -2
  195. package/src/stores/dataCube/DataCubeState.ts +26 -20
  196. package/src/stores/dataCube/core/DataCubeCoreState.ts +57 -0
  197. package/src/stores/dataCube/core/DataCubeEngine.ts +6 -4
  198. package/src/stores/dataCube/core/DataCubeQueryBuilder.ts +349 -353
  199. package/src/stores/dataCube/core/DataCubeQueryEngine.ts +90 -0
  200. package/src/stores/dataCube/core/DataCubeQuerySnapshot.ts +168 -156
  201. package/src/stores/dataCube/core/DataCubeQuerySnapshotBuilder.ts +398 -0
  202. package/src/stores/dataCube/core/DataCubeQuerySnapshotManager.ts +37 -5
  203. package/src/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.ts +13 -5
  204. package/src/stores/dataCube/editor/{DataCubeEditorCodeState.ts → DataCubeEditorCodePanelState.ts} +6 -6
  205. package/src/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.ts +61 -0
  206. package/src/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.ts +80 -0
  207. package/src/stores/dataCube/editor/{DataCubeEditorQuerySnapshotBuilder.ts → DataCubeEditorPanelState.ts} +1 -1
  208. package/src/stores/dataCube/editor/DataCubeEditorSortsPanelState.ts +116 -0
  209. package/src/stores/dataCube/editor/DataCubeEditorState.ts +29 -20
  210. package/src/stores/dataCube/grid/DataCubeGridClientEngine.ts +96 -128
  211. package/src/stores/dataCube/grid/DataCubeGridQueryBuilder.ts +154 -0
  212. package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.tsx +191 -0
  213. package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.ts +127 -0
  214. package/src/stores/dataCube/grid/DataCubeGridState.ts +41 -14
  215. package/tsconfig.json +23 -9
  216. package/lib/components/dataCube/editor/DataCubeEditorSortPanel.d.ts.map +0 -1
  217. package/lib/components/dataCube/editor/DataCubeEditorSortPanel.js +0 -61
  218. package/lib/components/dataCube/editor/DataCubeEditorSortPanel.js.map +0 -1
  219. package/lib/grid.css.map +0 -1
  220. package/lib/repl.css +0 -17
  221. package/lib/repl.css.map +0 -1
  222. package/lib/stores/dataCube/DataCubeMetaModelConst.d.ts +0 -63
  223. package/lib/stores/dataCube/DataCubeMetaModelConst.d.ts.map +0 -1
  224. package/lib/stores/dataCube/DataCubeMetaModelConst.js +0 -72
  225. package/lib/stores/dataCube/DataCubeMetaModelConst.js.map +0 -1
  226. package/lib/stores/dataCube/DataCubeStore.d.ts.map +0 -1
  227. package/lib/stores/dataCube/DataCubeStore.js.map +0 -1
  228. package/lib/stores/dataCube/core/DataCubeQueryAnalyzer.d.ts +0 -37
  229. package/lib/stores/dataCube/core/DataCubeQueryAnalyzer.d.ts.map +0 -1
  230. package/lib/stores/dataCube/core/DataCubeQueryAnalyzer.js +0 -269
  231. package/lib/stores/dataCube/core/DataCubeQueryAnalyzer.js.map +0 -1
  232. package/lib/stores/dataCube/editor/DataCubeEditorCodeState.d.ts.map +0 -1
  233. package/lib/stores/dataCube/editor/DataCubeEditorCodeState.js.map +0 -1
  234. package/lib/stores/dataCube/editor/DataCubeEditorQuerySnapshotBuilder.d.ts.map +0 -1
  235. package/lib/stores/dataCube/editor/DataCubeEditorQuerySnapshotBuilder.js.map +0 -1
  236. package/lib/stores/dataCube/editor/DataCubeEditorSortState.d.ts +0 -46
  237. package/lib/stores/dataCube/editor/DataCubeEditorSortState.d.ts.map +0 -1
  238. package/lib/stores/dataCube/editor/DataCubeEditorSortState.js +0 -133
  239. package/lib/stores/dataCube/editor/DataCubeEditorSortState.js.map +0 -1
  240. package/src/components/dataCube/editor/DataCubeEditorSortPanel.tsx +0 -274
  241. package/src/stores/dataCube/DataCubeMetaModelConst.ts +0 -76
  242. package/src/stores/dataCube/core/DataCubeQueryAnalyzer.ts +0 -424
  243. package/src/stores/dataCube/editor/DataCubeEditorSortState.ts +0 -198
  244. package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.ts +0 -281
  245. /package/src/stores/dataCube/{DataCubeStore.ts → REPLStore.ts} +0 -0
@@ -0,0 +1,408 @@
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 { observer } from 'mobx-react-lite';
18
+ import { DataCubeIcon } from '@finos/legend-art';
19
+ import type {
20
+ ColDef,
21
+ ColDefField,
22
+ GridApi,
23
+ IRowNode,
24
+ RowDragEndEvent,
25
+ SelectionChangedEvent,
26
+ } from '@ag-grid-community/core';
27
+ import { useCallback, useEffect, useState } from 'react';
28
+ import {
29
+ AgGridReact,
30
+ type AgGridReactProps,
31
+ type CustomCellRendererProps,
32
+ } from '@ag-grid-community/react';
33
+ import { ClientSideRowModelModule } from '@ag-grid-community/client-side-row-model';
34
+ import type {
35
+ DataCubeEditorColumnsSelectorColumnState,
36
+ DataCubeEditorColumnsSelectorState,
37
+ } from '../../../stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js';
38
+ import { isNonNullable } from '@finos/legend-shared';
39
+
40
+ function getBaseGridProps<
41
+ T extends DataCubeEditorColumnsSelectorColumnState,
42
+ >(): AgGridReactProps<T> {
43
+ return {
44
+ modules: [ClientSideRowModelModule],
45
+ className: 'ag-theme-balham',
46
+ animateRows: false,
47
+ getRowId: (params) => params.data.name,
48
+ editType: 'fullRow',
49
+ rowSelection: 'multiple',
50
+ rowDragMultiRow: true,
51
+ rowDragEntireRow: true,
52
+ suppressRowClickSelection: false,
53
+ suppressMoveWhenRowDragging: true,
54
+ rowHeight: 20,
55
+ headerHeight: 20,
56
+ suppressRowHoverHighlight: false,
57
+ reactiveCustomComponents: true, // TODO: remove on v32 as this would be default to `true` then
58
+ noRowsOverlayComponent: () => <div />,
59
+ };
60
+ }
61
+
62
+ function getBaseColumnDef<
63
+ T extends DataCubeEditorColumnsSelectorColumnState,
64
+ >(): ColDef<T> {
65
+ return {
66
+ field: 'name' as ColDefField<T>,
67
+ flex: 1,
68
+ minWidth: 100,
69
+ filter: true,
70
+ sortable: false,
71
+ resizable: false,
72
+ suppressHeaderMenuButton: true,
73
+ colId: 'checkbox',
74
+ checkboxSelection: true,
75
+ headerCheckboxSelection: true,
76
+ rowDrag: true,
77
+ rowDragText: (params, dragItemCount) => {
78
+ if (dragItemCount > 1) {
79
+ return `${dragItemCount} columns`;
80
+ }
81
+ return (params.rowNode?.data as T).name;
82
+ },
83
+ };
84
+ }
85
+
86
+ export const DataCubeEditorColumnsSelector = observer(
87
+ function DataCubeEditorColumnsSelector<
88
+ T extends DataCubeEditorColumnsSelectorColumnState,
89
+ >(props: { selector: DataCubeEditorColumnsSelectorState<T> }) {
90
+ const { selector } = props;
91
+ const [selectedAvailableColumns, setSelectedAvailableColumns] = useState<
92
+ T[]
93
+ >([]);
94
+ const [selectedSelectedColumns, setSelectedSelectedColumns] = useState<T[]>(
95
+ [],
96
+ );
97
+ const [availableColumnsGridApi, setAvailableColumnsGridApi] =
98
+ useState<GridApi | null>(null);
99
+ const [selectedColumnsGridApi, setSelectedColumnsGridApi] =
100
+ useState<GridApi | null>(null);
101
+
102
+ /**
103
+ * Since we use managed row dragging for selected columns,
104
+ * we just need to sync the row data with the state.
105
+ * Dragging (multiple) row(s) to specific position have been
106
+ * handled by ag-grid.
107
+ */
108
+ const onSelectedColumnsDragStop = useCallback(
109
+ (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);
117
+ selector.setAvailableColumns(
118
+ selector.availableColumns.filter(
119
+ (column) => !newRowData.includes(column),
120
+ ),
121
+ );
122
+ },
123
+ [selector],
124
+ );
125
+
126
+ const onAvailableColumnsDragStop = useCallback(
127
+ (params: RowDragEndEvent<T>) => {
128
+ const nodes = params.nodes;
129
+ const columnsToMove = nodes
130
+ .map((node) => node.data)
131
+ .filter(isNonNullable);
132
+
133
+ selector.setAvailableColumns([
134
+ ...selector.availableColumns,
135
+ ...columnsToMove,
136
+ ]);
137
+ selector.setSelectedColumns(
138
+ selector.selectedColumns.filter(
139
+ (column) => !columnsToMove.includes(column),
140
+ ),
141
+ );
142
+ },
143
+ [selector],
144
+ );
145
+
146
+ /**
147
+ * Since we use managed row dragging for selected columns,
148
+ * we just need to sync the row data with the state
149
+ * Dragging (multiple) row(s) to specific position have been
150
+ * handled by ag-grid.
151
+ */
152
+ const onSelectedColumnsDragEnd = useCallback(
153
+ (event: RowDragEndEvent) => {
154
+ if (event.overIndex === -1) {
155
+ return;
156
+ }
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);
164
+ },
165
+ [selector],
166
+ );
167
+
168
+ useEffect(() => {
169
+ if (!availableColumnsGridApi || !selectedColumnsGridApi) {
170
+ return;
171
+ }
172
+ const selectedColumnsDropZoneParams =
173
+ selectedColumnsGridApi.getRowDropZoneParams({
174
+ onDragStop: (event) => {
175
+ onSelectedColumnsDragStop(event);
176
+ availableColumnsGridApi.clearFocusedCell();
177
+ },
178
+ });
179
+ availableColumnsGridApi.removeRowDropZone(selectedColumnsDropZoneParams);
180
+ availableColumnsGridApi.addRowDropZone(selectedColumnsDropZoneParams);
181
+
182
+ const availableColumnsDropZoneParams =
183
+ availableColumnsGridApi.getRowDropZoneParams({
184
+ onDragStop: (event) => {
185
+ onAvailableColumnsDragStop(event);
186
+ selectedColumnsGridApi.clearFocusedCell();
187
+ },
188
+ });
189
+ selectedColumnsGridApi.removeRowDropZone(availableColumnsDropZoneParams);
190
+ selectedColumnsGridApi.addRowDropZone(availableColumnsDropZoneParams);
191
+ }, [
192
+ availableColumnsGridApi,
193
+ selectedColumnsGridApi,
194
+ onSelectedColumnsDragStop,
195
+ onAvailableColumnsDragStop,
196
+ ]);
197
+
198
+ return (
199
+ <div className="flex h-full w-full">
200
+ <div className="h-full w-[calc(50%_-_20px)]">
201
+ <div className="flex h-5 items-center text-sm">
202
+ Available columns:
203
+ </div>
204
+ <div className="h-[calc(100%_-_20px)] rounded-sm border border-neutral-200">
205
+ <div className="relative h-6 border-b border-neutral-200">
206
+ <input
207
+ className="h-full w-full pl-10 placeholder-neutral-400"
208
+ placeholder="Click here to search..."
209
+ />
210
+ <div className="absolute left-0 top-0 flex h-6 w-10 items-center justify-center">
211
+ <DataCubeIcon.Search className="stroke-[3px] text-lg text-neutral-500" />
212
+ </div>
213
+ </div>
214
+ <div className="h-[calc(100%_-_24px)]">
215
+ <AgGridReact
216
+ {...getBaseGridProps<T>()}
217
+ // Disable managed row-dragging to disallow changing the order of columns
218
+ // and to make sure the row data and the available columns state are in sync
219
+ rowDragManaged={false}
220
+ onGridReady={(params) => setAvailableColumnsGridApi(params.api)}
221
+ rowData={selector.availableColumns}
222
+ onSelectionChanged={(event: SelectionChangedEvent<T>) => {
223
+ setSelectedAvailableColumns(
224
+ event.api
225
+ .getSelectedNodes()
226
+ .map((node) => node.data)
227
+ .filter(isNonNullable),
228
+ );
229
+ }}
230
+ columnDefs={[
231
+ {
232
+ ...getBaseColumnDef<T>(),
233
+ headerComponent: (params: CustomCellRendererProps<T>) => (
234
+ <div
235
+ title="Double-click to add all columns"
236
+ className="flex h-full w-full cursor-pointer items-center pl-0.5"
237
+ onDoubleClick={() => {
238
+ // TODO: scope this by the current search
239
+ selector.setSelectedColumns([
240
+ ...selector.selectedColumns,
241
+ ...selector.availableColumns,
242
+ ]);
243
+ selector.setAvailableColumns([]);
244
+ params.api.clearFocusedCell();
245
+ }}
246
+ >{`[All Columns]`}</div>
247
+ ),
248
+ cellRenderer: (params: CustomCellRendererProps<T>) => {
249
+ const data = params.data;
250
+ if (!data) {
251
+ return null;
252
+ }
253
+ return (
254
+ <div
255
+ className="h-full w-full cursor-pointer pl-2"
256
+ title={`[${data.name}]\nDouble-click to add column`}
257
+ onDoubleClick={() => {
258
+ selector.setSelectedColumns([
259
+ ...selector.selectedColumns,
260
+ data,
261
+ ]);
262
+ selector.setAvailableColumns(
263
+ selector.availableColumns.filter(
264
+ (column) => column !== data,
265
+ ),
266
+ );
267
+ params.api.clearFocusedCell();
268
+ }}
269
+ >
270
+ {data.name}
271
+ </div>
272
+ );
273
+ },
274
+ },
275
+ ]}
276
+ />
277
+ </div>
278
+ </div>
279
+ </div>
280
+ <div className="flex h-full w-10 items-center justify-center">
281
+ <div className="flex flex-col">
282
+ <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"
284
+ title="Add selected columns"
285
+ onClick={() => {
286
+ // TODO: scope this by the current search
287
+ selector.setSelectedColumns([
288
+ ...selector.selectedColumns,
289
+ ...selectedAvailableColumns,
290
+ ]);
291
+ selector.setAvailableColumns(
292
+ selector.availableColumns.filter(
293
+ (column) => !selectedAvailableColumns.includes(column),
294
+ ),
295
+ );
296
+ availableColumnsGridApi?.clearFocusedCell();
297
+ }}
298
+ disabled={selectedAvailableColumns.length === 0}
299
+ >
300
+ <DataCubeIcon.ChevronRight className="text-2xl" />
301
+ </button>
302
+ <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"
304
+ title="Remove selected columns"
305
+ onClick={() => {
306
+ // TODO: scope this by the current search
307
+ selector.setAvailableColumns([
308
+ ...selector.availableColumns,
309
+ ...selectedSelectedColumns,
310
+ ]);
311
+ selector.setSelectedColumns(
312
+ selector.selectedColumns.filter(
313
+ (column) => !selectedSelectedColumns.includes(column),
314
+ ),
315
+ );
316
+ selectedColumnsGridApi?.clearFocusedCell();
317
+ }}
318
+ disabled={selectedSelectedColumns.length === 0}
319
+ >
320
+ <DataCubeIcon.ChevronLeft className="text-2xl" />
321
+ </button>
322
+ </div>
323
+ </div>
324
+ <div className="h-full w-[calc(50%_-_20px)]">
325
+ <div className="flex h-5 items-center text-sm">Selected columns:</div>
326
+ <div className="h-[calc(100%_-_20px)] rounded-sm border border-neutral-200">
327
+ <div className="relative h-6 border-b border-neutral-200">
328
+ <input
329
+ className="h-full w-full pl-10 placeholder-neutral-400"
330
+ placeholder="Click here to search..."
331
+ />
332
+ <div className="absolute left-0 top-0 flex h-6 w-10 items-center justify-center">
333
+ <DataCubeIcon.Search className="stroke-[3px] text-lg text-neutral-500" />
334
+ </div>
335
+ </div>
336
+ <div className="h-[calc(100%_-_24px)]">
337
+ <AgGridReact
338
+ {...getBaseGridProps<T>()}
339
+ // NOTE: technically, we don't want to enable managed row-dragging here
340
+ // but enabling this gives us free row moving management and interaction
341
+ // comes out of the box from ag-grid, we will just sync the state with
342
+ // grid row data afterwards to ensure consistency
343
+ rowDragManaged={true}
344
+ onRowDragEnd={onSelectedColumnsDragEnd}
345
+ onGridReady={(params) => setSelectedColumnsGridApi(params.api)}
346
+ onSelectionChanged={(event: SelectionChangedEvent<T>) => {
347
+ setSelectedSelectedColumns(
348
+ event.api
349
+ .getSelectedNodes()
350
+ .map((node) => node.data)
351
+ .filter(isNonNullable),
352
+ );
353
+ }}
354
+ rowData={selector.selectedColumns}
355
+ columnDefs={[
356
+ {
357
+ ...getBaseColumnDef<T>(),
358
+ headerComponent: (params: CustomCellRendererProps<T>) => (
359
+ <div
360
+ title="Double-click to remove all columns"
361
+ className="flex h-full w-full cursor-pointer items-center pl-0.5"
362
+ onDoubleClick={() => {
363
+ // TODO: scope this by the current search
364
+ selector.setAvailableColumns([
365
+ ...selector.availableColumns,
366
+ ...selector.selectedColumns,
367
+ ]);
368
+ selector.setSelectedColumns([]);
369
+ params.api.clearFocusedCell();
370
+ }}
371
+ >{`[All Columns]`}</div>
372
+ ),
373
+ cellRenderer: (params: CustomCellRendererProps<T>) => {
374
+ const data = params.data;
375
+ if (!data) {
376
+ return null;
377
+ }
378
+ return (
379
+ <div
380
+ className="h-full w-full cursor-pointer pl-2"
381
+ title={`[${data.name}]\nDouble-click to remove column`}
382
+ onDoubleClick={() => {
383
+ selector.setAvailableColumns([
384
+ ...selector.availableColumns,
385
+ data,
386
+ ]);
387
+ selector.setSelectedColumns(
388
+ selector.selectedColumns.filter(
389
+ (column) => column !== data,
390
+ ),
391
+ );
392
+ params.api.clearFocusedCell();
393
+ }}
394
+ >
395
+ {data.name}
396
+ </div>
397
+ );
398
+ },
399
+ },
400
+ ]}
401
+ />
402
+ </div>
403
+ </div>
404
+ </div>
405
+ </div>
406
+ );
407
+ },
408
+ );
@@ -0,0 +1,41 @@
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
+
22
+ export const DataCubeEditorExtendedColumnsPanel = observer(() => {
23
+ const replStore = useREPLStore();
24
+ const panel = replStore.dataCubeState.editor.sortsPanel;
25
+
26
+ useEffect(() => {}, [panel]); // TODO: @akphi - remove this dummy useEffect
27
+
28
+ return (
29
+ <div className="data-cube-column-selector h-full w-full p-2">
30
+ <div className="flex h-6">
31
+ <div className="flex h-6 items-center text-xl font-medium">
32
+ <DataCubeIcon.TablePlus />
33
+ </div>
34
+ <div className="ml-1 flex h-6 items-center text-xl font-medium">
35
+ Extended Columns
36
+ </div>
37
+ </div>
38
+ <div className="flex h-[calc(100%_-_24px)] w-full"></div>
39
+ </div>
40
+ );
41
+ });
@@ -0,0 +1,41 @@
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
+
22
+ export const DataCubeEditorFilterPanel = observer(() => {
23
+ const replStore = useREPLStore();
24
+ const panel = replStore.dataCubeState.editor.sortsPanel;
25
+
26
+ useEffect(() => {}, [panel]); // TODO: @akphi - remove this dummy useEffect
27
+
28
+ return (
29
+ <div className="data-cube-column-selector h-full w-full p-2">
30
+ <div className="flex h-6">
31
+ <div className="flex h-6 items-center text-xl font-medium">
32
+ <DataCubeIcon.TableFilter />
33
+ </div>
34
+ <div className="ml-1 flex h-6 items-center text-xl font-medium">
35
+ Filter
36
+ </div>
37
+ </div>
38
+ <div className="flex h-[calc(100%_-_24px)] w-full"></div>
39
+ </div>
40
+ );
41
+ });
@@ -0,0 +1,48 @@
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 { observer } from 'mobx-react-lite';
18
+ import { useREPLStore } from '../../REPLStoreProvider.js';
19
+ import { DataCubeIcon } from '@finos/legend-art';
20
+
21
+ export const DataCubeEditorGeneralPropertiesPanel = observer(() => {
22
+ const replStore = useREPLStore();
23
+ const panel = replStore.dataCubeState.editor.generalPropertiesPanel;
24
+
25
+ return (
26
+ <div className="data-cube-column-selector h-full w-full p-2">
27
+ <div className="flex h-6">
28
+ <div className="flex h-6 items-center text-xl font-medium">
29
+ <DataCubeIcon.TableOptions />
30
+ </div>
31
+ <div className="ml-1 flex h-6 items-center text-xl font-medium">
32
+ General Properties
33
+ </div>
34
+ </div>
35
+ <div className="flex h-[calc(100%_-_24px)] w-full p-4"></div>
36
+ <div className="flex h-6 w-full items-center">
37
+ <div className="flex h-full w-32 items-center">Report Title:</div>
38
+ <input
39
+ className="h-full w-full border border-neutral-300 px-2 text-lg font-semibold focus:outline-none"
40
+ value={panel.name}
41
+ onChange={(event) => {
42
+ panel.setName(event.target.value);
43
+ }}
44
+ />
45
+ </div>
46
+ </div>
47
+ );
48
+ });
@@ -0,0 +1,41 @@
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
+
22
+ export const DataCubeEditorHPivotsPanel = observer(() => {
23
+ const replStore = useREPLStore();
24
+ const panel = replStore.dataCubeState.editor.sortsPanel;
25
+
26
+ useEffect(() => {}, [panel]); // TODO: @akphi - remove this dummy useEffect
27
+
28
+ return (
29
+ <div className="data-cube-column-selector h-full w-full p-2">
30
+ <div className="flex h-6">
31
+ <div className="flex h-6 items-center text-xl font-medium">
32
+ <DataCubeIcon.TablePivot />
33
+ </div>
34
+ <div className="ml-1 flex h-6 items-center text-xl font-medium">
35
+ Horizontal Pivots
36
+ </div>
37
+ </div>
38
+ <div className="flex h-[calc(100%_-_24px)] w-full"></div>
39
+ </div>
40
+ );
41
+ });
@@ -0,0 +1,41 @@
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 { observer } from 'mobx-react-lite';
18
+ import { DataCubeIcon } from '@finos/legend-art';
19
+ import { useREPLStore } from '../../REPLStoreProvider.js';
20
+ import { DataCubeEditorColumnsSelector } from './DataCubeEditorColumnsSelector.js';
21
+
22
+ export const DataCubeEditorSortsPanel = observer(() => {
23
+ const replStore = useREPLStore();
24
+ const panel = replStore.dataCubeState.editor.sortsPanel;
25
+
26
+ return (
27
+ <div className="data-cube-column-selector h-full w-full p-2">
28
+ <div className="flex h-6">
29
+ <div className="flex h-6 items-center text-xl font-medium">
30
+ <DataCubeIcon.TableSort />
31
+ </div>
32
+ <div className="ml-1 flex h-6 items-center text-xl font-medium">
33
+ Sorts
34
+ </div>
35
+ </div>
36
+ <div className="flex h-[calc(100%_-_24px)] w-full">
37
+ <DataCubeEditorColumnsSelector selector={panel.columnsSelector} />
38
+ </div>
39
+ </div>
40
+ );
41
+ });
@@ -0,0 +1,41 @@
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
+
22
+ export const DataCubeEditorVPivotsPanel = observer(() => {
23
+ const replStore = useREPLStore();
24
+ const panel = replStore.dataCubeState.editor.sortsPanel;
25
+
26
+ useEffect(() => {}, [panel]); // TODO: @akphi - remove this dummy useEffect
27
+
28
+ return (
29
+ <div className="data-cube-column-selector h-full w-full p-2">
30
+ <div className="flex h-6">
31
+ <div className="flex h-6 items-center text-xl font-medium">
32
+ <DataCubeIcon.TableGroupBy />
33
+ </div>
34
+ <div className="ml-1 flex h-6 items-center text-xl font-medium">
35
+ Vertical Pivots
36
+ </div>
37
+ </div>
38
+ <div className="flex h-[calc(100%_-_24px)] w-full"></div>
39
+ </div>
40
+ );
41
+ });