@finos/legend-cube-builder 0.0.4 → 0.0.5
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/README.md +9 -3
- package/docs/adding-an-operation.md +22 -12
- package/docs/demo/DEMO-FAST-NOTES.md +67 -0
- package/docs/demo/README.md +102 -0
- package/docs/demo/specs/duckdb-sales-pivot.cube.json +110 -0
- package/docs/demo/specs/trades-desks-1-joined.cube.json +123 -0
- package/docs/demo/specs/trades-desks-2-grouped.cube.json +140 -0
- package/docs/demo/specs/trades-desks-3-ranked.cube.json +158 -0
- package/docs/demo/specs/trades-desks-4-extended.cube.json +208 -0
- package/docs/demo/specs/trades-desks-5-final.cube.json +248 -0
- package/docs/hosting.md +50 -3
- package/docs/testing.md +32 -0
- package/lib/__lib__/LegendCubeCommand.d.ts +2 -0
- package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeCommand.js +7 -0
- package/lib/__lib__/LegendCubeCommand.js.map +1 -1
- package/lib/__lib__/LegendCubeFunctionLabels.d.ts +29 -0
- package/lib/__lib__/LegendCubeFunctionLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeFunctionLabels.js +31 -0
- package/lib/__lib__/LegendCubeFunctionLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeHelpText.d.ts +5 -1
- package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeHelpText.js +14 -2
- package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
- package/lib/__lib__/LegendCubeLabels.d.ts +100 -8
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeLabels.js +129 -14
- package/lib/__lib__/LegendCubeLabels.js.map +1 -1
- package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts +26 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.js +26 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeServiceLabels.d.ts +27 -0
- package/lib/__lib__/LegendCubeServiceLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeServiceLabels.js +32 -0
- package/lib/__lib__/LegendCubeServiceLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts +7 -0
- package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeTesting.js +7 -0
- package/lib/__lib__/LegendCubeTesting.js.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.js +2 -2
- package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +8 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.js +20 -3
- package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeFunctionTestOutline.d.ts +26 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.d.ts.map +1 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.js +56 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.js.map +1 -0
- package/lib/__test-utils__/CubeLambdaCorpus.d.ts +36 -0
- package/lib/__test-utils__/CubeLambdaCorpus.d.ts.map +1 -0
- package/lib/__test-utils__/CubeLambdaCorpus.js +83 -0
- package/lib/__test-utils__/CubeLambdaCorpus.js.map +1 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts +6 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubePageTestUtils.js +21 -0
- package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.d.ts +9 -0
- package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.js +16 -0
- package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.d.ts +5 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.js +17 -0
- package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +7 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.js +16 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -1
- package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts +26 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.js +40 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.js.map +1 -0
- package/lib/components/CubeAddItems.d.ts.map +1 -1
- package/lib/components/CubeAddItems.js +9 -6
- package/lib/components/CubeAddItems.js.map +1 -1
- package/lib/components/CubeDialogTheme.d.ts +25 -0
- package/lib/components/CubeDialogTheme.d.ts.map +1 -0
- package/lib/components/CubeDialogTheme.js +25 -0
- package/lib/components/CubeDialogTheme.js.map +1 -0
- package/lib/components/CubeEditor.d.ts +12 -1
- package/lib/components/CubeEditor.d.ts.map +1 -1
- package/lib/components/CubeEditor.js +16 -14
- package/lib/components/CubeEditor.js.map +1 -1
- package/lib/components/CubeFileMenu.d.ts +28 -0
- package/lib/components/CubeFileMenu.d.ts.map +1 -0
- package/lib/components/CubeFileMenu.js +77 -0
- package/lib/components/CubeFileMenu.js.map +1 -0
- package/lib/components/CubeLambdaImportBanner.d.ts +26 -0
- package/lib/components/CubeLambdaImportBanner.d.ts.map +1 -0
- package/lib/components/CubeLambdaImportBanner.js +47 -0
- package/lib/components/CubeLambdaImportBanner.js.map +1 -0
- package/lib/components/CubeNodeIcon.d.ts.map +1 -1
- package/lib/components/CubeNodeIcon.js +5 -1
- package/lib/components/CubeNodeIcon.js.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.js +2 -2
- package/lib/components/CubeSchemaColumnsTable.js.map +1 -1
- package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvas.js +38 -5
- package/lib/components/canvas/CubeCanvas.js.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js +2 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts +18 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.js +58 -3
- package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
- package/lib/components/canvas/CubeCanvasLayout.js +1 -1
- package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasNode.js +8 -4
- package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
- package/lib/components/dev-settings/CubeDevSettings.d.ts +35 -0
- package/lib/components/dev-settings/CubeDevSettings.d.ts.map +1 -0
- package/lib/components/dev-settings/CubeDevSettings.js +50 -0
- package/lib/components/dev-settings/CubeDevSettings.js.map +1 -0
- package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnChecklist.js +2 -2
- package/lib/components/editors/CubeColumnChecklist.js.map +1 -1
- package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnPicker.js +3 -3
- package/lib/components/editors/CubeColumnPicker.js.map +1 -1
- package/lib/components/editors/CubeConcatEditor.js +2 -2
- package/lib/components/editors/CubeConcatEditor.js.map +1 -1
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts +25 -0
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js +83 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js.map +1 -0
- package/lib/components/editors/CubeExtendEditor.d.ts +2 -0
- package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeExtendEditor.js +3 -3
- package/lib/components/editors/CubeExtendEditor.js.map +1 -1
- package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeFilterEditor.js +13 -2
- package/lib/components/editors/CubeFilterEditor.js.map +1 -1
- package/lib/components/editors/CubeFunctionSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeFunctionSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeFunctionSourceEditor.js +55 -0
- package/lib/components/editors/CubeFunctionSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeJoinEditor.js +16 -4
- package/lib/components/editors/CubeJoinEditor.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.js +18 -8
- package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts +5 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.js +10 -2
- package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js +9 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
- package/lib/components/editors/CubePivotEditor.d.ts +26 -0
- package/lib/components/editors/CubePivotEditor.d.ts.map +1 -0
- package/lib/components/editors/CubePivotEditor.js +93 -0
- package/lib/components/editors/CubePivotEditor.js.map +1 -0
- package/lib/components/editors/CubeRestrictEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeRestrictEditor.js +2 -2
- package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
- package/lib/components/editors/CubeServiceSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeServiceSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeServiceSourceEditor.js +41 -0
- package/lib/components/editors/CubeServiceSourceEditor.js.map +1 -0
- package/lib/components/grid/CubeColumnFormatDialog.d.ts +28 -0
- package/lib/components/grid/CubeColumnFormatDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeColumnFormatDialog.js +94 -0
- package/lib/components/grid/CubeColumnFormatDialog.js.map +1 -0
- package/lib/components/grid/CubeDrilldownBar.d.ts +37 -0
- package/lib/components/grid/CubeDrilldownBar.d.ts.map +1 -0
- package/lib/components/grid/CubeDrilldownBar.js +77 -0
- package/lib/components/grid/CubeDrilldownBar.js.map +1 -0
- package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
- package/lib/components/grid/CubeGridRegion.js +40 -26
- package/lib/components/grid/CubeGridRegion.js.map +1 -1
- package/lib/components/grid/CubeGridValues.d.ts +31 -1
- package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
- package/lib/components/grid/CubeGridValues.js +108 -1
- package/lib/components/grid/CubeGridValues.js.map +1 -1
- package/lib/components/grid/CubeResultGrid.d.ts +68 -5
- package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
- package/lib/components/grid/CubeResultGrid.js +308 -35
- package/lib/components/grid/CubeResultGrid.js.map +1 -1
- package/lib/components/grid/CubeRunStatsPanel.d.ts +28 -0
- package/lib/components/grid/CubeRunStatsPanel.d.ts.map +1 -0
- package/lib/components/grid/CubeRunStatsPanel.js +61 -0
- package/lib/components/grid/CubeRunStatsPanel.js.map +1 -0
- package/lib/components/grid/CubeServerSideGrid.d.ts +36 -0
- package/lib/components/grid/CubeServerSideGrid.d.ts.map +1 -0
- package/lib/components/grid/CubeServerSideGrid.js +114 -0
- package/lib/components/grid/CubeServerSideGrid.js.map +1 -0
- package/lib/components/grid/CubeSqlDialog.d.ts +24 -0
- package/lib/components/grid/CubeSqlDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeSqlDialog.js +39 -0
- package/lib/components/grid/CubeSqlDialog.js.map +1 -0
- package/lib/components/grid/CubeSqlFormat.d.ts +20 -0
- package/lib/components/grid/CubeSqlFormat.d.ts.map +1 -0
- package/lib/components/grid/CubeSqlFormat.js +32 -0
- package/lib/components/grid/CubeSqlFormat.js.map +1 -0
- package/lib/components/palette/CubePalette.d.ts.map +1 -1
- package/lib/components/palette/CubePalette.js +32 -13
- package/lib/components/palette/CubePalette.js.map +1 -1
- package/lib/components/show-pure/CubeShowPureDialog.d.ts +4 -1
- package/lib/components/show-pure/CubeShowPureDialog.d.ts.map +1 -1
- package/lib/components/show-pure/CubeShowPureDialog.js +8 -4
- package/lib/components/show-pure/CubeShowPureDialog.js.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.js +37 -16
- package/lib/components/source-picker/CubeDataProductTab.js.map +1 -1
- package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeDirectConnectionTab.js +6 -4
- package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -1
- package/lib/components/source-picker/CubeFunctionSteps.d.ts +36 -0
- package/lib/components/source-picker/CubeFunctionSteps.d.ts.map +1 -0
- package/lib/components/source-picker/CubeFunctionSteps.js +76 -0
- package/lib/components/source-picker/CubeFunctionSteps.js.map +1 -0
- package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeIngestTab.js +39 -16
- package/lib/components/source-picker/CubeIngestTab.js.map +1 -1
- package/lib/components/source-picker/CubeInlineModelTab.d.ts +3 -2
- package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeInlineModelTab.js +23 -13
- package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -1
- package/lib/components/source-picker/CubePickerListItem.d.ts +47 -0
- package/lib/components/source-picker/CubePickerListItem.d.ts.map +1 -0
- package/lib/components/source-picker/CubePickerListItem.js +62 -0
- package/lib/components/source-picker/CubePickerListItem.js.map +1 -0
- package/lib/components/source-picker/CubeProjectTab.d.ts +4 -3
- package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeProjectTab.js +7 -4
- package/lib/components/source-picker/CubeProjectTab.js.map +1 -1
- package/lib/components/source-picker/CubeServiceTab.d.ts +27 -0
- package/lib/components/source-picker/CubeServiceTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeServiceTab.js +36 -0
- package/lib/components/source-picker/CubeServiceTab.js.map +1 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
- package/lib/components/source-picker/CubeSourcePicker.js +16 -3
- package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
- package/lib/components/source-picker/CubeTablePreview.d.ts +29 -0
- package/lib/components/source-picker/CubeTablePreview.d.ts.map +1 -0
- package/lib/components/source-picker/CubeTablePreview.js +10 -0
- package/lib/components/source-picker/CubeTablePreview.js.map +1 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.d.ts +27 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.d.ts.map +1 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.js +38 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.js.map +1 -0
- package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts.map +1 -1
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js +9 -3
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
- package/lib/graph-manager/CubeDataProductCatalog.d.ts +10 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -1
- package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -1
- package/lib/graph-manager/CubeEngine.d.ts +46 -1
- package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/CubeEngine.js.map +1 -1
- package/lib/graph-manager/CubeEngineClientSettings.d.ts +43 -0
- package/lib/graph-manager/CubeEngineClientSettings.d.ts.map +1 -0
- package/lib/graph-manager/CubeEngineClientSettings.js +51 -0
- package/lib/graph-manager/CubeEngineClientSettings.js.map +1 -0
- package/lib/graph-manager/CubeIngest.d.ts +5 -0
- package/lib/graph-manager/CubeIngest.d.ts.map +1 -1
- package/lib/graph-manager/CubeIngest.js +10 -0
- package/lib/graph-manager/CubeIngest.js.map +1 -1
- package/lib/graph-manager/CubeIngestCatalog.d.ts +26 -0
- package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -1
- package/lib/graph-manager/CubeIngestCatalog.js +6 -0
- package/lib/graph-manager/CubeIngestCatalog.js.map +1 -1
- package/lib/graph-manager/CubeLakehouseRuntime.d.ts +29 -0
- package/lib/graph-manager/CubeLakehouseRuntime.d.ts.map +1 -0
- package/lib/graph-manager/CubeLakehouseRuntime.js +40 -0
- package/lib/graph-manager/CubeLakehouseRuntime.js.map +1 -0
- package/lib/graph-manager/CubeProjectCatalog.d.ts +3 -3
- package/lib/graph-manager/CubeService.d.ts +20 -0
- package/lib/graph-manager/CubeService.d.ts.map +1 -0
- package/lib/graph-manager/CubeService.js +22 -0
- package/lib/graph-manager/CubeService.js.map +1 -0
- package/lib/graph-manager/CubeServiceCatalog.d.ts +31 -0
- package/lib/graph-manager/CubeServiceCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeServiceCatalog.js +17 -0
- package/lib/graph-manager/CubeServiceCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +52 -5
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +63 -5
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +9 -6
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +12 -8
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts +30 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js +229 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +18 -9
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +4 -9
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts +34 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js +332 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +49 -10
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +3 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +18 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +74 -6
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +7 -4
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts +31 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js +69 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +6 -2
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +12 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -1
- package/lib/index.js.map +1 -1
- package/lib/stores/CubeAddPlacement.d.ts +10 -3
- package/lib/stores/CubeAddPlacement.d.ts.map +1 -1
- package/lib/stores/CubeAddPlacement.js +16 -5
- package/lib/stores/CubeAddPlacement.js.map +1 -1
- package/lib/stores/CubeDevSettingsState.d.ts +47 -0
- package/lib/stores/CubeDevSettingsState.d.ts.map +1 -0
- package/lib/stores/CubeDevSettingsState.js +99 -0
- package/lib/stores/CubeDevSettingsState.js.map +1 -0
- package/lib/stores/CubeEditorState.d.ts +173 -43
- package/lib/stores/CubeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeEditorState.js +498 -113
- package/lib/stores/CubeEditorState.js.map +1 -1
- package/lib/stores/CubeEngineChecks.d.ts +59 -0
- package/lib/stores/CubeEngineChecks.d.ts.map +1 -0
- package/lib/stores/CubeEngineChecks.js +100 -0
- package/lib/stores/CubeEngineChecks.js.map +1 -0
- package/lib/stores/CubeExamples.d.ts.map +1 -1
- package/lib/stores/CubeExamples.js +39 -2
- package/lib/stores/CubeExamples.js.map +1 -1
- package/lib/stores/CubeExamplesState.d.ts +1 -1
- package/lib/stores/CubeExamplesState.d.ts.map +1 -1
- package/lib/stores/CubeExamplesState.js +2 -2
- package/lib/stores/CubeExamplesState.js.map +1 -1
- package/lib/stores/CubeExecutionState.d.ts.map +1 -1
- package/lib/stores/CubeExecutionState.js +24 -33
- package/lib/stores/CubeExecutionState.js.map +1 -1
- package/lib/stores/CubeExportState.d.ts +41 -0
- package/lib/stores/CubeExportState.d.ts.map +1 -0
- package/lib/stores/CubeExportState.js +134 -0
- package/lib/stores/CubeExportState.js.map +1 -0
- package/lib/stores/CubeExpressionFilterCheck.d.ts +51 -0
- package/lib/stores/CubeExpressionFilterCheck.d.ts.map +1 -0
- package/lib/stores/CubeExpressionFilterCheck.js +134 -0
- package/lib/stores/CubeExpressionFilterCheck.js.map +1 -0
- package/lib/stores/CubeExtendTyping.d.ts +6 -14
- package/lib/stores/CubeExtendTyping.d.ts.map +1 -1
- package/lib/stores/CubeExtendTyping.js +6 -33
- package/lib/stores/CubeExtendTyping.js.map +1 -1
- package/lib/stores/CubeFunctionRecheck.d.ts +30 -0
- package/lib/stores/CubeFunctionRecheck.d.ts.map +1 -0
- package/lib/stores/CubeFunctionRecheck.js +67 -0
- package/lib/stores/CubeFunctionRecheck.js.map +1 -0
- package/lib/stores/CubeGridFetcher.d.ts +75 -0
- package/lib/stores/CubeGridFetcher.d.ts.map +1 -0
- package/lib/stores/CubeGridFetcher.js +197 -0
- package/lib/stores/CubeGridFetcher.js.map +1 -0
- package/lib/stores/CubeGridQuickActions.d.ts +18 -6
- package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
- package/lib/stores/CubeGridQuickActions.js +32 -12
- package/lib/stores/CubeGridQuickActions.js.map +1 -1
- package/lib/stores/CubeGridState.d.ts +136 -0
- package/lib/stores/CubeGridState.d.ts.map +1 -0
- package/lib/stores/CubeGridState.js +317 -0
- package/lib/stores/CubeGridState.js.map +1 -0
- package/lib/stores/CubeHost.d.ts +42 -0
- package/lib/stores/CubeHost.d.ts.map +1 -1
- package/lib/stores/CubeHost.js +4 -0
- package/lib/stores/CubeHost.js.map +1 -1
- package/lib/stores/CubeLambdaImportState.d.ts +118 -0
- package/lib/stores/CubeLambdaImportState.d.ts.map +1 -0
- package/lib/stores/CubeLambdaImportState.js +302 -0
- package/lib/stores/CubeLambdaImportState.js.map +1 -0
- package/lib/stores/CubeLambdaSources.d.ts +45 -0
- package/lib/stores/CubeLambdaSources.d.ts.map +1 -0
- package/lib/stores/CubeLambdaSources.js +261 -0
- package/lib/stores/CubeLambdaSources.js.map +1 -0
- package/lib/stores/CubeQueryRun.d.ts +59 -0
- package/lib/stores/CubeQueryRun.d.ts.map +1 -0
- package/lib/stores/CubeQueryRun.js +101 -0
- package/lib/stores/CubeQueryRun.js.map +1 -0
- package/lib/stores/CubeRunStatsState.d.ts +61 -0
- package/lib/stores/CubeRunStatsState.d.ts.map +1 -0
- package/lib/stores/CubeRunStatsState.js +54 -0
- package/lib/stores/CubeRunStatsState.js.map +1 -0
- package/lib/stores/CubeRunningStepLambda.d.ts +25 -0
- package/lib/stores/CubeRunningStepLambda.d.ts.map +1 -0
- package/lib/stores/CubeRunningStepLambda.js +45 -0
- package/lib/stores/CubeRunningStepLambda.js.map +1 -0
- package/lib/stores/CubeServiceRecheck.d.ts +29 -0
- package/lib/stores/CubeServiceRecheck.d.ts.map +1 -0
- package/lib/stores/CubeServiceRecheck.js +33 -0
- package/lib/stores/CubeServiceRecheck.js.map +1 -0
- package/lib/stores/CubeShowPureState.d.ts +14 -1
- package/lib/stores/CubeShowPureState.d.ts.map +1 -1
- package/lib/stores/CubeShowPureState.js +41 -11
- package/lib/stores/CubeShowPureState.js.map +1 -1
- package/lib/stores/CubeSourcePickerState.d.ts +20 -4
- package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
- package/lib/stores/CubeSourcePickerState.js +75 -14
- package/lib/stores/CubeSourcePickerState.js.map +1 -1
- package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
- package/lib/stores/LocalModelCatalog.js +3 -1
- package/lib/stores/LocalModelCatalog.js.map +1 -1
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts +91 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js +254 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js.map +1 -0
- package/lib/stores/editors/CubeFunctionDraft.d.ts +34 -0
- package/lib/stores/editors/CubeFunctionDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeFunctionDraft.js +69 -0
- package/lib/stores/editors/CubeFunctionDraft.js.map +1 -0
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +4 -2
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js +20 -3
- package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
- package/lib/stores/editors/CubePivotDraft.d.ts +93 -0
- package/lib/stores/editors/CubePivotDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubePivotDraft.js +267 -0
- package/lib/stores/editors/CubePivotDraft.js.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts +26 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js +46 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js.map +1 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts +4 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -1
- package/lib/stores/fixtures/CubeTradesModel.js +31 -1
- package/lib/stores/fixtures/CubeTradesModel.js.map +1 -1
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts +34 -5
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeDataProductTabState.js +111 -26
- package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +25 -2
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js +183 -31
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.d.ts +22 -9
- package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.js +84 -29
- package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +100 -4
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeInlineModelTabState.js +415 -28
- package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeProjectTabState.d.ts +18 -3
- package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeProjectTabState.js +26 -1
- package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeServiceTabState.d.ts +74 -0
- package/lib/stores/source-picker/CubeServiceTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeServiceTabState.js +216 -0
- package/lib/stores/source-picker/CubeServiceTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +15 -3
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeSourcePickerTab.js +21 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -1
- package/package.json +10 -9
- package/src/__lib__/LegendCubeCommand.ts +7 -0
- package/src/__lib__/LegendCubeFunctionLabels.ts +41 -0
- package/src/__lib__/LegendCubeHelpText.ts +23 -1
- package/src/__lib__/LegendCubeLabels.ts +170 -13
- package/src/__lib__/LegendCubeProjectSourceLabels.ts +26 -0
- package/src/__lib__/LegendCubeServiceLabels.ts +41 -0
- package/src/__lib__/LegendCubeTesting.ts +7 -0
- package/src/__test-utils__/CubeEngineTestSupport.ts +2 -1
- package/src/__test-utils__/CubeExpressionTestUtils.ts +29 -2
- package/src/__test-utils__/CubeFunctionTestOutline.ts +78 -0
- package/src/__test-utils__/CubeLambdaCorpus.ts +137 -0
- package/src/__test-utils__/CubePageTestUtils.tsx +34 -0
- package/src/__test-utils__/CubeTestApplication.ts +25 -0
- package/src/__test-utils__/FakeCubeEngine.ts +27 -0
- package/src/__test-utils__/FakeCubeIngestCatalog.ts +18 -0
- package/src/__test-utils__/FakeCubeServiceCatalog.ts +57 -0
- package/src/components/CubeAddItems.tsx +13 -6
- package/src/components/CubeDialogTheme.ts +25 -0
- package/src/components/CubeEditor.tsx +155 -129
- package/src/components/CubeFileMenu.tsx +127 -0
- package/src/components/CubeLambdaImportBanner.tsx +97 -0
- package/src/components/CubeNodeIcon.tsx +7 -0
- package/src/components/CubeSchemaColumnsTable.tsx +7 -2
- package/src/components/canvas/CubeCanvas.tsx +52 -13
- package/src/components/canvas/CubeCanvasContextMenu.tsx +33 -2
- package/src/components/canvas/CubeCanvasElements.ts +76 -3
- package/src/components/canvas/CubeCanvasLayout.ts +1 -1
- package/src/components/canvas/CubeCanvasNode.tsx +30 -3
- package/src/components/dev-settings/CubeDevSettings.tsx +154 -0
- package/src/components/editors/CubeColumnChecklist.tsx +8 -2
- package/src/components/editors/CubeColumnPicker.tsx +6 -3
- package/src/components/editors/CubeConcatEditor.tsx +2 -2
- package/src/components/editors/CubeExpressionFilterEditor.tsx +193 -0
- package/src/components/editors/CubeExtendEditor.tsx +3 -3
- package/src/components/editors/CubeFilterEditor.tsx +13 -1
- package/src/components/editors/CubeFunctionSourceEditor.tsx +140 -0
- package/src/components/editors/CubeJoinEditor.tsx +23 -4
- package/src/components/editors/CubeNodeEditorPanel.tsx +22 -10
- package/src/components/editors/CubeNodeEditorPopper.tsx +9 -1
- package/src/components/editors/CubeNodeEditorRegistry.ts +12 -0
- package/src/components/editors/CubePivotEditor.tsx +277 -0
- package/src/components/editors/CubeRestrictEditor.tsx +8 -2
- package/src/components/editors/CubeServiceSourceEditor.tsx +77 -0
- package/src/components/grid/CubeColumnFormatDialog.tsx +289 -0
- package/src/components/grid/CubeDrilldownBar.tsx +219 -0
- package/src/components/grid/CubeGridRegion.tsx +170 -54
- package/src/components/grid/CubeGridValues.ts +146 -1
- package/src/components/grid/CubeResultGrid.tsx +443 -41
- package/src/components/grid/CubeRunStatsPanel.tsx +156 -0
- package/src/components/grid/CubeServerSideGrid.tsx +200 -0
- package/src/components/grid/CubeSqlDialog.tsx +90 -0
- package/src/components/grid/CubeSqlFormat.ts +37 -0
- package/src/components/palette/CubePalette.tsx +45 -12
- package/src/components/show-pure/CubeShowPureDialog.tsx +19 -5
- package/src/components/source-picker/CubeDataProductTab.tsx +169 -75
- package/src/components/source-picker/CubeDirectConnectionTab.tsx +42 -30
- package/src/components/source-picker/CubeFunctionSteps.tsx +244 -0
- package/src/components/source-picker/CubeIngestTab.tsx +159 -79
- package/src/components/source-picker/CubeInlineModelTab.tsx +110 -81
- package/src/components/source-picker/CubePickerListItem.tsx +118 -0
- package/src/components/source-picker/CubeProjectTab.tsx +6 -3
- package/src/components/source-picker/CubeServiceTab.tsx +151 -0
- package/src/components/source-picker/CubeSourcePicker.tsx +54 -18
- package/src/components/source-picker/CubeTablePreview.tsx +49 -0
- package/src/components/spec-transfer/CubeImportPureDialog.tsx +122 -0
- package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +21 -8
- package/src/graph-manager/CubeDataProductCatalog.ts +11 -0
- package/src/graph-manager/CubeEngine.ts +51 -1
- package/src/graph-manager/CubeEngineClientSettings.ts +64 -0
- package/src/graph-manager/CubeIngest.ts +15 -0
- package/src/graph-manager/CubeIngestCatalog.ts +33 -0
- package/src/graph-manager/CubeLakehouseRuntime.ts +43 -0
- package/src/graph-manager/CubeProjectCatalog.ts +3 -3
- package/src/graph-manager/CubeService.ts +29 -0
- package/src/graph-manager/CubeServiceCatalog.ts +35 -0
- package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +115 -5
- package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +13 -7
- package/src/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.ts +312 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +35 -9
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +6 -15
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.ts +471 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +70 -15
- package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +3 -1
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +7 -1
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +122 -7
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +9 -4
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.ts +92 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +6 -1
- package/src/index.ts +32 -2
- package/src/stores/CubeAddPlacement.ts +25 -5
- package/src/stores/CubeDevSettingsState.ts +117 -0
- package/src/stores/CubeEditorState.ts +687 -197
- package/src/stores/CubeEngineChecks.ts +240 -0
- package/src/stores/CubeExamples.ts +70 -1
- package/src/stores/CubeExamplesState.ts +4 -2
- package/src/stores/CubeExecutionState.ts +26 -57
- package/src/stores/CubeExportState.ts +196 -0
- package/src/stores/CubeExpressionFilterCheck.ts +218 -0
- package/src/stores/CubeExtendTyping.ts +6 -46
- package/src/stores/CubeFunctionRecheck.ts +97 -0
- package/src/stores/CubeGridFetcher.ts +302 -0
- package/src/stores/CubeGridQuickActions.ts +33 -11
- package/src/stores/CubeGridState.ts +450 -0
- package/src/stores/CubeHost.ts +48 -0
- package/src/stores/CubeLambdaImportState.ts +434 -0
- package/src/stores/CubeLambdaSources.ts +390 -0
- package/src/stores/CubeQueryRun.ts +169 -0
- package/src/stores/CubeRunStatsState.ts +91 -0
- package/src/stores/CubeRunningStepLambda.ts +62 -0
- package/src/stores/CubeServiceRecheck.ts +53 -0
- package/src/stores/CubeShowPureState.ts +51 -12
- package/src/stores/CubeSourcePickerState.ts +89 -13
- package/src/stores/LocalModelCatalog.ts +6 -1
- package/src/stores/editors/CubeExpressionFilterDraft.ts +385 -0
- package/src/stores/editors/CubeFunctionDraft.ts +92 -0
- package/src/stores/editors/CubeNodeDraftRegistry.ts +27 -2
- package/src/stores/editors/CubePivotDraft.ts +355 -0
- package/src/stores/fixtures/CubeSalesDuckDbModel.ts +54 -0
- package/src/stores/fixtures/CubeTradesModel.ts +36 -1
- package/src/stores/source-picker/CubeDataProductTabState.ts +162 -35
- package/src/stores/source-picker/CubeDirectConnectionTabState.ts +246 -47
- package/src/stores/source-picker/CubeIngestTabState.ts +112 -38
- package/src/stores/source-picker/CubeInlineModelTabState.ts +514 -34
- package/src/stores/source-picker/CubeProjectTabState.ts +35 -3
- package/src/stores/source-picker/CubeServiceTabState.ts +288 -0
- package/src/stores/source-picker/CubeSourcePickerTab.ts +31 -2
- package/tsconfig.json +50 -0
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
18
|
AggregationFunction,
|
|
19
|
-
|
|
19
|
+
buildDrilldownKeyRule,
|
|
20
20
|
FilterOperator,
|
|
21
21
|
Filter,
|
|
22
22
|
foldColumnName,
|
|
@@ -66,12 +66,25 @@ export interface CubeGridQuickAction {
|
|
|
66
66
|
readonly apply: () => void;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
/** What a cell of the grid holds */
|
|
70
|
+
export enum CubeGridCellKind {
|
|
71
|
+
/** A run row's value, or a group row's key */
|
|
72
|
+
VALUE = 'value',
|
|
73
|
+
/** A group row's aggregation of its rows' values (PLAN §11.10) */
|
|
74
|
+
AGGREGATE = 'aggregate',
|
|
75
|
+
/** A group row's column with no aggregation: nothing */
|
|
76
|
+
EMPTY = 'empty',
|
|
77
|
+
}
|
|
78
|
+
|
|
69
79
|
/**
|
|
70
|
-
* The quick actions on a cell of the shown rows (spec §12.4, PLAN §11.4
|
|
71
|
-
* §11.5): "Sort by" adds an ascending Sort on the cell's column,
|
|
72
|
-
* Group by it with Count rows, and "Filter by" an Equal on its
|
|
73
|
-
* Empty on a null
|
|
74
|
-
*
|
|
80
|
+
* The quick actions on a cell of the shown rows (spec §12.4, PLAN §11.4,
|
|
81
|
+
* §11.5 and §11.10): "Sort by" adds an ascending Sort on the cell's column,
|
|
82
|
+
* "Group by" a Group by it with Count rows, and "Filter by" an Equal on its
|
|
83
|
+
* value (Is Empty on a null; on a float, In the value and its 32-bit value
|
|
84
|
+
* when they differ, so a `REAL` value is found, as a drill-down's key is,
|
|
85
|
+
* PLAN §11.14), after the node that runs, which they replace as
|
|
86
|
+
* the node that runs; a group row's cell other than its key has no value of a
|
|
87
|
+
* row, so "Filter by" is disabled there. All need the rows to be from the current query, no run in
|
|
75
88
|
* flight, and a cube that can change; "Sort by" and "Group by" a type that
|
|
76
89
|
* compares, and "Filter by" a value its column's type can compare.
|
|
77
90
|
* Read when the menu opens; `[]` when the position is not a column of the
|
|
@@ -81,6 +94,7 @@ export const getCubeGridQuickActions = (
|
|
|
81
94
|
editorState: CubeEditorState,
|
|
82
95
|
position: number,
|
|
83
96
|
cell: CubeResultValue,
|
|
97
|
+
cellKind = CubeGridCellKind.VALUE,
|
|
84
98
|
): CubeGridQuickAction[] => {
|
|
85
99
|
const { execution, document } = editorState;
|
|
86
100
|
const { result } = execution;
|
|
@@ -91,7 +105,10 @@ export const getCubeGridQuickActions = (
|
|
|
91
105
|
const { query } = document;
|
|
92
106
|
const afterId = query.selected;
|
|
93
107
|
const typeName = column.type.displayName;
|
|
94
|
-
const rule =
|
|
108
|
+
const rule =
|
|
109
|
+
cellKind === CubeGridCellKind.VALUE
|
|
110
|
+
? buildDrilldownKeyRule(column.name, column.type, cell)
|
|
111
|
+
: undefined;
|
|
95
112
|
// what keeps both from being used, in order
|
|
96
113
|
const blocked =
|
|
97
114
|
result.query !== query || execution.isStale
|
|
@@ -118,9 +135,13 @@ export const getCubeGridQuickActions = (
|
|
|
118
135
|
blocked ??
|
|
119
136
|
(rule
|
|
120
137
|
? undefined
|
|
121
|
-
:
|
|
122
|
-
? CUBE_QUICK_ACTION_DISABLED_REASON.
|
|
123
|
-
:
|
|
138
|
+
: cellKind === CubeGridCellKind.AGGREGATE
|
|
139
|
+
? CUBE_QUICK_ACTION_DISABLED_REASON.AGGREGATE_VALUE
|
|
140
|
+
: cellKind === CubeGridCellKind.EMPTY
|
|
141
|
+
? CUBE_QUICK_ACTION_DISABLED_REASON.NO_VALUE
|
|
142
|
+
: isOperatorAvailable(FilterOperator.EQUAL, column.type)
|
|
143
|
+
? CUBE_QUICK_ACTION_DISABLED_REASON.UNREADABLE_VALUE
|
|
144
|
+
: CUBE_QUICK_ACTION_DISABLED_REASON.notComparable(typeName));
|
|
124
145
|
return [
|
|
125
146
|
{
|
|
126
147
|
label: `Sort by "${column.name}"`,
|
|
@@ -163,7 +184,8 @@ export const getCubeGridQuickActions = (
|
|
|
163
184
|
label: `Filter by "${column.name}"`,
|
|
164
185
|
disabledReason: filterReason,
|
|
165
186
|
hint:
|
|
166
|
-
rule?.operator === FilterOperator.EQUAL
|
|
187
|
+
(rule?.operator === FilterOperator.EQUAL ||
|
|
188
|
+
rule?.operator === FilterOperator.IN) &&
|
|
167
189
|
column.type.family === TypeFamily.FLOAT
|
|
168
190
|
? FILTER_FLOAT_COMPARISON_HINT
|
|
169
191
|
: undefined,
|
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-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
|
+
addDrilldownLevel,
|
|
19
|
+
type AggregationFunction,
|
|
20
|
+
type CheckedDrilldown,
|
|
21
|
+
checkDrilldown,
|
|
22
|
+
type ColumnFormat,
|
|
23
|
+
type ColumnDirection,
|
|
24
|
+
type Drilldown,
|
|
25
|
+
type DrilldownCell,
|
|
26
|
+
foldColumnName,
|
|
27
|
+
isDrilldownLevelType,
|
|
28
|
+
isEmptyDrilldown,
|
|
29
|
+
removeDrilldownLevel,
|
|
30
|
+
setColumnFormat,
|
|
31
|
+
setDrilldownAggregation,
|
|
32
|
+
SortDirection,
|
|
33
|
+
} from '@finos/legend-cube';
|
|
34
|
+
import {
|
|
35
|
+
action,
|
|
36
|
+
computed,
|
|
37
|
+
makeObservable,
|
|
38
|
+
observable,
|
|
39
|
+
runInAction,
|
|
40
|
+
} from 'mobx';
|
|
41
|
+
import {
|
|
42
|
+
CUBE_DRILLDOWN_BLOCKER,
|
|
43
|
+
LEGEND_CUBE_USER_DATA_KEY,
|
|
44
|
+
READ_ONLY_CUBE_TITLE,
|
|
45
|
+
} from '../__lib__/LegendCubeLabels.js';
|
|
46
|
+
import {
|
|
47
|
+
CubeEngineError,
|
|
48
|
+
CubeEngineErrorKind,
|
|
49
|
+
type CubeResultValue,
|
|
50
|
+
} from '../graph-manager/CubeEngine.js';
|
|
51
|
+
import type { CubeEditorState } from './CubeEditorState.js';
|
|
52
|
+
import type { CubeExecutionResult } from './CubeExecutionState.js';
|
|
53
|
+
import { CubeGridFetchDropped } from './CubeGridFetcher.js';
|
|
54
|
+
|
|
55
|
+
/** How the grid shows a run (spec §12.1, PLAN §11.10) */
|
|
56
|
+
export enum CubeGridMode {
|
|
57
|
+
/** Each sort and drill-down level runs on the engine (the default) */
|
|
58
|
+
SERVER_SIDE = 'serverSide',
|
|
59
|
+
/** The run's rows, grouped, pivoted and filtered in the browser */
|
|
60
|
+
LOCAL = 'local',
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** The id ag-grid gives the column of the drill-down's groups */
|
|
64
|
+
export const CUBE_GRID_GROUP_COLUMN_ID = 'ag-Grid-AutoColumn';
|
|
65
|
+
|
|
66
|
+
/** A column's id in the grid: its position, as `c<position>` */
|
|
67
|
+
export const CUBE_GRID_COLUMN_ID_PREFIX = 'c';
|
|
68
|
+
|
|
69
|
+
/** A row of the server-side grid: a group of the drill-down, or a row of the run */
|
|
70
|
+
export interface CubeGridRowData {
|
|
71
|
+
/** Unique among the grid's rows: its group's keys, typed, or its group's and its position */
|
|
72
|
+
readonly id: string;
|
|
73
|
+
/** The keys of its group and the groups around it, outermost first, as the engine returned them */
|
|
74
|
+
readonly keys: readonly DrilldownCell[];
|
|
75
|
+
readonly isGroup: boolean;
|
|
76
|
+
/** Each run column's value, `undefined` where a group row shows none */
|
|
77
|
+
readonly cells: readonly (CubeResultValue | undefined)[];
|
|
78
|
+
/** On a group row, how many of the run's rows it holds */
|
|
79
|
+
readonly count?: number | undefined;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** A sort ag-grid asks for: a column's id and its direction */
|
|
83
|
+
export interface CubeGridSortRequest {
|
|
84
|
+
readonly colId: string;
|
|
85
|
+
readonly sort: 'asc' | 'desc';
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const NO_DRILLDOWN = Object.freeze({ columns: [], aggregations: [] });
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The grid's state beyond the run (PLAN §11.10): its mode, remembered for the
|
|
92
|
+
* user, and in server-side mode the rows of each level ag-grid asks for, from
|
|
93
|
+
* the run on screen (`CubeGridFetcher`), with what the levels say: an error,
|
|
94
|
+
* and whether a level was cut at the row limit.
|
|
95
|
+
*/
|
|
96
|
+
export class CubeGridState {
|
|
97
|
+
readonly editorState: CubeEditorState;
|
|
98
|
+
mode: CubeGridMode;
|
|
99
|
+
/** The last fetch's error, until the next fetch or a new run */
|
|
100
|
+
fetchError: CubeEngineError | undefined;
|
|
101
|
+
/** Some level shown was cut at the run's row limit */
|
|
102
|
+
hasLimitedLevel = false;
|
|
103
|
+
/** Fetches in flight */
|
|
104
|
+
fetching = 0;
|
|
105
|
+
/** The grid on screen: answers for an earlier one are left alone */
|
|
106
|
+
private gridToken = 0;
|
|
107
|
+
/** The drill-down's settings dialog is open */
|
|
108
|
+
isSettingsOpen = false;
|
|
109
|
+
/** The column whose format the Format Column dialog edits, while it is open */
|
|
110
|
+
formatColumn: string | undefined;
|
|
111
|
+
|
|
112
|
+
constructor(editorState: CubeEditorState) {
|
|
113
|
+
makeObservable(this, {
|
|
114
|
+
mode: observable,
|
|
115
|
+
fetchError: observable.ref,
|
|
116
|
+
hasLimitedLevel: observable,
|
|
117
|
+
fetching: observable,
|
|
118
|
+
drilldown: computed,
|
|
119
|
+
setMode: action,
|
|
120
|
+
addLevel: action,
|
|
121
|
+
removeLevel: action,
|
|
122
|
+
setAggregation: action,
|
|
123
|
+
clearDrilldown: action,
|
|
124
|
+
openSettings: action,
|
|
125
|
+
closeSettings: action,
|
|
126
|
+
isSettingsOpen: observable,
|
|
127
|
+
isSettingsShown: computed,
|
|
128
|
+
formatColumn: observable,
|
|
129
|
+
openFormat: action,
|
|
130
|
+
closeFormat: action,
|
|
131
|
+
setColumnFormat: action,
|
|
132
|
+
clearFetchError: action,
|
|
133
|
+
resetLevels: action,
|
|
134
|
+
});
|
|
135
|
+
this.editorState = editorState;
|
|
136
|
+
const stored =
|
|
137
|
+
editorState.host.applicationStore.userDataService.getStringValue(
|
|
138
|
+
LEGEND_CUBE_USER_DATA_KEY.GRID_MODE,
|
|
139
|
+
);
|
|
140
|
+
this.mode =
|
|
141
|
+
stored === CubeGridMode.LOCAL
|
|
142
|
+
? CubeGridMode.LOCAL
|
|
143
|
+
: CubeGridMode.SERVER_SIDE;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
get isServerSide(): boolean {
|
|
147
|
+
return this.mode === CubeGridMode.SERVER_SIDE;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** The cube's drill-down, checked against the run on screen; none without a run */
|
|
151
|
+
get drilldown(): CheckedDrilldown | undefined {
|
|
152
|
+
const { result } = this.editorState.execution;
|
|
153
|
+
return result
|
|
154
|
+
? checkDrilldown(
|
|
155
|
+
this.editorState.document.meta.drilldown ?? NO_DRILLDOWN,
|
|
156
|
+
result.schema,
|
|
157
|
+
)
|
|
158
|
+
: undefined;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Shows the run another way. Both modes show the same run, so nothing runs
|
|
163
|
+
* again: local mode shows its rows, server-side mode fetches what it needs
|
|
164
|
+
*/
|
|
165
|
+
setMode(mode: CubeGridMode): void {
|
|
166
|
+
this.mode = mode;
|
|
167
|
+
this.editorState.host.applicationStore.userDataService.persistValue(
|
|
168
|
+
LEGEND_CUBE_USER_DATA_KEY.GRID_MODE,
|
|
169
|
+
mode,
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Why 'Drilldown by' can't be used on the run's column, if it can't: a
|
|
175
|
+
* type that can't be grouped, a column that is a level already, a cube
|
|
176
|
+
* saved by a newer version
|
|
177
|
+
*/
|
|
178
|
+
getAddLevelBlocker(column: string): string | undefined {
|
|
179
|
+
const { editorState } = this;
|
|
180
|
+
const type = editorState.execution.result?.schema.type(column);
|
|
181
|
+
if (editorState.readOnly) {
|
|
182
|
+
return READ_ONLY_CUBE_TITLE;
|
|
183
|
+
}
|
|
184
|
+
if (!type || !isDrilldownLevelType(type)) {
|
|
185
|
+
return CUBE_DRILLDOWN_BLOCKER.notGroupable(type?.displayName ?? '');
|
|
186
|
+
}
|
|
187
|
+
return (editorState.document.meta.drilldown?.columns ?? []).some(
|
|
188
|
+
(level) => foldColumnName(level) === foldColumnName(column),
|
|
189
|
+
)
|
|
190
|
+
? CUBE_DRILLDOWN_BLOCKER.ALREADY_A_LEVEL
|
|
191
|
+
: undefined;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
private setDrilldown(drilldown: Drilldown | undefined): void {
|
|
195
|
+
const { editorState } = this;
|
|
196
|
+
const { meta } = editorState.document;
|
|
197
|
+
const { drilldown: _, ...others } = meta;
|
|
198
|
+
editorState.applyDocument(
|
|
199
|
+
editorState.document.withMeta(
|
|
200
|
+
isEmptyDrilldown(drilldown) ? others : { ...meta, drilldown },
|
|
201
|
+
),
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Adds the column as the drill-down's innermost level, an undo step that
|
|
207
|
+
* leaves the rows current (spec §12.4); the grid shows it server-side,
|
|
208
|
+
* the only mode with levels (spec §12.1)
|
|
209
|
+
*/
|
|
210
|
+
addLevel(column: string): void {
|
|
211
|
+
if (this.getAddLevelBlocker(column) !== undefined) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
this.setDrilldown(
|
|
215
|
+
addDrilldownLevel(this.editorState.document.meta.drilldown, column),
|
|
216
|
+
);
|
|
217
|
+
if (!this.isServerSide) {
|
|
218
|
+
this.setMode(CubeGridMode.SERVER_SIDE);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/** Removes the level at the position: the ones inside it move out */
|
|
223
|
+
removeLevel(index: number): void {
|
|
224
|
+
const { drilldown } = this.editorState.document.meta;
|
|
225
|
+
if (drilldown && !this.editorState.readOnly) {
|
|
226
|
+
this.setDrilldown(removeDrilldownLevel(drilldown, index));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/** Sets how a group row shows the run's column: a function, or nothing */
|
|
231
|
+
setAggregation(column: string, fn: AggregationFunction | null): void {
|
|
232
|
+
const type = this.editorState.execution.result?.schema.type(column);
|
|
233
|
+
if (type && !this.editorState.readOnly) {
|
|
234
|
+
this.setDrilldown(
|
|
235
|
+
setDrilldownAggregation(
|
|
236
|
+
this.editorState.document.meta.drilldown,
|
|
237
|
+
column,
|
|
238
|
+
type,
|
|
239
|
+
fn,
|
|
240
|
+
),
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/** Removes the drill-down: its levels and its aggregations */
|
|
246
|
+
clearDrilldown(): void {
|
|
247
|
+
if (!this.editorState.readOnly) {
|
|
248
|
+
this.closeSettings();
|
|
249
|
+
this.setDrilldown(undefined);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
openSettings(): void {
|
|
254
|
+
this.isSettingsOpen = true;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
closeSettings(): void {
|
|
258
|
+
this.isSettingsOpen = false;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
openFormat(column: string): void {
|
|
262
|
+
this.formatColumn = column;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
closeFormat(): void {
|
|
266
|
+
this.formatColumn = undefined;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Sets a number column's format, or removes it with `undefined`; with no
|
|
271
|
+
* column, the format of every number column (spec §13.1). An undo step
|
|
272
|
+
* that leaves the rows current.
|
|
273
|
+
*/
|
|
274
|
+
setColumnFormat(
|
|
275
|
+
column: string | undefined,
|
|
276
|
+
format: ColumnFormat | undefined,
|
|
277
|
+
): void {
|
|
278
|
+
const { editorState } = this;
|
|
279
|
+
if (editorState.readOnly) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const { meta } = editorState.document;
|
|
283
|
+
editorState.applyDocument(
|
|
284
|
+
editorState.document.withMeta({
|
|
285
|
+
...meta,
|
|
286
|
+
presentation: {
|
|
287
|
+
...meta.presentation,
|
|
288
|
+
columnHints: setColumnFormat(
|
|
289
|
+
meta.presentation.columnHints ?? [],
|
|
290
|
+
column,
|
|
291
|
+
format,
|
|
292
|
+
),
|
|
293
|
+
},
|
|
294
|
+
}),
|
|
295
|
+
);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
clearFetchError(): void {
|
|
299
|
+
this.fetchError = undefined;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/** A new grid on screen: what earlier levels said is forgotten */
|
|
303
|
+
resetLevels(): void {
|
|
304
|
+
this.fetchError = undefined;
|
|
305
|
+
this.hasLimitedLevel = false;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* A new grid, for a new run or drill-down, taking its token for
|
|
310
|
+
* `loadRows`: the earlier grid's answers, still on their way, are then left
|
|
311
|
+
* alone, saying nothing (PLAN §11.10). Not observable, so a grid takes it
|
|
312
|
+
* as it renders, before its first request.
|
|
313
|
+
*/
|
|
314
|
+
beginGrid(): number {
|
|
315
|
+
this.gridToken += 1;
|
|
316
|
+
return this.gridToken;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/** The drill-down's settings dialog shows: asked for, on a run with a drill-down */
|
|
320
|
+
get isSettingsShown(): boolean {
|
|
321
|
+
return (
|
|
322
|
+
this.isSettingsOpen &&
|
|
323
|
+
this.drilldown !== undefined &&
|
|
324
|
+
!isEmptyDrilldown(this.editorState.document.meta.drilldown)
|
|
325
|
+
);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* The sort ag-grid asks for, by the run's column names: a column by its
|
|
330
|
+
* position; the groups' column by the level's own column at a group level,
|
|
331
|
+
* and not at all at the leaf
|
|
332
|
+
*/
|
|
333
|
+
toSorts(
|
|
334
|
+
result: CubeExecutionResult,
|
|
335
|
+
sortModel: readonly CubeGridSortRequest[],
|
|
336
|
+
depth: number,
|
|
337
|
+
): ColumnDirection[] {
|
|
338
|
+
const levels = this.drilldown?.columns ?? [];
|
|
339
|
+
return sortModel.flatMap(({ colId, sort }): ColumnDirection[] => {
|
|
340
|
+
const direction =
|
|
341
|
+
sort === 'desc' ? SortDirection.DESC : SortDirection.ASC;
|
|
342
|
+
if (colId === CUBE_GRID_GROUP_COLUMN_ID) {
|
|
343
|
+
const column = levels[depth];
|
|
344
|
+
return column === undefined ? [] : [{ column, direction }];
|
|
345
|
+
}
|
|
346
|
+
const column = colId.startsWith(CUBE_GRID_COLUMN_ID_PREFIX)
|
|
347
|
+
? result.schema.columns[
|
|
348
|
+
Number(colId.slice(CUBE_GRID_COLUMN_ID_PREFIX.length))
|
|
349
|
+
]
|
|
350
|
+
: undefined;
|
|
351
|
+
return column ? [{ column: column.name, direction }] : [];
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* The rows under a group, by its keys (none for the top level), sorted as
|
|
357
|
+
* ag-grid asks. The run's own rows when nothing is derived (no drill-down
|
|
358
|
+
* level, no sort), else a fetched level. Resolves to `undefined` for rows
|
|
359
|
+
* the grid no longer shows, which are then left alone.
|
|
360
|
+
*/
|
|
361
|
+
async loadRows(
|
|
362
|
+
result: CubeExecutionResult,
|
|
363
|
+
keys: readonly DrilldownCell[],
|
|
364
|
+
sortModel: readonly CubeGridSortRequest[],
|
|
365
|
+
token = this.gridToken,
|
|
366
|
+
): Promise<CubeGridRowData[] | undefined> {
|
|
367
|
+
const parentId = JSON.stringify(keys);
|
|
368
|
+
const sorts = this.toSorts(result, sortModel, keys.length);
|
|
369
|
+
if (!keys.length && !this.drilldown?.columns.length && !sorts.length) {
|
|
370
|
+
return result.rows.map((row, index) => ({
|
|
371
|
+
id: `${parentId}#${index}`,
|
|
372
|
+
keys,
|
|
373
|
+
isGroup: false,
|
|
374
|
+
cells: row,
|
|
375
|
+
}));
|
|
376
|
+
}
|
|
377
|
+
this.track(1);
|
|
378
|
+
try {
|
|
379
|
+
const level = await this.editorState.gridFetcher.fetchLevel(
|
|
380
|
+
result,
|
|
381
|
+
keys,
|
|
382
|
+
sorts,
|
|
383
|
+
);
|
|
384
|
+
if (token !== this.gridToken) {
|
|
385
|
+
return undefined;
|
|
386
|
+
}
|
|
387
|
+
this.noteLevel(level.limited);
|
|
388
|
+
const levels = this.drilldown?.columns ?? [];
|
|
389
|
+
const keyAt = level.level.isLeaf
|
|
390
|
+
? -1
|
|
391
|
+
: result.schema.names().indexOf(levels[keys.length] as string);
|
|
392
|
+
return level.rows.map((row, index) => {
|
|
393
|
+
if (level.level.isLeaf) {
|
|
394
|
+
return {
|
|
395
|
+
id: `${parentId}#${index}`,
|
|
396
|
+
keys,
|
|
397
|
+
isGroup: false,
|
|
398
|
+
cells: row.cells,
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
const groupKeys = [...keys, row.cells[keyAt] ?? null];
|
|
402
|
+
return {
|
|
403
|
+
id: JSON.stringify(groupKeys),
|
|
404
|
+
keys: groupKeys,
|
|
405
|
+
isGroup: true,
|
|
406
|
+
cells: row.cells,
|
|
407
|
+
count: row.count,
|
|
408
|
+
};
|
|
409
|
+
});
|
|
410
|
+
} catch (error) {
|
|
411
|
+
if (error instanceof CubeGridFetchDropped || token !== this.gridToken) {
|
|
412
|
+
return undefined;
|
|
413
|
+
}
|
|
414
|
+
this.noteError(
|
|
415
|
+
error instanceof CubeEngineError
|
|
416
|
+
? error
|
|
417
|
+
: new CubeEngineError(
|
|
418
|
+
CubeEngineErrorKind.EXECUTION,
|
|
419
|
+
error instanceof Error ? error.message : String(error),
|
|
420
|
+
),
|
|
421
|
+
);
|
|
422
|
+
throw error;
|
|
423
|
+
} finally {
|
|
424
|
+
this.track(-1);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
private track(change: number): void {
|
|
429
|
+
runInAction(() => {
|
|
430
|
+
this.fetching += change;
|
|
431
|
+
if (change > 0) {
|
|
432
|
+
this.fetchError = undefined;
|
|
433
|
+
}
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
private noteLevel(limited: boolean): void {
|
|
438
|
+
if (limited) {
|
|
439
|
+
runInAction(() => {
|
|
440
|
+
this.hasLimitedLevel = true;
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
private noteError(error: CubeEngineError): void {
|
|
446
|
+
runInAction(() => {
|
|
447
|
+
this.fetchError = error;
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
}
|
package/src/stores/CubeHost.ts
CHANGED
|
@@ -18,6 +18,7 @@ import type { GenericLegendApplicationStore } from '@finos/legend-application';
|
|
|
18
18
|
import type { ModelContext } from '@finos/legend-cube';
|
|
19
19
|
import type { CubeConnectionExplorer } from '../graph-manager/CubeConnectionExplorer.js';
|
|
20
20
|
import type { CubeDataProductCatalog } from '../graph-manager/CubeDataProductCatalog.js';
|
|
21
|
+
import type { CubeEngineClientSettings } from '../graph-manager/CubeEngineClientSettings.js';
|
|
21
22
|
import type { CubeIngestCatalog } from '../graph-manager/CubeIngestCatalog.js';
|
|
22
23
|
import {
|
|
23
24
|
CubeEngineError,
|
|
@@ -31,6 +32,7 @@ import {
|
|
|
31
32
|
isCubeProjectModel,
|
|
32
33
|
} from '../graph-manager/CubeProject.js';
|
|
33
34
|
import type { CubeProjectCatalog } from '../graph-manager/CubeProjectCatalog.js';
|
|
35
|
+
import type { CubeServiceCatalog } from '../graph-manager/CubeServiceCatalog.js';
|
|
34
36
|
import type { LocalModelCatalog } from './LocalModelCatalog.js';
|
|
35
37
|
|
|
36
38
|
/**
|
|
@@ -64,8 +66,54 @@ export interface CubeHost {
|
|
|
64
66
|
* source dialog offers no projects
|
|
65
67
|
*/
|
|
66
68
|
readonly projectCatalog?: CubeProjectCatalog | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* The deployed services (PLAN §6.4), in progress; without one, the source
|
|
71
|
+
* dialog offers no services
|
|
72
|
+
*/
|
|
73
|
+
readonly serviceCatalog?: CubeServiceCatalog | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* The engine URL and request compression its engine clients share, which
|
|
76
|
+
* Dev Settings changes (PLAN §11.16); without them, Dev Settings can't
|
|
77
|
+
* change either
|
|
78
|
+
*/
|
|
79
|
+
readonly engineClientSettings?: CubeEngineClientSettings | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* Whether the page offers Cube's sample data: the source dialog's Sample
|
|
82
|
+
* Data tab and the Examples. Offered unless the host says no, as Studio
|
|
83
|
+
* does, where a cube reads only the project's ingest definitions
|
|
84
|
+
*/
|
|
85
|
+
readonly offersSampleData?: boolean | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* The one project whose own sources the page reads, e.g. the one Studio
|
|
88
|
+
* edits: the source dialog lists its ingest definitions and data products
|
|
89
|
+
* by name and path, with no class, deployment or search across the
|
|
90
|
+
* platform, and says which lakehouse runtime its runs use
|
|
91
|
+
*/
|
|
92
|
+
readonly project?: CubeHostProject | undefined;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** The lakehouse runtime a project's runs use, as the source dialog shows it */
|
|
96
|
+
export interface CubeHostProjectRuntime {
|
|
97
|
+
/** e.g. `demo-dev, from demo::ingest::LakehouseRuntime` */
|
|
98
|
+
readonly label: string;
|
|
99
|
+
/** The warehouse a new cube starts on, when the runtime names one */
|
|
100
|
+
readonly warehouse?: string | undefined;
|
|
67
101
|
}
|
|
68
102
|
|
|
103
|
+
/** The one project a host's page reads the sources of (`CubeHost.project`) */
|
|
104
|
+
export interface CubeHostProject {
|
|
105
|
+
/** Its lakehouse runtime; fails with a `CubeEngineError` saying why when it has none */
|
|
106
|
+
resolveRuntime(): Promise<CubeHostProjectRuntime>;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Whether the host's page reads one project's own sources, as Studio's does */
|
|
110
|
+
export const isCubeProjectHost = (host: CubeHost): boolean =>
|
|
111
|
+
host.project !== undefined;
|
|
112
|
+
|
|
113
|
+
/** Whether the host offers Cube's sample data and examples */
|
|
114
|
+
export const isCubeSampleDataOffered = (host: CubeHost): boolean =>
|
|
115
|
+
host.offersSampleData !== false;
|
|
116
|
+
|
|
69
117
|
/** Why the host can't list a project model's Databases */
|
|
70
118
|
const NO_PROJECT_CATALOG =
|
|
71
119
|
"This page can't read published projects: its host has no depot";
|