@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,91 @@
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 {
18
+ type editor as monacoEditorAPI,
19
+ languages as monacoLanguagesAPI,
20
+ type IPosition,
21
+ } from 'monaco-editor';
22
+ import type { DataCubeState } from '../../stores/dataCube/DataCubeState.js';
23
+ import type { CompletionItem } from '../../server/REPLEngine.js';
24
+ import type { V1_ValueSpecification } from '@finos/legend-graph';
25
+
26
+ // Since we render the editor in a window which has been CSS transformed, and monaco-editor renders
27
+ // the widgets with position=fixed, the position of the widgets will be off, we need to move the root
28
+ // which monaco-editor uses to calculate the offset to outside of the transformed container
29
+ // See https://dev.to/salilnaik/the-uncanny-relationship-between-position-fixed-and-transform-property-32f6
30
+ // See https://github.com/microsoft/monaco-editor/issues/2793#issuecomment-999337740
31
+ export const MONACO_EDITOR_OVERFLOW_WIDGETS_ROOT_ID =
32
+ 'monaco-editor-overflow-widgets-root';
33
+ export function INTERNAL__MonacoEditorWidgetsRoot() {
34
+ return (
35
+ <div
36
+ id={MONACO_EDITOR_OVERFLOW_WIDGETS_ROOT_ID}
37
+ className="monaco-editor" // keep this root class so widgets can be styled properly
38
+ />
39
+ );
40
+ }
41
+
42
+ export async function getCodeSuggestions(
43
+ position: IPosition,
44
+ model: monacoEditorAPI.ITextModel,
45
+ prefix: string | undefined,
46
+ dataCube: DataCubeState,
47
+ baseQueryBuilder: () => V1_ValueSpecification,
48
+ ) {
49
+ const textUntilPosition = model.getValueInRange({
50
+ startLineNumber: 1,
51
+ startColumn: 1,
52
+ endLineNumber: position.lineNumber,
53
+ endColumn: position.column,
54
+ });
55
+ const currentWord = model.getWordAtPosition(position);
56
+
57
+ let suggestions: CompletionItem[] = [];
58
+
59
+ try {
60
+ suggestions = await dataCube.engine.getQueryTypeahead(
61
+ (prefix ?? '') + textUntilPosition,
62
+ baseQueryBuilder(),
63
+ );
64
+ } catch {
65
+ // do nothing: provide no suggestions when error ocurred
66
+ }
67
+ return suggestions.map(
68
+ (suggestion) =>
69
+ ({
70
+ label: suggestion.display,
71
+ kind: monacoLanguagesAPI.CompletionItemKind.Text, // TODO: we need REPL to provide this information
72
+ filterText: suggestion.display,
73
+ insertTextRules:
74
+ monacoLanguagesAPI.CompletionItemInsertTextRule.InsertAsSnippet,
75
+ insertText: suggestion.completion,
76
+ // NOTE: the following replace range is equivalent to the current word range, if there is a current word,
77
+ // replace this word with the suggestions, otherwise, if there is no current word, we use the current position
78
+ // as insertion point for the suggestion. This is due to the fact that the auto-completer gives full word
79
+ // suggestions even when the user is typing the middle of that word
80
+ //
81
+ // For example, if the current input is 'a' and the suggestion is 'abc', we need to make sure
82
+ // the suggestion is inserted so that the final result is 'abc', not 'aabc'
83
+ range: {
84
+ startLineNumber: position.lineNumber,
85
+ startColumn: currentWord?.startColumn ?? position.column,
86
+ endLineNumber: position.lineNumber,
87
+ endColumn: currentWord?.endColumn ?? position.column,
88
+ },
89
+ }) as monacoLanguagesAPI.CompletionItem,
90
+ );
91
+ }
@@ -14,41 +14,39 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { createModelSchema, custom, optional, primitive } from 'serializr';
18
- import { SerializationFactory, usingModelSchema } from '@finos/legend-shared';
17
+ import { createModelSchema, custom, primitive } from 'serializr';
18
+ import {
19
+ SerializationFactory,
20
+ usingModelSchema,
21
+ type PlainObject,
22
+ } from '@finos/legend-shared';
19
23
  import {
20
24
  type V1_ValueSpecification,
21
25
  type V1_Lambda,
22
26
  V1_deserializeValueSpecification,
23
27
  V1_serializeValueSpecification,
24
- V1_lambdaModelSchema,
25
28
  } from '@finos/legend-graph';
26
29
  import { DataCubeQuery, type DataCubeQueryColumn } from './DataCubeQuery.js';
27
30
 
28
- export class DataCubeInfrastructureInfo {
29
- gridClientLicense?: string | undefined;
31
+ export type DataCubeQueryBuilderError = {
32
+ type: string;
33
+ message: string;
34
+ sourceInformation?: {
35
+ startLine: number;
36
+ startColumn: number;
37
+ endLine: number;
38
+ endColumn: number;
39
+ };
40
+ };
30
41
 
31
- static readonly serialization = new SerializationFactory(
32
- createModelSchema(DataCubeInfrastructureInfo, {
33
- gridClientLicense: optional(primitive()),
34
- }),
35
- );
36
- }
42
+ export type DataCubeInfrastructureInfo = {
43
+ gridClientLicense?: string | undefined;
44
+ };
37
45
 
38
- export class DataCubeGetQueryCodeInput {
39
- query!: V1_ValueSpecification; // TODO: @akphi - consider if we should update this to use Lambda instead
46
+ export type DataCubeGetQueryCodeInput = {
47
+ query: PlainObject<V1_ValueSpecification>; // TODO: @akphi - consider if we should update this to use Lambda instead
40
48
  pretty?: boolean;
41
-
42
- static readonly serialization = new SerializationFactory(
43
- createModelSchema(DataCubeGetQueryCodeInput, {
44
- pretty: optional(primitive()),
45
- query: custom(
46
- (val) => V1_serializeValueSpecification(val, []),
47
- (val) => V1_deserializeValueSpecification(val, []),
48
- ),
49
- }),
50
- );
51
- }
49
+ };
52
50
 
53
51
  export type DataCubeParseQueryInput = {
54
52
  code: string;
@@ -62,30 +60,22 @@ export type CompletionItem = {
62
60
 
63
61
  export type DataCubeQueryTypeaheadInput = {
64
62
  code: string;
65
- isPartial?: boolean | undefined;
63
+ baseQuery?: PlainObject<V1_ValueSpecification>;
66
64
  };
67
65
 
68
- export class DataCubeGetQueryRelationReturnTypeInput {
69
- query!: V1_Lambda;
66
+ export type DataCubeGetQueryRelationReturnTypeInput = {
67
+ query: PlainObject<V1_Lambda>;
68
+ };
70
69
 
71
- static readonly serialization = new SerializationFactory(
72
- createModelSchema(DataCubeGetQueryRelationReturnTypeInput, {
73
- query: usingModelSchema(V1_lambdaModelSchema([])),
74
- }),
75
- );
76
- }
70
+ export type DataCubeGetQueryCodeRelationReturnTypeInput = {
71
+ code: string;
72
+ baseQuery?: PlainObject<V1_ValueSpecification>;
73
+ };
77
74
 
78
- export class DataCubeExecutionInput {
79
- query!: V1_Lambda;
75
+ export type DataCubeExecutionInput = {
76
+ query: PlainObject<V1_Lambda>;
80
77
  debug?: boolean | undefined;
81
-
82
- static readonly serialization = new SerializationFactory(
83
- createModelSchema(DataCubeExecutionInput, {
84
- debug: optional(primitive()),
85
- query: usingModelSchema(V1_lambdaModelSchema([])),
86
- }),
87
- );
88
- }
78
+ };
89
79
 
90
80
  export type DataCubeExecutionResult = {
91
81
  result: string;
@@ -30,6 +30,7 @@ import type {
30
30
  DataCubeExecutionResult,
31
31
  DataCubeGetBaseQueryResult,
32
32
  DataCubeInfrastructureInfo,
33
+ DataCubeGetQueryCodeRelationReturnTypeInput,
33
34
  } from './REPLEngine.js';
34
35
  import type { V1_ValueSpecification } from '@finos/legend-graph';
35
36
 
@@ -77,7 +78,7 @@ export class REPLServerClient {
77
78
  return this.networkClient.get(`${this.dataCube}/getBaseQuery`);
78
79
  }
79
80
 
80
- async getRelationReturnType(
81
+ async getQueryRelationReturnType(
81
82
  input: DataCubeGetQueryRelationReturnTypeInput,
82
83
  ): Promise<RelationType> {
83
84
  return this.networkClient.post(
@@ -86,6 +87,15 @@ export class REPLServerClient {
86
87
  );
87
88
  }
88
89
 
90
+ async getQueryCodeRelationReturnType(
91
+ input: DataCubeGetQueryCodeRelationReturnTypeInput,
92
+ ): Promise<RelationType> {
93
+ return this.networkClient.post(
94
+ `${this.dataCube}/getRelationReturnType/code`,
95
+ input,
96
+ );
97
+ }
98
+
89
99
  async executeQuery(
90
100
  input: PlainObject<DataCubeExecutionInput>,
91
101
  ): Promise<DataCubeExecutionResult> {
@@ -114,7 +114,7 @@ export const DEFAULT_TOOL_PANEL_WINDOW_CONFIG: WindowConfiguration = {
114
114
 
115
115
  export const DEFAULT_SMALL_ALERT_WINDOW_CONFIG: WindowConfiguration = {
116
116
  width: 500,
117
- height: 80,
117
+ height: 200,
118
118
  minWidth: 200,
119
119
  minHeight: 80,
120
120
  center: true,
@@ -128,7 +128,7 @@ export const DEFAULT_LARGE_ALERT_WINDOW_CONFIG: WindowConfiguration = {
128
128
  center: true,
129
129
  };
130
130
 
131
- export class SingletonModeDisplayState {
131
+ export class DisplayState {
132
132
  readonly layoutManagerState: LayoutManagerState;
133
133
  readonly configuration: LayoutConfiguration;
134
134
  window?: WindowState | undefined;
@@ -31,7 +31,7 @@ import {
31
31
  DEFAULT_SMALL_ALERT_WINDOW_CONFIG,
32
32
  LayoutConfiguration,
33
33
  LayoutManagerState,
34
- SingletonModeDisplayState,
34
+ DisplayState,
35
35
  WindowState,
36
36
  type WindowConfiguration,
37
37
  } from './LayoutManagerState.js';
@@ -48,8 +48,8 @@ export class REPLStore {
48
48
  readonly client: REPLServerClient;
49
49
  readonly layout: LayoutManagerState;
50
50
  readonly initState = ActionState.create();
51
- readonly settingsDisplay: SingletonModeDisplayState;
52
- readonly documentationDisplay: SingletonModeDisplayState;
51
+ readonly settingsDisplay: DisplayState;
52
+ readonly documentationDisplay: DisplayState;
53
53
 
54
54
  dataCubeEngine!: DataCubeEngine;
55
55
 
@@ -73,11 +73,9 @@ export class REPLStore {
73
73
  this.layout = new LayoutManagerState(this.application);
74
74
  this.dataCubeEngine = new DataCubeEngine(this);
75
75
  this.dataCube = new DataCubeState(this);
76
- this.settingsDisplay = new SingletonModeDisplayState(
77
- this.layout,
78
- 'Settings',
79
- () => <SettingsPanel />,
80
- );
76
+ this.settingsDisplay = new DisplayState(this.layout, 'Settings', () => (
77
+ <SettingsPanel />
78
+ ));
81
79
  this.settingsDisplay.configuration.window = {
82
80
  x: -50,
83
81
  y: 50,
@@ -87,7 +85,7 @@ export class REPLStore {
87
85
  minHeight: 200,
88
86
  center: false,
89
87
  };
90
- this.documentationDisplay = new SingletonModeDisplayState(
88
+ this.documentationDisplay = new DisplayState(
91
89
  this.layout,
92
90
  'Documentation',
93
91
  () => <DocumentationPanel />,
@@ -181,7 +179,7 @@ export class REPLStore {
181
179
  } catch (error: unknown) {
182
180
  assertErrorThrown(error);
183
181
  this.application.alertService.setActionAlertInfo({
184
- message: `Initialization failure: ${error.message}`,
182
+ message: `Initialization Failure: ${error.message}`,
185
183
  prompt: `Resolve the issue and reload the application.`,
186
184
  type: ActionAlertType.ERROR,
187
185
  actions: [],
@@ -28,6 +28,7 @@ import {
28
28
  DataCubeGetBaseQueryResult,
29
29
  type DataCubeInfrastructureInfo,
30
30
  type CompletionItem,
31
+ type RelationType,
31
32
  } from '../../server/REPLEngine.js';
32
33
  import { guaranteeNonNullable, guaranteeType } from '@finos/legend-shared';
33
34
  import type { LegendREPLApplicationStore } from '../LegendREPLBaseStore.js';
@@ -176,11 +177,11 @@ export class DataCubeEngine {
176
177
 
177
178
  async getQueryTypeahead(
178
179
  code: string,
179
- isPartial?: boolean,
180
+ query: V1_ValueSpecification,
180
181
  ): Promise<CompletionItem[]> {
181
182
  return (await this.client.getQueryTypeahead({
182
183
  code,
183
- isPartial,
184
+ baseQuery: V1_serializeValueSpecification(query, []),
184
185
  })) as CompletionItem[];
185
186
  }
186
187
 
@@ -200,6 +201,24 @@ export class DataCubeEngine {
200
201
  );
201
202
  }
202
203
 
204
+ async getQueryRelationType(
205
+ query: V1_ValueSpecification,
206
+ ): Promise<RelationType> {
207
+ return this.client.getQueryRelationReturnType({
208
+ query: V1_serializeValueSpecification(query, []),
209
+ });
210
+ }
211
+
212
+ async getQueryCodeRelationReturnType(
213
+ code: string,
214
+ query: V1_ValueSpecification,
215
+ ): Promise<RelationType> {
216
+ return this.client.getQueryCodeRelationReturnType({
217
+ code,
218
+ baseQuery: V1_serializeValueSpecification(query, []),
219
+ });
220
+ }
221
+
203
222
  async executeQuery(query: V1_Lambda): Promise<{
204
223
  result: TDSExecutionResult;
205
224
  executedQuery: string;
@@ -20,14 +20,15 @@ import { DataCubeEditorState } from './editor/DataCubeEditorState.js';
20
20
  import { assertErrorThrown, uuid } from '@finos/legend-shared';
21
21
  import { DataCubeQuerySnapshotManager } from './core/DataCubeQuerySnapshotManager.js';
22
22
  import type { LegendREPLApplicationStore } from '../LegendREPLBaseStore.js';
23
- import { DataCubeStaticContentDisplayState } from './core/DataCubeStaticContentDisplayState.js';
23
+ import { DataCubeInfoState } from './core/DataCubeInfoState.js';
24
24
  import { validateAndBuildQuerySnapshot } from './core/DataCubeQuerySnapshotBuilder.js';
25
25
  import { action, makeObservable, observable } from 'mobx';
26
26
  import type { DataCubeEngine } from './DataCubeEngine.js';
27
27
  import { ActionAlertType } from '@finos/legend-application';
28
28
  import { DataCubeFilterEditorState } from './filter/DataCubeFilterEditorState.js';
29
+ import { DataCubeExtendManagerState } from './extend/DataCubeExtendManagerState.js';
29
30
 
30
- export class DataCubeTask {
31
+ class DataCubeTask {
31
32
  uuid = uuid();
32
33
  name: string;
33
34
  startTime = Date.now();
@@ -48,10 +49,11 @@ export class DataCubeState {
48
49
  readonly engine: DataCubeEngine;
49
50
  readonly snapshotManager: DataCubeQuerySnapshotManager;
50
51
 
51
- readonly staticContent: DataCubeStaticContentDisplayState;
52
- readonly grid: DataCubeGridState;
52
+ readonly info: DataCubeInfoState;
53
53
  readonly editor: DataCubeEditorState;
54
+ readonly grid: DataCubeGridState;
54
55
  readonly filter: DataCubeFilterEditorState;
56
+ readonly extend: DataCubeExtendManagerState;
55
57
 
56
58
  readonly runningTasks = new Map<string, DataCubeTask>();
57
59
 
@@ -68,10 +70,12 @@ export class DataCubeState {
68
70
 
69
71
  // NOTE: snapshot manager must be instantiated before subscribers
70
72
  this.snapshotManager = new DataCubeQuerySnapshotManager(this);
71
- this.staticContent = new DataCubeStaticContentDisplayState(this);
73
+
74
+ this.info = new DataCubeInfoState(this);
72
75
  this.editor = new DataCubeEditorState(this);
73
- this.filter = new DataCubeFilterEditorState(this);
74
76
  this.grid = new DataCubeGridState(this);
77
+ this.filter = new DataCubeFilterEditorState(this);
78
+ this.extend = new DataCubeExtendManagerState(this);
75
79
  }
76
80
 
77
81
  newTask(name: string) {
@@ -91,12 +95,12 @@ export class DataCubeState {
91
95
  try {
92
96
  await Promise.all(
93
97
  [
94
- this.staticContent,
98
+ this.info,
95
99
  this.editor,
96
100
  this.grid,
97
101
  this.grid.controller,
98
102
  this.filter,
99
- // TODO this.editor.extendedColumns,
103
+ this.extend,
100
104
  ].map(async (state) => {
101
105
  this.snapshotManager.registerSubscriber(state);
102
106
  }),
@@ -112,7 +116,7 @@ export class DataCubeState {
112
116
  } catch (error: unknown) {
113
117
  assertErrorThrown(error);
114
118
  this.repl.application.alertService.setActionAlertInfo({
115
- message: `Initialization failure: ${error.message}`,
119
+ message: `Initialization Failure: ${error.message}`,
116
120
  prompt: `Resolve the issue and reload the application.`,
117
121
  type: ActionAlertType.ERROR,
118
122
  actions: [],
@@ -22,21 +22,26 @@ import type { DataCubeQuery } from '../../../server/DataCubeQuery.js';
22
22
  import { formatDate } from '@finos/legend-shared';
23
23
  import { DEFAULT_REPORT_NAME } from './DataCubeQueryEngine.js';
24
24
 
25
- export class DataCubeStaticContentDisplayState extends DataCubeQuerySnapshotController {
25
+ /**
26
+ * Unlike other query editor state, this state does not support making any
27
+ * modification to the query, it simplies subscribe to extract information
28
+ * from the latest snapshot to help display latest static info about the query.
29
+ */
30
+ export class DataCubeInfoState extends DataCubeQuerySnapshotController {
26
31
  baseQuery!: DataCubeQuery;
27
32
  name = DEFAULT_REPORT_NAME;
28
- private startTime?: number | undefined;
33
+ private editionStartTime?: number | undefined;
29
34
 
30
35
  constructor(dataCube: DataCubeState) {
31
36
  super(dataCube);
32
37
 
33
- makeObservable(this, {
38
+ makeObservable<DataCubeInfoState, 'setName'>(this, {
34
39
  name: observable,
35
40
  setName: action,
36
41
  });
37
42
  }
38
43
 
39
- setName(val: string) {
44
+ private setName(val: string) {
40
45
  this.name = val;
41
46
  }
42
47
 
@@ -46,11 +51,11 @@ export class DataCubeStaticContentDisplayState extends DataCubeQuerySnapshotCont
46
51
  ) {
47
52
  const data = snapshot.data;
48
53
  this.setName(data.name);
49
- if (!this.startTime) {
50
- this.startTime = snapshot.timestamp;
54
+ if (!this.editionStartTime) {
55
+ this.editionStartTime = snapshot.timestamp;
51
56
  }
52
57
  this.application.layoutService.setWindowTitle(
53
- `\u229E ${data.name}${this.startTime ? ` - ${formatDate(new Date(this.startTime), 'HH:mm:ss EEE MMM dd yyyy')}` : ''}`,
58
+ `\u229E ${data.name}${this.editionStartTime ? ` - ${formatDate(new Date(this.editionStartTime), 'HH:mm:ss EEE MMM dd yyyy')}` : ''}`,
54
59
  );
55
60
  }
56
61
  }
@@ -27,9 +27,16 @@ import {
27
27
  V1_deserializeValueSpecification,
28
28
  extractElementNameFromPath as _name,
29
29
  } from '@finos/legend-graph';
30
- import { type DataCubeQuerySnapshot } from './DataCubeQuerySnapshot.js';
31
- import { guaranteeNonNullable } from '@finos/legend-shared';
32
30
  import {
31
+ type DataCubeQuerySnapshot,
32
+ type DataCubeQuerySnapshotSimpleExtendedColumn,
33
+ } from './DataCubeQuerySnapshot.js';
34
+ import {
35
+ guaranteeNonNullable,
36
+ UnsupportedOperationError,
37
+ } from '@finos/legend-shared';
38
+ import {
39
+ DataCubeExtendedColumnType,
33
40
  DataCubeFunction,
34
41
  DataCubeQuerySortOperator,
35
42
  type DataCubeQueryFunctionMap,
@@ -86,16 +93,22 @@ export function buildExecutableQuery(
86
93
  funcMap[funcMapKey] = func;
87
94
  };
88
95
 
89
- // --------------------------------- LEAF EXTEND ---------------------------------
96
+ // --------------------------------- LEAF-LEVEL EXTEND ---------------------------------
90
97
 
91
98
  if (data.leafExtendedColumns.length) {
92
99
  _process(
93
100
  'leafExtend',
94
101
  _function(_name(DataCubeFunction.EXTEND), [
95
102
  _cols(
96
- data.leafExtendedColumns.map((col) =>
97
- _colSpec(col.name, _deserializeToLambda(col.lambda)),
98
- ),
103
+ data.leafExtendedColumns.map((eCol) => {
104
+ if (eCol._type === DataCubeExtendedColumnType.SIMPLE) {
105
+ const col = eCol as DataCubeQuerySnapshotSimpleExtendedColumn;
106
+ return _colSpec(col.name, _deserializeToLambda(col.lambda));
107
+ }
108
+ throw new UnsupportedOperationError(
109
+ `Can't build extended column of type '${eCol._type}'`,
110
+ );
111
+ }),
99
112
  ),
100
113
  ]),
101
114
  );
@@ -148,16 +161,22 @@ export function buildExecutableQuery(
148
161
  // --------------------------------- PIVOT ---------------------------------
149
162
  // TODO: @akphi - implement this and CAST
150
163
 
151
- // --------------------------------- GROUP EXTEND ---------------------------------
164
+ // --------------------------------- GROUP-LEVEL EXTEND ---------------------------------
152
165
 
153
166
  if (data.groupExtendedColumns.length) {
154
167
  _process(
155
168
  'groupExtend',
156
169
  _function(_name(DataCubeFunction.EXTEND), [
157
170
  _cols(
158
- data.groupExtendedColumns.map((col) =>
159
- _colSpec(col.name, _deserializeToLambda(col.lambda)),
160
- ),
171
+ data.groupExtendedColumns.map((eCol) => {
172
+ if (eCol._type === DataCubeExtendedColumnType.SIMPLE) {
173
+ const col = eCol as DataCubeQuerySnapshotSimpleExtendedColumn;
174
+ return _colSpec(col.name, _deserializeToLambda(col.lambda));
175
+ }
176
+ throw new UnsupportedOperationError(
177
+ `Can't build extended column of type '${eCol._type}'`,
178
+ );
179
+ }),
161
180
  ),
162
181
  ]),
163
182
  );
@@ -252,10 +252,17 @@ export enum DataCubeColumnPinPlacement {
252
252
  RIGHT = 'Right',
253
253
  }
254
254
 
255
+ // TODO: support moreclassifications of this column, it can also be aggregation with map/reduce or
256
+ // OLAP window aggregation, or custom groupings, etc.
257
+ export enum DataCubeExtendedColumnType {
258
+ SIMPLE = 'simple',
259
+ }
260
+
255
261
  export enum DataCubeColumnDataType {
256
- NUMBER = 'number',
257
- DATE = 'date',
258
- TEXT = 'text',
262
+ NUMBER = 'Numeric',
263
+ TEXT = 'Text',
264
+ DATE = 'Date',
265
+ TIME = 'Time',
259
266
  }
260
267
 
261
268
  export function getDataType(type: string): DataCubeColumnDataType {
@@ -266,15 +273,23 @@ export function getDataType(type: string): DataCubeColumnDataType {
266
273
  case PRIMITIVE_TYPE.FLOAT:
267
274
  return DataCubeColumnDataType.NUMBER;
268
275
  case PRIMITIVE_TYPE.DATE:
269
- case PRIMITIVE_TYPE.DATETIME:
270
276
  case PRIMITIVE_TYPE.STRICTDATE:
271
277
  return DataCubeColumnDataType.DATE;
278
+ case PRIMITIVE_TYPE.DATETIME:
279
+ return DataCubeColumnDataType.TIME;
272
280
  case PRIMITIVE_TYPE.STRING:
273
281
  default:
274
282
  return DataCubeColumnDataType.TEXT;
275
283
  }
276
284
  }
277
285
 
286
+ export function ofDataType(
287
+ type: string,
288
+ dataTypes: DataCubeColumnDataType[],
289
+ ): boolean {
290
+ return dataTypes.includes(getDataType(type));
291
+ }
292
+
278
293
  export const DEFAULT_URL_LABEL_QUERY_PARAM = 'dataCube.linkLabel';
279
294
  export const DEFAULT_MISSING_VALUE_DISPLAY_TEXT = '';
280
295
 
@@ -50,8 +50,12 @@ export type DataCubeQuerySnapshotColumn = {
50
50
 
51
51
  export type DataCubeQuerySnapshotExtendedColumn =
52
52
  DataCubeQuerySnapshotColumn & {
53
+ _type: string;
54
+ };
55
+
56
+ export type DataCubeQuerySnapshotSimpleExtendedColumn =
57
+ DataCubeQuerySnapshotExtendedColumn & {
53
58
  lambda: PlainObject<V1_Lambda>;
54
- code: string;
55
59
  };
56
60
 
57
61
  export type DataCubeQuerySnapshotSortColumn = DataCubeQuerySnapshotColumn & {
@@ -294,7 +294,7 @@ export function validateAndBuildQuerySnapshot(
294
294
  }));
295
295
  data.sourceColumns.map((col) => colsMap.set(col.name, col));
296
296
 
297
- // --------------------------------- LEAF EXTEND ---------------------------------
297
+ // --------------------------------- LEAF-LEVEL EXTEND ---------------------------------
298
298
  // TODO: @akphi - implement this
299
299
 
300
300
  // --------------------------------- FILTER ---------------------------------
@@ -327,7 +327,6 @@ export function validateAndBuildQuerySnapshot(
327
327
  (colSpec) => _aggCol(colSpec, _col(colSpec)),
328
328
  ),
329
329
  // TODO: verify agg columns agree with pivot agg columns
330
- // TODO: verify groupByExtend expression that all columns are accounted for
331
330
  };
332
331
  }
333
332
 
@@ -337,7 +336,7 @@ export function validateAndBuildQuerySnapshot(
337
336
  // --------------------------------- CAST ---------------------------------
338
337
  // TODO: @akphi - implement this
339
338
 
340
- // --------------------------------- GROUP EXTEND ---------------------------------
339
+ // --------------------------------- GROUP-LEVEL EXTEND ---------------------------------
341
340
  // TODO: @akphi - implement this
342
341
 
343
342
  // --------------------------------- SORT ---------------------------------
@@ -0,0 +1,40 @@
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 type {
18
+ DataCubeQuerySnapshotAggregateColumn,
19
+ DataCubeQuerySnapshotColumn,
20
+ } from '../DataCubeQuerySnapshot.js';
21
+ import { type V1_AppliedFunction } from '@finos/legend-graph';
22
+
23
+ // --------------------------------- CONTRACT ---------------------------------
24
+
25
+ export abstract class DataCubeQueryAggregationOperation {
26
+ abstract get label(): React.ReactNode;
27
+ abstract get textLabel(): string;
28
+ abstract get description(): string;
29
+ abstract get operator(): string;
30
+
31
+ abstract isCompatibleWithColumn(column: DataCubeQuerySnapshotColumn): boolean;
32
+
33
+ abstract buildAggregateColumnSnapshot(
34
+ expression: V1_AppliedFunction,
35
+ ): DataCubeQuerySnapshotAggregateColumn | undefined;
36
+
37
+ abstract buildAggregateColumn(
38
+ condition: DataCubeQuerySnapshotAggregateColumn,
39
+ ): V1_AppliedFunction | undefined;
40
+ }