@mui/x-data-grid-generator 8.0.0-beta.3 → 8.1.0
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/CHANGELOG.md +388 -96
- package/columns/commodities.columns.js +1 -1
- package/columns/employees.columns.js +1 -0
- package/constants/prompts.d.ts +1 -1
- package/constants/prompts.js +8 -4
- package/esm/columns/commodities.columns.js +1 -1
- package/esm/columns/employees.columns.js +1 -0
- package/esm/constants/prompts.d.ts +1 -1
- package/esm/constants/prompts.js +8 -4
- package/esm/hooks/serverUtils.js +15 -7
- package/esm/hooks/useDemoData.js +2 -2
- package/esm/hooks/useMockServer.d.ts +2 -2
- package/esm/hooks/useMockServer.js +64 -12
- package/esm/hooks/useQuery.d.ts +6 -3
- package/esm/index.js +1 -1
- package/esm/renderer/renderCountry.d.ts +1 -2
- package/esm/renderer/renderCountry.js +3 -0
- package/esm/services/prompt-resolver.d.ts +2 -2
- package/esm/services/prompt-resolver.js +3 -2
- package/hooks/serverUtils.js +15 -7
- package/hooks/useDemoData.js +2 -2
- package/hooks/useMockServer.d.ts +2 -2
- package/hooks/useMockServer.js +64 -12
- package/hooks/useQuery.d.ts +6 -3
- package/index.js +1 -1
- package/package.json +5 -14
- package/renderer/renderCountry.d.ts +1 -2
- package/renderer/renderCountry.js +3 -0
- package/services/prompt-resolver.d.ts +2 -2
- package/services/prompt-resolver.js +3 -2
- package/modern/columns/commodities.columns.d.ts +0 -2
- package/modern/columns/commodities.columns.js +0 -231
- package/modern/columns/employees.columns.d.ts +0 -2
- package/modern/columns/employees.columns.js +0 -134
- package/modern/columns/index.d.ts +0 -2
- package/modern/columns/index.js +0 -2
- package/modern/constants/prompts.d.ts +0 -2
- package/modern/constants/prompts.js +0 -49
- package/modern/hooks/index.d.ts +0 -8
- package/modern/hooks/index.js +0 -6
- package/modern/hooks/serverUtils.d.ts +0 -61
- package/modern/hooks/serverUtils.js +0 -527
- package/modern/hooks/useBasicDemoData.d.ts +0 -2
- package/modern/hooks/useBasicDemoData.js +0 -5
- package/modern/hooks/useDemoData.d.ts +0 -30
- package/modern/hooks/useDemoData.js +0 -159
- package/modern/hooks/useMockServer.d.ts +0 -31
- package/modern/hooks/useMockServer.js +0 -265
- package/modern/hooks/useMovieData.d.ts +0 -21
- package/modern/hooks/useMovieData.js +0 -500
- package/modern/hooks/useQuery.d.ts +0 -169
- package/modern/hooks/useQuery.js +0 -84
- package/modern/index.d.ts +0 -4
- package/modern/index.js +0 -11
- package/modern/package.json +0 -1
- package/modern/renderer/index.d.ts +0 -16
- package/modern/renderer/index.js +0 -16
- package/modern/renderer/renderAvatar.d.ts +0 -6
- package/modern/renderer/renderAvatar.js +0 -14
- package/modern/renderer/renderCountry.d.ts +0 -4
- package/modern/renderer/renderCountry.js +0 -57
- package/modern/renderer/renderEditCountry.d.ts +0 -4
- package/modern/renderer/renderEditCountry.js +0 -80
- package/modern/renderer/renderEditCurrency.d.ts +0 -3
- package/modern/renderer/renderEditCurrency.js +0 -78
- package/modern/renderer/renderEditIncoterm.d.ts +0 -3
- package/modern/renderer/renderEditIncoterm.js +0 -75
- package/modern/renderer/renderEditProgress.d.ts +0 -3
- package/modern/renderer/renderEditProgress.js +0 -109
- package/modern/renderer/renderEditRating.d.ts +0 -3
- package/modern/renderer/renderEditRating.js +0 -68
- package/modern/renderer/renderEditStatus.d.ts +0 -3
- package/modern/renderer/renderEditStatus.js +0 -98
- package/modern/renderer/renderEmail.d.ts +0 -3
- package/modern/renderer/renderEmail.js +0 -11
- package/modern/renderer/renderIncoterm.d.ts +0 -3
- package/modern/renderer/renderIncoterm.js +0 -40
- package/modern/renderer/renderLink.d.ts +0 -10
- package/modern/renderer/renderLink.js +0 -31
- package/modern/renderer/renderPnl.d.ts +0 -3
- package/modern/renderer/renderPnl.js +0 -41
- package/modern/renderer/renderProgress.d.ts +0 -3
- package/modern/renderer/renderProgress.js +0 -70
- package/modern/renderer/renderRating.d.ts +0 -3
- package/modern/renderer/renderRating.js +0 -38
- package/modern/renderer/renderStatus.d.ts +0 -3
- package/modern/renderer/renderStatus.js +0 -74
- package/modern/renderer/renderTotalPrice.d.ts +0 -3
- package/modern/renderer/renderTotalPrice.js +0 -49
- package/modern/services/asyncWorker.d.ts +0 -11
- package/modern/services/asyncWorker.js +0 -27
- package/modern/services/basic-data-service.d.ts +0 -13
- package/modern/services/basic-data-service.js +0 -37
- package/modern/services/gridColDefGenerator.d.ts +0 -23
- package/modern/services/gridColDefGenerator.js +0 -1
- package/modern/services/index.d.ts +0 -5
- package/modern/services/index.js +0 -5
- package/modern/services/prompt-resolver.d.ts +0 -2
- package/modern/services/prompt-resolver.js +0 -13
- package/modern/services/random-generator.d.ts +0 -49
- package/modern/services/random-generator.js +0 -124
- package/modern/services/real-data-service.d.ts +0 -8
- package/modern/services/real-data-service.js +0 -49
- package/modern/services/static-data.d.ts +0 -18
- package/modern/services/static-data.js +0 -1258
- package/modern/services/tree-data-generator.d.ts +0 -21
- package/modern/services/tree-data-generator.js +0 -70
- package/tsconfig.build.tsbuildinfo +0 -1
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
export const mockPrompts = new Map([['sort by name', {
|
|
2
|
-
select: -1,
|
|
3
|
-
filters: [],
|
|
4
|
-
aggregation: {},
|
|
5
|
-
sorting: [{
|
|
6
|
-
column: 'name',
|
|
7
|
-
direction: 'asc'
|
|
8
|
-
}],
|
|
9
|
-
grouping: [],
|
|
10
|
-
error: null
|
|
11
|
-
}], ['sort by company name and employee name', {
|
|
12
|
-
select: -1,
|
|
13
|
-
filters: [],
|
|
14
|
-
aggregation: {},
|
|
15
|
-
sorting: [{
|
|
16
|
-
column: 'company',
|
|
17
|
-
direction: 'asc'
|
|
18
|
-
}, {
|
|
19
|
-
column: 'name',
|
|
20
|
-
direction: 'asc'
|
|
21
|
-
}],
|
|
22
|
-
grouping: [],
|
|
23
|
-
error: null
|
|
24
|
-
}], ['show people from the eu', {
|
|
25
|
-
select: -1,
|
|
26
|
-
filters: [{
|
|
27
|
-
column: 'country',
|
|
28
|
-
operator: 'isAnyOf',
|
|
29
|
-
value: ['AT', 'BE', 'BG', 'CY', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'MT', 'NL', 'PL', 'PT', 'RO', 'SE', 'SI', 'SK']
|
|
30
|
-
}],
|
|
31
|
-
aggregation: {},
|
|
32
|
-
sorting: [],
|
|
33
|
-
grouping: [],
|
|
34
|
-
error: null
|
|
35
|
-
}], ['order companies by amount of people', {
|
|
36
|
-
select: -1,
|
|
37
|
-
filters: [],
|
|
38
|
-
aggregation: {
|
|
39
|
-
id: 'size'
|
|
40
|
-
},
|
|
41
|
-
sorting: [{
|
|
42
|
-
column: 'id',
|
|
43
|
-
direction: 'desc'
|
|
44
|
-
}],
|
|
45
|
-
grouping: [{
|
|
46
|
-
column: 'company'
|
|
47
|
-
}],
|
|
48
|
-
error: null
|
|
49
|
-
}]]);
|
package/modern/hooks/index.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export * from "./useDemoData.js";
|
|
2
|
-
export * from "./useBasicDemoData.js";
|
|
3
|
-
export { useMovieData } from "./useMovieData.js";
|
|
4
|
-
export type { Movie } from './useMovieData';
|
|
5
|
-
export * from "./useQuery.js";
|
|
6
|
-
export * from "./useMockServer.js";
|
|
7
|
-
export { loadServerRows } from "./serverUtils.js";
|
|
8
|
-
export type { QueryOptions } from './serverUtils';
|
package/modern/hooks/index.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { GridRowModel, GridFilterModel, GridSortModel, GridColDef, GridRowId, GridPaginationModel, GridValidRowModel, GridAggregationModel } from '@mui/x-data-grid-premium';
|
|
2
|
-
export interface FakeServerResponse {
|
|
3
|
-
returnedRows: GridRowModel[];
|
|
4
|
-
aggregateRow?: GridValidRowModel;
|
|
5
|
-
nextCursor?: string;
|
|
6
|
-
hasNextPage?: boolean;
|
|
7
|
-
totalRowCount: number;
|
|
8
|
-
}
|
|
9
|
-
export interface PageInfo {
|
|
10
|
-
totalRowCount?: number;
|
|
11
|
-
nextCursor?: string;
|
|
12
|
-
hasNextPage?: boolean;
|
|
13
|
-
pageSize?: number;
|
|
14
|
-
}
|
|
15
|
-
export interface DefaultServerOptions {
|
|
16
|
-
minDelay: number;
|
|
17
|
-
maxDelay: number;
|
|
18
|
-
useCursorPagination?: boolean;
|
|
19
|
-
}
|
|
20
|
-
export type ServerOptions = Partial<DefaultServerOptions>;
|
|
21
|
-
export interface QueryOptions {
|
|
22
|
-
cursor?: GridRowId;
|
|
23
|
-
page?: number;
|
|
24
|
-
pageSize?: number;
|
|
25
|
-
filterModel?: GridFilterModel;
|
|
26
|
-
aggregationModel?: GridAggregationModel;
|
|
27
|
-
sortModel?: GridSortModel;
|
|
28
|
-
start?: number;
|
|
29
|
-
end?: number;
|
|
30
|
-
}
|
|
31
|
-
export interface ServerSideQueryOptions {
|
|
32
|
-
cursor?: GridRowId;
|
|
33
|
-
paginationModel?: GridPaginationModel;
|
|
34
|
-
groupKeys?: string[];
|
|
35
|
-
filterModel?: GridFilterModel;
|
|
36
|
-
sortModel?: GridSortModel;
|
|
37
|
-
aggregationModel?: GridAggregationModel;
|
|
38
|
-
start?: number;
|
|
39
|
-
end?: number;
|
|
40
|
-
groupFields?: string[];
|
|
41
|
-
}
|
|
42
|
-
export declare const disableDelay: any;
|
|
43
|
-
export declare const DEFAULT_SERVER_OPTIONS: DefaultServerOptions;
|
|
44
|
-
/**
|
|
45
|
-
* Simulates server data loading
|
|
46
|
-
*/
|
|
47
|
-
export declare const loadServerRows: (rows: GridRowModel[], queryOptions: QueryOptions, serverOptions: ServerOptions, columnsWithDefaultColDef: GridColDef[]) => Promise<FakeServerResponse>;
|
|
48
|
-
interface NestedDataRowsResponse {
|
|
49
|
-
rows: GridRowModel[];
|
|
50
|
-
rootRowCount: number;
|
|
51
|
-
aggregateRow?: GridRowModel;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Simulates server data for tree-data feature
|
|
55
|
-
*/
|
|
56
|
-
export declare const processTreeDataRows: (rows: GridRowModel[], queryOptions: ServerSideQueryOptions, serverOptions: ServerOptions, columnsWithDefaultColDef: GridColDef[]) => Promise<NestedDataRowsResponse>;
|
|
57
|
-
/**
|
|
58
|
-
* Simulates server data for row grouping feature
|
|
59
|
-
*/
|
|
60
|
-
export declare const processRowGroupingRows: (rows: GridValidRowModel[], queryOptions: ServerSideQueryOptions, serverOptions: ServerOptions, columnsWithDefaultColDef: GridColDef[]) => Promise<NestedDataRowsResponse>;
|
|
61
|
-
export {};
|
|
@@ -1,527 +0,0 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
-
import { GridLogicOperator, GRID_AGGREGATION_FUNCTIONS } from '@mui/x-data-grid-premium';
|
|
3
|
-
import { randomInt } from "../services/random-generator.js";
|
|
4
|
-
const getAvailableAggregationFunctions = columnType => {
|
|
5
|
-
const availableAggregationFunctions = new Map();
|
|
6
|
-
Object.keys(GRID_AGGREGATION_FUNCTIONS).forEach(functionName => {
|
|
7
|
-
const columnTypes = GRID_AGGREGATION_FUNCTIONS[functionName].columnTypes;
|
|
8
|
-
if (!columnTypes || columnTypes.includes(columnType ?? 'string')) {
|
|
9
|
-
availableAggregationFunctions.set(functionName, GRID_AGGREGATION_FUNCTIONS[functionName]);
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
return availableAggregationFunctions;
|
|
13
|
-
};
|
|
14
|
-
export const disableDelay = typeof DISABLE_CHANCE_RANDOM !== 'undefined' && DISABLE_CHANCE_RANDOM;
|
|
15
|
-
export const DEFAULT_SERVER_OPTIONS = {
|
|
16
|
-
minDelay: disableDelay ? 0 : 100,
|
|
17
|
-
maxDelay: disableDelay ? 0 : 300,
|
|
18
|
-
useCursorPagination: true
|
|
19
|
-
};
|
|
20
|
-
const apiRef = {};
|
|
21
|
-
const simplifiedValueGetter = (field, colDef) => row => {
|
|
22
|
-
return colDef.valueGetter?.(row[row.id], row, colDef, apiRef) || row[field];
|
|
23
|
-
};
|
|
24
|
-
const getRowComparator = (sortModel, columnsWithDefaultColDef) => {
|
|
25
|
-
if (!sortModel) {
|
|
26
|
-
const comparator = () => 0;
|
|
27
|
-
return comparator;
|
|
28
|
-
}
|
|
29
|
-
const sortOperators = sortModel.map(sortItem => {
|
|
30
|
-
const columnField = sortItem.field;
|
|
31
|
-
const colDef = columnsWithDefaultColDef.find(({
|
|
32
|
-
field
|
|
33
|
-
}) => field === columnField);
|
|
34
|
-
return _extends({}, sortItem, {
|
|
35
|
-
valueGetter: simplifiedValueGetter(columnField, colDef),
|
|
36
|
-
sortComparator: colDef.sortComparator
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
const comparator = (row1, row2) => sortOperators.reduce((acc, {
|
|
40
|
-
valueGetter,
|
|
41
|
-
sort,
|
|
42
|
-
sortComparator
|
|
43
|
-
}) => {
|
|
44
|
-
if (acc !== 0) {
|
|
45
|
-
return acc;
|
|
46
|
-
}
|
|
47
|
-
const v1 = valueGetter(row1);
|
|
48
|
-
const v2 = valueGetter(row2);
|
|
49
|
-
return sort === 'desc' ? -1 * sortComparator(v1, v2) : sortComparator(v1, v2);
|
|
50
|
-
}, 0);
|
|
51
|
-
return comparator;
|
|
52
|
-
};
|
|
53
|
-
const buildQuickFilterApplier = (filterModel, columns) => {
|
|
54
|
-
const quickFilterValues = filterModel.quickFilterValues?.filter(Boolean) ?? [];
|
|
55
|
-
if (quickFilterValues.length === 0) {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
const appliersPerField = [];
|
|
59
|
-
const stubApiRef = {
|
|
60
|
-
current: {
|
|
61
|
-
getRowFormattedValue: (row, c) => {
|
|
62
|
-
const field = c.field;
|
|
63
|
-
return row[field];
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
columns.forEach(column => {
|
|
68
|
-
const getApplyQuickFilterFn = column?.getApplyQuickFilterFn;
|
|
69
|
-
if (getApplyQuickFilterFn) {
|
|
70
|
-
appliersPerField.push({
|
|
71
|
-
column,
|
|
72
|
-
appliers: quickFilterValues.map(quickFilterValue => {
|
|
73
|
-
return {
|
|
74
|
-
fn: getApplyQuickFilterFn(quickFilterValue, column, stubApiRef)
|
|
75
|
-
};
|
|
76
|
-
})
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
return function isRowMatchingQuickFilter(row, shouldApplyFilter) {
|
|
81
|
-
const result = {};
|
|
82
|
-
|
|
83
|
-
/* eslint-disable no-labels */
|
|
84
|
-
outer: for (let v = 0; v < quickFilterValues.length; v += 1) {
|
|
85
|
-
const filterValue = quickFilterValues[v];
|
|
86
|
-
for (let i = 0; i < appliersPerField.length; i += 1) {
|
|
87
|
-
const {
|
|
88
|
-
column,
|
|
89
|
-
appliers
|
|
90
|
-
} = appliersPerField[i];
|
|
91
|
-
const {
|
|
92
|
-
field
|
|
93
|
-
} = column;
|
|
94
|
-
if (shouldApplyFilter && !shouldApplyFilter(field)) {
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
const applier = appliers[v];
|
|
98
|
-
const value = row[field];
|
|
99
|
-
if (applier.fn === null) {
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
const isMatching = applier.fn(value, row, column, stubApiRef);
|
|
103
|
-
if (isMatching) {
|
|
104
|
-
result[filterValue] = true;
|
|
105
|
-
continue outer;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
result[filterValue] = false;
|
|
109
|
-
}
|
|
110
|
-
/* eslint-enable no-labels */
|
|
111
|
-
|
|
112
|
-
return result;
|
|
113
|
-
};
|
|
114
|
-
};
|
|
115
|
-
const getQuicklyFilteredRows = (rows, filterModel, columnsWithDefaultColDef) => {
|
|
116
|
-
if (filterModel === undefined || filterModel.quickFilterValues?.length === 0) {
|
|
117
|
-
return rows;
|
|
118
|
-
}
|
|
119
|
-
const isRowMatchingQuickFilter = buildQuickFilterApplier(filterModel, columnsWithDefaultColDef);
|
|
120
|
-
if (isRowMatchingQuickFilter) {
|
|
121
|
-
return rows.filter(row => {
|
|
122
|
-
const result = isRowMatchingQuickFilter(row);
|
|
123
|
-
return filterModel.quickFilterLogicOperator === GridLogicOperator.And ? Object.values(result).every(Boolean) : Object.values(result).some(Boolean);
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
return rows;
|
|
127
|
-
};
|
|
128
|
-
const getFilteredRows = (rows, filterModel, columnsWithDefaultColDef) => {
|
|
129
|
-
if (filterModel === undefined || filterModel.items.length === 0) {
|
|
130
|
-
return rows;
|
|
131
|
-
}
|
|
132
|
-
const valueGetters = filterModel.items.map(({
|
|
133
|
-
field
|
|
134
|
-
}) => simplifiedValueGetter(field, columnsWithDefaultColDef.find(column => column.field === field)));
|
|
135
|
-
const filterFunctions = filterModel.items.map(filterItem => {
|
|
136
|
-
const {
|
|
137
|
-
field,
|
|
138
|
-
operator
|
|
139
|
-
} = filterItem;
|
|
140
|
-
const colDef = columnsWithDefaultColDef.find(column => column.field === field);
|
|
141
|
-
if (!colDef.filterOperators) {
|
|
142
|
-
throw new Error(`MUI: No filter operator found for column '${field}'.`);
|
|
143
|
-
}
|
|
144
|
-
const filterOperator = colDef.filterOperators.find(({
|
|
145
|
-
value
|
|
146
|
-
}) => operator === value);
|
|
147
|
-
let parsedValue = filterItem.value;
|
|
148
|
-
if (colDef.valueParser) {
|
|
149
|
-
const parser = colDef.valueParser;
|
|
150
|
-
parsedValue = Array.isArray(filterItem.value) ? filterItem.value?.map(x => parser(x, {}, colDef, apiRef)) : parser(filterItem.value, {}, colDef, apiRef);
|
|
151
|
-
}
|
|
152
|
-
return filterOperator.getApplyFilterFn({
|
|
153
|
-
filterItem,
|
|
154
|
-
value: parsedValue
|
|
155
|
-
}, colDef);
|
|
156
|
-
});
|
|
157
|
-
if (filterModel.logicOperator === GridLogicOperator.Or) {
|
|
158
|
-
return rows.filter(row => filterModel.items.some((_, index) => {
|
|
159
|
-
const value = valueGetters[index](row);
|
|
160
|
-
return filterFunctions[index] === null ? true : filterFunctions[index](value);
|
|
161
|
-
}));
|
|
162
|
-
}
|
|
163
|
-
return rows.filter(row => filterModel.items.every((_, index) => {
|
|
164
|
-
const value = valueGetters[index](row);
|
|
165
|
-
return filterFunctions[index] === null ? true : filterFunctions[index](value);
|
|
166
|
-
}));
|
|
167
|
-
};
|
|
168
|
-
const applyAggregation = (aggregationModel, colDefs, rows, groupId = 'root') => {
|
|
169
|
-
const columnsToAggregate = Object.keys(aggregationModel);
|
|
170
|
-
if (columnsToAggregate.length === 0) {
|
|
171
|
-
return {};
|
|
172
|
-
}
|
|
173
|
-
const aggregateValues = {};
|
|
174
|
-
columnsToAggregate.forEach(field => {
|
|
175
|
-
const type = colDefs.find(({
|
|
176
|
-
field: f
|
|
177
|
-
}) => f === field)?.type;
|
|
178
|
-
if (!type) {
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
const availableAggregationFunctions = getAvailableAggregationFunctions(type);
|
|
182
|
-
if (!availableAggregationFunctions.has(aggregationModel[field])) {
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
const aggregationFunction = availableAggregationFunctions.get(aggregationModel[field]);
|
|
186
|
-
if (!aggregationFunction) {
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
const values = rows.map(row => row[field]);
|
|
190
|
-
aggregateValues[`${field}Aggregate`] = aggregationFunction.apply({
|
|
191
|
-
values,
|
|
192
|
-
field,
|
|
193
|
-
groupId
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
return aggregateValues;
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* Simulates server data loading
|
|
201
|
-
*/
|
|
202
|
-
export const loadServerRows = (rows, queryOptions, serverOptions, columnsWithDefaultColDef) => {
|
|
203
|
-
const {
|
|
204
|
-
minDelay = 100,
|
|
205
|
-
maxDelay = 300,
|
|
206
|
-
useCursorPagination
|
|
207
|
-
} = serverOptions;
|
|
208
|
-
if (maxDelay < minDelay) {
|
|
209
|
-
throw new Error('serverOptions.minDelay is larger than serverOptions.maxDelay ');
|
|
210
|
-
}
|
|
211
|
-
const delay = randomInt(minDelay, maxDelay);
|
|
212
|
-
const {
|
|
213
|
-
cursor,
|
|
214
|
-
page = 0,
|
|
215
|
-
pageSize,
|
|
216
|
-
start,
|
|
217
|
-
end
|
|
218
|
-
} = queryOptions;
|
|
219
|
-
let nextCursor;
|
|
220
|
-
let firstRowIndex;
|
|
221
|
-
let lastRowIndex;
|
|
222
|
-
let filteredRows = getFilteredRows(rows, queryOptions.filterModel, columnsWithDefaultColDef);
|
|
223
|
-
const rowComparator = getRowComparator(queryOptions.sortModel, columnsWithDefaultColDef);
|
|
224
|
-
filteredRows = [...filteredRows].sort(rowComparator);
|
|
225
|
-
let aggregateRow = {};
|
|
226
|
-
if (queryOptions.aggregationModel) {
|
|
227
|
-
aggregateRow = applyAggregation(queryOptions.aggregationModel, columnsWithDefaultColDef, filteredRows);
|
|
228
|
-
}
|
|
229
|
-
const totalRowCount = filteredRows.length;
|
|
230
|
-
if (start !== undefined && end !== undefined) {
|
|
231
|
-
firstRowIndex = start;
|
|
232
|
-
lastRowIndex = end;
|
|
233
|
-
} else if (!pageSize) {
|
|
234
|
-
firstRowIndex = 0;
|
|
235
|
-
lastRowIndex = filteredRows.length - 1;
|
|
236
|
-
} else if (useCursorPagination) {
|
|
237
|
-
firstRowIndex = cursor ? filteredRows.findIndex(({
|
|
238
|
-
id
|
|
239
|
-
}) => id === cursor) : 0;
|
|
240
|
-
firstRowIndex = Math.max(firstRowIndex, 0); // if cursor not found return 0
|
|
241
|
-
lastRowIndex = firstRowIndex + pageSize - 1;
|
|
242
|
-
nextCursor = filteredRows[lastRowIndex + 1]?.id;
|
|
243
|
-
} else {
|
|
244
|
-
firstRowIndex = page * pageSize;
|
|
245
|
-
lastRowIndex = (page + 1) * pageSize - 1;
|
|
246
|
-
}
|
|
247
|
-
const hasNextPage = lastRowIndex < filteredRows.length - 1;
|
|
248
|
-
const response = _extends({
|
|
249
|
-
returnedRows: filteredRows.slice(firstRowIndex, lastRowIndex + 1),
|
|
250
|
-
hasNextPage,
|
|
251
|
-
nextCursor,
|
|
252
|
-
totalRowCount
|
|
253
|
-
}, queryOptions.aggregationModel ? {
|
|
254
|
-
aggregateRow
|
|
255
|
-
} : {});
|
|
256
|
-
return new Promise(resolve => {
|
|
257
|
-
setTimeout(() => {
|
|
258
|
-
resolve(response);
|
|
259
|
-
}, delay); // simulate network latency
|
|
260
|
-
});
|
|
261
|
-
};
|
|
262
|
-
const findTreeDataRowChildren = (allRows, parentPath, pathKey = 'path', depth = 1, rowQualifier) => {
|
|
263
|
-
const parentDepth = parentPath.length;
|
|
264
|
-
const children = [];
|
|
265
|
-
for (let i = 0; i < allRows.length; i += 1) {
|
|
266
|
-
const row = allRows[i];
|
|
267
|
-
const rowPath = row[pathKey];
|
|
268
|
-
if (!rowPath) {
|
|
269
|
-
continue;
|
|
270
|
-
}
|
|
271
|
-
if ((depth < 0 && rowPath.length > parentDepth || rowPath.length === parentDepth + depth) && parentPath.every((value, index) => value === rowPath[index])) {
|
|
272
|
-
if (!rowQualifier || rowQualifier(row)) {
|
|
273
|
-
children.push(row);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
return children;
|
|
278
|
-
};
|
|
279
|
-
const getTreeDataFilteredRows = (rows, filterModel, columnsWithDefaultColDef) => {
|
|
280
|
-
let filteredRows = [...rows];
|
|
281
|
-
if (filterModel && filterModel.quickFilterValues?.length > 0) {
|
|
282
|
-
filteredRows = getQuicklyFilteredRows(rows, filterModel, columnsWithDefaultColDef);
|
|
283
|
-
}
|
|
284
|
-
if ((filterModel?.items.length ?? 0) > 0) {
|
|
285
|
-
filteredRows = getFilteredRows(filteredRows, filterModel, columnsWithDefaultColDef);
|
|
286
|
-
}
|
|
287
|
-
if (filteredRows.length === rows.length || filteredRows.length === 0) {
|
|
288
|
-
return filteredRows;
|
|
289
|
-
}
|
|
290
|
-
const pathsToIndexesMap = new Map();
|
|
291
|
-
rows.forEach((row, index) => {
|
|
292
|
-
pathsToIndexesMap.set(row.path.join(','), index);
|
|
293
|
-
});
|
|
294
|
-
const includedPaths = new Set();
|
|
295
|
-
filteredRows.forEach(row => {
|
|
296
|
-
includedPaths.add(row.path.join(','));
|
|
297
|
-
});
|
|
298
|
-
const missingChildren = [];
|
|
299
|
-
|
|
300
|
-
// include missing children of filtered rows
|
|
301
|
-
filteredRows.forEach(row => {
|
|
302
|
-
const path = row.path;
|
|
303
|
-
if (path) {
|
|
304
|
-
const children = findTreeDataRowChildren(rows, path, 'path', -1);
|
|
305
|
-
children.forEach(child => {
|
|
306
|
-
const subPath = child.path.join(',');
|
|
307
|
-
if (!includedPaths.has(subPath)) {
|
|
308
|
-
missingChildren.push(child);
|
|
309
|
-
}
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
});
|
|
313
|
-
filteredRows = missingChildren.concat(filteredRows);
|
|
314
|
-
const missingParents = [];
|
|
315
|
-
|
|
316
|
-
// include missing parents of filtered rows
|
|
317
|
-
filteredRows.forEach(row => {
|
|
318
|
-
const path = row.path;
|
|
319
|
-
if (path) {
|
|
320
|
-
includedPaths.add(path.join(','));
|
|
321
|
-
for (let i = 0; i < path.length - 1; i += 1) {
|
|
322
|
-
const subPath = path.slice(0, i + 1).join(',');
|
|
323
|
-
if (!includedPaths.has(subPath)) {
|
|
324
|
-
const index = pathsToIndexesMap.get(subPath);
|
|
325
|
-
if (index !== undefined) {
|
|
326
|
-
missingParents.push(rows[index]);
|
|
327
|
-
includedPaths.add(subPath);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
});
|
|
333
|
-
return missingParents.concat(filteredRows);
|
|
334
|
-
};
|
|
335
|
-
|
|
336
|
-
/**
|
|
337
|
-
* Simulates server data for tree-data feature
|
|
338
|
-
*/
|
|
339
|
-
export const processTreeDataRows = (rows, queryOptions, serverOptions, columnsWithDefaultColDef) => {
|
|
340
|
-
const {
|
|
341
|
-
minDelay = 100,
|
|
342
|
-
maxDelay = 300
|
|
343
|
-
} = serverOptions;
|
|
344
|
-
const pathKey = 'path';
|
|
345
|
-
// TODO: Support filtering and cursor based pagination
|
|
346
|
-
if (maxDelay < minDelay) {
|
|
347
|
-
throw new Error('serverOptions.minDelay is larger than serverOptions.maxDelay ');
|
|
348
|
-
}
|
|
349
|
-
if (queryOptions.groupKeys == null) {
|
|
350
|
-
throw new Error('serverOptions.groupKeys must be defined to compute tree data ');
|
|
351
|
-
}
|
|
352
|
-
const delay = randomInt(minDelay, maxDelay);
|
|
353
|
-
|
|
354
|
-
// apply plain filtering
|
|
355
|
-
const filteredRows = getTreeDataFilteredRows(rows, queryOptions.filterModel, columnsWithDefaultColDef);
|
|
356
|
-
|
|
357
|
-
// get root row count
|
|
358
|
-
const rootRowCount = findTreeDataRowChildren(filteredRows, []).length;
|
|
359
|
-
|
|
360
|
-
// find direct children referring to the `parentPath`
|
|
361
|
-
const childRows = findTreeDataRowChildren(filteredRows, queryOptions.groupKeys);
|
|
362
|
-
let childRowsWithDescendantCounts = childRows.map(row => {
|
|
363
|
-
const descendants = findTreeDataRowChildren(filteredRows, row[pathKey], pathKey, -1);
|
|
364
|
-
const descendantCount = descendants.length;
|
|
365
|
-
if (descendantCount > 0 && queryOptions.aggregationModel) {
|
|
366
|
-
// Parent row, compute aggregation
|
|
367
|
-
return _extends({}, row, {
|
|
368
|
-
descendantCount
|
|
369
|
-
}, applyAggregation(queryOptions.aggregationModel, columnsWithDefaultColDef, descendants, row.id));
|
|
370
|
-
}
|
|
371
|
-
return _extends({}, row, {
|
|
372
|
-
descendantCount
|
|
373
|
-
});
|
|
374
|
-
});
|
|
375
|
-
if (queryOptions.sortModel) {
|
|
376
|
-
// apply sorting
|
|
377
|
-
const rowComparator = getRowComparator(queryOptions.sortModel, columnsWithDefaultColDef);
|
|
378
|
-
childRowsWithDescendantCounts = [...childRowsWithDescendantCounts].sort(rowComparator);
|
|
379
|
-
}
|
|
380
|
-
let aggregateRow;
|
|
381
|
-
if (queryOptions.aggregationModel) {
|
|
382
|
-
aggregateRow = applyAggregation(queryOptions.aggregationModel, columnsWithDefaultColDef, filteredRows);
|
|
383
|
-
}
|
|
384
|
-
if (queryOptions.paginationModel && queryOptions.groupKeys.length === 0) {
|
|
385
|
-
// Only paginate root rows, grid should refetch root rows when `paginationModel` updates
|
|
386
|
-
const {
|
|
387
|
-
pageSize,
|
|
388
|
-
page
|
|
389
|
-
} = queryOptions.paginationModel;
|
|
390
|
-
if (pageSize < childRowsWithDescendantCounts.length) {
|
|
391
|
-
childRowsWithDescendantCounts = childRowsWithDescendantCounts.slice(page * pageSize, (page + 1) * pageSize);
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
return new Promise(resolve => {
|
|
395
|
-
setTimeout(() => {
|
|
396
|
-
resolve({
|
|
397
|
-
rows: childRowsWithDescendantCounts,
|
|
398
|
-
rootRowCount,
|
|
399
|
-
aggregateRow
|
|
400
|
-
});
|
|
401
|
-
}, delay); // simulate network latency
|
|
402
|
-
});
|
|
403
|
-
};
|
|
404
|
-
|
|
405
|
-
/**
|
|
406
|
-
* Simulates server data for row grouping feature
|
|
407
|
-
*/
|
|
408
|
-
export const processRowGroupingRows = (rows, queryOptions, serverOptions, columnsWithDefaultColDef) => {
|
|
409
|
-
const {
|
|
410
|
-
minDelay = 100,
|
|
411
|
-
maxDelay = 300
|
|
412
|
-
} = serverOptions;
|
|
413
|
-
const pathKey = 'path';
|
|
414
|
-
if (maxDelay < minDelay) {
|
|
415
|
-
throw new Error('serverOptions.minDelay is larger than serverOptions.maxDelay ');
|
|
416
|
-
}
|
|
417
|
-
if (queryOptions.groupKeys == null) {
|
|
418
|
-
throw new Error('serverOptions.groupKeys must be defined to compute row grouping data');
|
|
419
|
-
}
|
|
420
|
-
if (queryOptions.groupFields == null) {
|
|
421
|
-
throw new Error('serverOptions.groupFields must be defined to compute row grouping data');
|
|
422
|
-
}
|
|
423
|
-
const delay = randomInt(minDelay, maxDelay);
|
|
424
|
-
const pathsToAutogenerate = new Set();
|
|
425
|
-
let rowsWithPaths = rows;
|
|
426
|
-
const rowsWithMissingGroups = [];
|
|
427
|
-
|
|
428
|
-
// add paths and generate parent rows based on `groupFields`
|
|
429
|
-
const groupFields = queryOptions.groupFields;
|
|
430
|
-
if (groupFields.length > 0) {
|
|
431
|
-
rowsWithPaths = rows.reduce((acc, row) => {
|
|
432
|
-
const partialPath = groupFields.map(field => String(row[field]));
|
|
433
|
-
for (let index = 0; index < partialPath.length; index += 1) {
|
|
434
|
-
const value = partialPath[index];
|
|
435
|
-
if (value === undefined) {
|
|
436
|
-
if (index === 0) {
|
|
437
|
-
rowsWithMissingGroups.push(_extends({}, row, {
|
|
438
|
-
group: false
|
|
439
|
-
}));
|
|
440
|
-
}
|
|
441
|
-
return acc;
|
|
442
|
-
}
|
|
443
|
-
const parentPath = partialPath.slice(0, index + 1);
|
|
444
|
-
const strigifiedPath = parentPath.join(',');
|
|
445
|
-
if (!pathsToAutogenerate.has(strigifiedPath)) {
|
|
446
|
-
pathsToAutogenerate.add(strigifiedPath);
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
acc.push(_extends({}, row, {
|
|
450
|
-
path: [...partialPath, '']
|
|
451
|
-
}));
|
|
452
|
-
return acc;
|
|
453
|
-
}, []);
|
|
454
|
-
} else {
|
|
455
|
-
rowsWithPaths = rows.map(row => _extends({}, row, {
|
|
456
|
-
path: ['']
|
|
457
|
-
}));
|
|
458
|
-
}
|
|
459
|
-
const autogeneratedRows = Array.from(pathsToAutogenerate).map(path => {
|
|
460
|
-
const pathArray = path.split(',');
|
|
461
|
-
return {
|
|
462
|
-
id: `auto-generated-parent-${pathArray.join('-')}`,
|
|
463
|
-
path: pathArray.slice(0, pathArray.length),
|
|
464
|
-
group: pathArray.slice(-1)[0]
|
|
465
|
-
};
|
|
466
|
-
});
|
|
467
|
-
|
|
468
|
-
// apply plain filtering
|
|
469
|
-
const filteredRows = getTreeDataFilteredRows([...autogeneratedRows, ...rowsWithPaths, ...rowsWithMissingGroups], queryOptions.filterModel, columnsWithDefaultColDef);
|
|
470
|
-
|
|
471
|
-
// get root row count
|
|
472
|
-
const rootRows = findTreeDataRowChildren(filteredRows, []);
|
|
473
|
-
const rootRowCount = rootRows.length;
|
|
474
|
-
let filteredRowsWithMissingGroups = [];
|
|
475
|
-
let childRows = rootRows;
|
|
476
|
-
if (queryOptions.groupKeys.length === 0) {
|
|
477
|
-
filteredRowsWithMissingGroups = filteredRows.filter(({
|
|
478
|
-
group
|
|
479
|
-
}) => group === false);
|
|
480
|
-
} else {
|
|
481
|
-
childRows = findTreeDataRowChildren(filteredRows, queryOptions.groupKeys);
|
|
482
|
-
}
|
|
483
|
-
let childRowsWithDescendantCounts = childRows.map(row => {
|
|
484
|
-
const descendants = findTreeDataRowChildren(filteredRows, row[pathKey], pathKey, -1, ({
|
|
485
|
-
id
|
|
486
|
-
}) => typeof id !== 'string' || !id.startsWith('auto-generated-parent-'));
|
|
487
|
-
const descendantCount = descendants.length;
|
|
488
|
-
if (descendantCount > 0 && queryOptions.aggregationModel) {
|
|
489
|
-
// Parent row, compute aggregation
|
|
490
|
-
return _extends({}, row, {
|
|
491
|
-
descendantCount
|
|
492
|
-
}, applyAggregation(queryOptions.aggregationModel, columnsWithDefaultColDef, descendants, row.id));
|
|
493
|
-
}
|
|
494
|
-
return _extends({}, row, {
|
|
495
|
-
descendantCount
|
|
496
|
-
});
|
|
497
|
-
});
|
|
498
|
-
if (queryOptions.sortModel) {
|
|
499
|
-
const rowComparator = getRowComparator(queryOptions.sortModel, columnsWithDefaultColDef);
|
|
500
|
-
const sortedMissingGroups = [...filteredRowsWithMissingGroups].sort(rowComparator);
|
|
501
|
-
const sortedChildRows = [...childRowsWithDescendantCounts].sort(rowComparator);
|
|
502
|
-
childRowsWithDescendantCounts = [...sortedMissingGroups, ...sortedChildRows];
|
|
503
|
-
}
|
|
504
|
-
let aggregateRow;
|
|
505
|
-
if (queryOptions.aggregationModel) {
|
|
506
|
-
aggregateRow = applyAggregation(queryOptions.aggregationModel, columnsWithDefaultColDef, filteredRows);
|
|
507
|
-
}
|
|
508
|
-
if (queryOptions.paginationModel && queryOptions.groupKeys.length === 0) {
|
|
509
|
-
// Only paginate root rows, grid should refetch root rows when `paginationModel` updates
|
|
510
|
-
const {
|
|
511
|
-
pageSize,
|
|
512
|
-
page
|
|
513
|
-
} = queryOptions.paginationModel;
|
|
514
|
-
if (pageSize < childRowsWithDescendantCounts.length) {
|
|
515
|
-
childRowsWithDescendantCounts = childRowsWithDescendantCounts.slice(page * pageSize, (page + 1) * pageSize);
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
return new Promise(resolve => {
|
|
519
|
-
setTimeout(() => {
|
|
520
|
-
resolve({
|
|
521
|
-
rows: childRowsWithDescendantCounts,
|
|
522
|
-
rootRowCount,
|
|
523
|
-
aggregateRow
|
|
524
|
-
});
|
|
525
|
-
}, delay); // simulate network latency
|
|
526
|
-
});
|
|
527
|
-
};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';
|
|
2
|
-
import { GridDemoData } from "../services/real-data-service.js";
|
|
3
|
-
import { GridColDefGenerator } from "../services/gridColDefGenerator.js";
|
|
4
|
-
import { AddPathToDemoDataOptions, DemoTreeDataValue } from "../services/tree-data-generator.js";
|
|
5
|
-
export type DemoDataReturnType = {
|
|
6
|
-
data: DemoTreeDataValue;
|
|
7
|
-
loading: boolean;
|
|
8
|
-
setRowLength: (count: number) => void;
|
|
9
|
-
loadNewData: () => void;
|
|
10
|
-
};
|
|
11
|
-
type DataSet = 'Commodity' | 'Employee';
|
|
12
|
-
export interface UseDemoDataOptions {
|
|
13
|
-
dataSet: DataSet;
|
|
14
|
-
rowLength: number;
|
|
15
|
-
maxColumns?: number;
|
|
16
|
-
visibleFields?: string[];
|
|
17
|
-
editable?: boolean;
|
|
18
|
-
treeData?: AddPathToDemoDataOptions;
|
|
19
|
-
}
|
|
20
|
-
export declare function extrapolateSeed(rowLength: number, data: GridDemoData): Promise<GridDemoData>;
|
|
21
|
-
export declare const deepFreeze: <T>(object: T) => T;
|
|
22
|
-
export interface ColumnsOptions extends Pick<UseDemoDataOptions, 'dataSet' | 'editable' | 'maxColumns' | 'visibleFields'> {}
|
|
23
|
-
export declare const getColumnsFromOptions: (options: ColumnsOptions) => GridColDefGenerator[];
|
|
24
|
-
export declare const getInitialState: (options: UseDemoDataOptions, columns: GridColDefGenerator[]) => {
|
|
25
|
-
columns: {
|
|
26
|
-
columnVisibilityModel: GridColumnVisibilityModel;
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
export declare const useDemoData: (options: UseDemoDataOptions) => DemoDataReturnType;
|
|
30
|
-
export {};
|