@finos/legend-application-repl 0.0.52 → 0.0.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/lib/components/dataCube/DataCube.d.ts.map +1 -1
  2. package/lib/components/dataCube/DataCube.js +3 -2
  3. package/lib/components/dataCube/DataCube.js.map +1 -1
  4. package/lib/components/dataCube/editor/DataCubeEditor.d.ts.map +1 -1
  5. package/lib/components/dataCube/editor/DataCubeEditor.js +10 -4
  6. package/lib/components/dataCube/editor/DataCubeEditor.js.map +1 -1
  7. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.d.ts.map +1 -1
  8. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js +22 -3
  9. package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js.map +1 -1
  10. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.d.ts.map +1 -1
  11. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js +13 -9
  12. package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js.map +1 -1
  13. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts +6 -2
  14. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts.map +1 -1
  15. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js +13 -17
  16. package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js.map +1 -1
  17. package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js +1 -1
  18. package/lib/components/dataCube/{editor/DataCubeEditorExtendedColumnsPanel.d.ts → extend/DataCubeColumnEditor.d.ts} +4 -4
  19. package/lib/components/dataCube/extend/DataCubeColumnEditor.d.ts.map +1 -0
  20. package/lib/components/dataCube/extend/DataCubeColumnEditor.js +165 -0
  21. package/lib/components/dataCube/extend/DataCubeColumnEditor.js.map +1 -0
  22. package/lib/components/dataCube/filter/{DataCubeEditorFilter.d.ts → DataCubeFilterEditor.d.ts} +1 -1
  23. package/lib/components/dataCube/filter/DataCubeFilterEditor.d.ts.map +1 -0
  24. package/lib/components/dataCube/filter/{DataCubeEditorFilter.js → DataCubeFilterEditor.js} +1 -1
  25. package/lib/components/dataCube/filter/{DataCubeEditorFilter.js.map → DataCubeFilterEditor.js.map} +1 -1
  26. package/lib/components/repl/PureCodeEditor.d.ts +22 -0
  27. package/lib/components/repl/PureCodeEditor.d.ts.map +1 -0
  28. package/lib/components/repl/PureCodeEditor.js +64 -0
  29. package/lib/components/repl/PureCodeEditor.js.map +1 -0
  30. package/lib/index.css +1 -1
  31. package/lib/package.json +4 -4
  32. package/lib/server/REPLEngine.d.ts +27 -17
  33. package/lib/server/REPLEngine.d.ts.map +1 -1
  34. package/lib/server/REPLEngine.js +3 -31
  35. package/lib/server/REPLEngine.js.map +1 -1
  36. package/lib/server/REPLServerClient.d.ts +3 -2
  37. package/lib/server/REPLServerClient.d.ts.map +1 -1
  38. package/lib/server/REPLServerClient.js +4 -1
  39. package/lib/server/REPLServerClient.js.map +1 -1
  40. package/lib/stores/LayoutManagerState.d.ts +1 -1
  41. package/lib/stores/LayoutManagerState.d.ts.map +1 -1
  42. package/lib/stores/LayoutManagerState.js +2 -2
  43. package/lib/stores/LayoutManagerState.js.map +1 -1
  44. package/lib/stores/REPLStore.d.ts +3 -3
  45. package/lib/stores/REPLStore.d.ts.map +1 -1
  46. package/lib/stores/REPLStore.js +4 -4
  47. package/lib/stores/REPLStore.js.map +1 -1
  48. package/lib/stores/dataCube/DataCubeEngine.d.ts +4 -2
  49. package/lib/stores/dataCube/DataCubeEngine.d.ts.map +1 -1
  50. package/lib/stores/dataCube/DataCubeEngine.js +13 -2
  51. package/lib/stores/dataCube/DataCubeEngine.js.map +1 -1
  52. package/lib/stores/dataCube/DataCubeState.d.ts +7 -4
  53. package/lib/stores/dataCube/DataCubeState.d.ts.map +1 -1
  54. package/lib/stores/dataCube/DataCubeState.js +12 -9
  55. package/lib/stores/dataCube/DataCubeState.js.map +1 -1
  56. package/lib/stores/dataCube/core/{DataCubeStaticContentDisplayState.d.ts → DataCubeInfoState.d.ts} +9 -4
  57. package/lib/stores/dataCube/core/DataCubeInfoState.d.ts.map +1 -0
  58. package/lib/stores/dataCube/core/{DataCubeStaticContentDisplayState.js → DataCubeInfoState.js} +11 -6
  59. package/lib/stores/dataCube/core/DataCubeInfoState.js.map +1 -0
  60. package/lib/stores/dataCube/core/DataCubeQueryBuilder.d.ts.map +1 -1
  61. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js +18 -6
  62. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js.map +1 -1
  63. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts +8 -3
  64. package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts.map +1 -1
  65. package/lib/stores/dataCube/core/DataCubeQueryEngine.js +15 -4
  66. package/lib/stores/dataCube/core/DataCubeQueryEngine.js.map +1 -1
  67. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts +3 -1
  68. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts.map +1 -1
  69. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js.map +1 -1
  70. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.d.ts.map +1 -1
  71. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js +2 -3
  72. package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js.map +1 -1
  73. package/lib/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.d.ts +27 -0
  74. package/lib/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.d.ts.map +1 -0
  75. package/lib/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.js +20 -0
  76. package/lib/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.js.map +1 -0
  77. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.d.ts +0 -1
  78. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.d.ts.map +1 -1
  79. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.js +0 -19
  80. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.js.map +1 -1
  81. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.d.ts.map +1 -1
  82. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.js +4 -4
  83. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.js.map +1 -1
  84. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.d.ts.map +1 -1
  85. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.js +4 -4
  86. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.js.map +1 -1
  87. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.d.ts.map +1 -1
  88. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.js +4 -4
  89. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.js.map +1 -1
  90. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.d.ts.map +1 -1
  91. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.js +4 -4
  92. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.js.map +1 -1
  93. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.d.ts.map +1 -1
  94. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.js +14 -4
  95. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.js.map +1 -1
  96. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.d.ts.map +1 -1
  97. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.js +4 -4
  98. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.js.map +1 -1
  99. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.d.ts.map +1 -1
  100. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.js +3 -3
  101. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.js.map +1 -1
  102. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.d.ts.map +1 -1
  103. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.js +8 -3
  104. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.js.map +1 -1
  105. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.d.ts.map +1 -1
  106. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.js +12 -4
  107. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.js.map +1 -1
  108. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.d.ts.map +1 -1
  109. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.js +7 -3
  110. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.js.map +1 -1
  111. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.d.ts.map +1 -1
  112. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.js +12 -4
  113. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.js.map +1 -1
  114. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.d.ts.map +1 -1
  115. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.js +7 -3
  116. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.js.map +1 -1
  117. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.d.ts.map +1 -1
  118. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.js +14 -4
  119. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.js.map +1 -1
  120. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.d.ts.map +1 -1
  121. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.js +14 -4
  122. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.js.map +1 -1
  123. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.d.ts.map +1 -1
  124. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.js +12 -4
  125. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.js.map +1 -1
  126. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.d.ts.map +1 -1
  127. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.js +7 -3
  128. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.js.map +1 -1
  129. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.d.ts.map +1 -1
  130. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.js +12 -4
  131. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.js.map +1 -1
  132. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.d.ts.map +1 -1
  133. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.js +7 -3
  134. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.js.map +1 -1
  135. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.d.ts.map +1 -1
  136. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.js +4 -4
  137. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.js.map +1 -1
  138. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.d.ts.map +1 -1
  139. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.js +4 -4
  140. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.js.map +1 -1
  141. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.d.ts.map +1 -1
  142. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.js +14 -4
  143. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.js.map +1 -1
  144. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.d.ts.map +1 -1
  145. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.js +4 -4
  146. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.js.map +1 -1
  147. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.d.ts.map +1 -1
  148. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.js +3 -3
  149. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.js.map +1 -1
  150. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.d.ts.map +1 -1
  151. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.js +8 -3
  152. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.js.map +1 -1
  153. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.d.ts.map +1 -1
  154. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.js +4 -4
  155. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.js.map +1 -1
  156. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.d.ts.map +1 -1
  157. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.js +4 -4
  158. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.js.map +1 -1
  159. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.d.ts.map +1 -1
  160. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.js +4 -4
  161. package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.js.map +1 -1
  162. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts +0 -1
  163. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts.map +1 -1
  164. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js +10 -40
  165. package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js.map +1 -1
  166. package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.d.ts +18 -2
  167. package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.d.ts.map +1 -1
  168. package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.js +80 -21
  169. package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.js.map +1 -1
  170. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts +0 -8
  171. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts.map +1 -1
  172. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js +2 -23
  173. package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js.map +1 -1
  174. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts.map +1 -1
  175. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js +4 -1
  176. package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js.map +1 -1
  177. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts +14 -3
  178. package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts.map +1 -1
  179. package/lib/stores/dataCube/editor/DataCubeEditorState.js +37 -4
  180. package/lib/stores/dataCube/editor/DataCubeEditorState.js.map +1 -1
  181. package/lib/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.d.ts.map +1 -1
  182. package/lib/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.js +9 -5
  183. package/lib/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.js.map +1 -1
  184. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts +3 -1
  185. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts.map +1 -1
  186. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js +28 -1
  187. package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js.map +1 -1
  188. package/lib/stores/dataCube/extend/DataCubeColumnEditorState.d.ts +61 -0
  189. package/lib/stores/dataCube/extend/DataCubeColumnEditorState.d.ts.map +1 -0
  190. package/lib/stores/dataCube/extend/DataCubeColumnEditorState.js +262 -0
  191. package/lib/stores/dataCube/extend/DataCubeColumnEditorState.js.map +1 -0
  192. package/lib/stores/dataCube/extend/DataCubeExtendManagerState.d.ts +45 -0
  193. package/lib/stores/dataCube/extend/DataCubeExtendManagerState.d.ts.map +1 -0
  194. package/lib/stores/dataCube/extend/DataCubeExtendManagerState.js +112 -0
  195. package/lib/stores/dataCube/extend/DataCubeExtendManagerState.js.map +1 -0
  196. package/lib/stores/dataCube/filter/DataCubeFilterEditorState.d.ts +6 -2
  197. package/lib/stores/dataCube/filter/DataCubeFilterEditorState.d.ts.map +1 -1
  198. package/lib/stores/dataCube/filter/DataCubeFilterEditorState.js +18 -5
  199. package/lib/stores/dataCube/filter/DataCubeFilterEditorState.js.map +1 -1
  200. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts.map +1 -1
  201. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js +1 -2
  202. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js.map +1 -1
  203. package/lib/stores/dataCube/grid/DataCubeGridClientExportEngine.js +1 -1
  204. package/lib/stores/dataCube/grid/DataCubeGridClientExportEngine.js.map +1 -1
  205. package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.d.ts.map +1 -1
  206. package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.js +10 -5
  207. package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.js.map +1 -1
  208. package/lib/stores/dataCube/grid/DataCubeGridControllerState.d.ts +16 -10
  209. package/lib/stores/dataCube/grid/DataCubeGridControllerState.d.ts.map +1 -1
  210. package/lib/stores/dataCube/grid/DataCubeGridControllerState.js +28 -14
  211. package/lib/stores/dataCube/grid/DataCubeGridControllerState.js.map +1 -1
  212. package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.d.ts.map +1 -1
  213. package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.js +34 -20
  214. package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.js.map +1 -1
  215. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.d.ts.map +1 -1
  216. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js +1 -0
  217. package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js.map +1 -1
  218. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts +2 -2
  219. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts.map +1 -1
  220. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js +3 -2
  221. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js.map +1 -1
  222. package/lib/stores/dataCube/grid/DataCubeGridState.d.ts +15 -0
  223. package/lib/stores/dataCube/grid/DataCubeGridState.d.ts.map +1 -1
  224. package/lib/stores/dataCube/grid/DataCubeGridState.js +15 -0
  225. package/lib/stores/dataCube/grid/DataCubeGridState.js.map +1 -1
  226. package/package.json +10 -10
  227. package/src/components/dataCube/DataCube.tsx +4 -1
  228. package/src/components/dataCube/editor/DataCubeEditor.tsx +11 -3
  229. package/src/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.tsx +88 -25
  230. package/src/components/dataCube/editor/DataCubeEditorColumnsPanel.tsx +58 -12
  231. package/src/components/dataCube/editor/DataCubeEditorColumnsSelector.tsx +38 -34
  232. package/src/components/dataCube/editor/DataCubeEditorSortsPanel.tsx +1 -1
  233. package/src/components/dataCube/extend/DataCubeColumnEditor.tsx +362 -0
  234. package/src/components/repl/PureCodeEditor.tsx +91 -0
  235. package/src/server/REPLEngine.ts +33 -43
  236. package/src/server/REPLServerClient.ts +11 -1
  237. package/src/stores/LayoutManagerState.ts +2 -2
  238. package/src/stores/REPLStore.tsx +8 -10
  239. package/src/stores/dataCube/DataCubeEngine.ts +21 -2
  240. package/src/stores/dataCube/DataCubeState.ts +13 -9
  241. package/src/stores/dataCube/core/{DataCubeStaticContentDisplayState.ts → DataCubeInfoState.ts} +12 -7
  242. package/src/stores/dataCube/core/DataCubeQueryBuilder.ts +29 -10
  243. package/src/stores/dataCube/core/DataCubeQueryEngine.ts +19 -4
  244. package/src/stores/dataCube/core/DataCubeQuerySnapshot.ts +5 -1
  245. package/src/stores/dataCube/core/DataCubeQuerySnapshotBuilder.ts +2 -3
  246. package/src/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.ts +40 -0
  247. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation.ts +0 -23
  248. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.tsx +4 -3
  249. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.tsx +4 -3
  250. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.tsx +4 -3
  251. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.tsx +4 -3
  252. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.tsx +14 -3
  253. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.tsx +4 -3
  254. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.tsx +4 -5
  255. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.tsx +9 -5
  256. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.tsx +12 -3
  257. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.tsx +8 -5
  258. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.tsx +12 -3
  259. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.tsx +8 -5
  260. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.tsx +15 -6
  261. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.tsx +15 -6
  262. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.tsx +12 -3
  263. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.tsx +8 -5
  264. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.tsx +12 -3
  265. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.tsx +8 -5
  266. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.tsx +4 -3
  267. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.tsx +4 -3
  268. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.tsx +14 -3
  269. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.tsx +4 -3
  270. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.tsx +4 -5
  271. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.tsx +9 -5
  272. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.tsx +4 -3
  273. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.tsx +4 -3
  274. package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.tsx +4 -3
  275. package/src/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.ts +18 -51
  276. package/src/stores/dataCube/editor/DataCubeEditorColumnsPanelState.ts +137 -31
  277. package/src/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.ts +2 -40
  278. package/src/stores/dataCube/editor/DataCubeEditorSortsPanelState.ts +9 -1
  279. package/src/stores/dataCube/editor/DataCubeEditorState.tsx +50 -5
  280. package/src/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.ts +14 -7
  281. package/src/stores/dataCube/editor/DataCubeMutableConfiguration.ts +32 -1
  282. package/src/stores/dataCube/extend/DataCubeColumnEditorState.tsx +364 -0
  283. package/src/stores/dataCube/extend/DataCubeExtendManagerState.tsx +169 -0
  284. package/src/stores/dataCube/filter/DataCubeFilterEditorState.tsx +21 -10
  285. package/src/stores/dataCube/grid/DataCubeGridClientEngine.ts +1 -2
  286. package/src/stores/dataCube/grid/DataCubeGridClientExportEngine.ts +1 -1
  287. package/src/stores/dataCube/grid/DataCubeGridConfigurationBuilder.tsx +18 -7
  288. package/src/stores/dataCube/grid/DataCubeGridControllerState.ts +37 -17
  289. package/src/stores/dataCube/grid/DataCubeGridMenuBuilder.tsx +36 -20
  290. package/src/stores/dataCube/grid/DataCubeGridQueryBuilder.ts +1 -0
  291. package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.ts +8 -1
  292. package/src/stores/dataCube/grid/DataCubeGridState.ts +15 -0
  293. package/tsconfig.json +8 -3
  294. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.d.ts.map +0 -1
  295. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js +0 -27
  296. package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js.map +0 -1
  297. package/lib/components/dataCube/filter/DataCubeEditorFilter.d.ts.map +0 -1
  298. package/lib/stores/dataCube/core/DataCubeStaticContentDisplayState.d.ts.map +0 -1
  299. package/lib/stores/dataCube/core/DataCubeStaticContentDisplayState.js.map +0 -1
  300. package/src/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.tsx +0 -45
  301. /package/src/components/dataCube/filter/{DataCubeEditorFilter.tsx → DataCubeFilterEditor.tsx} +0 -0
@@ -14,13 +14,64 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { DataCubeIcon } from '@finos/legend-art';
17
+ import { cn, DataCubeIcon } from '@finos/legend-art';
18
18
  import { observer } from 'mobx-react-lite';
19
19
  import { DataCubeEditorColumnsSelector } from './DataCubeEditorColumnsSelector.js';
20
- import { FormCheckbox } from '../../repl/Form.js';
21
- import { DataCubeEditorColumnsSelectorHiddenColumnsVisibility } from '../../../stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js';
22
20
  import { useEffect } from 'react';
23
21
  import type { DataCubeState } from '../../../stores/dataCube/DataCubeState.js';
22
+ import { FormCheckbox } from '../../repl/Form.js';
23
+ import type {
24
+ DataCubeEditorColumnsSelectorColumnState,
25
+ DataCubeEditorColumnsSelectorState,
26
+ } from '../../../stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js';
27
+
28
+ const ColumnsSelectorLabelRenderer = observer(
29
+ (props: {
30
+ selector: DataCubeEditorColumnsSelectorState<DataCubeEditorColumnsSelectorColumnState>;
31
+ column: DataCubeEditorColumnsSelectorColumnState;
32
+ }) => {
33
+ const { selector, column } = props;
34
+ const showHiddenIndicator =
35
+ !selector.editor.columns.groupExtendColumns.find(
36
+ (col) => col.name === column.name,
37
+ ) &&
38
+ selector.editor.columnProperties.getColumnConfiguration(column.name)
39
+ ?.hideFromView;
40
+
41
+ return (
42
+ <>
43
+ <div
44
+ className={cn(
45
+ 'items-center overflow-hidden overflow-ellipsis whitespace-nowrap pl-2',
46
+ {
47
+ 'text-neutral-400': showHiddenIndicator,
48
+ },
49
+ )}
50
+ >
51
+ {column.name}
52
+ </div>
53
+ {Boolean(
54
+ selector.editor.columns.leafExtendColumns.find(
55
+ (col) => col.name === column.name,
56
+ ),
57
+ ) && (
58
+ <div className="ml-1.5 mr-0.5 flex h-3.5 flex-shrink-0 items-center rounded-sm border border-neutral-300 bg-neutral-100 px-1 text-xs font-medium uppercase text-neutral-600">
59
+ {`Extended (Leaf Level)`}
60
+ </div>
61
+ )}
62
+ {Boolean(
63
+ selector.editor.columns.groupExtendColumns.find(
64
+ (col) => col.name === column.name,
65
+ ),
66
+ ) && (
67
+ <div className="ml-1.5 mr-0.5 flex h-3.5 flex-shrink-0 items-center rounded-sm border border-neutral-300 bg-neutral-100 px-1 text-xs font-medium uppercase text-neutral-600">
68
+ {`Extended (Group Level)`}
69
+ </div>
70
+ )}
71
+ </>
72
+ );
73
+ },
74
+ );
24
75
 
25
76
  export const DataCubeEditorColumnsPanel = observer(
26
77
  (props: { dataCube: DataCubeState }) => {
@@ -43,16 +94,10 @@ export const DataCubeEditorColumnsPanel = observer(
43
94
  <div className="flex h-full items-center pr-2">
44
95
  <FormCheckbox
45
96
  label="Show hidden columns?"
46
- checked={
47
- panel.selector.hiddenColumnsVisibility !==
48
- DataCubeEditorColumnsSelectorHiddenColumnsVisibility.HIDDEN
49
- }
97
+ checked={panel.selector.showHiddenColumns}
50
98
  onChange={() =>
51
- panel.selector.setHiddenColumnsVisibility(
52
- panel.selector.hiddenColumnsVisibility !==
53
- DataCubeEditorColumnsSelectorHiddenColumnsVisibility.HIDDEN
54
- ? DataCubeEditorColumnsSelectorHiddenColumnsVisibility.HIDDEN
55
- : DataCubeEditorColumnsSelectorHiddenColumnsVisibility.VISIBLE_WITH_WARNING,
99
+ panel.selector.setShowHiddenColumns(
100
+ !panel.selector.showHiddenColumns,
56
101
  )
57
102
  }
58
103
  />
@@ -69,6 +114,7 @@ export const DataCubeEditorColumnsPanel = observer(
69
114
  No columns selected
70
115
  </div>
71
116
  )}
117
+ columnLabelRenderer={(p) => <ColumnsSelectorLabelRenderer {...p} />}
72
118
  />
73
119
  </div>
74
120
  </div>
@@ -15,7 +15,7 @@
15
15
  */
16
16
 
17
17
  import { observer } from 'mobx-react-lite';
18
- import { cn, DataCubeIcon } from '@finos/legend-art';
18
+ import { DataCubeIcon } from '@finos/legend-art';
19
19
  import type {
20
20
  ColDef,
21
21
  ColDefField,
@@ -33,7 +33,6 @@ import {
33
33
  } from '@ag-grid-community/react';
34
34
  import { ClientSideRowModelModule } from '@ag-grid-community/client-side-row-model';
35
35
  import {
36
- DataCubeEditorColumnsSelectorHiddenColumnsVisibility,
37
36
  type DataCubeEditorColumnsSelectorColumnState,
38
37
  type DataCubeEditorColumnsSelectorState,
39
38
  } from '../../../stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js';
@@ -148,15 +147,26 @@ export const DataCubeEditorColumnsSelector = observer(
148
147
  T extends DataCubeEditorColumnsSelectorColumnState,
149
148
  >(props: {
150
149
  selector: DataCubeEditorColumnsSelectorState<T>;
151
- extraColumnComponent?:
152
- | React.FC<{
150
+ columnLabelRenderer?:
151
+ | ((p: {
153
152
  selector: DataCubeEditorColumnsSelectorState<T>;
154
153
  column: T;
155
- }>
154
+ }) => React.ReactNode)
155
+ | undefined;
156
+ columnActionRenderer?:
157
+ | ((p: {
158
+ selector: DataCubeEditorColumnsSelectorState<T>;
159
+ column: T;
160
+ }) => React.ReactNode)
156
161
  | undefined;
157
162
  noColumnsSelectedRenderer?: (() => React.ReactNode) | undefined;
158
163
  }) {
159
- const { selector, extraColumnComponent, noColumnsSelectedRenderer } = props;
164
+ const {
165
+ selector,
166
+ columnLabelRenderer,
167
+ columnActionRenderer,
168
+ noColumnsSelectedRenderer,
169
+ } = props;
160
170
  const [selectedAvailableColumns, setSelectedAvailableColumns] = useState<
161
171
  T[]
162
172
  >([]);
@@ -342,19 +352,11 @@ export const DataCubeEditorColumnsSelector = observer(
342
352
  if (!data) {
343
353
  return null;
344
354
  }
345
- const showHiddenIndicator =
346
- selector.hiddenColumnsVisibility ===
347
- DataCubeEditorColumnsSelectorHiddenColumnsVisibility.VISIBLE_WITH_WARNING &&
348
- selector.editor.columnProperties.columns.find(
349
- (col) => col.name === data.name,
350
- )?.hideFromView;
351
355
 
352
356
  return (
353
357
  <div
354
- className={cn('flex h-full w-full cursor-pointer', {
355
- 'text-neutral-400': showHiddenIndicator,
356
- })}
357
- title={`[${data.name}]${showHiddenIndicator ? ' - Hidden' : ''}\nDouble-click to add column`}
358
+ className="flex h-full w-full cursor-pointer items-center"
359
+ title={`[${data.name}]\nDouble-click to add column`}
358
360
  onDoubleClick={() => {
359
361
  selector.setSelectedColumns([
360
362
  ...selector.selectedColumns,
@@ -363,11 +365,16 @@ export const DataCubeEditorColumnsSelector = observer(
363
365
  params.api.clearFocusedCell();
364
366
  }}
365
367
  >
366
- <div className="h-full flex-1 items-center overflow-hidden overflow-ellipsis whitespace-nowrap pl-2">
367
- {data.name}
368
- </div>
368
+ {columnLabelRenderer?.({
369
+ selector,
370
+ column: data,
371
+ }) ?? (
372
+ <div className="h-full flex-1 items-center overflow-hidden overflow-ellipsis whitespace-nowrap pl-2">
373
+ {data.name}
374
+ </div>
375
+ )}
369
376
  <div className="flex h-full">
370
- {extraColumnComponent?.({
377
+ {columnActionRenderer?.({
371
378
  selector,
372
379
  column: data,
373
380
  }) ?? null}
@@ -536,19 +543,11 @@ export const DataCubeEditorColumnsSelector = observer(
536
543
  if (!data) {
537
544
  return null;
538
545
  }
539
- const showHiddenIndicator =
540
- selector.hiddenColumnsVisibility ===
541
- DataCubeEditorColumnsSelectorHiddenColumnsVisibility.VISIBLE_WITH_WARNING &&
542
- selector.editor.columnProperties.columns.find(
543
- (col) => col.name === data.name,
544
- )?.hideFromView;
545
546
 
546
547
  return (
547
548
  <div
548
- className={cn('flex h-full w-full cursor-pointer', {
549
- 'text-neutral-400': showHiddenIndicator,
550
- })}
551
- title={`[${data.name}]${showHiddenIndicator ? ' - Hidden' : ''}\nDouble-click to remove column`}
549
+ className="flex h-full w-full cursor-pointer items-center"
550
+ title={`[${data.name}]\nDouble-click to add column`}
552
551
  onDoubleClick={() => {
553
552
  selector.setSelectedColumns(
554
553
  selector.selectedColumns.filter(
@@ -558,11 +557,16 @@ export const DataCubeEditorColumnsSelector = observer(
558
557
  params.api.clearFocusedCell();
559
558
  }}
560
559
  >
561
- <div className="h-full flex-1 items-center overflow-hidden overflow-ellipsis whitespace-nowrap pl-2">
562
- {data.name}
563
- </div>
560
+ {columnLabelRenderer?.({
561
+ selector,
562
+ column: data,
563
+ }) ?? (
564
+ <div className="h-full flex-1 items-center overflow-hidden overflow-ellipsis whitespace-nowrap pl-2">
565
+ {data.name}
566
+ </div>
567
+ )}
564
568
  <div className="flex h-full">
565
- {extraColumnComponent?.({
569
+ {columnActionRenderer?.({
566
570
  selector,
567
571
  column: data,
568
572
  }) ?? null}
@@ -138,7 +138,7 @@ export const DataCubeEditorSortsPanel = observer(
138
138
  <div className="flex h-[calc(100%_-_24px)] w-full">
139
139
  <DataCubeEditorColumnsSelector
140
140
  selector={panel.selector}
141
- extraColumnComponent={(p) => <SortDirectionDropdown {...p} />}
141
+ columnActionRenderer={(p) => <SortDirectionDropdown {...p} />}
142
142
  />
143
143
  </div>
144
144
  </div>
@@ -0,0 +1,362 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { observer } from 'mobx-react-lite';
18
+ import { type DataCubeNewColumnState } from '../../../stores/dataCube/extend/DataCubeColumnEditorState.js';
19
+ import {
20
+ editor as monacoEditorAPI,
21
+ languages as monacoLanguagesAPI,
22
+ type IDisposable,
23
+ } from 'monaco-editor';
24
+ import { useEffect, useMemo, useRef, useState } from 'react';
25
+ import {
26
+ CODE_EDITOR_LANGUAGE,
27
+ CODE_EDITOR_THEME,
28
+ getBaseCodeEditorOptions,
29
+ PURE_CODE_EDITOR_WORD_SEPARATORS,
30
+ } from '@finos/legend-lego/code-editor';
31
+ import {
32
+ getCodeSuggestions,
33
+ MONACO_EDITOR_OVERFLOW_WIDGETS_ROOT_ID,
34
+ } from '../../repl/PureCodeEditor.js';
35
+ import {
36
+ FormDocumentation,
37
+ FormDropdownMenu,
38
+ FormDropdownMenuItem,
39
+ FormDropdownMenuTrigger,
40
+ FormTextInput,
41
+ } from '../../repl/Form.js';
42
+ import { debounce } from '@finos/legend-shared';
43
+ import { useApplicationStore } from '@finos/legend-application';
44
+ import { cn, DataCubeIcon, useDropdownMenu } from '@finos/legend-art';
45
+ import {
46
+ DataCubeColumnDataType,
47
+ DataCubeColumnKind,
48
+ } from '../../../stores/dataCube/core/DataCubeQueryEngine.js';
49
+ import { DocumentationKey } from '../../../application/LegendREPLDocumentation.js';
50
+
51
+ enum DataCubeExtendedColumnKind {
52
+ LEAF_LEVEL_MEASURE = 'Leaf Level Measure',
53
+ LEAF_LEVEL_DIMENSION = 'Leaf Level Dimension',
54
+ GROUP_LEVEL = 'Group Level',
55
+ }
56
+
57
+ export const DataCubeColumnCreator = observer(
58
+ (props: { state: DataCubeNewColumnState }) => {
59
+ const { state } = props;
60
+ const dataCube = state.dataCube;
61
+ const application = useApplicationStore();
62
+
63
+ const nameInputRef = useRef<HTMLInputElement>(null);
64
+ const currentColumnKind = state.isGroupLevel
65
+ ? DataCubeExtendedColumnKind.GROUP_LEVEL
66
+ : state.columnKind === DataCubeColumnKind.MEASURE
67
+ ? DataCubeExtendedColumnKind.LEAF_LEVEL_MEASURE
68
+ : DataCubeExtendedColumnKind.LEAF_LEVEL_DIMENSION;
69
+ const [
70
+ openKindDropdown,
71
+ closeKindDropdown,
72
+ kindDropdownProps,
73
+ kindDropPropsOpen,
74
+ ] = useDropdownMenu();
75
+ const [
76
+ openTypeDropdown,
77
+ closeTypeDropdown,
78
+ typeDropdownProps,
79
+ typeDropPropsOpen,
80
+ ] = useDropdownMenu();
81
+
82
+ const suggestionsProvider = useRef<IDisposable | undefined>(undefined);
83
+ const editorRef = useRef<HTMLDivElement>(null);
84
+ const [editor, setEditor] = useState<
85
+ monacoEditorAPI.IStandaloneCodeEditor | undefined
86
+ >();
87
+ const debouncedCheckReturnType = useMemo(
88
+ () =>
89
+ debounce((): void => {
90
+ state.getReturnType().catch(application.alertUnhandledError);
91
+ }, 500),
92
+ [state, application],
93
+ );
94
+
95
+ useEffect(() => {
96
+ if (!editor && editorRef.current) {
97
+ const element = editorRef.current;
98
+ const newEditor = monacoEditorAPI.create(element, {
99
+ ...getBaseCodeEditorOptions(),
100
+ fontSize: 12,
101
+ language: CODE_EDITOR_LANGUAGE.PURE,
102
+ theme: CODE_EDITOR_THEME.GITHUB_LIGHT,
103
+ wordSeparators: PURE_CODE_EDITOR_WORD_SEPARATORS,
104
+ // Make sure the widgets (tooltips, menus) are not clipped by the container bounds
105
+ // and fix the problem where widgets are rendered with position=fixed not working well with parent
106
+ // containers (i.e. the draggable window) which has been transformed
107
+ // See https://dev.to/salilnaik/the-uncanny-relationship-between-position-fixed-and-transform-property-32f6
108
+ // See https://github.com/microsoft/monaco-editor/issues/2793#issuecomment-999337740
109
+ fixedOverflowWidgets: true,
110
+ overflowWidgetsDomNode: document.getElementById(
111
+ MONACO_EDITOR_OVERFLOW_WIDGETS_ROOT_ID,
112
+ )!,
113
+ });
114
+
115
+ // NOTE: since engine suggestions are computed based on the current text content
116
+ // we put it in this block to simplify the flow and really to "bend" monaco-editor
117
+ // suggestion provider to our needs. But we also need to make sure this suggestion
118
+ // provider is scoped to the current editor only by checking the editor model
119
+ suggestionsProvider.current?.dispose();
120
+ suggestionsProvider.current =
121
+ monacoLanguagesAPI.registerCompletionItemProvider(
122
+ CODE_EDITOR_LANGUAGE.PURE,
123
+ {
124
+ // NOTE: this is a hack to fetch suggestions from engine for every keystroke
125
+ triggerCharacters: [...PURE_CODE_EDITOR_WORD_SEPARATORS, '$'],
126
+ provideCompletionItems: async (model, position, context) => {
127
+ let suggestions: monacoLanguagesAPI.CompletionItem[] = [];
128
+
129
+ if (model.uri === state.editorModelUri) {
130
+ suggestions = suggestions.concat(
131
+ await getCodeSuggestions(
132
+ position,
133
+ model,
134
+ state.codePrefix,
135
+ dataCube,
136
+ () => state.buildExtendBaseQuery(),
137
+ ),
138
+ );
139
+ }
140
+
141
+ return { suggestions };
142
+ },
143
+ },
144
+ );
145
+
146
+ newEditor.setModel(state.editorModel);
147
+ newEditor.onDidChangeModelContent(() => {
148
+ const currentVal = newEditor.getValue();
149
+ if (currentVal !== state.code) {
150
+ state.code = currentVal;
151
+ // clear error on content change/typing
152
+ state.clearError();
153
+ state.setReturnType(undefined);
154
+ debouncedCheckReturnType.cancel();
155
+ debouncedCheckReturnType();
156
+ }
157
+ });
158
+ // focus on the editor initially and set the cursor to the end
159
+ // since we're trying to create a new column
160
+ newEditor.focus();
161
+ newEditor.setPosition({
162
+ lineNumber: 1,
163
+ column: state.code.length + 1,
164
+ });
165
+ state.setEditor(newEditor);
166
+ setEditor(newEditor);
167
+ }
168
+ }, [state, editor, debouncedCheckReturnType, dataCube]);
169
+
170
+ // clean up
171
+ useEffect(
172
+ () => (): void => {
173
+ if (editor) {
174
+ editor.dispose();
175
+
176
+ suggestionsProvider.current?.dispose();
177
+ }
178
+ },
179
+ [editor],
180
+ );
181
+
182
+ useEffect(() => {
183
+ state.editor?.updateOptions({
184
+ readOnly: state.finalizationState.isInProgress,
185
+ });
186
+ }, [state, state.finalizationState.isInProgress]);
187
+
188
+ return (
189
+ <>
190
+ <div className="relative h-[calc(100%_-_40px)] w-full px-2 pt-2">
191
+ <div className="h-full w-full overflow-auto border border-neutral-300 bg-white">
192
+ <div className="h-full w-full select-none p-0">
193
+ <div className="h-24 w-full p-2">
194
+ <div className="mt-1 flex h-5 w-full items-center">
195
+ <div className="flex h-full w-24 flex-shrink-0 items-center text-sm">
196
+ Column Name:
197
+ </div>
198
+ <FormTextInput
199
+ className="w-32"
200
+ ref={nameInputRef}
201
+ disabled={state.finalizationState.isInProgress}
202
+ value={state.name}
203
+ onChange={(event) => {
204
+ state.setName(event.target.value.trim());
205
+ }}
206
+ />
207
+ <div className="ml-0.5 flex h-5 w-5 flex-shrink-0 items-center justify-center text-lg">
208
+ {state.isNameValid ? (
209
+ <DataCubeIcon.CircleChecked className="text-green-500" />
210
+ ) : (
211
+ <DataCubeIcon.CircledFailed className="text-red-500" />
212
+ )}
213
+ </div>
214
+ </div>
215
+ <div className="mt-2 flex h-5 w-full items-center">
216
+ <div className="flex h-full w-24 flex-shrink-0 items-center text-sm">
217
+ Column Kind:
218
+ <FormDocumentation
219
+ className="ml-1"
220
+ documentationKey={
221
+ DocumentationKey.DATA_CUBE_EXTENDED_COLUMN_LEVELS
222
+ }
223
+ />
224
+ </div>
225
+ <FormDropdownMenuTrigger
226
+ className="w-32"
227
+ onClick={openKindDropdown}
228
+ open={kindDropPropsOpen}
229
+ disabled={state.finalizationState.isInProgress}
230
+ >
231
+ {currentColumnKind}
232
+ </FormDropdownMenuTrigger>
233
+ <FormDropdownMenu className="w-32" {...kindDropdownProps}>
234
+ {[
235
+ DataCubeExtendedColumnKind.LEAF_LEVEL_MEASURE,
236
+ DataCubeExtendedColumnKind.LEAF_LEVEL_DIMENSION,
237
+ DataCubeExtendedColumnKind.GROUP_LEVEL,
238
+ ].map((columnKind) => (
239
+ <FormDropdownMenuItem
240
+ key={columnKind}
241
+ onClick={() => {
242
+ switch (columnKind) {
243
+ case DataCubeExtendedColumnKind.LEAF_LEVEL_MEASURE: {
244
+ state.setColumnKind(
245
+ false,
246
+ DataCubeColumnKind.MEASURE,
247
+ );
248
+ break;
249
+ }
250
+ case DataCubeExtendedColumnKind.LEAF_LEVEL_DIMENSION: {
251
+ state.setColumnKind(
252
+ false,
253
+ DataCubeColumnKind.DIMENSION,
254
+ );
255
+ break;
256
+ }
257
+ case DataCubeExtendedColumnKind.GROUP_LEVEL: {
258
+ state.setColumnKind(true, undefined);
259
+ break;
260
+ }
261
+ default:
262
+ return;
263
+ }
264
+ state.clearError();
265
+ state.setReturnType(undefined);
266
+ debouncedCheckReturnType.cancel();
267
+ debouncedCheckReturnType();
268
+ closeKindDropdown();
269
+ }}
270
+ autoFocus={columnKind === currentColumnKind}
271
+ >
272
+ {columnKind}
273
+ </FormDropdownMenuItem>
274
+ ))}
275
+ </FormDropdownMenu>
276
+ </div>
277
+ <div className="mt-2 flex h-5 w-full items-center">
278
+ <div className="flex h-full w-24 flex-shrink-0 items-center text-sm">
279
+ Value Type:
280
+ </div>
281
+ <FormDropdownMenuTrigger
282
+ className="w-32"
283
+ onClick={openTypeDropdown}
284
+ open={typeDropPropsOpen}
285
+ disabled={state.finalizationState.isInProgress}
286
+ >
287
+ {state.expectedType}
288
+ </FormDropdownMenuTrigger>
289
+ <div className="ml-0.5 flex h-5 w-5 flex-shrink-0 items-center justify-center text-lg">
290
+ {state.validationState.isInProgress ? (
291
+ <DataCubeIcon.Loader className="animate-spin stroke-2 text-neutral-400" />
292
+ ) : state.returnType ? (
293
+ state.isTypeValid ? (
294
+ <DataCubeIcon.CircleChecked className="text-green-500" />
295
+ ) : (
296
+ <DataCubeIcon.CircledFailed className="text-red-500" />
297
+ )
298
+ ) : null}
299
+ </div>
300
+ <FormDropdownMenu className="w-32" {...typeDropdownProps}>
301
+ {[
302
+ DataCubeColumnDataType.TEXT,
303
+ DataCubeColumnDataType.NUMBER,
304
+ DataCubeColumnDataType.DATE,
305
+ ].map((dataType) => (
306
+ <FormDropdownMenuItem
307
+ key={dataType}
308
+ onClick={() => {
309
+ state.setExpectedType(dataType);
310
+ closeTypeDropdown();
311
+ }}
312
+ autoFocus={dataType === state.expectedType}
313
+ >
314
+ {dataType}
315
+ </FormDropdownMenuItem>
316
+ ))}
317
+ </FormDropdownMenu>
318
+ </div>
319
+ </div>
320
+ <div className="h-[calc(100%_-_96px)] w-full p-2 pt-1">
321
+ <div
322
+ className={cn(
323
+ 'relative h-full w-full border border-neutral-200',
324
+ {
325
+ 'border-red-500': Boolean(state.codeError),
326
+ },
327
+ )}
328
+ >
329
+ <div
330
+ className="absolute left-0 top-0 h-full w-full overflow-hidden"
331
+ ref={editorRef}
332
+ />
333
+ </div>
334
+ </div>
335
+ </div>
336
+ </div>
337
+ </div>
338
+ <div className="flex h-10 items-center justify-end px-2">
339
+ <button
340
+ className="h-6 w-20 border border-neutral-400 bg-neutral-300 px-2 hover:brightness-95 disabled:cursor-not-allowed disabled:border-neutral-300 disabled:text-neutral-400 disabled:hover:brightness-100"
341
+ disabled={
342
+ !state.isNameValid ||
343
+ !state.isTypeValid ||
344
+ !state.validationState.hasCompleted
345
+ }
346
+ onClick={() => {
347
+ state.applyChanges().catch(application.alertUnhandledError);
348
+ }}
349
+ >
350
+ OK
351
+ </button>
352
+ <button
353
+ className="ml-2 h-6 w-20 border border-neutral-400 bg-neutral-300 px-2 hover:brightness-95"
354
+ onClick={() => state.close()}
355
+ >
356
+ Cancel
357
+ </button>
358
+ </div>
359
+ </>
360
+ );
361
+ },
362
+ );