@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.
- package/lib/components/dataCube/DataCube.d.ts.map +1 -1
- package/lib/components/dataCube/DataCube.js +3 -2
- package/lib/components/dataCube/DataCube.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditor.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditor.js +10 -4
- package/lib/components/dataCube/editor/DataCubeEditor.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js +22 -3
- package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js +13 -9
- package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts +6 -2
- package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js +13 -17
- package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js +1 -1
- package/lib/components/dataCube/{editor/DataCubeEditorExtendedColumnsPanel.d.ts → extend/DataCubeColumnEditor.d.ts} +4 -4
- package/lib/components/dataCube/extend/DataCubeColumnEditor.d.ts.map +1 -0
- package/lib/components/dataCube/extend/DataCubeColumnEditor.js +165 -0
- package/lib/components/dataCube/extend/DataCubeColumnEditor.js.map +1 -0
- package/lib/components/dataCube/filter/{DataCubeEditorFilter.d.ts → DataCubeFilterEditor.d.ts} +1 -1
- package/lib/components/dataCube/filter/DataCubeFilterEditor.d.ts.map +1 -0
- package/lib/components/dataCube/filter/{DataCubeEditorFilter.js → DataCubeFilterEditor.js} +1 -1
- package/lib/components/dataCube/filter/{DataCubeEditorFilter.js.map → DataCubeFilterEditor.js.map} +1 -1
- package/lib/components/repl/PureCodeEditor.d.ts +22 -0
- package/lib/components/repl/PureCodeEditor.d.ts.map +1 -0
- package/lib/components/repl/PureCodeEditor.js +64 -0
- package/lib/components/repl/PureCodeEditor.js.map +1 -0
- package/lib/index.css +1 -1
- package/lib/package.json +4 -4
- package/lib/server/REPLEngine.d.ts +27 -17
- package/lib/server/REPLEngine.d.ts.map +1 -1
- package/lib/server/REPLEngine.js +3 -31
- package/lib/server/REPLEngine.js.map +1 -1
- package/lib/server/REPLServerClient.d.ts +3 -2
- package/lib/server/REPLServerClient.d.ts.map +1 -1
- package/lib/server/REPLServerClient.js +4 -1
- package/lib/server/REPLServerClient.js.map +1 -1
- package/lib/stores/LayoutManagerState.d.ts +1 -1
- package/lib/stores/LayoutManagerState.d.ts.map +1 -1
- package/lib/stores/LayoutManagerState.js +2 -2
- package/lib/stores/LayoutManagerState.js.map +1 -1
- package/lib/stores/REPLStore.d.ts +3 -3
- package/lib/stores/REPLStore.d.ts.map +1 -1
- package/lib/stores/REPLStore.js +4 -4
- package/lib/stores/REPLStore.js.map +1 -1
- package/lib/stores/dataCube/DataCubeEngine.d.ts +4 -2
- package/lib/stores/dataCube/DataCubeEngine.d.ts.map +1 -1
- package/lib/stores/dataCube/DataCubeEngine.js +13 -2
- package/lib/stores/dataCube/DataCubeEngine.js.map +1 -1
- package/lib/stores/dataCube/DataCubeState.d.ts +7 -4
- package/lib/stores/dataCube/DataCubeState.d.ts.map +1 -1
- package/lib/stores/dataCube/DataCubeState.js +12 -9
- package/lib/stores/dataCube/DataCubeState.js.map +1 -1
- package/lib/stores/dataCube/core/{DataCubeStaticContentDisplayState.d.ts → DataCubeInfoState.d.ts} +9 -4
- package/lib/stores/dataCube/core/DataCubeInfoState.d.ts.map +1 -0
- package/lib/stores/dataCube/core/{DataCubeStaticContentDisplayState.js → DataCubeInfoState.js} +11 -6
- package/lib/stores/dataCube/core/DataCubeInfoState.js.map +1 -0
- package/lib/stores/dataCube/core/DataCubeQueryBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryBuilder.js +18 -6
- package/lib/stores/dataCube/core/DataCubeQueryBuilder.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts +8 -3
- package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryEngine.js +15 -4
- package/lib/stores/dataCube/core/DataCubeQueryEngine.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts +3 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js +2 -3
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js.map +1 -1
- package/lib/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.d.ts +27 -0
- package/lib/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.d.ts.map +1 -0
- package/lib/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.js +20 -0
- package/lib/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.js.map +1 -0
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.d.ts +0 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.js +0 -19
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.js +4 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.js +4 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.js +4 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.js +4 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.js +14 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.js +4 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.js +3 -3
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.js +8 -3
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.js +12 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.js +7 -3
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.js +12 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.js +7 -3
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.js +14 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.js +14 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.js +12 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.js +7 -3
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.js +12 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.js +7 -3
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.js +4 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.js +4 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.js +14 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.js +4 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.js +3 -3
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.js +8 -3
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.js +4 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.js +4 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.js.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.js +4 -4
- package/lib/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts +0 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js +10 -40
- package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.d.ts +18 -2
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.js +80 -21
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsPanelState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts +0 -8
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js +2 -23
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js +4 -1
- package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts +14 -3
- package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorState.js +37 -4
- package/lib/stores/dataCube/editor/DataCubeEditorState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.js +9 -5
- package/lib/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts +3 -1
- package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js +28 -1
- package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js.map +1 -1
- package/lib/stores/dataCube/extend/DataCubeColumnEditorState.d.ts +61 -0
- package/lib/stores/dataCube/extend/DataCubeColumnEditorState.d.ts.map +1 -0
- package/lib/stores/dataCube/extend/DataCubeColumnEditorState.js +262 -0
- package/lib/stores/dataCube/extend/DataCubeColumnEditorState.js.map +1 -0
- package/lib/stores/dataCube/extend/DataCubeExtendManagerState.d.ts +45 -0
- package/lib/stores/dataCube/extend/DataCubeExtendManagerState.d.ts.map +1 -0
- package/lib/stores/dataCube/extend/DataCubeExtendManagerState.js +112 -0
- package/lib/stores/dataCube/extend/DataCubeExtendManagerState.js.map +1 -0
- package/lib/stores/dataCube/filter/DataCubeFilterEditorState.d.ts +6 -2
- package/lib/stores/dataCube/filter/DataCubeFilterEditorState.d.ts.map +1 -1
- package/lib/stores/dataCube/filter/DataCubeFilterEditorState.js +18 -5
- package/lib/stores/dataCube/filter/DataCubeFilterEditorState.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js +1 -2
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridClientExportEngine.js +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridClientExportEngine.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.js +10 -5
- package/lib/stores/dataCube/grid/DataCubeGridConfigurationBuilder.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridControllerState.d.ts +16 -10
- package/lib/stores/dataCube/grid/DataCubeGridControllerState.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridControllerState.js +28 -14
- package/lib/stores/dataCube/grid/DataCubeGridControllerState.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.js +34 -20
- package/lib/stores/dataCube/grid/DataCubeGridMenuBuilder.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js +1 -0
- package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts +2 -2
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js +3 -2
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridState.d.ts +15 -0
- package/lib/stores/dataCube/grid/DataCubeGridState.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridState.js +15 -0
- package/lib/stores/dataCube/grid/DataCubeGridState.js.map +1 -1
- package/package.json +10 -10
- package/src/components/dataCube/DataCube.tsx +4 -1
- package/src/components/dataCube/editor/DataCubeEditor.tsx +11 -3
- package/src/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.tsx +88 -25
- package/src/components/dataCube/editor/DataCubeEditorColumnsPanel.tsx +58 -12
- package/src/components/dataCube/editor/DataCubeEditorColumnsSelector.tsx +38 -34
- package/src/components/dataCube/editor/DataCubeEditorSortsPanel.tsx +1 -1
- package/src/components/dataCube/extend/DataCubeColumnEditor.tsx +362 -0
- package/src/components/repl/PureCodeEditor.tsx +91 -0
- package/src/server/REPLEngine.ts +33 -43
- package/src/server/REPLServerClient.ts +11 -1
- package/src/stores/LayoutManagerState.ts +2 -2
- package/src/stores/REPLStore.tsx +8 -10
- package/src/stores/dataCube/DataCubeEngine.ts +21 -2
- package/src/stores/dataCube/DataCubeState.ts +13 -9
- package/src/stores/dataCube/core/{DataCubeStaticContentDisplayState.ts → DataCubeInfoState.ts} +12 -7
- package/src/stores/dataCube/core/DataCubeQueryBuilder.ts +29 -10
- package/src/stores/dataCube/core/DataCubeQueryEngine.ts +19 -4
- package/src/stores/dataCube/core/DataCubeQuerySnapshot.ts +5 -1
- package/src/stores/dataCube/core/DataCubeQuerySnapshotBuilder.ts +2 -3
- package/src/stores/dataCube/core/aggregation/DataCubeQueryAggregationOperation.ts +40 -0
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation.ts +0 -23
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Contain.tsx +4 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.tsx +4 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWith.tsx +4 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.tsx +4 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__Equal.tsx +14 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.tsx +4 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.tsx +4 -5
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__EqualColumn.tsx +9 -5
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThan.tsx +12 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.tsx +8 -5
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.tsx +12 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.tsx +8 -5
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNotNull.tsx +15 -6
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__IsNull.tsx +15 -6
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThan.tsx +12 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanColumn.tsx +8 -5
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.tsx +12 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.tsx +8 -5
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotContain.tsx +4 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEndWith.tsx +4 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqual.tsx +14 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.tsx +4 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.tsx +4 -5
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.tsx +9 -5
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__NotStartWith.tsx +4 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWith.tsx +4 -3
- package/src/stores/dataCube/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.tsx +4 -3
- package/src/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.ts +18 -51
- package/src/stores/dataCube/editor/DataCubeEditorColumnsPanelState.ts +137 -31
- package/src/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.ts +2 -40
- package/src/stores/dataCube/editor/DataCubeEditorSortsPanelState.ts +9 -1
- package/src/stores/dataCube/editor/DataCubeEditorState.tsx +50 -5
- package/src/stores/dataCube/editor/DataCubeEditorVerticalPivotsPanelState.ts +14 -7
- package/src/stores/dataCube/editor/DataCubeMutableConfiguration.ts +32 -1
- package/src/stores/dataCube/extend/DataCubeColumnEditorState.tsx +364 -0
- package/src/stores/dataCube/extend/DataCubeExtendManagerState.tsx +169 -0
- package/src/stores/dataCube/filter/DataCubeFilterEditorState.tsx +21 -10
- package/src/stores/dataCube/grid/DataCubeGridClientEngine.ts +1 -2
- package/src/stores/dataCube/grid/DataCubeGridClientExportEngine.ts +1 -1
- package/src/stores/dataCube/grid/DataCubeGridConfigurationBuilder.tsx +18 -7
- package/src/stores/dataCube/grid/DataCubeGridControllerState.ts +37 -17
- package/src/stores/dataCube/grid/DataCubeGridMenuBuilder.tsx +36 -20
- package/src/stores/dataCube/grid/DataCubeGridQueryBuilder.ts +1 -0
- package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.ts +8 -1
- package/src/stores/dataCube/grid/DataCubeGridState.ts +15 -0
- package/tsconfig.json +8 -3
- package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.d.ts.map +0 -1
- package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js +0 -27
- package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js.map +0 -1
- package/lib/components/dataCube/filter/DataCubeEditorFilter.d.ts.map +0 -1
- package/lib/stores/dataCube/core/DataCubeStaticContentDisplayState.d.ts.map +0 -1
- package/lib/stores/dataCube/core/DataCubeStaticContentDisplayState.js.map +0 -1
- package/src/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.tsx +0 -45
- /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
|
+
}
|
package/src/server/REPLEngine.ts
CHANGED
|
@@ -14,41 +14,39 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { createModelSchema, custom,
|
|
18
|
-
import {
|
|
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
|
|
29
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}),
|
|
35
|
-
);
|
|
36
|
-
}
|
|
42
|
+
export type DataCubeInfrastructureInfo = {
|
|
43
|
+
gridClientLicense?: string | undefined;
|
|
44
|
+
};
|
|
37
45
|
|
|
38
|
-
export
|
|
39
|
-
query
|
|
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
|
-
|
|
63
|
+
baseQuery?: PlainObject<V1_ValueSpecification>;
|
|
66
64
|
};
|
|
67
65
|
|
|
68
|
-
export
|
|
69
|
-
query
|
|
66
|
+
export type DataCubeGetQueryRelationReturnTypeInput = {
|
|
67
|
+
query: PlainObject<V1_Lambda>;
|
|
68
|
+
};
|
|
70
69
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
);
|
|
76
|
-
}
|
|
70
|
+
export type DataCubeGetQueryCodeRelationReturnTypeInput = {
|
|
71
|
+
code: string;
|
|
72
|
+
baseQuery?: PlainObject<V1_ValueSpecification>;
|
|
73
|
+
};
|
|
77
74
|
|
|
78
|
-
export
|
|
79
|
-
query
|
|
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
|
|
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:
|
|
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
|
|
131
|
+
export class DisplayState {
|
|
132
132
|
readonly layoutManagerState: LayoutManagerState;
|
|
133
133
|
readonly configuration: LayoutConfiguration;
|
|
134
134
|
window?: WindowState | undefined;
|
package/src/stores/REPLStore.tsx
CHANGED
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
DEFAULT_SMALL_ALERT_WINDOW_CONFIG,
|
|
32
32
|
LayoutConfiguration,
|
|
33
33
|
LayoutManagerState,
|
|
34
|
-
|
|
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:
|
|
52
|
-
readonly documentationDisplay:
|
|
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
|
|
77
|
-
|
|
78
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
180
|
+
query: V1_ValueSpecification,
|
|
180
181
|
): Promise<CompletionItem[]> {
|
|
181
182
|
return (await this.client.getQueryTypeahead({
|
|
182
183
|
code,
|
|
183
|
-
|
|
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 {
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
98
|
+
this.info,
|
|
95
99
|
this.editor,
|
|
96
100
|
this.grid,
|
|
97
101
|
this.grid.controller,
|
|
98
102
|
this.filter,
|
|
99
|
-
|
|
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
|
|
119
|
+
message: `Initialization Failure: ${error.message}`,
|
|
116
120
|
prompt: `Resolve the issue and reload the application.`,
|
|
117
121
|
type: ActionAlertType.ERROR,
|
|
118
122
|
actions: [],
|
package/src/stores/dataCube/core/{DataCubeStaticContentDisplayState.ts → DataCubeInfoState.ts}
RENAMED
|
@@ -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
|
-
|
|
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
|
|
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.
|
|
50
|
-
this.
|
|
54
|
+
if (!this.editionStartTime) {
|
|
55
|
+
this.editionStartTime = snapshot.timestamp;
|
|
51
56
|
}
|
|
52
57
|
this.application.layoutService.setWindowTitle(
|
|
53
|
-
`\u229E ${data.name}${this.
|
|
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((
|
|
97
|
-
|
|
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((
|
|
159
|
-
|
|
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 = '
|
|
257
|
-
|
|
258
|
-
|
|
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
|
+
}
|