@finos/legend-application-repl 0.0.30 → 0.0.32
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/LegendREPLFrameworkProvider.js +1 -1
- package/lib/components/LegendREPLFrameworkProvider.js.map +1 -1
- package/lib/components/REPLStoreProvider.d.ts +1 -1
- package/lib/components/REPLStoreProvider.d.ts.map +1 -1
- package/lib/components/REPLStoreProvider.js +1 -1
- package/lib/components/REPLStoreProvider.js.map +1 -1
- package/lib/components/REPLWindow.d.ts +33 -0
- package/lib/components/REPLWindow.d.ts.map +1 -0
- package/lib/components/REPLWindow.js +117 -0
- package/lib/components/REPLWindow.js.map +1 -0
- package/lib/components/dataCube/DataCube.d.ts.map +1 -1
- package/lib/components/dataCube/DataCube.js +13 -9
- 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 +13 -90
- package/lib/components/dataCube/editor/DataCubeEditor.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorCodePanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorCodePanel.js +3 -2
- package/lib/components/dataCube/editor/DataCubeEditorCodePanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js +237 -6
- package/lib/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js +2 -2
- package/lib/components/dataCube/editor/DataCubeEditorColumnsPanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts +5 -0
- package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js +130 -48
- package/lib/components/dataCube/editor/DataCubeEditorColumnsSelector.js.map +1 -1
- package/lib/{stores/dataCube/DataCubeDefaultConfig.d.ts → components/dataCube/editor/DataCubeEditorDeveloperPanel.d.ts} +4 -2
- package/lib/components/dataCube/editor/DataCubeEditorDeveloperPanel.d.ts.map +1 -0
- package/lib/components/dataCube/editor/DataCubeEditorDeveloperPanel.js +28 -0
- package/lib/components/dataCube/editor/DataCubeEditorDeveloperPanel.js.map +1 -0
- package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js +3 -2
- package/lib/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.js +3 -2
- package/lib/components/dataCube/editor/DataCubeEditorFilterPanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js +145 -5
- package/lib/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.js +3 -2
- package/lib/components/dataCube/editor/DataCubeEditorHPivotsPanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorShared.d.ts +47 -0
- package/lib/components/dataCube/editor/DataCubeEditorShared.d.ts.map +1 -0
- package/lib/components/dataCube/editor/DataCubeEditorShared.js +188 -0
- package/lib/components/dataCube/editor/DataCubeEditorShared.js.map +1 -0
- package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js +36 -3
- package/lib/components/dataCube/editor/DataCubeEditorSortsPanel.js.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.d.ts.map +1 -1
- package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.js +3 -2
- package/lib/components/dataCube/editor/DataCubeEditorVPivotsPanel.js.map +1 -1
- package/lib/components/dataCube/grid/DataCubeGrid.d.ts +3 -0
- package/lib/components/dataCube/grid/DataCubeGrid.d.ts.map +1 -1
- package/lib/components/dataCube/grid/DataCubeGrid.js +190 -63
- package/lib/components/dataCube/grid/DataCubeGrid.js.map +1 -1
- package/lib/{stores/dataCube/DataCubeDefaultConfig.js → components/dataCube/grid/DataCubeGridShared.d.ts} +3 -2
- package/lib/components/dataCube/grid/DataCubeGridShared.d.ts.map +1 -0
- package/lib/components/dataCube/grid/DataCubeGridShared.js +25 -0
- package/lib/components/dataCube/grid/DataCubeGridShared.js.map +1 -0
- package/lib/components/dataCube/grid/menu/DataCubeGridMenu.d.ts +23 -0
- package/lib/components/dataCube/grid/menu/DataCubeGridMenu.d.ts.map +1 -0
- package/lib/components/dataCube/grid/menu/DataCubeGridMenu.js +413 -0
- package/lib/components/dataCube/grid/menu/DataCubeGridMenu.js.map +1 -0
- package/{src/stores/dataCube/DataCubeDefaultConfig.ts → lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.d.ts} +4 -2
- package/lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.d.ts.map +1 -0
- package/lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.js +83 -0
- package/lib/components/dataCube/grid/menu/DataCubeGridSortsMenu.js.map +1 -0
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +14 -12
- package/lib/server/models/DataCubeQuery.d.ts +3 -5
- package/lib/server/models/DataCubeQuery.d.ts.map +1 -1
- package/lib/server/models/DataCubeQuery.js +0 -2
- package/lib/server/models/DataCubeQuery.js.map +1 -1
- package/lib/stores/{dataCube/REPLStore.d.ts → REPLStore.d.ts} +6 -4
- package/lib/stores/REPLStore.d.ts.map +1 -0
- package/lib/stores/{dataCube/REPLStore.js → REPLStore.js} +8 -5
- package/lib/stores/REPLStore.js.map +1 -0
- package/lib/stores/dataCube/{core/DataCubeEngine.d.ts → DataCubeInfrastructure.d.ts} +20 -4
- package/lib/stores/dataCube/DataCubeInfrastructure.d.ts.map +1 -0
- package/lib/stores/dataCube/{core/DataCubeEngine.js → DataCubeInfrastructure.js} +31 -3
- package/lib/stores/dataCube/DataCubeInfrastructure.js.map +1 -0
- package/lib/stores/dataCube/DataCubeState.d.ts +14 -5
- package/lib/stores/dataCube/DataCubeState.d.ts.map +1 -1
- package/lib/stores/dataCube/DataCubeState.js +37 -9
- package/lib/stores/dataCube/DataCubeState.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeConfiguration.d.ts +93 -0
- package/lib/stores/dataCube/core/DataCubeConfiguration.d.ts.map +1 -0
- package/lib/stores/dataCube/core/DataCubeConfiguration.js +167 -0
- package/lib/stores/dataCube/core/DataCubeConfiguration.js.map +1 -0
- package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.d.ts +25 -0
- package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.d.ts.map +1 -0
- package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.js +45 -0
- package/lib/stores/dataCube/core/DataCubeConfigurationBuilder.js.map +1 -0
- package/lib/stores/dataCube/core/DataCubeCoreState.d.ts +1 -1
- package/lib/stores/dataCube/core/DataCubeCoreState.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeCoreState.js +4 -4
- package/lib/stores/dataCube/core/DataCubeCoreState.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryBuilder.js +12 -12
- package/lib/stores/dataCube/core/DataCubeQueryBuilder.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts +99 -4
- package/lib/stores/dataCube/core/DataCubeQueryEngine.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryEngine.js +149 -3
- package/lib/stores/dataCube/core/DataCubeQueryEngine.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts +19 -5
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js +36 -6
- 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 +42 -23
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotBuilder.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.js +6 -2
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotManager.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.d.ts +1 -3
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.js +2 -3
- package/lib/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.d.ts +3 -1
- package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.js +4 -2
- package/lib/stores/dataCube/editor/DataCubeEditorCodePanelState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts +36 -0
- package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.d.ts.map +1 -0
- package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js +66 -0
- package/lib/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.js.map +1 -0
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts +3 -0
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js +10 -0
- package/lib/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.d.ts +8 -3
- package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.js +20 -24
- package/lib/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorHPivotPanelState.d.ts +27 -0
- package/lib/stores/dataCube/editor/DataCubeEditorHPivotPanelState.d.ts.map +1 -0
- package/lib/stores/dataCube/editor/DataCubeEditorHPivotPanelState.js +30 -0
- package/lib/stores/dataCube/editor/DataCubeEditorHPivotPanelState.js.map +1 -0
- package/lib/stores/dataCube/editor/DataCubeEditorPanelState.d.ts +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorPanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts +13 -6
- package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js +64 -19
- package/lib/stores/dataCube/editor/DataCubeEditorSortsPanelState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts +8 -4
- package/lib/stores/dataCube/editor/DataCubeEditorState.d.ts.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeEditorState.js +26 -17
- package/lib/stores/dataCube/editor/DataCubeEditorState.js.map +1 -1
- package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts +100 -0
- package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.d.ts.map +1 -0
- package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js +450 -0
- package/lib/stores/dataCube/editor/DataCubeMutableConfiguration.js.map +1 -0
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts +39 -2
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js +63 -3
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js +0 -9
- package/lib/stores/dataCube/grid/DataCubeGridQueryBuilder.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.d.ts +4 -1
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js +330 -38
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js +16 -28
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridState.d.ts +16 -2
- package/lib/stores/dataCube/grid/DataCubeGridState.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridState.js +51 -21
- package/lib/stores/dataCube/grid/DataCubeGridState.js.map +1 -1
- package/package.json +20 -18
- package/src/components/LegendREPLFrameworkProvider.tsx +1 -1
- package/src/components/REPLStoreProvider.tsx +1 -1
- package/src/components/REPLWindow.tsx +179 -0
- package/src/components/dataCube/DataCube.tsx +44 -23
- package/src/components/dataCube/editor/DataCubeEditor.tsx +80 -186
- package/src/components/dataCube/editor/DataCubeEditorCodePanel.tsx +4 -2
- package/src/components/dataCube/editor/DataCubeEditorColumnPropertiesPanel.tsx +1044 -13
- package/src/components/dataCube/editor/DataCubeEditorColumnsPanel.tsx +2 -2
- package/src/components/dataCube/editor/DataCubeEditorColumnsSelector.tsx +264 -51
- package/src/components/dataCube/editor/DataCubeEditorDeveloperPanel.tsx +43 -0
- package/src/components/dataCube/editor/DataCubeEditorExtendedColumnsPanel.tsx +4 -2
- package/src/components/dataCube/editor/DataCubeEditorFilterPanel.tsx +4 -2
- package/src/components/dataCube/editor/DataCubeEditorGeneralPropertiesPanel.tsx +743 -13
- package/src/components/dataCube/editor/DataCubeEditorHPivotsPanel.tsx +4 -2
- package/src/components/dataCube/editor/DataCubeEditorShared.tsx +484 -0
- package/src/components/dataCube/editor/DataCubeEditorSortsPanel.tsx +103 -4
- package/src/components/dataCube/editor/DataCubeEditorVPivotsPanel.tsx +4 -2
- package/src/components/dataCube/grid/DataCubeGrid.tsx +314 -120
- package/src/components/dataCube/grid/DataCubeGridShared.tsx +45 -0
- package/src/components/dataCube/grid/menu/DataCubeGridMenu.tsx +441 -0
- package/src/components/dataCube/grid/menu/DataCubeGridSortsMenu.tsx +119 -0
- package/src/server/models/DataCubeQuery.ts +2 -6
- package/src/stores/{dataCube/REPLStore.ts → REPLStore.ts} +9 -6
- package/src/stores/dataCube/{core/DataCubeEngine.ts → DataCubeInfrastructure.ts} +40 -3
- package/src/stores/dataCube/DataCubeState.ts +44 -10
- package/src/stores/dataCube/core/DataCubeConfiguration.ts +220 -0
- package/src/stores/dataCube/core/DataCubeConfigurationBuilder.ts +60 -0
- package/src/stores/dataCube/core/DataCubeCoreState.ts +7 -4
- package/src/stores/dataCube/core/DataCubeQueryBuilder.ts +18 -18
- package/src/stores/dataCube/core/DataCubeQueryEngine.ts +157 -4
- package/src/stores/dataCube/core/DataCubeQuerySnapshot.ts +43 -6
- package/src/stores/dataCube/core/DataCubeQuerySnapshotBuilder.ts +49 -29
- package/src/stores/dataCube/core/DataCubeQuerySnapshotManager.ts +9 -2
- package/src/stores/dataCube/core/DataCubeQuerySnapshotSubscriber.ts +6 -5
- package/src/stores/dataCube/editor/DataCubeEditorCodePanelState.ts +5 -2
- package/src/stores/dataCube/editor/DataCubeEditorColumnPropertiesPanelState.ts +96 -0
- package/src/stores/dataCube/editor/DataCubeEditorColumnsSelectorState.ts +12 -0
- package/src/stores/dataCube/editor/DataCubeEditorGeneralPropertiesPanelState.ts +31 -28
- package/src/stores/dataCube/editor/DataCubeEditorHPivotPanelState.ts +43 -0
- package/src/stores/dataCube/editor/DataCubeEditorPanelState.ts +1 -1
- package/src/stores/dataCube/editor/DataCubeEditorSortsPanelState.ts +92 -25
- package/src/stores/dataCube/editor/DataCubeEditorState.ts +32 -18
- package/src/stores/dataCube/editor/DataCubeMutableConfiguration.ts +641 -0
- package/src/stores/dataCube/grid/DataCubeGridClientEngine.ts +88 -3
- package/src/stores/dataCube/grid/DataCubeGridQueryBuilder.ts +0 -10
- package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.tsx +494 -45
- package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotBuilder.ts +16 -36
- package/src/stores/dataCube/grid/DataCubeGridState.ts +73 -20
- package/tsconfig.json +13 -3
- package/lib/stores/dataCube/DataCubeDefaultConfig.d.ts.map +0 -1
- package/lib/stores/dataCube/DataCubeDefaultConfig.js.map +0 -1
- package/lib/stores/dataCube/REPLStore.d.ts.map +0 -1
- package/lib/stores/dataCube/REPLStore.js.map +0 -1
- package/lib/stores/dataCube/core/DataCubeEngine.d.ts.map +0 -1
- package/lib/stores/dataCube/core/DataCubeEngine.js.map +0 -1
|
@@ -21,12 +21,12 @@ import { useEffect } from 'react';
|
|
|
21
21
|
|
|
22
22
|
export const DataCubeEditorColumnsPanel = observer(() => {
|
|
23
23
|
const replStore = useREPLStore();
|
|
24
|
-
const panel = replStore.
|
|
24
|
+
const panel = replStore.dataCube.editor.sorts;
|
|
25
25
|
|
|
26
26
|
useEffect(() => {}, [panel]); // TODO: @akphi - remove this dummy useEffect
|
|
27
27
|
|
|
28
28
|
return (
|
|
29
|
-
<div className="
|
|
29
|
+
<div className="h-full w-full select-none p-2">
|
|
30
30
|
<div className="flex h-6">
|
|
31
31
|
<div className="flex h-6 items-center text-xl font-medium">
|
|
32
32
|
<DataCubeIcon.TableColumns />
|
|
@@ -15,20 +15,21 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { observer } from 'mobx-react-lite';
|
|
18
|
-
import { DataCubeIcon } from '@finos/legend-art';
|
|
18
|
+
import { cn, DataCubeIcon } from '@finos/legend-art';
|
|
19
19
|
import type {
|
|
20
20
|
ColDef,
|
|
21
21
|
ColDefField,
|
|
22
22
|
GridApi,
|
|
23
|
-
|
|
23
|
+
ModelUpdatedEvent,
|
|
24
24
|
RowDragEndEvent,
|
|
25
25
|
SelectionChangedEvent,
|
|
26
26
|
} from '@ag-grid-community/core';
|
|
27
|
-
import { useCallback, useEffect, useState } from 'react';
|
|
27
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
28
28
|
import {
|
|
29
29
|
AgGridReact,
|
|
30
30
|
type AgGridReactProps,
|
|
31
31
|
type CustomCellRendererProps,
|
|
32
|
+
type CustomNoRowsOverlayProps,
|
|
32
33
|
} from '@ag-grid-community/react';
|
|
33
34
|
import { ClientSideRowModelModule } from '@ag-grid-community/client-side-row-model';
|
|
34
35
|
import type {
|
|
@@ -36,6 +37,10 @@ import type {
|
|
|
36
37
|
DataCubeEditorColumnsSelectorState,
|
|
37
38
|
} from '../../../stores/dataCube/editor/DataCubeEditorColumnsSelectorState.js';
|
|
38
39
|
import { isNonNullable } from '@finos/legend-shared';
|
|
40
|
+
import {
|
|
41
|
+
getDataForAllFilteredNodes,
|
|
42
|
+
getDataForAllNodes,
|
|
43
|
+
} from '../../../stores/dataCube/grid/DataCubeGridClientEngine.js';
|
|
39
44
|
|
|
40
45
|
function getBaseGridProps<
|
|
41
46
|
T extends DataCubeEditorColumnsSelectorColumnState,
|
|
@@ -54,8 +59,50 @@ function getBaseGridProps<
|
|
|
54
59
|
rowHeight: 20,
|
|
55
60
|
headerHeight: 20,
|
|
56
61
|
suppressRowHoverHighlight: false,
|
|
57
|
-
|
|
58
|
-
|
|
62
|
+
noRowsOverlayComponent: (
|
|
63
|
+
params: CustomNoRowsOverlayProps<T> & {
|
|
64
|
+
violationSeverity?: 'warning' | 'error' | undefined;
|
|
65
|
+
},
|
|
66
|
+
) => {
|
|
67
|
+
if (params.api.getQuickFilter()) {
|
|
68
|
+
return (
|
|
69
|
+
<div className="flex items-center border-[1.5px] border-neutral-300 p-2 font-semibold text-neutral-400">
|
|
70
|
+
<div>
|
|
71
|
+
<DataCubeIcon.WarningCircle className="mr-1 text-lg" />
|
|
72
|
+
</div>
|
|
73
|
+
No match found
|
|
74
|
+
</div>
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
if (params.violationSeverity) {
|
|
78
|
+
return (
|
|
79
|
+
<div
|
|
80
|
+
className={cn(
|
|
81
|
+
'flex items-center border-[1.5px] p-2 font-semibold',
|
|
82
|
+
{
|
|
83
|
+
'border-amber-400 text-amber-500':
|
|
84
|
+
params.violationSeverity === 'warning',
|
|
85
|
+
'border-red-400 text-red-500':
|
|
86
|
+
params.violationSeverity === 'error',
|
|
87
|
+
},
|
|
88
|
+
)}
|
|
89
|
+
>
|
|
90
|
+
<div>
|
|
91
|
+
<DataCubeIcon.Warning className="mr-1 text-lg" />
|
|
92
|
+
</div>
|
|
93
|
+
No columns selected
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
return <div />;
|
|
98
|
+
},
|
|
99
|
+
// Show no rows overlay when there are no search results
|
|
100
|
+
// See https://stackoverflow.com/a/72637410
|
|
101
|
+
onModelUpdated: (event: ModelUpdatedEvent<T>) => {
|
|
102
|
+
event.api.getDisplayedRowCount() === 0
|
|
103
|
+
? event.api.showNoRowsOverlay()
|
|
104
|
+
: event.api.hideOverlay();
|
|
105
|
+
},
|
|
59
106
|
};
|
|
60
107
|
}
|
|
61
108
|
|
|
@@ -80,14 +127,54 @@ function getBaseColumnDef<
|
|
|
80
127
|
}
|
|
81
128
|
return (params.rowNode?.data as T).name;
|
|
82
129
|
},
|
|
130
|
+
getQuickFilterText: (params) => params.value,
|
|
83
131
|
};
|
|
84
132
|
}
|
|
85
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Move this display to a separate component to avoid re-rendering the header too frequently
|
|
136
|
+
*/
|
|
137
|
+
const ColumnsSearchResultCountBadge = observer(
|
|
138
|
+
function ColumnsSearchResultCountBadge<
|
|
139
|
+
T extends DataCubeEditorColumnsSelectorColumnState,
|
|
140
|
+
>(props: {
|
|
141
|
+
selector: DataCubeEditorColumnsSelectorState<T>;
|
|
142
|
+
gridApi: GridApi<T>;
|
|
143
|
+
scope: 'available' | 'selected';
|
|
144
|
+
}) {
|
|
145
|
+
const { selector, gridApi, scope } = props;
|
|
146
|
+
return (
|
|
147
|
+
<div className="flex items-center justify-center rounded-lg bg-neutral-500 px-1 py-0.5 font-mono text-xs font-bold text-white">
|
|
148
|
+
{`${getDataForAllFilteredNodes(gridApi).length}/${scope === 'available' ? selector.availableColumns.length : selector.selectedColumns.length}`}
|
|
149
|
+
<span className="hidden">
|
|
150
|
+
{scope === 'available'
|
|
151
|
+
? // subscribing to the search text to trigger re-render as it changes
|
|
152
|
+
selector.availableColumnsSearchText
|
|
153
|
+
: selector.selectedColumnsSearchText}
|
|
154
|
+
</span>
|
|
155
|
+
</div>
|
|
156
|
+
);
|
|
157
|
+
},
|
|
158
|
+
);
|
|
159
|
+
|
|
86
160
|
export const DataCubeEditorColumnsSelector = observer(
|
|
87
161
|
function DataCubeEditorColumnsSelector<
|
|
88
162
|
T extends DataCubeEditorColumnsSelectorColumnState,
|
|
89
|
-
>(props: {
|
|
90
|
-
|
|
163
|
+
>(props: {
|
|
164
|
+
selector: DataCubeEditorColumnsSelectorState<T>;
|
|
165
|
+
extraColumnComponent?:
|
|
166
|
+
| React.FC<{
|
|
167
|
+
selector: DataCubeEditorColumnsSelectorState<T>;
|
|
168
|
+
column: T;
|
|
169
|
+
}>
|
|
170
|
+
| undefined;
|
|
171
|
+
noColumnsSelectedViolationSeverity?: 'warning' | 'error' | undefined;
|
|
172
|
+
}) {
|
|
173
|
+
const {
|
|
174
|
+
selector,
|
|
175
|
+
extraColumnComponent,
|
|
176
|
+
noColumnsSelectedViolationSeverity,
|
|
177
|
+
} = props;
|
|
91
178
|
const [selectedAvailableColumns, setSelectedAvailableColumns] = useState<
|
|
92
179
|
T[]
|
|
93
180
|
>([]);
|
|
@@ -98,6 +185,10 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
98
185
|
useState<GridApi | null>(null);
|
|
99
186
|
const [selectedColumnsGridApi, setSelectedColumnsGridApi] =
|
|
100
187
|
useState<GridApi | null>(null);
|
|
188
|
+
const searchAvailableColumnsInputRef = useRef<HTMLInputElement | null>(
|
|
189
|
+
null,
|
|
190
|
+
);
|
|
191
|
+
const searchSelectedColumnsInputRef = useRef<HTMLInputElement | null>(null);
|
|
101
192
|
|
|
102
193
|
/**
|
|
103
194
|
* Since we use managed row dragging for selected columns,
|
|
@@ -107,16 +198,11 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
107
198
|
*/
|
|
108
199
|
const onSelectedColumnsDragStop = useCallback(
|
|
109
200
|
(params: RowDragEndEvent<T>) => {
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
if (node.data) {
|
|
113
|
-
newRowData.push(node.data);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
selector.setSelectedColumns(newRowData);
|
|
201
|
+
const newData = getDataForAllNodes(params.api);
|
|
202
|
+
selector.setSelectedColumns(newData);
|
|
117
203
|
selector.setAvailableColumns(
|
|
118
204
|
selector.availableColumns.filter(
|
|
119
|
-
(column) => !
|
|
205
|
+
(column) => !newData.includes(column),
|
|
120
206
|
),
|
|
121
207
|
);
|
|
122
208
|
},
|
|
@@ -154,17 +240,16 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
154
240
|
if (event.overIndex === -1) {
|
|
155
241
|
return;
|
|
156
242
|
}
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
if (node.data) {
|
|
160
|
-
newRowData.push(node.data);
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
selector.setSelectedColumns(newRowData);
|
|
243
|
+
const newData = getDataForAllNodes(event.api);
|
|
244
|
+
selector.setSelectedColumns(newData);
|
|
164
245
|
},
|
|
165
246
|
[selector],
|
|
166
247
|
);
|
|
167
248
|
|
|
249
|
+
/**
|
|
250
|
+
* Setup row drop zones for each grid to be the other
|
|
251
|
+
* See https://www.ag-grid.com/react-data-grid/row-dragging-to-grid/
|
|
252
|
+
*/
|
|
168
253
|
useEffect(() => {
|
|
169
254
|
if (!availableColumnsGridApi || !selectedColumnsGridApi) {
|
|
170
255
|
return;
|
|
@@ -196,7 +281,7 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
196
281
|
]);
|
|
197
282
|
|
|
198
283
|
return (
|
|
199
|
-
<div className="flex h-full w-full">
|
|
284
|
+
<div className="data-cube-column-selector flex h-full w-full">
|
|
200
285
|
<div className="h-full w-[calc(50%_-_20px)]">
|
|
201
286
|
<div className="flex h-5 items-center text-sm">
|
|
202
287
|
Available columns:
|
|
@@ -204,12 +289,35 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
204
289
|
<div className="h-[calc(100%_-_20px)] rounded-sm border border-neutral-200">
|
|
205
290
|
<div className="relative h-6 border-b border-neutral-200">
|
|
206
291
|
<input
|
|
207
|
-
className="h-full w-full pl-10 placeholder-neutral-400"
|
|
292
|
+
className="h-full w-full pl-10 pr-6 placeholder-neutral-400"
|
|
293
|
+
ref={searchAvailableColumnsInputRef}
|
|
208
294
|
placeholder="Click here to search..."
|
|
295
|
+
value={selector.availableColumnsSearchText}
|
|
296
|
+
onChange={(event) =>
|
|
297
|
+
selector.setAvailableColumnsSearchText(event.target.value)
|
|
298
|
+
}
|
|
299
|
+
onKeyDown={(event) => {
|
|
300
|
+
if (event.code === 'Escape') {
|
|
301
|
+
event.stopPropagation();
|
|
302
|
+
searchAvailableColumnsInputRef.current?.select();
|
|
303
|
+
selector.setAvailableColumnsSearchText('');
|
|
304
|
+
}
|
|
305
|
+
}}
|
|
209
306
|
/>
|
|
210
307
|
<div className="absolute left-0 top-0 flex h-6 w-10 items-center justify-center">
|
|
211
308
|
<DataCubeIcon.Search className="stroke-[3px] text-lg text-neutral-500" />
|
|
212
309
|
</div>
|
|
310
|
+
<button
|
|
311
|
+
className="absolute right-0 top-0 flex h-6 w-6 items-center justify-center text-neutral-500 disabled:text-neutral-300"
|
|
312
|
+
disabled={!selector.availableColumnsSearchText}
|
|
313
|
+
title="Clear search [Esc]"
|
|
314
|
+
onClick={() => {
|
|
315
|
+
selector.setAvailableColumnsSearchText('');
|
|
316
|
+
searchAvailableColumnsInputRef.current?.focus();
|
|
317
|
+
}}
|
|
318
|
+
>
|
|
319
|
+
<DataCubeIcon.X className="text-lg" />
|
|
320
|
+
</button>
|
|
213
321
|
</div>
|
|
214
322
|
<div className="h-[calc(100%_-_24px)]">
|
|
215
323
|
<AgGridReact
|
|
@@ -218,7 +326,6 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
218
326
|
// and to make sure the row data and the available columns state are in sync
|
|
219
327
|
rowDragManaged={false}
|
|
220
328
|
onGridReady={(params) => setAvailableColumnsGridApi(params.api)}
|
|
221
|
-
rowData={selector.availableColumns}
|
|
222
329
|
onSelectionChanged={(event: SelectionChangedEvent<T>) => {
|
|
223
330
|
setSelectedAvailableColumns(
|
|
224
331
|
event.api
|
|
@@ -227,23 +334,43 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
227
334
|
.filter(isNonNullable),
|
|
228
335
|
);
|
|
229
336
|
}}
|
|
337
|
+
// Using ag-grid quick filter is a cheap way to implement search
|
|
338
|
+
quickFilterText={selector.availableColumnsSearchText}
|
|
339
|
+
rowData={selector.availableColumns}
|
|
230
340
|
columnDefs={[
|
|
231
341
|
{
|
|
232
342
|
...getBaseColumnDef<T>(),
|
|
343
|
+
/**
|
|
344
|
+
* Support double-click to add all (filtered by search) columns
|
|
345
|
+
*/
|
|
233
346
|
headerComponent: (params: CustomCellRendererProps<T>) => (
|
|
234
|
-
<
|
|
347
|
+
<button
|
|
235
348
|
title="Double-click to add all columns"
|
|
236
|
-
className="flex h-full w-full
|
|
349
|
+
className="flex h-full w-full items-center justify-between pl-0.5"
|
|
237
350
|
onDoubleClick={() => {
|
|
238
|
-
//
|
|
351
|
+
// The columns being moved are scoped by the current search
|
|
352
|
+
const filteredData = getDataForAllFilteredNodes(
|
|
353
|
+
params.api,
|
|
354
|
+
);
|
|
239
355
|
selector.setSelectedColumns([
|
|
240
356
|
...selector.selectedColumns,
|
|
241
|
-
...
|
|
357
|
+
...filteredData,
|
|
242
358
|
]);
|
|
243
|
-
selector.setAvailableColumns(
|
|
359
|
+
selector.setAvailableColumns(
|
|
360
|
+
selector.availableColumns.filter(
|
|
361
|
+
(column) => !filteredData.includes(column),
|
|
362
|
+
),
|
|
363
|
+
);
|
|
244
364
|
params.api.clearFocusedCell();
|
|
245
365
|
}}
|
|
246
|
-
>
|
|
366
|
+
>
|
|
367
|
+
<div>{`[All Columns]`}</div>
|
|
368
|
+
<ColumnsSearchResultCountBadge
|
|
369
|
+
selector={selector}
|
|
370
|
+
gridApi={params.api}
|
|
371
|
+
scope="available"
|
|
372
|
+
/>
|
|
373
|
+
</button>
|
|
247
374
|
),
|
|
248
375
|
cellRenderer: (params: CustomCellRendererProps<T>) => {
|
|
249
376
|
const data = params.data;
|
|
@@ -252,7 +379,7 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
252
379
|
}
|
|
253
380
|
return (
|
|
254
381
|
<div
|
|
255
|
-
className="h-full w-full cursor-pointer
|
|
382
|
+
className="flex h-full w-full cursor-pointer"
|
|
256
383
|
title={`[${data.name}]\nDouble-click to add column`}
|
|
257
384
|
onDoubleClick={() => {
|
|
258
385
|
selector.setSelectedColumns([
|
|
@@ -267,7 +394,15 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
267
394
|
params.api.clearFocusedCell();
|
|
268
395
|
}}
|
|
269
396
|
>
|
|
270
|
-
|
|
397
|
+
<div className="h-full flex-1 items-center overflow-hidden overflow-ellipsis whitespace-nowrap pl-2">
|
|
398
|
+
{data.name}
|
|
399
|
+
</div>
|
|
400
|
+
<div className="flex h-full">
|
|
401
|
+
{extraColumnComponent?.({
|
|
402
|
+
selector,
|
|
403
|
+
column: data,
|
|
404
|
+
}) ?? null}
|
|
405
|
+
</div>
|
|
271
406
|
</div>
|
|
272
407
|
);
|
|
273
408
|
},
|
|
@@ -280,40 +415,66 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
280
415
|
<div className="flex h-full w-10 items-center justify-center">
|
|
281
416
|
<div className="flex flex-col">
|
|
282
417
|
<button
|
|
283
|
-
className="flex
|
|
418
|
+
className="flex items-center justify-center rounded-sm border border-neutral-300 bg-neutral-100 text-neutral-500 hover:bg-neutral-200 disabled:bg-neutral-200 disabled:text-neutral-400"
|
|
284
419
|
title="Add selected columns"
|
|
420
|
+
/**
|
|
421
|
+
* Support add selected (filtered by search) columns
|
|
422
|
+
* We reset the selection after this operation
|
|
423
|
+
*/
|
|
285
424
|
onClick={() => {
|
|
286
|
-
|
|
425
|
+
if (!availableColumnsGridApi) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
// The columns being moved are scoped by the current search
|
|
429
|
+
const filteredData = getDataForAllFilteredNodes(
|
|
430
|
+
availableColumnsGridApi,
|
|
431
|
+
);
|
|
432
|
+
const columnsToMove = selectedAvailableColumns.filter(
|
|
433
|
+
(column) => filteredData.includes(column),
|
|
434
|
+
);
|
|
287
435
|
selector.setSelectedColumns([
|
|
288
436
|
...selector.selectedColumns,
|
|
289
|
-
...
|
|
437
|
+
...columnsToMove,
|
|
290
438
|
]);
|
|
291
439
|
selector.setAvailableColumns(
|
|
292
440
|
selector.availableColumns.filter(
|
|
293
|
-
(column) => !
|
|
441
|
+
(column) => !columnsToMove.includes(column),
|
|
294
442
|
),
|
|
295
443
|
);
|
|
296
|
-
availableColumnsGridApi
|
|
444
|
+
availableColumnsGridApi.clearFocusedCell();
|
|
297
445
|
}}
|
|
298
446
|
disabled={selectedAvailableColumns.length === 0}
|
|
299
447
|
>
|
|
300
448
|
<DataCubeIcon.ChevronRight className="text-2xl" />
|
|
301
449
|
</button>
|
|
302
450
|
<button
|
|
303
|
-
className="mt-2 flex
|
|
451
|
+
className="mt-2 flex items-center justify-center rounded-sm border border-neutral-300 bg-neutral-100 text-neutral-500 hover:bg-neutral-200 disabled:bg-neutral-200 disabled:text-neutral-400"
|
|
304
452
|
title="Remove selected columns"
|
|
453
|
+
/**
|
|
454
|
+
* Support remove selected (filtered by search) columns
|
|
455
|
+
* We reset the selection after this operation
|
|
456
|
+
*/
|
|
305
457
|
onClick={() => {
|
|
306
|
-
|
|
458
|
+
if (!selectedColumnsGridApi) {
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
// The columns being moved are scoped by the current search
|
|
462
|
+
const filteredData = getDataForAllFilteredNodes(
|
|
463
|
+
selectedColumnsGridApi,
|
|
464
|
+
);
|
|
465
|
+
const columnsToMove = selectedSelectedColumns.filter((column) =>
|
|
466
|
+
filteredData.includes(column),
|
|
467
|
+
);
|
|
307
468
|
selector.setAvailableColumns([
|
|
308
469
|
...selector.availableColumns,
|
|
309
|
-
...
|
|
470
|
+
...columnsToMove,
|
|
310
471
|
]);
|
|
311
472
|
selector.setSelectedColumns(
|
|
312
473
|
selector.selectedColumns.filter(
|
|
313
|
-
(column) => !
|
|
474
|
+
(column) => !columnsToMove.includes(column),
|
|
314
475
|
),
|
|
315
476
|
);
|
|
316
|
-
selectedColumnsGridApi
|
|
477
|
+
selectedColumnsGridApi.clearFocusedCell();
|
|
317
478
|
}}
|
|
318
479
|
disabled={selectedSelectedColumns.length === 0}
|
|
319
480
|
>
|
|
@@ -327,11 +488,33 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
327
488
|
<div className="relative h-6 border-b border-neutral-200">
|
|
328
489
|
<input
|
|
329
490
|
className="h-full w-full pl-10 placeholder-neutral-400"
|
|
491
|
+
ref={searchSelectedColumnsInputRef}
|
|
330
492
|
placeholder="Click here to search..."
|
|
493
|
+
value={selector.selectedColumnsSearchText}
|
|
494
|
+
onChange={(event) =>
|
|
495
|
+
selector.setSelectedColumnsSearchText(event.target.value)
|
|
496
|
+
}
|
|
497
|
+
onKeyDown={(event) => {
|
|
498
|
+
if (event.code === 'Escape') {
|
|
499
|
+
event.stopPropagation();
|
|
500
|
+
selector.setSelectedColumnsSearchText('');
|
|
501
|
+
}
|
|
502
|
+
}}
|
|
331
503
|
/>
|
|
332
504
|
<div className="absolute left-0 top-0 flex h-6 w-10 items-center justify-center">
|
|
333
505
|
<DataCubeIcon.Search className="stroke-[3px] text-lg text-neutral-500" />
|
|
334
506
|
</div>
|
|
507
|
+
<button
|
|
508
|
+
className="absolute right-0 top-0 flex h-6 w-6 items-center justify-center text-neutral-500 disabled:text-neutral-300"
|
|
509
|
+
disabled={!selector.selectedColumnsSearchText}
|
|
510
|
+
title="Clear search [Esc]"
|
|
511
|
+
onClick={() => {
|
|
512
|
+
selector.setSelectedColumnsSearchText('');
|
|
513
|
+
searchSelectedColumnsInputRef.current?.focus();
|
|
514
|
+
}}
|
|
515
|
+
>
|
|
516
|
+
<DataCubeIcon.X className="text-lg" />
|
|
517
|
+
</button>
|
|
335
518
|
</div>
|
|
336
519
|
<div className="h-[calc(100%_-_24px)]">
|
|
337
520
|
<AgGridReact
|
|
@@ -351,24 +534,46 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
351
534
|
.filter(isNonNullable),
|
|
352
535
|
);
|
|
353
536
|
}}
|
|
537
|
+
// Using ag-grid quick filter is a cheap way to implement search
|
|
538
|
+
quickFilterText={selector.selectedColumnsSearchText}
|
|
539
|
+
noRowsOverlayComponentParams={{
|
|
540
|
+
violationSeverity: noColumnsSelectedViolationSeverity,
|
|
541
|
+
}}
|
|
354
542
|
rowData={selector.selectedColumns}
|
|
355
543
|
columnDefs={[
|
|
356
544
|
{
|
|
357
545
|
...getBaseColumnDef<T>(),
|
|
546
|
+
/**
|
|
547
|
+
* Support double-click to remove all (filtered by search) columns
|
|
548
|
+
*/
|
|
358
549
|
headerComponent: (params: CustomCellRendererProps<T>) => (
|
|
359
|
-
<
|
|
550
|
+
<button
|
|
360
551
|
title="Double-click to remove all columns"
|
|
361
|
-
className="flex h-full w-full
|
|
552
|
+
className="flex h-full w-full items-center justify-between pl-0.5"
|
|
362
553
|
onDoubleClick={() => {
|
|
363
|
-
//
|
|
554
|
+
// The columns being moved are scoped by the current search
|
|
555
|
+
const filteredData = getDataForAllFilteredNodes(
|
|
556
|
+
params.api,
|
|
557
|
+
);
|
|
364
558
|
selector.setAvailableColumns([
|
|
365
559
|
...selector.availableColumns,
|
|
366
|
-
...
|
|
560
|
+
...filteredData,
|
|
367
561
|
]);
|
|
368
|
-
selector.setSelectedColumns(
|
|
562
|
+
selector.setSelectedColumns(
|
|
563
|
+
selector.selectedColumns.filter(
|
|
564
|
+
(column) => !filteredData.includes(column),
|
|
565
|
+
),
|
|
566
|
+
);
|
|
369
567
|
params.api.clearFocusedCell();
|
|
370
568
|
}}
|
|
371
|
-
>
|
|
569
|
+
>
|
|
570
|
+
<div>{`[All Columns]`}</div>
|
|
571
|
+
<ColumnsSearchResultCountBadge
|
|
572
|
+
selector={selector}
|
|
573
|
+
gridApi={params.api}
|
|
574
|
+
scope="selected"
|
|
575
|
+
/>
|
|
576
|
+
</button>
|
|
372
577
|
),
|
|
373
578
|
cellRenderer: (params: CustomCellRendererProps<T>) => {
|
|
374
579
|
const data = params.data;
|
|
@@ -377,7 +582,7 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
377
582
|
}
|
|
378
583
|
return (
|
|
379
584
|
<div
|
|
380
|
-
className="h-full w-full cursor-pointer
|
|
585
|
+
className="flex h-full w-full cursor-pointer"
|
|
381
586
|
title={`[${data.name}]\nDouble-click to remove column`}
|
|
382
587
|
onDoubleClick={() => {
|
|
383
588
|
selector.setAvailableColumns([
|
|
@@ -392,7 +597,15 @@ export const DataCubeEditorColumnsSelector = observer(
|
|
|
392
597
|
params.api.clearFocusedCell();
|
|
393
598
|
}}
|
|
394
599
|
>
|
|
395
|
-
|
|
600
|
+
<div className="h-full flex-1 items-center overflow-hidden overflow-ellipsis whitespace-nowrap pl-2">
|
|
601
|
+
{data.name}
|
|
602
|
+
</div>
|
|
603
|
+
<div className="flex h-full">
|
|
604
|
+
{extraColumnComponent?.({
|
|
605
|
+
selector,
|
|
606
|
+
column: data,
|
|
607
|
+
}) ?? null}
|
|
608
|
+
</div>
|
|
396
609
|
</div>
|
|
397
610
|
);
|
|
398
611
|
},
|
|
@@ -0,0 +1,43 @@
|
|
|
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 { DataCubeIcon } from '@finos/legend-art';
|
|
18
|
+
import { observer } from 'mobx-react-lite';
|
|
19
|
+
import { useREPLStore } from '../../REPLStoreProvider.js';
|
|
20
|
+
import { useEffect } from 'react';
|
|
21
|
+
import { WIP_Badge } from './DataCubeEditorShared.js';
|
|
22
|
+
|
|
23
|
+
export const DataCubeEditorDeveloperPanel = observer(() => {
|
|
24
|
+
const replStore = useREPLStore();
|
|
25
|
+
const panel = replStore.dataCube.editor.sorts;
|
|
26
|
+
|
|
27
|
+
useEffect(() => {}, [panel]); // TODO: @akphi - remove this dummy useEffect
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<div className="h-full w-full select-none p-2">
|
|
31
|
+
<div className="flex h-6">
|
|
32
|
+
<div className="flex h-6 items-center text-xl font-medium">
|
|
33
|
+
<DataCubeIcon.AdvancedSettings />
|
|
34
|
+
</div>
|
|
35
|
+
<div className="ml-1 flex h-6 items-center text-xl font-medium">
|
|
36
|
+
Developer
|
|
37
|
+
<WIP_Badge />
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
<div className="flex h-[calc(100%_-_24px)] w-full"></div>
|
|
41
|
+
</div>
|
|
42
|
+
);
|
|
43
|
+
});
|
|
@@ -18,21 +18,23 @@ import { DataCubeIcon } from '@finos/legend-art';
|
|
|
18
18
|
import { observer } from 'mobx-react-lite';
|
|
19
19
|
import { useREPLStore } from '../../REPLStoreProvider.js';
|
|
20
20
|
import { useEffect } from 'react';
|
|
21
|
+
import { WIP_Badge } from './DataCubeEditorShared.js';
|
|
21
22
|
|
|
22
23
|
export const DataCubeEditorExtendedColumnsPanel = observer(() => {
|
|
23
24
|
const replStore = useREPLStore();
|
|
24
|
-
const panel = replStore.
|
|
25
|
+
const panel = replStore.dataCube.editor.sorts;
|
|
25
26
|
|
|
26
27
|
useEffect(() => {}, [panel]); // TODO: @akphi - remove this dummy useEffect
|
|
27
28
|
|
|
28
29
|
return (
|
|
29
|
-
<div className="
|
|
30
|
+
<div className="h-full w-full select-none p-2">
|
|
30
31
|
<div className="flex h-6">
|
|
31
32
|
<div className="flex h-6 items-center text-xl font-medium">
|
|
32
33
|
<DataCubeIcon.TablePlus />
|
|
33
34
|
</div>
|
|
34
35
|
<div className="ml-1 flex h-6 items-center text-xl font-medium">
|
|
35
36
|
Extended Columns
|
|
37
|
+
<WIP_Badge />
|
|
36
38
|
</div>
|
|
37
39
|
</div>
|
|
38
40
|
<div className="flex h-[calc(100%_-_24px)] w-full"></div>
|
|
@@ -18,21 +18,23 @@ import { DataCubeIcon } from '@finos/legend-art';
|
|
|
18
18
|
import { observer } from 'mobx-react-lite';
|
|
19
19
|
import { useREPLStore } from '../../REPLStoreProvider.js';
|
|
20
20
|
import { useEffect } from 'react';
|
|
21
|
+
import { WIP_Badge } from './DataCubeEditorShared.js';
|
|
21
22
|
|
|
22
23
|
export const DataCubeEditorFilterPanel = observer(() => {
|
|
23
24
|
const replStore = useREPLStore();
|
|
24
|
-
const panel = replStore.
|
|
25
|
+
const panel = replStore.dataCube.editor.sorts;
|
|
25
26
|
|
|
26
27
|
useEffect(() => {}, [panel]); // TODO: @akphi - remove this dummy useEffect
|
|
27
28
|
|
|
28
29
|
return (
|
|
29
|
-
<div className="
|
|
30
|
+
<div className="h-full w-full select-none p-2">
|
|
30
31
|
<div className="flex h-6">
|
|
31
32
|
<div className="flex h-6 items-center text-xl font-medium">
|
|
32
33
|
<DataCubeIcon.TableFilter />
|
|
33
34
|
</div>
|
|
34
35
|
<div className="ml-1 flex h-6 items-center text-xl font-medium">
|
|
35
36
|
Filter
|
|
37
|
+
<WIP_Badge />
|
|
36
38
|
</div>
|
|
37
39
|
</div>
|
|
38
40
|
<div className="flex h-[calc(100%_-_24px)] w-full"></div>
|