@finos/legend-application-repl 0.0.52 → 0.0.54

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 (301) hide show
  1. package/lib/components/dataCube/DataCube.d.ts.map +1 -1
  2. package/lib/components/dataCube/DataCube.js +3 -2
  3. package/lib/components/dataCube/DataCube.js.map +1 -1
  4. package/lib/components/dataCube/editor/DataCubeEditor.d.ts.map +1 -1
  5. package/lib/components/dataCube/editor/DataCubeEditor.js +10 -4
  6. package/lib/components/dataCube/editor/DataCubeEditor.js.map +1 -1
  7. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.d.ts.map +1 -1
  8. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js +22 -3
  9. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js.map +1 -1
  10. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.d.ts.map +1 -1
  11. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js +13 -9
  12. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js.map +1 -1
  13. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts +6 -2
  14. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts.map +1 -1
  15. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js +13 -17
  16. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js.map +1 -1
  17. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js +1 -1
  18. package/lib/components/dataCube/{editor/DataCubeEditorExtendedColumnsPanel.d.ts → extend/DataCubeColumnEditor.d.ts} +4 -4
  19. package/lib/components/dataCube/extend/DataCubeColumnEditor.d.ts.map +1 -0
  20. package/lib/components/dataCube/extend/DataCubeColumnEditor.js +165 -0
  21. package/lib/components/dataCube/extend/DataCubeColumnEditor.js.map +1 -0
  22. package/lib/components/dataCube/filter/{DataCubeEditorFilter.d.ts → DataCubeFilterEditor.d.ts} +1 -1
  23. package/lib/components/dataCube/filter/DataCubeFilterEditor.d.ts.map +1 -0
  24. package/lib/components/dataCube/filter/{DataCubeEditorFilter.js → DataCubeFilterEditor.js} +1 -1
  25. package/lib/components/dataCube/filter/{DataCubeEditorFilter.js.map → DataCubeFilterEditor.js.map} +1 -1
  26. package/lib/components/repl/PureCodeEditor.d.ts +22 -0
  27. package/lib/components/repl/PureCodeEditor.d.ts.map +1 -0
  28. package/lib/components/repl/PureCodeEditor.js +64 -0
  29. package/lib/components/repl/PureCodeEditor.js.map +1 -0
  30. package/lib/index.css +1 -1
  31. package/lib/package.json +4 -4
  32. package/lib/server/REPLEngine.d.ts +27 -17
  33. package/lib/server/REPLEngine.d.ts.map +1 -1
  34. package/lib/server/REPLEngine.js +3 -31
  35. package/lib/server/REPLEngine.js.map +1 -1
  36. package/lib/server/REPLServerClient.d.ts +3 -2
  37. package/lib/server/REPLServerClient.d.ts.map +1 -1
  38. package/lib/server/REPLServerClient.js +4 -1
  39. package/lib/server/REPLServerClient.js.map +1 -1
  40. package/lib/stores/LayoutManagerState.d.ts +1 -1
  41. package/lib/stores/LayoutManagerState.d.ts.map +1 -1
  42. package/lib/stores/LayoutManagerState.js +2 -2
  43. package/lib/stores/LayoutManagerState.js.map +1 -1
  44. package/lib/stores/REPLStore.d.ts +3 -3
  45. package/lib/stores/REPLStore.d.ts.map +1 -1
  46. package/lib/stores/REPLStore.js +4 -4
  47. package/lib/stores/REPLStore.js.map +1 -1
  48. package/lib/stores/dataCube/DataCubeEngine.d.ts +4 -2
  49. package/lib/stores/dataCube/DataCubeEngine.d.ts.map +1 -1
  50. package/lib/stores/dataCube/DataCubeEngine.js +13 -2
  51. package/lib/stores/dataCube/DataCubeEngine.js.map +1 -1
  52. package/lib/stores/dataCube/DataCubeState.d.ts +7 -4
  53. package/lib/stores/dataCube/DataCubeState.d.ts.map +1 -1
  54. package/lib/stores/dataCube/DataCubeState.js +12 -9
  55. package/lib/stores/dataCube/DataCubeState.js.map +1 -1
  56. package/lib/stores/dataCube/core/{DataCubeStaticContentDisplayState.d.ts → DataCubeInfoState.d.ts} +9 -4
  57. package/lib/stores/dataCube/core/DataCubeInfoState.d.ts.map +1 -0
  58. package/lib/stores/dataCube/core/{DataCubeStaticContentDisplayState.js → DataCubeInfoState.js} +11 -6
  59. package/lib/stores/dataCube/core/DataCubeInfoState.js.map +1 -0
  60. package/lib/stores/dataCube/core/DataCubeQueryBuilder.d.ts.map +1 -1
  61. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js +18 -6
  62. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js.map +1 -1
  63. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts +8 -3
  64. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts.map +1 -1
  65. package/lib/stores/dataCube/core/DataCubeQueryEngine.js +15 -4
  66. package/lib/stores/dataCube/core/DataCubeQueryEngine.js.map +1 -1
  67. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts +3 -1
  68. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts.map +1 -1
  69. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js.map +1 -1
  70. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.d.ts.map +1 -1
  71. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js +2 -3
  72. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js.map +1 -1
  73. package/lib/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.d.ts +27 -0
  74. package/lib/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.d.ts.map +1 -0
  75. package/lib/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.js +20 -0
  76. package/lib/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.js.map +1 -0
  77. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.d.ts +0 -1
  78. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.d.ts.map +1 -1
  79. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.js +0 -19
  80. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.js.map +1 -1
  81. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.d.ts.map +1 -1
  82. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.js +4 -4
  83. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.js.map +1 -1
  84. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.d.ts.map +1 -1
  85. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.js +4 -4
  86. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.js.map +1 -1
  87. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.d.ts.map +1 -1
  88. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.js +4 -4
  89. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.js.map +1 -1
  90. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.d.ts.map +1 -1
  91. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.js +4 -4
  92. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.js.map +1 -1
  93. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.d.ts.map +1 -1
  94. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.js +14 -4
  95. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.js.map +1 -1
  96. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.d.ts.map +1 -1
  97. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.js +4 -4
  98. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.js.map +1 -1
  99. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.d.ts.map +1 -1
  100. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.js +3 -3
  101. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.js.map +1 -1
  102. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.d.ts.map +1 -1
  103. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.js +8 -3
  104. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.js.map +1 -1
  105. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.d.ts.map +1 -1
  106. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.js +12 -4
  107. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.js.map +1 -1
  108. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.d.ts.map +1 -1
  109. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.js +7 -3
  110. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.js.map +1 -1
  111. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.d.ts.map +1 -1
  112. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.js +12 -4
  113. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.js.map +1 -1
  114. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.d.ts.map +1 -1
  115. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.js +7 -3
  116. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.js.map +1 -1
  117. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.d.ts.map +1 -1
  118. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.js +14 -4
  119. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.js.map +1 -1
  120. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.d.ts.map +1 -1
  121. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.js +14 -4
  122. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.js.map +1 -1
  123. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.d.ts.map +1 -1
  124. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.js +12 -4
  125. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.js.map +1 -1
  126. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.d.ts.map +1 -1
  127. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.js +7 -3
  128. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.js.map +1 -1
  129. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.d.ts.map +1 -1
  130. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.js +12 -4
  131. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.js.map +1 -1
  132. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.d.ts.map +1 -1
  133. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.js +7 -3
  134. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.js.map +1 -1
  135. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.d.ts.map +1 -1
  136. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.js +4 -4
  137. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.js.map +1 -1
  138. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.d.ts.map +1 -1
  139. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.js +4 -4
  140. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.js.map +1 -1
  141. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.d.ts.map +1 -1
  142. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.js +14 -4
  143. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.js.map +1 -1
  144. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.d.ts.map +1 -1
  145. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.js +4 -4
  146. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.js.map +1 -1
  147. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.d.ts.map +1 -1
  148. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.js +3 -3
  149. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.js.map +1 -1
  150. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.d.ts.map +1 -1
  151. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.js +8 -3
  152. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.js.map +1 -1
  153. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.d.ts.map +1 -1
  154. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.js +4 -4
  155. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.js.map +1 -1
  156. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.d.ts.map +1 -1
  157. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.js +4 -4
  158. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.js.map +1 -1
  159. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.d.ts.map +1 -1
  160. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.js +4 -4
  161. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.js.map +1 -1
  162. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts +0 -1
  163. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts.map +1 -1
  164. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js +10 -40
  165. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js.map +1 -1
  166. package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.d.ts +18 -2
  167. package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.d.ts.map +1 -1
  168. package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.js +80 -21
  169. package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.js.map +1 -1
  170. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts +0 -8
  171. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts.map +1 -1
  172. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js +2 -23
  173. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js.map +1 -1
  174. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts.map +1 -1
  175. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js +4 -1
  176. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js.map +1 -1
  177. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts +14 -3
  178. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts.map +1 -1
  179. package/lib/stores/dataCube/editor/DataCubeEditorState.js +37 -4
  180. package/lib/stores/dataCube/editor/DataCubeEditorState.js.map +1 -1
  181. package/lib/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.d.ts.map +1 -1
  182. package/lib/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.js +9 -5
  183. package/lib/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.js.map +1 -1
  184. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts +3 -1
  185. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts.map +1 -1
  186. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js +28 -1
  187. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js.map +1 -1
  188. package/lib/stores/dataCube/extend/DataCubeColumnEditorState.d.ts +61 -0
  189. package/lib/stores/dataCube/extend/DataCubeColumnEditorState.d.ts.map +1 -0
  190. package/lib/stores/dataCube/extend/DataCubeColumnEditorState.js +262 -0
  191. package/lib/stores/dataCube/extend/DataCubeColumnEditorState.js.map +1 -0
  192. package/lib/stores/dataCube/extend/DataCubeExtendManagerState.d.ts +45 -0
  193. package/lib/stores/dataCube/extend/DataCubeExtendManagerState.d.ts.map +1 -0
  194. package/lib/stores/dataCube/extend/DataCubeExtendManagerState.js +112 -0
  195. package/lib/stores/dataCube/extend/DataCubeExtendManagerState.js.map +1 -0
  196. package/lib/stores/dataCube/filter/DataCubeFilterEditorState.d.ts +6 -2
  197. package/lib/stores/dataCube/filter/DataCubeFilterEditorState.d.ts.map +1 -1
  198. package/lib/stores/dataCube/filter/DataCubeFilterEditorState.js +18 -5
  199. package/lib/stores/dataCube/filter/DataCubeFilterEditorState.js.map +1 -1
  200. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts.map +1 -1
  201. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js +1 -2
  202. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js.map +1 -1
  203. package/lib/stores/dataCube/grid/DataCubeGridClientExportEngine.js +1 -1
  204. package/lib/stores/dataCube/grid/DataCubeGridClientExportEngine.js.map +1 -1
  205. package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.d.ts.map +1 -1
  206. package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.js +10 -5
  207. package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.js.map +1 -1
  208. package/lib/stores/dataCube/grid/DataCubeGridControllerState.d.ts +16 -10
  209. package/lib/stores/dataCube/grid/DataCubeGridControllerState.d.ts.map +1 -1
  210. package/lib/stores/dataCube/grid/DataCubeGridControllerState.js +28 -14
  211. package/lib/stores/dataCube/grid/DataCubeGridControllerState.js.map +1 -1
  212. package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.d.ts.map +1 -1
  213. package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.js +34 -20
  214. package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.js.map +1 -1
  215. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.d.ts.map +1 -1
  216. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js +1 -0
  217. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js.map +1 -1
  218. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts +2 -2
  219. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts.map +1 -1
  220. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js +3 -2
  221. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js.map +1 -1
  222. package/lib/stores/dataCube/grid/DataCubeGridState.d.ts +15 -0
  223. package/lib/stores/dataCube/grid/DataCubeGridState.d.ts.map +1 -1
  224. package/lib/stores/dataCube/grid/DataCubeGridState.js +15 -0
  225. package/lib/stores/dataCube/grid/DataCubeGridState.js.map +1 -1
  226. package/package.json +10 -10
  227. package/src/components/dataCube/DataCube.tsx +4 -1
  228. package/src/components/dataCube/editor/DataCubeEditor.tsx +11 -3
  229. package/src/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.tsx +88 -25
  230. package/src/components/dataCube/editor/DataCubeEditorColumnsPanel.tsx +58 -12
  231. package/src/components/dataCube/editor/DataCubeEditorColumnsSelector.tsx +38 -34
  232. package/src/components/dataCube/editor/DataCubeEditorSortsPanel.tsx +1 -1
  233. package/src/components/dataCube/extend/DataCubeColumnEditor.tsx +362 -0
  234. package/src/components/repl/PureCodeEditor.tsx +91 -0
  235. package/src/server/REPLEngine.ts +33 -43
  236. package/src/server/REPLServerClient.ts +11 -1
  237. package/src/stores/LayoutManagerState.ts +2 -2
  238. package/src/stores/REPLStore.tsx +8 -10
  239. package/src/stores/dataCube/DataCubeEngine.ts +21 -2
  240. package/src/stores/dataCube/DataCubeState.ts +13 -9
  241. package/src/stores/dataCube/core/{DataCubeStaticContentDisplayState.ts → DataCubeInfoState.ts} +12 -7
  242. package/src/stores/dataCube/core/DataCubeQueryBuilder.ts +29 -10
  243. package/src/stores/dataCube/core/DataCubeQueryEngine.ts +19 -4
  244. package/src/stores/dataCube/core/DataCubeQuerySnapshot.ts +5 -1
  245. package/src/stores/dataCube/core/DataCubeQuerySnapshotBuilder.ts +2 -3
  246. package/src/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.ts +40 -0
  247. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation.ts +0 -23
  248. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.tsx +4 -3
  249. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.tsx +4 -3
  250. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.tsx +4 -3
  251. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.tsx +4 -3
  252. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.tsx +14 -3
  253. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.tsx +4 -3
  254. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.tsx +4 -5
  255. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.tsx +9 -5
  256. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.tsx +12 -3
  257. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.tsx +8 -5
  258. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.tsx +12 -3
  259. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.tsx +8 -5
  260. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.tsx +15 -6
  261. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.tsx +15 -6
  262. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.tsx +12 -3
  263. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.tsx +8 -5
  264. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.tsx +12 -3
  265. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.tsx +8 -5
  266. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.tsx +4 -3
  267. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.tsx +4 -3
  268. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.tsx +14 -3
  269. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.tsx +4 -3
  270. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.tsx +4 -5
  271. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.tsx +9 -5
  272. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.tsx +4 -3
  273. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.tsx +4 -3
  274. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.tsx +4 -3
  275. package/src/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.ts +18 -51
  276. package/src/stores/dataCube/editor/DataCubeEditorColumnsPanelState.ts +137 -31
  277. package/src/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.ts +2 -40
  278. package/src/stores/dataCube/editor/DataCubeEditorSortsPanelState.ts +9 -1
  279. package/src/stores/dataCube/editor/DataCubeEditorState.tsx +50 -5
  280. package/src/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.ts +14 -7
  281. package/src/stores/dataCube/editor/DataCubeMutableConfiguration.ts +32 -1
  282. package/src/stores/dataCube/extend/DataCubeColumnEditorState.tsx +364 -0
  283. package/src/stores/dataCube/extend/DataCubeExtendManagerState.tsx +169 -0
  284. package/src/stores/dataCube/filter/DataCubeFilterEditorState.tsx +21 -10
  285. package/src/stores/dataCube/grid/DataCubeGridClientEngine.ts +1 -2
  286. package/src/stores/dataCube/grid/DataCubeGridClientExportEngine.ts +1 -1
  287. package/src/stores/dataCube/grid/DataCubeGridConfigurationBuilder.tsx +18 -7
  288. package/src/stores/dataCube/grid/DataCubeGridControllerState.ts +37 -17
  289. package/src/stores/dataCube/grid/DataCubeGridMenuBuilder.tsx +36 -20
  290. package/src/stores/dataCube/grid/DataCubeGridQueryBuilder.ts +1 -0
  291. package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.ts +8 -1
  292. package/src/stores/dataCube/grid/DataCubeGridState.ts +15 -0
  293. package/tsconfig.json +8 -3
  294. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.d.ts.map +0 -1
  295. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js +0 -27
  296. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js.map +0 -1
  297. package/lib/components/dataCube/filter/DataCubeEditorFilter.d.ts.map +0 -1
  298. package/lib/stores/dataCube/core/DataCubeStaticContentDisplayState.d.ts.map +0 -1
  299. package/lib/stores/dataCube/core/DataCubeStaticContentDisplayState.js.map +0 -1
  300. package/src/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.tsx +0 -45
  301. /package/src/components/dataCube/filter/{DataCubeEditorFilter.tsx → DataCubeFilterEditor.tsx} +0 -0
@@ -14,16 +14,16 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { action, makeObservable, observable } from 'mobx';
17
+ import { action, makeObservable, observable, override } from 'mobx';
18
18
  import type { DataCubeState } from '../DataCubeState.js';
19
19
  import {
20
20
  type DataCubeQuerySnapshot,
21
21
  type DataCubeQuerySnapshotColumn,
22
+ type DataCubeQuerySnapshotExtendedColumn,
22
23
  } from '../core/DataCubeQuerySnapshot.js';
23
24
  import type { DataCubeQueryEditorPanelState } from './DataCubeEditorPanelState.js';
24
25
  import {
25
26
  DataCubeEditorColumnsSelectorColumnState,
26
- DataCubeEditorColumnsSelectorHiddenColumnsVisibility,
27
27
  DataCubeEditorColumnsSelectorState,
28
28
  } from './DataCubeEditorColumnsSelectorState.js';
29
29
  import type { DataCubeEditorState } from './DataCubeEditorState.js';
@@ -31,6 +31,29 @@ import { type DataCubeConfiguration } from '../core/DataCubeConfiguration.js';
31
31
  import { DataCubeMutableColumnConfiguration } from './DataCubeMutableConfiguration.js';
32
32
 
33
33
  export class DataCubeEditorBasicColumnsSelectorState extends DataCubeEditorColumnsSelectorState<DataCubeEditorColumnsSelectorColumnState> {
34
+ showHiddenColumns = false;
35
+
36
+ constructor(
37
+ editor: DataCubeEditorState,
38
+ options?: {
39
+ onChange?:
40
+ | ((
41
+ select: DataCubeEditorColumnsSelectorState<DataCubeEditorColumnsSelectorColumnState>,
42
+ ) => void)
43
+ | undefined;
44
+ },
45
+ ) {
46
+ super(editor, options);
47
+
48
+ makeObservable(this, {
49
+ availableColumnsForDisplay: override,
50
+ selectedColumnsForDisplay: override,
51
+
52
+ showHiddenColumns: observable,
53
+ setShowHiddenColumns: action,
54
+ });
55
+ }
56
+
34
57
  override cloneColumn(column: DataCubeEditorColumnsSelectorColumnState) {
35
58
  return new DataCubeEditorColumnsSelectorColumnState(
36
59
  column.name,
@@ -41,13 +64,68 @@ export class DataCubeEditorBasicColumnsSelectorState extends DataCubeEditorColum
41
64
  override get availableColumns() {
42
65
  return [
43
66
  ...this.editor.columns.sourceColumns,
44
- // TODO: add extended columns
67
+ ...this.editor.columns.leafExtendColumns,
68
+ ...this.editor.columns.groupExtendColumns,
45
69
  ].map(
46
70
  (col) => new DataCubeEditorColumnsSelectorColumnState(col.name, col.type),
47
71
  );
48
72
  }
73
+
74
+ override get availableColumnsForDisplay(): DataCubeEditorColumnsSelectorColumnState[] {
75
+ return this.availableColumns
76
+ .filter(
77
+ (column) =>
78
+ !this.selectedColumns.find((col) => column.name === col.name),
79
+ )
80
+ .sort((a, b) => a.name.localeCompare(b.name))
81
+ .filter((column) => {
82
+ // group-level extended columns are always shown regardless if they are hidden or not
83
+ if (
84
+ this.editor.columns.groupExtendColumns.find(
85
+ (col) => col.name === column.name,
86
+ )
87
+ ) {
88
+ return true;
89
+ }
90
+
91
+ return this.showHiddenColumns
92
+ ? true
93
+ : !this.editor.columnProperties.getColumnConfiguration(column.name)
94
+ ?.hideFromView;
95
+ });
96
+ }
97
+
98
+ override get selectedColumnsForDisplay(): DataCubeEditorColumnsSelectorColumnState[] {
99
+ return this.selectedColumns.filter((column) => {
100
+ // group-level extended columns are always shown regardless if they are hidden or not
101
+ if (
102
+ this.editor.columns.groupExtendColumns.find(
103
+ (col) => col.name === column.name,
104
+ )
105
+ ) {
106
+ return true;
107
+ }
108
+
109
+ return this.showHiddenColumns
110
+ ? true
111
+ : !this.editor.columnProperties.getColumnConfiguration(column.name)
112
+ ?.hideFromView;
113
+ });
114
+ }
115
+
116
+ setShowHiddenColumns(val: boolean): void {
117
+ this.showHiddenColumns = val;
118
+ }
49
119
  }
50
120
 
121
+ /**
122
+ * This panel allows selection of columns (including extended columns) for the query.
123
+ *
124
+ * NOTE: though it technically represents the `select()` function in the query, since for
125
+ * convenience, we also show group-level extended columns, there are a fair amount of
126
+ * edge cases we need to handle, such as we need to translate `unselecting` a group-level
127
+ * extended column to hiding it since this extend() operation occurs after select().
128
+ */
51
129
  export class DataCubeEditorColumnsPanelState
52
130
  implements DataCubeQueryEditorPanelState
53
131
  {
@@ -56,26 +134,27 @@ export class DataCubeEditorColumnsPanelState
56
134
  readonly selector!: DataCubeEditorBasicColumnsSelectorState;
57
135
 
58
136
  sourceColumns: DataCubeQuerySnapshotColumn[] = [];
137
+ leafExtendColumns: DataCubeQuerySnapshotExtendedColumn[] = [];
138
+ groupExtendColumns: DataCubeQuerySnapshotExtendedColumn[] = [];
59
139
 
60
140
  constructor(editor: DataCubeEditorState) {
61
141
  makeObservable(this, {
62
- sourceColumns: observable,
63
- setSourceColumns: action,
142
+ sourceColumns: observable.ref,
143
+ leafExtendColumns: observable.ref,
144
+ groupExtendColumns: observable.ref,
145
+
146
+ applySnaphot: action,
64
147
  });
65
148
 
66
149
  this.editor = editor;
67
150
  this.dataCube = editor.dataCube;
68
151
  this.selector = new DataCubeEditorBasicColumnsSelectorState(editor, {
69
- initialHiddenColumnsVisibility:
70
- DataCubeEditorColumnsSelectorHiddenColumnsVisibility.HIDDEN,
71
152
  onChange: (selector) => {
72
153
  // populate a default configuration for the newly selected columns
73
154
  selector.selectedColumns
74
155
  .filter(
75
156
  (col) =>
76
- !this.editor.columnProperties.columns.find(
77
- (column) => column.name === col.name,
78
- ),
157
+ !this.editor.columnProperties.getColumnConfiguration(col.name),
79
158
  )
80
159
  .forEach((col) => {
81
160
  this.editor.columnProperties.setColumns([
@@ -86,6 +165,18 @@ export class DataCubeEditorColumnsPanelState
86
165
  }),
87
166
  ]);
88
167
  });
168
+
169
+ // update hidden flag for group-level extended columns
170
+ // based on the new selection state
171
+ this.groupExtendColumns.forEach((col) => {
172
+ const columnConfiguration =
173
+ this.editor.columnProperties.getColumnConfiguration(col.name);
174
+ columnConfiguration?.setHideFromView(
175
+ !selector.selectedColumns.find(
176
+ (column) => column.name === col.name,
177
+ ),
178
+ );
179
+ });
89
180
  },
90
181
  });
91
182
  }
@@ -102,49 +193,61 @@ export class DataCubeEditorColumnsPanelState
102
193
  // prune column properties
103
194
  this.editor.columnProperties.setColumns(
104
195
  this.editor.columnProperties.columns.filter((column) =>
105
- this.selector.selectedColumns.find((col) => col.name === column.name),
196
+ this.editor.columnProperties.configurableColumns.find(
197
+ (col) => col.name === column.name,
198
+ ),
106
199
  ),
107
200
  );
108
201
 
109
202
  // prune sorts
110
203
  this.editor.sorts.selector.setSelectedColumns(
111
204
  this.editor.sorts.selector.selectedColumns.filter((column) =>
112
- this.selector.selectedColumns.find((col) => col.name === column.name),
205
+ this.editor.sorts.selector.availableColumns.find(
206
+ (col) => col.name === column.name,
207
+ ),
113
208
  ),
114
209
  );
115
210
 
116
211
  // prune vertical pivots columns
117
212
  this.editor.verticalPivots.selector.setSelectedColumns(
118
213
  this.editor.verticalPivots.selector.selectedColumns.filter((column) =>
119
- this.selector.selectedColumns.find((col) => col.name === column.name),
214
+ this.editor.verticalPivots.selector.availableColumns.find(
215
+ (col) => col.name === column.name,
216
+ ),
120
217
  ),
121
218
  );
122
219
 
123
220
  // TODO: prune horizontal pivots columns
124
221
  }
125
222
 
126
- setSourceColumns(columns: DataCubeQuerySnapshotColumn[]) {
127
- this.sourceColumns = columns;
128
- }
129
-
130
223
  applySnaphot(
131
224
  snapshot: DataCubeQuerySnapshot,
132
225
  configuration: DataCubeConfiguration,
133
226
  ) {
134
- this.setSourceColumns(snapshot.data.sourceColumns);
227
+ this.sourceColumns = snapshot.data.sourceColumns;
228
+ this.leafExtendColumns = snapshot.data.leafExtendedColumns;
229
+ this.groupExtendColumns = snapshot.data.groupExtendedColumns;
230
+
135
231
  this.selector.setSelectedColumns(
136
232
  // extract selected columns from the configuration since the configuration specifies the order
137
- // taking into account the group extended columns
138
- // NOTE: since select() is applied before grouping/aggregation, it's technicaly not possible to
139
- // unselect the group extended columns, so we will take advantage of the `hidden` property to show
140
- // group extended columns that are not hidden as selected
141
- configuration.columns.map((col) => {
142
- const column = this.selector.getColumn(col.name);
143
- return new DataCubeEditorColumnsSelectorColumnState(
144
- column.name,
145
- column.type,
146
- );
147
- }),
233
+ // taking into account the group-level extended columns
234
+ configuration.columns
235
+ // NOTE: since select() is applied before grouping/aggregation, it's technicaly not possible to
236
+ // unselect the group-level extended columns, so we will take advantage of the `hidden` property to show
237
+ // group-level extended columns that are not hidden as selected
238
+ .filter(
239
+ (col) =>
240
+ !this.groupExtendColumns.find(
241
+ (column) => column.name === col.name,
242
+ ) || !col.hideFromView,
243
+ )
244
+ .map((col) => {
245
+ const column = this.selector.getColumn(col.name);
246
+ return new DataCubeEditorColumnsSelectorColumnState(
247
+ column.name,
248
+ column.type,
249
+ );
250
+ }),
148
251
  );
149
252
  }
150
253
 
@@ -154,8 +257,11 @@ export class DataCubeEditorColumnsPanelState
154
257
  ) {
155
258
  this.propagateColumnSelectionChanges();
156
259
  newSnapshot.data.selectColumns = this.selector.selectedColumns
157
- // TODO: filter by group extended columns
158
- // and translate unselection to hidden columns in column configuration
260
+ // filter out group-level extended columns since these columns are technically not selectable
261
+ .filter(
262
+ (col) =>
263
+ !this.groupExtendColumns.find((column) => column.name === col.name),
264
+ )
159
265
  .map((col) => ({
160
266
  name: col.name,
161
267
  type: col.type,
@@ -29,12 +29,6 @@ export class DataCubeEditorColumnsSelectorColumnState {
29
29
  }
30
30
  }
31
31
 
32
- export enum DataCubeEditorColumnsSelectorHiddenColumnsVisibility {
33
- VISIBLE = 'visible',
34
- VISIBLE_WITH_WARNING = 'visible-with-warning',
35
- HIDDEN = 'hidden',
36
- }
37
-
38
32
  export abstract class DataCubeEditorColumnsSelectorState<
39
33
  T extends DataCubeEditorColumnsSelectorColumnState,
40
34
  > {
@@ -49,14 +43,10 @@ export abstract class DataCubeEditorColumnsSelectorState<
49
43
  readonly onChange?:
50
44
  | ((selector: DataCubeEditorColumnsSelectorState<T>) => void)
51
45
  | undefined;
52
- hiddenColumnsVisibility!: DataCubeEditorColumnsSelectorHiddenColumnsVisibility;
53
46
 
54
47
  constructor(
55
48
  editor: DataCubeEditorState,
56
49
  options?: {
57
- initialHiddenColumnsVisibility?:
58
- | DataCubeEditorColumnsSelectorHiddenColumnsVisibility
59
- | undefined;
60
50
  onChange?:
61
51
  | ((select: DataCubeEditorColumnsSelectorState<T>) => void)
62
52
  | undefined;
@@ -75,24 +65,11 @@ export abstract class DataCubeEditorColumnsSelectorState<
75
65
 
76
66
  selectedColumnsSearchText: observable,
77
67
  setSelectedColumnsSearchText: action,
78
-
79
- hiddenColumnsVisibility: observable,
80
- setHiddenColumnsVisibility: action,
81
68
  });
82
69
 
83
70
  this.editor = editor;
84
71
  this.dataCube = editor.dataCube;
85
72
  this.onChange = options?.onChange;
86
- this.hiddenColumnsVisibility =
87
- options?.initialHiddenColumnsVisibility ??
88
- // default to show hidden columns
89
- DataCubeEditorColumnsSelectorHiddenColumnsVisibility.VISIBLE;
90
- }
91
-
92
- setHiddenColumnsVisibility(
93
- val: DataCubeEditorColumnsSelectorHiddenColumnsVisibility,
94
- ) {
95
- this.hiddenColumnsVisibility = val;
96
73
  }
97
74
 
98
75
  abstract get availableColumns(): T[];
@@ -103,26 +80,11 @@ export abstract class DataCubeEditorColumnsSelectorState<
103
80
  (column) =>
104
81
  !this.selectedColumns.find((col) => column.name === col.name),
105
82
  )
106
- .sort((a, b) => a.name.localeCompare(b.name))
107
- .filter(
108
- (column) =>
109
- this.hiddenColumnsVisibility !==
110
- DataCubeEditorColumnsSelectorHiddenColumnsVisibility.HIDDEN ||
111
- !this.editor.columnProperties.columns.find(
112
- (col) => col.name === column.name,
113
- )?.hideFromView,
114
- );
83
+ .sort((a, b) => a.name.localeCompare(b.name));
115
84
  }
116
85
 
117
86
  get selectedColumnsForDisplay(): T[] {
118
- return this.selectedColumns.filter(
119
- (column) =>
120
- this.hiddenColumnsVisibility !==
121
- DataCubeEditorColumnsSelectorHiddenColumnsVisibility.HIDDEN ||
122
- !this.editor.columnProperties.columns.find(
123
- (col) => col.name === column.name,
124
- )?.hideFromView,
125
- );
87
+ return this.selectedColumns;
126
88
  }
127
89
 
128
90
  setSelectedColumns(val: T[]) {
@@ -55,7 +55,15 @@ export class DataCubeEditorSortColumnsSelectorState extends DataCubeEditorColumn
55
55
  }
56
56
 
57
57
  override get availableColumns() {
58
- return this.editor.columns.selector.selectedColumns.map(
58
+ return [
59
+ ...this.editor.columns.selector.selectedColumns,
60
+ ...this.editor.columns.groupExtendColumns.filter(
61
+ (col) =>
62
+ !this.editor.columns.selector.selectedColumns.find(
63
+ (column) => column.name === col.name,
64
+ ),
65
+ ),
66
+ ].map(
59
67
  (col) =>
60
68
  new DataCubeEditorSortColumnState(
61
69
  col.name,
@@ -20,14 +20,20 @@ import { DataCubeEditorSortsPanelState } from './DataCubeEditorSortsPanelState.j
20
20
  import { DataCubeEditorCodePanelState } from './DataCubeEditorCodePanelState.js';
21
21
  import { DataCubeQuerySnapshotController } from '../core/DataCubeQuerySnapshotManager.js';
22
22
  import { type DataCubeQuerySnapshot } from '../core/DataCubeQuerySnapshot.js';
23
- import { guaranteeNonNullable } from '@finos/legend-shared';
23
+ import {
24
+ ActionState,
25
+ assertErrorThrown,
26
+ guaranteeNonNullable,
27
+ } from '@finos/legend-shared';
24
28
  import { DataCubeEditorGeneralPropertiesPanelState } from './DataCubeEditorGeneralPropertiesPanelState.js';
25
29
  import { DataCubeEditorColumnPropertiesPanelState } from './DataCubeEditorColumnPropertiesPanelState.js';
26
30
  import { DataCubeEditorColumnsPanelState } from './DataCubeEditorColumnsPanelState.js';
27
31
  import { DataCubeConfiguration } from '../core/DataCubeConfiguration.js';
28
32
  import { DataCubeEditorVerticalPivotsPanelState } from './DataCubeEditorVerticalPivotsPanelState.js';
29
- import { SingletonModeDisplayState } from '../../LayoutManagerState.js';
33
+ import { DisplayState } from '../../LayoutManagerState.js';
30
34
  import { DataCubeEditor } from '../../../components/dataCube/editor/DataCubeEditor.js';
35
+ import { buildExecutableQuery } from '../core/DataCubeQueryBuilder.js';
36
+ import { _lambda } from '../core/DataCubeQueryBuilderUtils.js';
31
37
 
32
38
  export enum DataCubeEditorTab {
33
39
  GENERAL_PROPERTIES = 'General Properties',
@@ -39,8 +45,18 @@ export enum DataCubeEditorTab {
39
45
  CODE = 'Code',
40
46
  }
41
47
 
48
+ /**
49
+ * This query editor state backs the main form editor of data cube. It supports
50
+ * batching changes before application, i.e. allowing user to make multiple edits before
51
+ * applying and propgating them.
52
+ *
53
+ * NOTE: It allows almost FULL 1-1 control over the data cube query state.
54
+ * It could also host other form editor states like filter editors, but due to ergonomic
55
+ * reasons, those have been separated out into their own respective query editor states.
56
+ */
42
57
  export class DataCubeEditorState extends DataCubeQuerySnapshotController {
43
- readonly display: SingletonModeDisplayState;
58
+ readonly display: DisplayState;
59
+ readonly finalizationState = ActionState.create();
44
60
 
45
61
  readonly code: DataCubeEditorCodePanelState;
46
62
 
@@ -49,6 +65,7 @@ export class DataCubeEditorState extends DataCubeQuerySnapshotController {
49
65
 
50
66
  readonly columns: DataCubeEditorColumnsPanelState;
51
67
  readonly verticalPivots: DataCubeEditorVerticalPivotsPanelState;
68
+ // TODO: horizontal pivot
52
69
  readonly sorts: DataCubeEditorSortsPanelState;
53
70
 
54
71
  currentTab = DataCubeEditorTab.GENERAL_PROPERTIES;
@@ -63,7 +80,7 @@ export class DataCubeEditorState extends DataCubeQuerySnapshotController {
63
80
  applyChanges: action,
64
81
  });
65
82
 
66
- this.display = new SingletonModeDisplayState(
83
+ this.display = new DisplayState(
67
84
  this.dataCube.repl.layout,
68
85
  'Properties',
69
86
  () => <DataCubeEditor dataCube={this.dataCube} />,
@@ -82,7 +99,9 @@ export class DataCubeEditorState extends DataCubeQuerySnapshotController {
82
99
  this.currentTab = val;
83
100
  }
84
101
 
85
- applyChanges() {
102
+ async applyChanges() {
103
+ this.finalizationState.inProgress();
104
+
86
105
  const baseSnapshot = guaranteeNonNullable(this.getLatestSnapshot());
87
106
  const snapshot = baseSnapshot.clone();
88
107
 
@@ -98,6 +117,32 @@ export class DataCubeEditorState extends DataCubeQuerySnapshotController {
98
117
  this.generalProperties.buildSnapshot(snapshot, baseSnapshot);
99
118
  this.columnProperties.buildSnapshot(snapshot, baseSnapshot);
100
119
 
120
+ // compile the query to validate it
121
+ // NOTE: This is a helpful check for a lot of different scenarios where the
122
+ // consistency of the query might be thrown off by changes
123
+ // e.g. when a column that group-level extended columns' expressions depend on has been unselected.
124
+ try {
125
+ await this.dataCube.engine.getQueryRelationType(
126
+ _lambda(
127
+ [],
128
+ [
129
+ buildExecutableQuery(
130
+ snapshot,
131
+ this.dataCube.engine.filterOperations,
132
+ ),
133
+ ],
134
+ ),
135
+ );
136
+ } catch (error) {
137
+ assertErrorThrown(error);
138
+ this.dataCube.repl.alertError(error, {
139
+ message: `Query Validation Failure: ${error.message}`,
140
+ });
141
+ return;
142
+ } finally {
143
+ this.finalizationState.complete();
144
+ }
145
+
101
146
  snapshot.finalize();
102
147
  if (snapshot.hashCode !== baseSnapshot.hashCode) {
103
148
  this.publishSnapshot(snapshot);
@@ -38,16 +38,18 @@ export class DataCubeEditorVerticalPivotColumnsSelectorState extends DataCubeEdi
38
38
 
39
39
  override get availableColumns(): DataCubeEditorColumnsSelectorColumnState[] {
40
40
  return this.editor.columns.selector.selectedColumns
41
- .map(
42
- // TODO: filter group extended columns
43
- (col) =>
44
- new DataCubeEditorColumnsSelectorColumnState(col.name, col.type),
45
- )
46
41
  .filter(
47
42
  (column) =>
48
- this.editor.columnProperties.columns.find(
43
+ this.editor.columnProperties.getColumnConfiguration(column.name)
44
+ ?.kind === DataCubeColumnKind.DIMENSION &&
45
+ // exclude group-level extended columns
46
+ !this.editor.columns.groupExtendColumns.find(
49
47
  (col) => col.name === column.name,
50
- )?.kind === DataCubeColumnKind.DIMENSION,
48
+ ),
49
+ )
50
+ .map(
51
+ (col) =>
52
+ new DataCubeEditorColumnsSelectorColumnState(col.name, col.type),
51
53
  );
52
54
  }
53
55
  }
@@ -92,8 +94,13 @@ export class DataCubeEditorVerticalPivotsPanelState
92
94
  (column) =>
93
95
  column.kind === DataCubeColumnKind.MEASURE &&
94
96
  column.aggregateFunction !== undefined &&
97
+ // exclude group-by columns
95
98
  this.selector.selectedColumns.find(
96
99
  (col) => col.name !== column.name,
100
+ ) &&
101
+ // exclude group-level extended columns
102
+ !this.editor.columns.groupExtendColumns.find(
103
+ (col) => col.name === column.name,
97
104
  ),
98
105
  )
99
106
  .map((column) => ({
@@ -15,8 +15,8 @@
15
15
  */
16
16
 
17
17
  import {
18
+ DataCubeColumnKind,
18
19
  getDataType,
19
- type DataCubeColumnKind,
20
20
  type DataCubeFont,
21
21
  type DataCubeOperationValue,
22
22
  type DataCubeNumberScale,
@@ -38,6 +38,7 @@ import {
38
38
  DEFAULT_ZERO_FOREGROUND_COLOR,
39
39
  DEFAULT_ERROR_FOREGROUND_COLOR,
40
40
  DEFAULT_BACKGROUND_COLOR,
41
+ DataCubeAggregateOperator,
41
42
  } from '../core/DataCubeQueryEngine.js';
42
43
  import { type PlainObject, type Writable } from '@finos/legend-shared';
43
44
  import { makeObservable, observable, action, computed } from 'mobx';
@@ -46,6 +47,11 @@ import {
46
47
  DataCubeConfiguration,
47
48
  } from '../core/DataCubeConfiguration.js';
48
49
  import { buildDefaultColumnConfiguration } from '../core/DataCubeConfigurationBuilder.js';
50
+ import {
51
+ _findCol,
52
+ type DataCubeQuerySnapshot,
53
+ } from '../core/DataCubeQuerySnapshot.js';
54
+ import { PRIMITIVE_TYPE } from '@finos/legend-graph';
49
55
 
50
56
  export class DataCubeMutableColumnConfiguration extends DataCubeColumnConfiguration {
51
57
  readonly dataType!: DataCubeColumnDataType;
@@ -189,6 +195,31 @@ export class DataCubeMutableColumnConfiguration extends DataCubeColumnConfigurat
189
195
  );
190
196
  }
191
197
 
198
+ populateSyntheticMetadata(snapshot: DataCubeQuerySnapshot) {
199
+ if (this.kind === DataCubeColumnKind.MEASURE) {
200
+ const aggCol = _findCol(snapshot.data.groupBy?.aggColumns, this.name);
201
+ if (aggCol) {
202
+ this.setAggregateFunction(aggCol.operation);
203
+ this.setAggregateFunctionParameters(aggCol.parameters);
204
+ } else {
205
+ switch (this.type) {
206
+ case PRIMITIVE_TYPE.NUMBER:
207
+ case PRIMITIVE_TYPE.INTEGER:
208
+ case PRIMITIVE_TYPE.DECIMAL:
209
+ case PRIMITIVE_TYPE.FLOAT: {
210
+ this.setAggregateFunction(DataCubeAggregateOperator.SUM);
211
+ this.setAggregateFunctionParameters([]);
212
+ break;
213
+ }
214
+ default: {
215
+ break;
216
+ }
217
+ }
218
+ }
219
+ }
220
+ return this;
221
+ }
222
+
192
223
  serialize() {
193
224
  return DataCubeColumnConfiguration.serialization.toJson(this);
194
225
  }