@finos/legend-data-cube 0.1.11 → 0.1.13
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/DataCubePlaceholder.d.ts.map +1 -1
- package/lib/components/DataCubePlaceholder.js +2 -1
- package/lib/components/DataCubePlaceholder.js.map +1 -1
- package/lib/components/core/DataCubePureCodeEditorUtils.d.ts +2 -1
- package/lib/components/core/DataCubePureCodeEditorUtils.d.ts.map +1 -1
- package/lib/components/core/DataCubePureCodeEditorUtils.js.map +1 -1
- package/lib/components/view/editor/DataCubeEditor.d.ts.map +1 -1
- package/lib/components/view/editor/DataCubeEditor.js +4 -2
- package/lib/components/view/editor/DataCubeEditor.js.map +1 -1
- package/lib/components/view/editor/DataCubeEditorColumnsPanel.d.ts.map +1 -1
- package/lib/components/view/editor/DataCubeEditorColumnsPanel.js +3 -3
- package/lib/components/view/editor/DataCubeEditorColumnsPanel.js.map +1 -1
- package/lib/components/view/editor/DataCubeEditorColumnsSelector.d.ts +47 -0
- package/lib/components/view/editor/DataCubeEditorColumnsSelector.d.ts.map +1 -0
- package/lib/components/view/editor/{DataCubeEditorColumnSelector.js → DataCubeEditorColumnsSelector.js} +70 -55
- package/lib/components/view/editor/DataCubeEditorColumnsSelector.js.map +1 -0
- package/lib/components/view/editor/DataCubeEditorDimensionsPanel.d.ts +3 -13
- package/lib/components/view/editor/DataCubeEditorDimensionsPanel.d.ts.map +1 -1
- package/lib/components/view/editor/DataCubeEditorDimensionsPanel.js +707 -264
- package/lib/components/view/editor/DataCubeEditorDimensionsPanel.js.map +1 -1
- package/lib/components/view/editor/DataCubeEditorHorizontalPivotsPanel.js +2 -2
- package/lib/components/view/editor/DataCubeEditorHorizontalPivotsPanel.js.map +1 -1
- package/lib/components/view/editor/DataCubeEditorSortsPanel.js +2 -2
- package/lib/components/view/editor/DataCubeEditorSortsPanel.js.map +1 -1
- package/lib/components/view/editor/DataCubeEditorVerticalPivotsPanel.js +2 -2
- package/lib/components/view/editor/DataCubeEditorVerticalPivotsPanel.js.map +1 -1
- package/lib/components/view/{grid/DataCubeGridShared.d.ts → extend/DataCubeCodeEditor.d.ts} +7 -3
- package/lib/components/view/extend/DataCubeCodeEditor.d.ts.map +1 -0
- package/lib/components/view/extend/DataCubeCodeEditor.js +114 -0
- package/lib/components/view/extend/DataCubeCodeEditor.js.map +1 -0
- package/lib/components/view/extend/DataCubeCodeEditorState.d.ts +43 -0
- package/lib/components/view/extend/DataCubeCodeEditorState.d.ts.map +1 -0
- package/lib/components/view/extend/DataCubeCodeEditorState.js +37 -0
- package/lib/components/view/extend/DataCubeCodeEditorState.js.map +1 -0
- package/lib/components/view/extend/DataCubeColumnEditor.d.ts.map +1 -1
- package/lib/components/view/extend/DataCubeColumnEditor.js +5 -84
- package/lib/components/view/extend/DataCubeColumnEditor.js.map +1 -1
- package/lib/components/view/grid/DataCubeGrid.d.ts +2 -1
- package/lib/components/view/grid/DataCubeGrid.d.ts.map +1 -1
- package/lib/components/view/grid/DataCubeGrid.js +29 -19
- package/lib/components/view/grid/DataCubeGrid.js.map +1 -1
- package/lib/components/view/grid/DataCubeMultidimensionalGrid.d.ts +1 -1
- package/lib/components/view/grid/DataCubeMultidimensionalGrid.d.ts.map +1 -1
- package/lib/components/view/grid/DataCubeMultidimensionalGrid.js +2 -1
- package/lib/components/view/grid/DataCubeMultidimensionalGrid.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/DataCubeAPI.d.ts.map +1 -1
- package/lib/stores/DataCubeAPI.js +3 -1
- package/lib/stores/DataCubeAPI.js.map +1 -1
- package/lib/stores/core/DataCubeEngine.d.ts +1 -1
- package/lib/stores/core/DataCubeEngine.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQueryEngine.d.ts +5 -0
- package/lib/stores/core/DataCubeQueryEngine.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQueryEngine.js +6 -0
- package/lib/stores/core/DataCubeQueryEngine.js.map +1 -1
- package/lib/stores/core/DataCubeSnapshot.d.ts +1 -1
- package/lib/stores/core/DataCubeSnapshot.d.ts.map +1 -1
- package/lib/stores/core/model/AdhocQueryDataCubeSource.d.ts +2 -0
- package/lib/stores/core/model/AdhocQueryDataCubeSource.d.ts.map +1 -1
- package/lib/stores/core/model/AdhocQueryDataCubeSource.js +3 -0
- package/lib/stores/core/model/AdhocQueryDataCubeSource.js.map +1 -1
- package/lib/stores/core/model/DataCubeConfiguration.d.ts +11 -0
- package/lib/stores/core/model/DataCubeConfiguration.d.ts.map +1 -1
- package/lib/stores/core/model/DataCubeConfiguration.js +19 -1
- package/lib/stores/core/model/DataCubeConfiguration.js.map +1 -1
- package/lib/stores/services/DataCubeSettingService.d.ts.map +1 -1
- package/lib/stores/services/DataCubeSettingService.js +10 -6
- package/lib/stores/services/DataCubeSettingService.js.map +1 -1
- package/lib/stores/view/DataCubeInfoState.d.ts +2 -0
- package/lib/stores/view/DataCubeInfoState.d.ts.map +1 -1
- package/lib/stores/view/DataCubeInfoState.js +3 -0
- package/lib/stores/view/DataCubeInfoState.js.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorColumnsPanelState.d.ts +8 -8
- package/lib/stores/view/editor/DataCubeEditorColumnsPanelState.d.ts.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorColumnsPanelState.js +6 -6
- package/lib/stores/view/editor/DataCubeEditorColumnsPanelState.js.map +1 -1
- package/lib/stores/view/editor/{DataCubeEditorColumnSelectorState.d.ts → DataCubeEditorColumnsSelectorState.d.ts} +6 -6
- package/lib/stores/view/editor/DataCubeEditorColumnsSelectorState.d.ts.map +1 -0
- package/lib/stores/view/editor/{DataCubeEditorColumnSelectorState.js → DataCubeEditorColumnsSelectorState.js} +4 -4
- package/lib/stores/view/editor/DataCubeEditorColumnsSelectorState.js.map +1 -0
- package/lib/stores/view/editor/DataCubeEditorDimensionsPanelState.d.ts +29 -6
- package/lib/stores/view/editor/DataCubeEditorDimensionsPanelState.d.ts.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorDimensionsPanelState.js +102 -39
- package/lib/stores/view/editor/DataCubeEditorDimensionsPanelState.js.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorHorizontalPivotsPanelState.d.ts +5 -5
- package/lib/stores/view/editor/DataCubeEditorHorizontalPivotsPanelState.d.ts.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorHorizontalPivotsPanelState.js +7 -6
- package/lib/stores/view/editor/DataCubeEditorHorizontalPivotsPanelState.js.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorMutableConfiguration.d.ts +2 -1
- package/lib/stores/view/editor/DataCubeEditorMutableConfiguration.d.ts.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorMutableConfiguration.js +5 -0
- package/lib/stores/view/editor/DataCubeEditorMutableConfiguration.js.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorSortsPanelState.d.ts +5 -5
- package/lib/stores/view/editor/DataCubeEditorSortsPanelState.d.ts.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorSortsPanelState.js +6 -6
- package/lib/stores/view/editor/DataCubeEditorSortsPanelState.js.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorState.d.ts +3 -0
- package/lib/stores/view/editor/DataCubeEditorState.d.ts.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorState.js +6 -0
- package/lib/stores/view/editor/DataCubeEditorState.js.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorVerticalPivotsPanelState.d.ts +5 -5
- package/lib/stores/view/editor/DataCubeEditorVerticalPivotsPanelState.d.ts.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorVerticalPivotsPanelState.js +6 -6
- package/lib/stores/view/editor/DataCubeEditorVerticalPivotsPanelState.js.map +1 -1
- package/lib/stores/view/extend/DataCubeColumnEditorState.d.ts +7 -14
- package/lib/stores/view/extend/DataCubeColumnEditorState.d.ts.map +1 -1
- package/lib/stores/view/extend/DataCubeColumnEditorState.js +14 -22
- package/lib/stores/view/extend/DataCubeColumnEditorState.js.map +1 -1
- package/lib/stores/view/grid/DataCubeGridClientEngine.d.ts +2 -1
- package/lib/stores/view/grid/DataCubeGridClientEngine.d.ts.map +1 -1
- package/lib/stores/view/grid/DataCubeGridClientEngine.js +7 -0
- package/lib/stores/view/grid/DataCubeGridClientEngine.js.map +1 -1
- package/lib/stores/view/grid/DataCubeGridClientExportEngine.js +1 -1
- package/lib/stores/view/grid/DataCubeGridClientExportEngine.js.map +1 -1
- package/lib/stores/view/grid/DataCubeGridMenuBuilder.d.ts +2 -0
- package/lib/stores/view/grid/DataCubeGridMenuBuilder.d.ts.map +1 -1
- package/lib/stores/view/grid/DataCubeGridMenuBuilder.js +9 -16
- package/lib/stores/view/grid/DataCubeGridMenuBuilder.js.map +1 -1
- package/lib/stores/view/grid/DataCubeGridState.d.ts +2 -2
- package/lib/stores/view/grid/DataCubeGridState.d.ts.map +1 -1
- package/lib/stores/view/grid/DataCubeGridState.js +19 -6
- package/lib/stores/view/grid/DataCubeGridState.js.map +1 -1
- package/package.json +5 -5
- package/src/components/DataCubePlaceholder.tsx +2 -0
- package/src/components/core/DataCubePureCodeEditorUtils.tsx +2 -1
- package/src/components/view/editor/DataCubeEditor.tsx +8 -3
- package/src/components/view/editor/DataCubeEditorColumnsPanel.tsx +6 -8
- package/src/components/view/editor/{DataCubeEditorColumnSelector.tsx → DataCubeEditorColumnsSelector.tsx} +108 -83
- package/src/components/view/editor/DataCubeEditorDimensionsPanel.tsx +1259 -503
- package/src/components/view/editor/DataCubeEditorHorizontalPivotsPanel.tsx +5 -5
- package/src/components/view/editor/DataCubeEditorSortsPanel.tsx +10 -10
- package/src/components/view/editor/DataCubeEditorVerticalPivotsPanel.tsx +2 -2
- package/src/components/view/extend/DataCubeCodeEditor.tsx +175 -0
- package/src/components/view/extend/DataCubeCodeEditorState.tsx +72 -0
- package/src/components/view/extend/DataCubeColumnEditor.tsx +5 -133
- package/src/components/view/grid/DataCubeGrid.tsx +70 -53
- package/src/components/view/grid/DataCubeMultidimensionalGrid.tsx +3 -1
- package/src/index.tsx +3 -0
- package/src/stores/DataCubeAPI.ts +3 -1
- package/src/stores/core/DataCubeEngine.tsx +1 -1
- package/src/stores/core/DataCubeQueryEngine.ts +6 -0
- package/src/stores/core/DataCubeSnapshot.ts +1 -1
- package/src/stores/core/model/AdhocQueryDataCubeSource.ts +3 -0
- package/src/stores/core/model/DataCubeConfiguration.ts +31 -0
- package/src/stores/services/DataCubeSettingService.tsx +10 -6
- package/src/stores/view/DataCubeInfoState.ts +4 -0
- package/src/stores/view/editor/DataCubeEditorColumnsPanelState.ts +13 -13
- package/src/stores/view/editor/{DataCubeEditorColumnSelectorState.ts → DataCubeEditorColumnsSelectorState.ts} +6 -6
- package/src/stores/view/editor/DataCubeEditorDimensionsPanelState.ts +162 -58
- package/src/stores/view/editor/DataCubeEditorHorizontalPivotsPanelState.ts +12 -11
- package/src/stores/view/editor/DataCubeEditorMutableConfiguration.ts +8 -0
- package/src/stores/view/editor/DataCubeEditorSortsPanelState.ts +10 -10
- package/src/stores/view/editor/DataCubeEditorState.tsx +6 -0
- package/src/stores/view/editor/DataCubeEditorVerticalPivotsPanelState.ts +11 -11
- package/src/stores/view/extend/DataCubeColumnEditorState.tsx +16 -26
- package/src/stores/view/grid/DataCubeGridClientEngine.ts +8 -0
- package/src/stores/view/grid/DataCubeGridClientExportEngine.ts +1 -1
- package/src/stores/view/grid/DataCubeGridMenuBuilder.tsx +26 -1
- package/src/stores/view/grid/DataCubeGridState.ts +23 -6
- package/tsconfig.json +4 -3
- package/lib/components/view/editor/DataCubeEditorColumnSelector.d.ts +0 -38
- package/lib/components/view/editor/DataCubeEditorColumnSelector.d.ts.map +0 -1
- package/lib/components/view/editor/DataCubeEditorColumnSelector.js.map +0 -1
- package/lib/components/view/grid/DataCubeGridShared.d.ts.map +0 -1
- package/lib/components/view/grid/DataCubeGridShared.js +0 -25
- package/lib/components/view/grid/DataCubeGridShared.js.map +0 -1
- package/lib/stores/view/editor/DataCubeEditorColumnSelectorState.d.ts.map +0 -1
- package/lib/stores/view/editor/DataCubeEditorColumnSelectorState.js.map +0 -1
- package/src/components/view/grid/DataCubeGridShared.tsx +0 -42
|
@@ -33,10 +33,10 @@ import {
|
|
|
33
33
|
type CustomNoRowsOverlayProps,
|
|
34
34
|
} from 'ag-grid-react';
|
|
35
35
|
import {
|
|
36
|
-
type
|
|
37
|
-
type
|
|
38
|
-
type
|
|
39
|
-
} from '../../../stores/view/editor/
|
|
36
|
+
type DataCubeEditorColumnsSelectorSortColumnState,
|
|
37
|
+
type DataCubeEditorColumnsSelectorColumnState,
|
|
38
|
+
type DataCubeEditorColumnsSelectorState,
|
|
39
|
+
} from '../../../stores/view/editor/DataCubeEditorColumnsSelectorState.js';
|
|
40
40
|
import { isNonNullable } from '@finos/legend-shared';
|
|
41
41
|
import {
|
|
42
42
|
getDataForAllFilteredNodes,
|
|
@@ -47,12 +47,16 @@ import {
|
|
|
47
47
|
FormDropdownMenuItem,
|
|
48
48
|
} from '../../core/DataCubeFormUtils.js';
|
|
49
49
|
import { DataCubeQuerySortDirection } from '../../../stores/core/DataCubeQueryEngine.js';
|
|
50
|
+
import { _findCol } from '../../../stores/core/model/DataCubeColumn.js';
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
export const INTERNAL__EDITOR_COLUMNS_SELECTOR_ROW_HEIGHT = 20;
|
|
53
|
+
|
|
54
|
+
export function getColumnsSelectorBaseGridProps<
|
|
55
|
+
T extends { name: string } = DataCubeEditorColumnsSelectorColumnState,
|
|
53
56
|
>(): AgGridReactProps<T> {
|
|
54
57
|
return {
|
|
55
58
|
modules: [AllCommunityModule],
|
|
59
|
+
theme: 'legacy',
|
|
56
60
|
className: 'ag-theme-quartz',
|
|
57
61
|
animateRows: false,
|
|
58
62
|
getRowId: (params) => params.data.name,
|
|
@@ -67,8 +71,8 @@ function getBaseGridProps<
|
|
|
67
71
|
},
|
|
68
72
|
selectionColumnDef: {
|
|
69
73
|
width: 40,
|
|
70
|
-
headerClass: '
|
|
71
|
-
cellClass: '
|
|
74
|
+
headerClass: 'pl-6',
|
|
75
|
+
cellClass: 'pl-1.5',
|
|
72
76
|
rowDrag: true,
|
|
73
77
|
rowDragText: (params, dragItemCount) => {
|
|
74
78
|
if (dragItemCount > 1) {
|
|
@@ -81,8 +85,8 @@ function getBaseGridProps<
|
|
|
81
85
|
suppressHeaderMenuButton: true,
|
|
82
86
|
},
|
|
83
87
|
suppressMoveWhenRowDragging: true,
|
|
84
|
-
rowHeight:
|
|
85
|
-
headerHeight:
|
|
88
|
+
rowHeight: INTERNAL__EDITOR_COLUMNS_SELECTOR_ROW_HEIGHT,
|
|
89
|
+
headerHeight: INTERNAL__EDITOR_COLUMNS_SELECTOR_ROW_HEIGHT,
|
|
86
90
|
suppressRowHoverHighlight: false,
|
|
87
91
|
noRowsOverlayComponent: (
|
|
88
92
|
params: CustomNoRowsOverlayProps<T> & {
|
|
@@ -116,8 +120,8 @@ function getBaseGridProps<
|
|
|
116
120
|
};
|
|
117
121
|
}
|
|
118
122
|
|
|
119
|
-
function
|
|
120
|
-
T extends
|
|
123
|
+
export function getColumnsSelectorBaseColumnDef<
|
|
124
|
+
T extends { name: string } = DataCubeEditorColumnsSelectorColumnState,
|
|
121
125
|
>(): ColDef<T> {
|
|
122
126
|
return {
|
|
123
127
|
field: 'name' as ColDefField<T>,
|
|
@@ -137,9 +141,10 @@ function getBaseColumnDef<
|
|
|
137
141
|
*/
|
|
138
142
|
const ColumnsSearchResultCountBadge = observer(
|
|
139
143
|
function ColumnsSearchResultCountBadge<
|
|
140
|
-
T extends
|
|
144
|
+
T extends
|
|
145
|
+
DataCubeEditorColumnsSelectorColumnState = DataCubeEditorColumnsSelectorColumnState,
|
|
141
146
|
>(props: {
|
|
142
|
-
selector:
|
|
147
|
+
selector: DataCubeEditorColumnsSelectorState<T>;
|
|
143
148
|
gridApi: GridApi<T>;
|
|
144
149
|
scope: 'available' | 'selected';
|
|
145
150
|
}) {
|
|
@@ -158,20 +163,21 @@ const ColumnsSearchResultCountBadge = observer(
|
|
|
158
163
|
},
|
|
159
164
|
);
|
|
160
165
|
|
|
161
|
-
export const
|
|
162
|
-
function
|
|
163
|
-
T extends
|
|
166
|
+
export const DataCubeEditorColumnsSelector = observer(
|
|
167
|
+
function DataCubeEditorColumnsSelector<
|
|
168
|
+
T extends
|
|
169
|
+
DataCubeEditorColumnsSelectorColumnState = DataCubeEditorColumnsSelectorColumnState,
|
|
164
170
|
>(props: {
|
|
165
|
-
selector:
|
|
171
|
+
selector: DataCubeEditorColumnsSelectorState<T>;
|
|
166
172
|
columnLabelRenderer?:
|
|
167
173
|
| ((p: {
|
|
168
|
-
selector:
|
|
174
|
+
selector: DataCubeEditorColumnsSelectorState<T>;
|
|
169
175
|
column: T;
|
|
170
176
|
}) => React.ReactNode)
|
|
171
177
|
| undefined;
|
|
172
178
|
columnActionRenderer?:
|
|
173
179
|
| ((p: {
|
|
174
|
-
selector:
|
|
180
|
+
selector: DataCubeEditorColumnsSelectorState<T>;
|
|
175
181
|
column: T;
|
|
176
182
|
}) => React.ReactNode)
|
|
177
183
|
| undefined;
|
|
@@ -198,6 +204,24 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
198
204
|
);
|
|
199
205
|
const searchSelectedColumnsInputRef = useRef<HTMLInputElement | null>(null);
|
|
200
206
|
|
|
207
|
+
const onAvailableColumnsDragStop = useCallback(
|
|
208
|
+
(params: RowDragEndEvent<T>) => {
|
|
209
|
+
// NOTE: here, we do not scope the columns being moved by the search
|
|
210
|
+
// this is a complicated behavior to implement and it's not clear if
|
|
211
|
+
// it's necessary, the current behavior is sensible in its own way.
|
|
212
|
+
const columnsToMove = params.nodes
|
|
213
|
+
.map((node) => node.data)
|
|
214
|
+
.filter(isNonNullable);
|
|
215
|
+
|
|
216
|
+
selector.setSelectedColumns(
|
|
217
|
+
selector.selectedColumns.filter(
|
|
218
|
+
(column) => !_findCol(columnsToMove, column.name),
|
|
219
|
+
),
|
|
220
|
+
);
|
|
221
|
+
},
|
|
222
|
+
[selector],
|
|
223
|
+
);
|
|
224
|
+
|
|
201
225
|
/**
|
|
202
226
|
* Since we use managed row dragging for selected columns,
|
|
203
227
|
* we just need to sync the row data with the state.
|
|
@@ -211,21 +235,6 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
211
235
|
[selector],
|
|
212
236
|
);
|
|
213
237
|
|
|
214
|
-
const onAvailableColumnsDragStop = useCallback(
|
|
215
|
-
(params: RowDragEndEvent<T>) => {
|
|
216
|
-
const nodes = params.nodes;
|
|
217
|
-
const columnsToMove = nodes
|
|
218
|
-
.map((node) => node.data)
|
|
219
|
-
.filter(isNonNullable);
|
|
220
|
-
selector.setSelectedColumns(
|
|
221
|
-
selector.selectedColumns.filter(
|
|
222
|
-
(column) => !columnsToMove.includes(column),
|
|
223
|
-
),
|
|
224
|
-
);
|
|
225
|
-
},
|
|
226
|
-
[selector],
|
|
227
|
-
);
|
|
228
|
-
|
|
229
238
|
/**
|
|
230
239
|
* Since we use managed row dragging for selected columns,
|
|
231
240
|
* we just need to sync the row data with the state
|
|
@@ -233,6 +242,8 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
233
242
|
* handled by ag-grid.
|
|
234
243
|
*/
|
|
235
244
|
const onSelectedColumnsDragEnd = useCallback(
|
|
245
|
+
// this event hook is mainly meant for reordering columns within
|
|
246
|
+
// selected columns table
|
|
236
247
|
(event: RowDragEndEvent) => {
|
|
237
248
|
if (event.overIndex === -1) {
|
|
238
249
|
return;
|
|
@@ -243,38 +254,43 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
243
254
|
);
|
|
244
255
|
|
|
245
256
|
/**
|
|
246
|
-
* Setup
|
|
257
|
+
* Setup drop zones for each grid to allow moving columns between them
|
|
247
258
|
* See https://www.ag-grid.com/react-data-grid/row-dragging-to-grid/
|
|
248
259
|
*/
|
|
249
260
|
useEffect(() => {
|
|
250
261
|
if (!availableColumnsGridApi || !selectedColumnsGridApi) {
|
|
251
262
|
return;
|
|
252
263
|
}
|
|
264
|
+
|
|
253
265
|
const selectedColumnsDropZoneParams =
|
|
254
|
-
selectedColumnsGridApi.
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
266
|
+
!selectedColumnsGridApi.isDestroyed()
|
|
267
|
+
? selectedColumnsGridApi.getRowDropZoneParams({
|
|
268
|
+
onDragStop: (event) => {
|
|
269
|
+
onSelectedColumnsDragStop(event);
|
|
270
|
+
availableColumnsGridApi.clearFocusedCell();
|
|
271
|
+
},
|
|
272
|
+
})
|
|
273
|
+
: undefined;
|
|
274
|
+
if (
|
|
275
|
+
selectedColumnsDropZoneParams &&
|
|
276
|
+
!availableColumnsGridApi.isDestroyed()
|
|
277
|
+
) {
|
|
264
278
|
availableColumnsGridApi.addRowDropZone(selectedColumnsDropZoneParams);
|
|
265
279
|
}
|
|
266
280
|
|
|
267
281
|
const availableColumnsDropZoneParams =
|
|
268
|
-
availableColumnsGridApi.
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
282
|
+
!availableColumnsGridApi.isDestroyed()
|
|
283
|
+
? availableColumnsGridApi.getRowDropZoneParams({
|
|
284
|
+
onDragStop: (event) => {
|
|
285
|
+
onAvailableColumnsDragStop(event);
|
|
286
|
+
selectedColumnsGridApi.clearFocusedCell();
|
|
287
|
+
},
|
|
288
|
+
})
|
|
289
|
+
: undefined;
|
|
290
|
+
if (
|
|
291
|
+
availableColumnsDropZoneParams &&
|
|
292
|
+
!selectedColumnsGridApi.isDestroyed()
|
|
293
|
+
) {
|
|
278
294
|
selectedColumnsGridApi.addRowDropZone(availableColumnsDropZoneParams);
|
|
279
295
|
}
|
|
280
296
|
}, [
|
|
@@ -295,7 +311,7 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
295
311
|
<input
|
|
296
312
|
className="h-full w-full pl-10 pr-6 placeholder-neutral-400"
|
|
297
313
|
ref={searchAvailableColumnsInputRef}
|
|
298
|
-
placeholder="
|
|
314
|
+
placeholder="Search columns..."
|
|
299
315
|
value={selector.availableColumnsSearchText}
|
|
300
316
|
onChange={(event) =>
|
|
301
317
|
selector.setAvailableColumnsSearchText(event.target.value)
|
|
@@ -325,8 +341,7 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
325
341
|
</div>
|
|
326
342
|
<div className="h-[calc(100%_-_24px)]">
|
|
327
343
|
<AgGridReact
|
|
328
|
-
|
|
329
|
-
{...getBaseGridProps<T>()}
|
|
344
|
+
{...getColumnsSelectorBaseGridProps<T>()}
|
|
330
345
|
// Disable managed row-dragging to disallow changing the order of columns
|
|
331
346
|
// and to make sure the row data and the available columns state are in sync
|
|
332
347
|
rowDragManaged={false}
|
|
@@ -344,7 +359,7 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
344
359
|
rowData={selector.availableColumnsForDisplay}
|
|
345
360
|
columnDefs={[
|
|
346
361
|
{
|
|
347
|
-
...
|
|
362
|
+
...getColumnsSelectorBaseColumnDef<T>(),
|
|
348
363
|
/**
|
|
349
364
|
* Support double-click to add all (filtered by search) columns
|
|
350
365
|
*/
|
|
@@ -354,12 +369,12 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
354
369
|
className="flex h-full w-full items-center justify-between pl-0.5"
|
|
355
370
|
onDoubleClick={() => {
|
|
356
371
|
// The columns being moved are scoped by the current search
|
|
357
|
-
const
|
|
372
|
+
const filteredNodes = getDataForAllFilteredNodes(
|
|
358
373
|
params.api,
|
|
359
374
|
);
|
|
360
375
|
selector.setSelectedColumns([
|
|
361
376
|
...selector.selectedColumns,
|
|
362
|
-
...
|
|
377
|
+
...filteredNodes,
|
|
363
378
|
]);
|
|
364
379
|
params.api.clearFocusedCell();
|
|
365
380
|
}}
|
|
@@ -417,21 +432,24 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
417
432
|
<div className="flex flex-col">
|
|
418
433
|
<button
|
|
419
434
|
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"
|
|
420
|
-
title="Add selected
|
|
435
|
+
title="Add selected column(s)"
|
|
421
436
|
/**
|
|
422
437
|
* Support add selected (filtered by search) columns
|
|
423
438
|
* We reset the selection after this operation
|
|
424
439
|
*/
|
|
425
440
|
onClick={() => {
|
|
426
|
-
if (
|
|
441
|
+
if (
|
|
442
|
+
!availableColumnsGridApi ||
|
|
443
|
+
selectedAvailableColumns.length === 0
|
|
444
|
+
) {
|
|
427
445
|
return;
|
|
428
446
|
}
|
|
429
447
|
// The columns being moved are scoped by the current search
|
|
430
|
-
const
|
|
448
|
+
const filteredNodes = getDataForAllFilteredNodes(
|
|
431
449
|
availableColumnsGridApi,
|
|
432
450
|
);
|
|
433
451
|
const columnsToMove = selectedAvailableColumns.filter(
|
|
434
|
-
(column) =>
|
|
452
|
+
(column) => _findCol(filteredNodes, column.name),
|
|
435
453
|
);
|
|
436
454
|
selector.setSelectedColumns([
|
|
437
455
|
...selector.selectedColumns,
|
|
@@ -439,36 +457,44 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
439
457
|
]);
|
|
440
458
|
availableColumnsGridApi.clearFocusedCell();
|
|
441
459
|
}}
|
|
442
|
-
disabled={
|
|
460
|
+
disabled={
|
|
461
|
+
!availableColumnsGridApi ||
|
|
462
|
+
selectedAvailableColumns.length === 0
|
|
463
|
+
}
|
|
443
464
|
>
|
|
444
465
|
<DataCubeIcon.ChevronRight className="text-2xl" />
|
|
445
466
|
</button>
|
|
446
467
|
<button
|
|
447
468
|
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"
|
|
448
|
-
title="Remove selected
|
|
469
|
+
title="Remove selected column(s)"
|
|
449
470
|
/**
|
|
450
471
|
* Support remove selected (filtered by search) columns
|
|
451
472
|
* We reset the selection after this operation
|
|
452
473
|
*/
|
|
453
474
|
onClick={() => {
|
|
454
|
-
if (
|
|
475
|
+
if (
|
|
476
|
+
!selectedColumnsGridApi ||
|
|
477
|
+
selectedSelectedColumns.length === 0
|
|
478
|
+
) {
|
|
455
479
|
return;
|
|
456
480
|
}
|
|
457
481
|
// The columns being moved are scoped by the current search
|
|
458
|
-
const
|
|
482
|
+
const filteredNodes = getDataForAllFilteredNodes(
|
|
459
483
|
selectedColumnsGridApi,
|
|
460
484
|
);
|
|
461
485
|
const columnsToMove = selectedSelectedColumns.filter((column) =>
|
|
462
|
-
|
|
486
|
+
_findCol(filteredNodes, column.name),
|
|
463
487
|
);
|
|
464
488
|
selector.setSelectedColumns(
|
|
465
489
|
selector.selectedColumns.filter(
|
|
466
|
-
(column) => !columnsToMove.
|
|
490
|
+
(column) => !_findCol(columnsToMove, column.name),
|
|
467
491
|
),
|
|
468
492
|
);
|
|
469
493
|
selectedColumnsGridApi.clearFocusedCell();
|
|
470
494
|
}}
|
|
471
|
-
disabled={
|
|
495
|
+
disabled={
|
|
496
|
+
!selectedColumnsGridApi || selectedSelectedColumns.length === 0
|
|
497
|
+
}
|
|
472
498
|
>
|
|
473
499
|
<DataCubeIcon.ChevronLeft className="text-2xl" />
|
|
474
500
|
</button>
|
|
@@ -481,7 +507,7 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
481
507
|
<input
|
|
482
508
|
className="h-full w-full pl-10 placeholder-neutral-400"
|
|
483
509
|
ref={searchSelectedColumnsInputRef}
|
|
484
|
-
placeholder="
|
|
510
|
+
placeholder="Search columns..."
|
|
485
511
|
value={selector.selectedColumnsSearchText}
|
|
486
512
|
onChange={(event) =>
|
|
487
513
|
selector.setSelectedColumnsSearchText(event.target.value)
|
|
@@ -510,8 +536,7 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
510
536
|
</div>
|
|
511
537
|
<div className="h-[calc(100%_-_24px)]">
|
|
512
538
|
<AgGridReact
|
|
513
|
-
|
|
514
|
-
{...getBaseGridProps<T>()}
|
|
539
|
+
{...getColumnsSelectorBaseGridProps<T>()}
|
|
515
540
|
// NOTE: technically, we don't want to enable managed row-dragging here
|
|
516
541
|
// but enabling this gives us free row moving management and interaction
|
|
517
542
|
// comes out of the box from ag-grid, we will just sync the state with
|
|
@@ -535,7 +560,7 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
535
560
|
rowData={selector.selectedColumnsForDisplay}
|
|
536
561
|
columnDefs={[
|
|
537
562
|
{
|
|
538
|
-
...
|
|
563
|
+
...getColumnsSelectorBaseColumnDef<T>(),
|
|
539
564
|
/**
|
|
540
565
|
* Support double-click to remove all (filtered by search) columns
|
|
541
566
|
*/
|
|
@@ -545,12 +570,12 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
545
570
|
className="flex h-full w-full items-center justify-between pl-0.5"
|
|
546
571
|
onDoubleClick={() => {
|
|
547
572
|
// The columns being moved are scoped by the current search
|
|
548
|
-
const
|
|
573
|
+
const filteredNodes = getDataForAllFilteredNodes(
|
|
549
574
|
params.api,
|
|
550
575
|
);
|
|
551
576
|
selector.setSelectedColumns(
|
|
552
577
|
selector.selectedColumns.filter(
|
|
553
|
-
(column) => !
|
|
578
|
+
(column) => !_findCol(filteredNodes, column.name),
|
|
554
579
|
),
|
|
555
580
|
);
|
|
556
581
|
params.api.clearFocusedCell();
|
|
@@ -573,7 +598,7 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
573
598
|
return (
|
|
574
599
|
<div
|
|
575
600
|
className="flex h-full w-full cursor-pointer items-center"
|
|
576
|
-
title={`[${data.name}]\nDouble-click to
|
|
601
|
+
title={`[${data.name}]\nDouble-click to remove column`}
|
|
577
602
|
onDoubleClick={() => {
|
|
578
603
|
selector.setSelectedColumns(
|
|
579
604
|
selector.selectedColumns.filter(
|
|
@@ -611,10 +636,10 @@ export const DataCubeEditorColumnSelector = observer(
|
|
|
611
636
|
},
|
|
612
637
|
);
|
|
613
638
|
|
|
614
|
-
export const
|
|
639
|
+
export const DataCubeEditorColumnsSelectorSortDirectionDropdown = observer(
|
|
615
640
|
(props: {
|
|
616
|
-
selector:
|
|
617
|
-
column:
|
|
641
|
+
selector: DataCubeEditorColumnsSelectorState<DataCubeEditorColumnsSelectorSortColumnState>;
|
|
642
|
+
column: DataCubeEditorColumnsSelectorSortColumnState;
|
|
618
643
|
}) => {
|
|
619
644
|
const { column } = props;
|
|
620
645
|
const [
|