@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
@@ -0,0 +1,364 @@
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 { action, computed, makeObservable, observable } from 'mobx';
18
+ import type { DataCubeState } from '../DataCubeState.js';
19
+ import { DisplayState } from '../../LayoutManagerState.js';
20
+ import { DataCubeColumnCreator } from '../../../components/dataCube/extend/DataCubeColumnEditor.js';
21
+ import { editor as monacoEditorAPI, Uri } from 'monaco-editor';
22
+ import {
23
+ ActionState,
24
+ assertErrorThrown,
25
+ guaranteeNonNullable,
26
+ HttpStatus,
27
+ NetworkClientError,
28
+ uuid,
29
+ } from '@finos/legend-shared';
30
+ import { buildExecutableQuery } from '../core/DataCubeQueryBuilder.js';
31
+ import {
32
+ DataCubeColumnDataType,
33
+ DataCubeColumnKind,
34
+ DataCubeExtendedColumnType,
35
+ DEFAULT_LAMBDA_VARIABLE_NAME,
36
+ getDataType,
37
+ } from '../core/DataCubeQueryEngine.js';
38
+ import {
39
+ clearMarkers,
40
+ CODE_EDITOR_LANGUAGE,
41
+ setErrorMarkers,
42
+ } from '@finos/legend-lego/code-editor';
43
+ import type { DataCubeQueryBuilderError } from '../../../server/REPLEngine.js';
44
+ import type { DataCubeExtendManagerState } from './DataCubeExtendManagerState.js';
45
+ import {
46
+ PRIMITIVE_TYPE,
47
+ V1_Lambda,
48
+ V1_serializeValueSpecification,
49
+ type V1_ValueSpecification,
50
+ } from '@finos/legend-graph';
51
+ import type { DataCubeColumnConfiguration } from '../core/DataCubeConfiguration.js';
52
+
53
+ export class DataCubeNewColumnState {
54
+ readonly uuid = uuid();
55
+ readonly dataCube: DataCubeState;
56
+ readonly manager: DataCubeExtendManagerState;
57
+
58
+ // NOTE: use UUID in the column name to prevent collision
59
+ // when parsing/compiling the expression
60
+ private readonly _name = `col_${this.uuid.replaceAll('-', '_')}`;
61
+ readonly display: DisplayState;
62
+ readonly validationState = ActionState.create();
63
+ readonly finalizationState = ActionState.create();
64
+
65
+ name: string;
66
+ expectedType: string;
67
+ isGroupLevel: boolean;
68
+ columnKind?: DataCubeColumnKind | undefined;
69
+
70
+ code: string;
71
+ codePrefix: string;
72
+ codeSuffix: string;
73
+
74
+ editor?: monacoEditorAPI.IStandaloneCodeEditor | undefined;
75
+ readonly editorModel: monacoEditorAPI.ITextModel;
76
+ readonly editorModelUri: Uri;
77
+ codeError?: DataCubeQueryBuilderError | undefined;
78
+ returnType?: string | undefined;
79
+
80
+ constructor(
81
+ manager: DataCubeExtendManagerState,
82
+ referenceColumn?: DataCubeColumnConfiguration | undefined,
83
+ ) {
84
+ makeObservable(this, {
85
+ name: observable,
86
+ setName: action,
87
+ isNameValid: computed,
88
+
89
+ expectedType: observable,
90
+ setExpectedType: action,
91
+ isTypeValid: computed,
92
+
93
+ isGroupLevel: observable,
94
+ columnKind: observable,
95
+ setColumnKind: action,
96
+
97
+ editor: observable.ref,
98
+ setEditor: action,
99
+
100
+ codeError: observable.ref,
101
+ showError: action,
102
+ clearError: action,
103
+
104
+ returnType: observable,
105
+ setReturnType: action,
106
+ });
107
+
108
+ this.manager = manager;
109
+ this.dataCube = manager.dataCube;
110
+ this.display = new DisplayState(
111
+ this.dataCube.repl.layout,
112
+ 'Add New Column',
113
+ () => <DataCubeColumnCreator state={this} />,
114
+ );
115
+ this.display.configuration.window = {
116
+ x: 50,
117
+ y: 50,
118
+ width: 500,
119
+ height: 300,
120
+ minWidth: 300,
121
+ minHeight: 200,
122
+ center: false,
123
+ };
124
+
125
+ this.name = `col_${manager.allColumnNames.length + 1}`;
126
+ this.expectedType = DataCubeColumnDataType.NUMBER;
127
+ this.isGroupLevel = false;
128
+ this.columnKind = DataCubeColumnKind.MEASURE;
129
+
130
+ this.code = `${DEFAULT_LAMBDA_VARIABLE_NAME}|`;
131
+ this.codePrefix = `->extend(~${this._name}:`;
132
+ this.codeSuffix = `)`;
133
+
134
+ if (referenceColumn) {
135
+ this.expectedType = getDataType(referenceColumn.type);
136
+ this.columnKind = referenceColumn.kind;
137
+ this.code = `${DEFAULT_LAMBDA_VARIABLE_NAME}|$${DEFAULT_LAMBDA_VARIABLE_NAME}.${referenceColumn.name}`;
138
+ }
139
+
140
+ this.editorModelUri = Uri.file(`/${this.uuid}.pure`);
141
+ this.editorModel = monacoEditorAPI.createModel(
142
+ this.code,
143
+ CODE_EDITOR_LANGUAGE.PURE,
144
+ this.editorModelUri,
145
+ );
146
+ }
147
+
148
+ setName(value: string) {
149
+ this.name = value;
150
+ }
151
+
152
+ get isNameValid(): boolean {
153
+ return !this.manager.allColumnNames.includes(this.name);
154
+ }
155
+
156
+ setExpectedType(value: string) {
157
+ this.expectedType = value;
158
+ }
159
+
160
+ get isTypeValid() {
161
+ return (
162
+ this.returnType !== undefined &&
163
+ this.expectedType === getDataType(this.returnType)
164
+ );
165
+ }
166
+
167
+ setColumnKind(
168
+ isGroupLevel: boolean,
169
+ columnKind: DataCubeColumnKind | undefined,
170
+ ) {
171
+ this.isGroupLevel = isGroupLevel;
172
+ this.columnKind = columnKind;
173
+ }
174
+
175
+ setCode(value: string) {
176
+ this.code = value;
177
+ }
178
+
179
+ setEditor(editor: monacoEditorAPI.IStandaloneCodeEditor) {
180
+ this.editor = editor;
181
+ }
182
+
183
+ setReturnType(value: string | undefined) {
184
+ this.returnType = value;
185
+ }
186
+
187
+ showError(error: DataCubeQueryBuilderError) {
188
+ this.codeError = error;
189
+ if (error.sourceInformation) {
190
+ setErrorMarkers(
191
+ this.editorModel,
192
+ [
193
+ {
194
+ message: error.message,
195
+ startLineNumber: error.sourceInformation.startLine,
196
+ startColumn: error.sourceInformation.startColumn,
197
+ endLineNumber: error.sourceInformation.endLine,
198
+ endColumn: error.sourceInformation.endColumn,
199
+ },
200
+ ],
201
+ this.uuid,
202
+ );
203
+ }
204
+ }
205
+
206
+ clearError() {
207
+ this.codeError = undefined;
208
+ clearMarkers(this.uuid);
209
+ }
210
+
211
+ buildExtendBaseQuery() {
212
+ const currentSnapshot = guaranteeNonNullable(
213
+ this.manager.getLatestSnapshot(),
214
+ );
215
+ const snapshot = currentSnapshot.clone();
216
+ if (!this.isGroupLevel) {
217
+ snapshot.data.leafExtendedColumns = [];
218
+ snapshot.data.selectColumns = [];
219
+ snapshot.data.filter = undefined;
220
+ snapshot.data.groupBy = undefined;
221
+ snapshot.data.pivot = undefined;
222
+ }
223
+ snapshot.data.groupExtendedColumns = [];
224
+ snapshot.data.sortColumns = [];
225
+ snapshot.data.limit = undefined;
226
+ return buildExecutableQuery(
227
+ snapshot,
228
+ this.manager.dataCube.engine.filterOperations,
229
+ );
230
+ }
231
+
232
+ async getReturnType() {
233
+ const baseQuery = this.buildExtendBaseQuery();
234
+ this.validationState.inProgress();
235
+
236
+ // properly reset the error state before revalidating
237
+ this.clearError();
238
+ this.setReturnType(undefined);
239
+
240
+ try {
241
+ const returnRelationType =
242
+ await this.dataCube.engine.getQueryCodeRelationReturnType(
243
+ this.codePrefix + this.code + this.codeSuffix,
244
+ baseQuery,
245
+ );
246
+ let returnType = returnRelationType.columns.find(
247
+ (col) => col.name === this._name,
248
+ )?.type;
249
+ returnType =
250
+ returnType &&
251
+ (Object.values(PRIMITIVE_TYPE) as string[]).includes(returnType)
252
+ ? returnType
253
+ : undefined;
254
+ this.setReturnType(returnType);
255
+ return returnType;
256
+ } catch (err) {
257
+ assertErrorThrown(err);
258
+ if (
259
+ err instanceof NetworkClientError &&
260
+ err.response.status === HttpStatus.BAD_REQUEST
261
+ ) {
262
+ this.validationState.fail();
263
+ // correct the source information since we added prefix to the code
264
+ // and reveal error in the editor
265
+ const error = err.payload as DataCubeQueryBuilderError;
266
+ if (error.sourceInformation) {
267
+ error.sourceInformation.startColumn -=
268
+ error.sourceInformation.startLine === 1
269
+ ? this.codePrefix.length
270
+ : 0;
271
+ error.sourceInformation.endColumn -=
272
+ error.sourceInformation.endLine === 1 ? this.codePrefix.length : 0;
273
+ const fullRange = this.editorModel.getFullModelRange();
274
+ if (
275
+ error.sourceInformation.startLine < 1 ||
276
+ (error.sourceInformation.startLine === 1 &&
277
+ error.sourceInformation.startColumn < 1) ||
278
+ error.sourceInformation.endLine > fullRange.endLineNumber ||
279
+ (error.sourceInformation.endLine === fullRange.endLineNumber &&
280
+ error.sourceInformation.endColumn > fullRange.endColumn)
281
+ ) {
282
+ error.sourceInformation.startColumn = fullRange.startColumn;
283
+ error.sourceInformation.startLine = fullRange.startLineNumber;
284
+ error.sourceInformation.endColumn = fullRange.endColumn;
285
+ error.sourceInformation.endLine = fullRange.endLineNumber;
286
+ }
287
+ }
288
+ this.showError(err.payload as DataCubeQueryBuilderError);
289
+ return undefined;
290
+ }
291
+ this.dataCube.repl.alertError(err, {
292
+ message: `Expression Validation Failure: ${err.message}`,
293
+ });
294
+ } finally {
295
+ this.validationState.complete();
296
+ }
297
+
298
+ return undefined;
299
+ }
300
+
301
+ async applyChanges() {
302
+ if (
303
+ !this.validationState.hasCompleted ||
304
+ !this.isNameValid ||
305
+ !this.isTypeValid
306
+ ) {
307
+ return;
308
+ }
309
+
310
+ this.finalizationState.inProgress();
311
+
312
+ let query: V1_ValueSpecification;
313
+ let returnType: string | undefined;
314
+ try {
315
+ [query, returnType] = await Promise.all([
316
+ this.dataCube.engine.parseQuery(this.code, false),
317
+ this.getReturnType(), // recompile to get the return type
318
+ ]);
319
+ } catch (error) {
320
+ assertErrorThrown(error);
321
+ this.dataCube.repl.alertError(error, {
322
+ message: `Expression Validation Failure: ${error.message}`,
323
+ });
324
+ return;
325
+ } finally {
326
+ this.finalizationState.complete();
327
+ }
328
+
329
+ if (!(query instanceof V1_Lambda)) {
330
+ this.dataCube.repl.alertError(new Error(), {
331
+ message: `Expression Validation Failure: Expression must be a lambda.`,
332
+ });
333
+ return;
334
+ }
335
+
336
+ if (!returnType) {
337
+ this.dataCube.repl.alertError(new Error(), {
338
+ message: `Expression Validation Failure: Can't compute expression return type.`,
339
+ });
340
+ return;
341
+ }
342
+
343
+ this.manager.addNewColumn(
344
+ {
345
+ _type: DataCubeExtendedColumnType.SIMPLE,
346
+ name: this.name,
347
+ type: returnType,
348
+ lambda: V1_serializeValueSpecification(query, []),
349
+ },
350
+ this.isGroupLevel,
351
+ this.columnKind,
352
+ );
353
+
354
+ this.close();
355
+ }
356
+
357
+ close() {
358
+ // dispose the editor and its model to avoid memory leak
359
+ this.editorModel.dispose();
360
+ this.editor?.dispose();
361
+
362
+ this.display.close();
363
+ }
364
+ }
@@ -0,0 +1,169 @@
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 { action, computed, makeObservable, observable } from 'mobx';
18
+ import type {
19
+ DataCubeQuerySnapshot,
20
+ DataCubeQuerySnapshotColumn,
21
+ DataCubeQuerySnapshotExtendedColumn,
22
+ } from '../core/DataCubeQuerySnapshot.js';
23
+ import { guaranteeNonNullable } from '@finos/legend-shared';
24
+ import type { DataCubeState } from '../DataCubeState.js';
25
+ import { DataCubeQuerySnapshotController } from '../core/DataCubeQuerySnapshotManager.js';
26
+ import {
27
+ type DataCubeColumnConfiguration,
28
+ DataCubeConfiguration,
29
+ } from '../core/DataCubeConfiguration.js';
30
+ import { DataCubeNewColumnState } from './DataCubeColumnEditorState.js';
31
+ import type { DataCubeColumnKind } from '../core/DataCubeQueryEngine.js';
32
+ import { buildDefaultColumnConfiguration } from '../core/DataCubeConfigurationBuilder.js';
33
+
34
+ export class DataCubeQueryExtendedColumnState {
35
+ name: string;
36
+ type: string;
37
+ data: DataCubeQuerySnapshotExtendedColumn;
38
+
39
+ constructor(data: DataCubeQuerySnapshotExtendedColumn) {
40
+ makeObservable(this, {
41
+ name: observable,
42
+ type: observable,
43
+ });
44
+
45
+ this.name = data.name;
46
+ this.type = data.type;
47
+ this.data = data;
48
+ }
49
+ }
50
+
51
+ /**
52
+ * This query editor state backs the form editor for extend columns, i.e. creating new columns.
53
+ */
54
+ export class DataCubeExtendManagerState extends DataCubeQuerySnapshotController {
55
+ configuration = new DataCubeConfiguration();
56
+ columnConfigurations: DataCubeColumnConfiguration[] = [];
57
+
58
+ sourceColumns: DataCubeQuerySnapshotColumn[] = [];
59
+ leafExtendedColumns: DataCubeQueryExtendedColumnState[] = [];
60
+ groupExtendedColumns: DataCubeQueryExtendedColumnState[] = [];
61
+ newColumnEditors: DataCubeNewColumnState[] = [];
62
+ // TODO: existingColumnEditors
63
+
64
+ constructor(dataCube: DataCubeState) {
65
+ super(dataCube);
66
+
67
+ makeObservable(this, {
68
+ sourceColumns: observable.ref,
69
+ columnConfigurations: observable.struct,
70
+ leafExtendedColumns: observable,
71
+ groupExtendedColumns: observable,
72
+
73
+ allColumnNames: computed,
74
+
75
+ addNewColumn: action,
76
+
77
+ applySnapshot: action,
78
+ });
79
+ }
80
+
81
+ get allColumnNames(): string[] {
82
+ return [
83
+ ...this.sourceColumns,
84
+ ...this.leafExtendedColumns,
85
+ ...this.groupExtendedColumns,
86
+ ].map((col) => col.name);
87
+ }
88
+
89
+ openNewColumnEditor(
90
+ referenceColumn?: DataCubeColumnConfiguration | undefined,
91
+ ) {
92
+ const editor = new DataCubeNewColumnState(this, referenceColumn);
93
+ this.newColumnEditors.push(editor);
94
+ editor.display.open();
95
+ }
96
+
97
+ addNewColumn<T extends DataCubeQuerySnapshotExtendedColumn>(
98
+ column: T,
99
+ isGroupLevel: boolean,
100
+ columnKind: DataCubeColumnKind | undefined,
101
+ ) {
102
+ (isGroupLevel ? this.groupExtendedColumns : this.leafExtendedColumns).push(
103
+ new DataCubeQueryExtendedColumnState(column),
104
+ );
105
+
106
+ const columnConfiguration = buildDefaultColumnConfiguration(column);
107
+ if (columnKind) {
108
+ columnConfiguration.kind = columnKind;
109
+ }
110
+
111
+ this.columnConfigurations.push(columnConfiguration);
112
+ this.applyChanges();
113
+ }
114
+
115
+ override async applySnapshot(
116
+ snapshot: DataCubeQuerySnapshot,
117
+ previousSnapshot: DataCubeQuerySnapshot | undefined,
118
+ ): Promise<void> {
119
+ this.configuration = DataCubeConfiguration.serialization.fromJson(
120
+ snapshot.data.configuration,
121
+ );
122
+ this.columnConfigurations = this.configuration.columns;
123
+ this.sourceColumns = snapshot.data.sourceColumns;
124
+ this.leafExtendedColumns = snapshot.data.leafExtendedColumns.map(
125
+ (col) => new DataCubeQueryExtendedColumnState(col),
126
+ );
127
+ this.groupExtendedColumns = snapshot.data.groupExtendedColumns.map(
128
+ (col) => new DataCubeQueryExtendedColumnState(col),
129
+ );
130
+ }
131
+
132
+ applyChanges() {
133
+ const baseSnapshot = guaranteeNonNullable(this.getLatestSnapshot());
134
+ const newSnapshot = baseSnapshot.clone();
135
+
136
+ newSnapshot.data.configuration = {
137
+ ...baseSnapshot.data.configuration,
138
+ columns: this.columnConfigurations,
139
+ };
140
+
141
+ newSnapshot.data.leafExtendedColumns = this.leafExtendedColumns.map(
142
+ (col) => col.data,
143
+ );
144
+ newSnapshot.data.groupExtendedColumns = this.groupExtendedColumns.map(
145
+ (col) => col.data,
146
+ );
147
+ // update the selected columns
148
+ // NOTE: group-level extended columns cannot be selected!
149
+ newSnapshot.data.selectColumns = this.columnConfigurations
150
+ .map((col) => ({
151
+ name: col.name,
152
+ type: col.type,
153
+ }))
154
+ .filter(
155
+ (col) =>
156
+ !newSnapshot.data.groupExtendedColumns.find(
157
+ (c) => c.name === col.name,
158
+ ),
159
+ );
160
+
161
+ // TODO: support edition, so v-pivots/h-pivots or column configuration that
162
+ // depends on columns with name/type changed should be updated
163
+
164
+ newSnapshot.finalize();
165
+ if (newSnapshot.hashCode !== baseSnapshot.hashCode) {
166
+ this.publishSnapshot(newSnapshot);
167
+ }
168
+ }
169
+ }
@@ -39,11 +39,15 @@ import {
39
39
  DataCubeConfiguration,
40
40
  type DataCubeColumnConfiguration,
41
41
  } from '../core/DataCubeConfiguration.js';
42
- import { SingletonModeDisplayState } from '../../LayoutManagerState.js';
43
- import { DataCubeFilterEditor } from '../../../components/dataCube/filter/DataCubeEditorFilter.js';
42
+ import { DisplayState } from '../../LayoutManagerState.js';
43
+ import { DataCubeFilterEditor } from '../../../components/dataCube/filter/DataCubeFilterEditor.js';
44
44
 
45
+ /**
46
+ * This query editor state backs the form editor for filter. It batches changes made
47
+ * to the filter in the form editor.
48
+ */
45
49
  export class DataCubeFilterEditorState extends DataCubeQuerySnapshotController {
46
- readonly display: SingletonModeDisplayState;
50
+ readonly display: DisplayState;
47
51
 
48
52
  tree: DataCubeFilterEditorTree;
49
53
  selectedNode?: DataCubeFilterEditorTreeNode | undefined;
@@ -57,7 +61,7 @@ export class DataCubeFilterEditorState extends DataCubeQuerySnapshotController {
57
61
  initializeTree: action,
58
62
  refreshTree: action,
59
63
 
60
- columns: observable,
64
+ columns: observable.struct,
61
65
 
62
66
  applySnapshot: action,
63
67
 
@@ -69,11 +73,18 @@ export class DataCubeFilterEditorState extends DataCubeQuerySnapshotController {
69
73
  layerFilterNode: action,
70
74
  });
71
75
 
72
- this.display = new SingletonModeDisplayState(
73
- this.dataCube.repl.layout,
74
- 'Filter',
75
- () => <DataCubeFilterEditor dataCube={this.dataCube} />,
76
- );
76
+ this.display = new DisplayState(this.dataCube.repl.layout, 'Filter', () => (
77
+ <DataCubeFilterEditor dataCube={this.dataCube} />
78
+ ));
79
+ this.display.configuration.window = {
80
+ x: -50,
81
+ y: 50,
82
+ width: 600,
83
+ height: 400,
84
+ minWidth: 300,
85
+ minHeight: 200,
86
+ center: false,
87
+ };
77
88
 
78
89
  this.tree = {
79
90
  nodes: new Map<string, DataCubeFilterEditorTreeNode>(),
@@ -278,7 +289,7 @@ export class DataCubeFilterEditorState extends DataCubeQuerySnapshotController {
278
289
  const configuration = DataCubeConfiguration.serialization.fromJson(
279
290
  snapshot.data.configuration,
280
291
  );
281
- // NOTE: filtering group extended columns is not supported
292
+ // NOTE: filtering group-level extended columns is not supported
282
293
  this.columns = configuration.columns.filter(
283
294
  (column) =>
284
295
  !snapshot.data.groupExtendedColumns.find(
@@ -319,8 +319,7 @@ export class DataCubeGridClientServerSideDataSource
319
319
  } catch (error) {
320
320
  assertErrorThrown(error);
321
321
  this.grid.dataCube.repl.alertError(error, {
322
- message: `Data fetch failure: ${error.message}`,
323
- text: error.stack,
322
+ message: `Data Fetch Failure: ${error.message}`,
324
323
  });
325
324
  params.fail();
326
325
  } finally {
@@ -90,7 +90,7 @@ export class DataCubeGridClientExportEngine {
90
90
  }
91
91
 
92
92
  private generateFileName() {
93
- return `${this.dataCube.staticContent.name} - ${formatDate(new Date(), 'EEE MMM dd yyyy HH_mm_ss')}`;
93
+ return `${this.dataCube.info.name} - ${formatDate(new Date(), 'EEE MMM dd yyyy HH_mm_ss')}`;
94
94
  }
95
95
 
96
96
  exportFile(format: DataCubeGridClientExportFormat) {
@@ -380,21 +380,26 @@ function _rowGroupSpec(columnData: ColumnData) {
380
380
  const { snapshot, column } = columnData;
381
381
  const data = snapshot.data;
382
382
  const groupByCol = _findCol(data.groupBy?.columns, column.name);
383
+ const isGroupExtendedColumn = Boolean(
384
+ _findCol(data.groupExtendedColumns, column.name),
385
+ );
383
386
  return {
384
- enableRowGroup: column.kind === DataCubeColumnKind.DIMENSION,
387
+ enableRowGroup:
388
+ !isGroupExtendedColumn && column.kind === DataCubeColumnKind.DIMENSION,
385
389
  enableValue: false, // disable GUI interactions to modify this column's aggregate function
386
390
  allowedAggFuncs: [], // disable GUI for options of the agg functions
387
- rowGroup: Boolean(groupByCol),
388
- rowGroupIndex: groupByCol
389
- ? (data.groupBy?.columns.indexOf(groupByCol) ?? null)
390
- : null,
391
+ rowGroup: !isGroupExtendedColumn && Boolean(groupByCol),
392
+ rowGroupIndex:
393
+ !isGroupExtendedColumn && groupByCol
394
+ ? (data.groupBy?.columns.indexOf(groupByCol) ?? null)
395
+ : null,
391
396
  // NOTE: we don't quite care about populating these accurately
392
397
  // since ag-grid aggregation does not support parameters, so
393
398
  // its set of supported aggregators will never match that specified
394
399
  // in the editor.
395
400
  // But we need to set this to make sure sorting works when row grouping
396
401
  // is used, so we use a dummy value here.
397
- aggFunc: () => 0,
402
+ aggFunc: !isGroupExtendedColumn ? () => 0 : null,
398
403
  } satisfies ColDef;
399
404
  }
400
405
 
@@ -476,6 +481,12 @@ export function generateBaseGridOptions(dataCube: DataCubeState): GridOptions {
476
481
  // a desired behavior, so we hide the popup menu immediately
477
482
  onColumnMenuVisibleChanged: (event) => {
478
483
  if (!event.column) {
484
+ const menuElement = document.querySelector(
485
+ `.${INTERNAL__GridClientUtilityCssClassName.ROOT} .ag-popup .ag-menu`,
486
+ ) as HTMLElement | undefined;
487
+ if (menuElement) {
488
+ menuElement.style.display = 'none';
489
+ }
479
490
  event.api.hidePopupMenu();
480
491
  }
481
492
  },
@@ -649,7 +660,7 @@ export function generateGridOptionsFromSnapshot(
649
660
  configuration,
650
661
  };
651
662
  return {
652
- headerName: column.name,
663
+ headerName: column.displayName ?? column.name,
653
664
  field: column.name,
654
665
  menuTabs: [],
655
666