@mui/x-data-grid-generator 6.0.0-alpha.1 → 6.0.0-alpha.10
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 +1306 -149
- package/columns/commodities.columns.js +0 -1
- package/columns/employees.columns.js +0 -1
- package/hooks/useDemoData.js +9 -31
- package/hooks/useMovieData.d.ts +1 -0
- package/hooks/useMovieData.js +35 -1
- package/hooks/useQuery.js +11 -43
- package/index.js +1 -1
- package/legacy/columns/commodities.columns.js +0 -1
- package/legacy/columns/employees.columns.js +0 -2
- package/legacy/hooks/useBasicDemoData.js +6 -7
- package/legacy/hooks/useDemoData.js +28 -70
- package/legacy/hooks/useMovieData.js +35 -2
- package/legacy/hooks/useQuery.js +38 -77
- package/legacy/index.js +1 -1
- package/legacy/renderer/renderAvatar.js +0 -1
- package/legacy/renderer/renderCountry.js +3 -4
- package/legacy/renderer/renderEditCountry.js +32 -20
- package/legacy/renderer/renderEditCurrency.js +32 -20
- package/legacy/renderer/renderEditIncoterm.js +36 -26
- package/legacy/renderer/renderEditProgress.js +10 -20
- package/legacy/renderer/renderEditRating.js +32 -23
- package/legacy/renderer/renderEditStatus.js +2 -15
- package/legacy/renderer/renderEmail.js +0 -1
- package/legacy/renderer/renderIncoterm.js +0 -2
- package/legacy/renderer/renderLink.js +0 -2
- package/legacy/renderer/renderPnl.js +0 -3
- package/legacy/renderer/renderProgress.js +4 -5
- package/legacy/renderer/renderRating.js +3 -4
- package/legacy/renderer/renderStatus.js +8 -13
- package/legacy/renderer/renderTotalPrice.js +5 -6
- package/legacy/services/asyncWorker.js +4 -7
- package/legacy/services/basic-data-service.js +0 -5
- package/legacy/services/random-generator.js +6 -20
- package/legacy/services/real-data-service.js +0 -9
- package/legacy/services/tree-data-generator.js +6 -22
- package/modern/columns/commodities.columns.js +0 -1
- package/modern/columns/employees.columns.js +0 -1
- package/modern/hooks/useDemoData.js +9 -27
- package/modern/hooks/useMovieData.js +35 -1
- package/modern/hooks/useQuery.js +11 -41
- package/modern/index.js +1 -1
- package/modern/renderer/renderAvatar.js +0 -1
- package/modern/renderer/renderCountry.js +3 -4
- package/modern/renderer/renderEditCountry.js +6 -13
- package/modern/renderer/renderEditCurrency.js +6 -13
- package/modern/renderer/renderEditIncoterm.js +7 -16
- package/modern/renderer/renderEditProgress.js +3 -10
- package/modern/renderer/renderEditRating.js +7 -17
- package/modern/renderer/renderEditStatus.js +0 -10
- package/modern/renderer/renderIncoterm.js +0 -2
- package/modern/renderer/renderLink.js +0 -2
- package/modern/renderer/renderPnl.js +0 -3
- package/modern/renderer/renderProgress.js +4 -5
- package/modern/renderer/renderRating.js +3 -4
- package/modern/renderer/renderStatus.js +8 -13
- package/modern/renderer/renderTotalPrice.js +5 -6
- package/modern/services/asyncWorker.js +2 -4
- package/modern/services/basic-data-service.js +0 -5
- package/modern/services/random-generator.js +6 -19
- package/modern/services/real-data-service.js +0 -9
- package/modern/services/tree-data-generator.js +0 -14
- package/node/columns/commodities.columns.js +1 -8
- package/node/columns/employees.columns.js +1 -8
- package/node/columns/index.js +0 -4
- package/node/hooks/index.js +0 -8
- package/node/hooks/useBasicDemoData.js +0 -6
- package/node/hooks/useDemoData.js +17 -62
- package/node/hooks/useMovieData.js +35 -3
- package/node/hooks/useQuery.js +13 -57
- package/node/index.js +1 -9
- package/node/renderer/index.js +0 -32
- package/node/renderer/renderAvatar.js +0 -8
- package/node/renderer/renderCountry.js +3 -12
- package/node/renderer/renderEditCountry.js +6 -26
- package/node/renderer/renderEditCurrency.js +6 -26
- package/node/renderer/renderEditIncoterm.js +7 -28
- package/node/renderer/renderEditProgress.js +4 -24
- package/node/renderer/renderEditRating.js +7 -26
- package/node/renderer/renderEditStatus.js +0 -26
- package/node/renderer/renderEmail.js +1 -9
- package/node/renderer/renderIncoterm.js +0 -12
- package/node/renderer/renderLink.js +0 -9
- package/node/renderer/renderPnl.js +0 -12
- package/node/renderer/renderProgress.js +4 -14
- package/node/renderer/renderRating.js +3 -13
- package/node/renderer/renderStatus.js +8 -26
- package/node/renderer/renderTotalPrice.js +5 -15
- package/node/services/asyncWorker.js +2 -5
- package/node/services/basic-data-service.js +0 -7
- package/node/services/index.js +0 -8
- package/node/services/random-generator.js +7 -105
- package/node/services/real-data-service.js +0 -12
- package/node/services/static-data.js +0 -2
- package/node/services/tree-data-generator.js +1 -22
- package/package.json +7 -7
- package/renderer/renderAvatar.js +0 -1
- package/renderer/renderCountry.js +3 -4
- package/renderer/renderEditCountry.js +6 -13
- package/renderer/renderEditCurrency.js +6 -13
- package/renderer/renderEditIncoterm.js +7 -16
- package/renderer/renderEditProgress.js +3 -10
- package/renderer/renderEditRating.js +7 -17
- package/renderer/renderEditStatus.js +0 -10
- package/renderer/renderEmail.js +0 -1
- package/renderer/renderIncoterm.js +0 -2
- package/renderer/renderLink.js +0 -2
- package/renderer/renderPnl.js +0 -3
- package/renderer/renderProgress.js +4 -5
- package/renderer/renderRating.js +3 -4
- package/renderer/renderStatus.js +8 -13
- package/renderer/renderTotalPrice.js +5 -6
- package/services/asyncWorker.js +2 -4
- package/services/basic-data-service.js +0 -5
- package/services/random-generator.js +6 -20
- package/services/real-data-service.js +0 -9
- package/services/tree-data-generator.js +0 -15
|
@@ -9,7 +9,6 @@ import { addTreeDataOptionsToDemoData } from '../services/tree-data-generator';
|
|
|
9
9
|
const dataCache = new LRUCache({
|
|
10
10
|
max: 10,
|
|
11
11
|
ttl: 60 * 5 * 1e3 // 5 minutes
|
|
12
|
-
|
|
13
12
|
});
|
|
14
13
|
|
|
15
14
|
// Generate fake data from a seed.
|
|
@@ -21,25 +20,20 @@ async function extrapolateSeed(rowLength, data) {
|
|
|
21
20
|
const tasks = {
|
|
22
21
|
current: rowLength - seed.length
|
|
23
22
|
};
|
|
24
|
-
|
|
25
23
|
function work() {
|
|
26
24
|
const row = {};
|
|
27
|
-
|
|
28
25
|
for (let j = 0; j < data.columns.length; j += 1) {
|
|
29
26
|
const column = data.columns[j];
|
|
30
27
|
const index = Math.round(Math.random() * (seed.length - 1));
|
|
31
|
-
|
|
32
28
|
if (column.field === 'id') {
|
|
33
29
|
row.id = `id-${tasks.current + seed.length}`;
|
|
34
30
|
} else {
|
|
35
31
|
row[column.field] = seed[index][column.field];
|
|
36
32
|
}
|
|
37
33
|
}
|
|
38
|
-
|
|
39
34
|
rows.push(row);
|
|
40
35
|
tasks.current -= 1;
|
|
41
36
|
}
|
|
42
|
-
|
|
43
37
|
asyncWorker({
|
|
44
38
|
work,
|
|
45
39
|
done: () => resolve(_extends({}, data, {
|
|
@@ -49,36 +43,31 @@ async function extrapolateSeed(rowLength, data) {
|
|
|
49
43
|
});
|
|
50
44
|
});
|
|
51
45
|
}
|
|
52
|
-
|
|
53
46
|
const deepFreeze = object => {
|
|
54
47
|
// Retrieve the property names defined on object
|
|
55
|
-
const propNames = Object.getOwnPropertyNames(object);
|
|
56
|
-
|
|
48
|
+
const propNames = Object.getOwnPropertyNames(object);
|
|
49
|
+
|
|
50
|
+
// Freeze properties before freezing self
|
|
57
51
|
|
|
52
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
58
53
|
for (const name of propNames) {
|
|
59
54
|
const value = object[name];
|
|
60
|
-
|
|
61
55
|
if (value && typeof value === 'object') {
|
|
62
56
|
deepFreeze(value);
|
|
63
57
|
}
|
|
64
58
|
}
|
|
65
|
-
|
|
66
59
|
return Object.freeze(object);
|
|
67
60
|
};
|
|
68
|
-
|
|
69
61
|
export const getColumnsFromOptions = options => {
|
|
70
62
|
let columns = options.dataSet === 'Commodity' ? getCommodityColumns(options.editable) : getEmployeeColumns();
|
|
71
|
-
|
|
72
63
|
if (options.visibleFields) {
|
|
73
64
|
columns = columns.map(col => options.visibleFields?.includes(col.field) ? col : _extends({}, col, {
|
|
74
65
|
hide: true
|
|
75
66
|
}));
|
|
76
67
|
}
|
|
77
|
-
|
|
78
68
|
if (options.maxColumns) {
|
|
79
69
|
columns = columns.slice(0, options.maxColumns);
|
|
80
70
|
}
|
|
81
|
-
|
|
82
71
|
return columns;
|
|
83
72
|
};
|
|
84
73
|
export const getInitialState = (options, columns) => {
|
|
@@ -89,11 +78,9 @@ export const getInitialState = (options, columns) => {
|
|
|
89
78
|
}
|
|
90
79
|
});
|
|
91
80
|
const groupingField = options.treeData?.groupingField;
|
|
92
|
-
|
|
93
81
|
if (groupingField) {
|
|
94
82
|
columnVisibilityModel[groupingField] = false;
|
|
95
83
|
}
|
|
96
|
-
|
|
97
84
|
return {
|
|
98
85
|
columns: {
|
|
99
86
|
columnVisibilityModel
|
|
@@ -120,48 +107,43 @@ export const useDemoData = options => {
|
|
|
120
107
|
}, options.treeData);
|
|
121
108
|
});
|
|
122
109
|
React.useEffect(() => {
|
|
123
|
-
const cacheKey = `${options.dataSet}-${rowLength}-${index}-${options.maxColumns}`;
|
|
124
|
-
// of the demos.
|
|
110
|
+
const cacheKey = `${options.dataSet}-${rowLength}-${index}-${options.maxColumns}`;
|
|
125
111
|
|
|
112
|
+
// Cache to allow fast switch between the JavaScript and TypeScript version
|
|
113
|
+
// of the demos.
|
|
126
114
|
if (dataCache.has(cacheKey)) {
|
|
127
115
|
const newData = dataCache.get(cacheKey);
|
|
128
116
|
setData(newData);
|
|
129
117
|
setLoading(false);
|
|
130
118
|
return undefined;
|
|
131
119
|
}
|
|
132
|
-
|
|
133
120
|
let active = true;
|
|
134
|
-
|
|
135
121
|
(async () => {
|
|
136
122
|
setLoading(true);
|
|
137
123
|
let newData;
|
|
138
|
-
|
|
139
124
|
if (rowLength > 1000) {
|
|
140
125
|
newData = await getRealGridData(1000, columns);
|
|
141
126
|
newData = await extrapolateSeed(rowLength, newData);
|
|
142
127
|
} else {
|
|
143
128
|
newData = await getRealGridData(rowLength, columns);
|
|
144
129
|
}
|
|
145
|
-
|
|
146
130
|
if (!active) {
|
|
147
131
|
return;
|
|
148
132
|
}
|
|
149
|
-
|
|
150
133
|
newData = addTreeDataOptionsToDemoData(newData, {
|
|
151
134
|
maxDepth: options.treeData?.maxDepth,
|
|
152
135
|
groupingField: options.treeData?.groupingField,
|
|
153
136
|
averageChildren: options.treeData?.averageChildren
|
|
154
|
-
});
|
|
137
|
+
});
|
|
155
138
|
|
|
139
|
+
// It's quite slow. No need for it in production.
|
|
156
140
|
if (process.env.NODE_ENV !== 'production') {
|
|
157
141
|
deepFreeze(newData);
|
|
158
142
|
}
|
|
159
|
-
|
|
160
143
|
dataCache.set(cacheKey, newData);
|
|
161
144
|
setData(newData);
|
|
162
145
|
setLoading(false);
|
|
163
146
|
})();
|
|
164
|
-
|
|
165
147
|
return () => {
|
|
166
148
|
active = false;
|
|
167
149
|
};
|
|
@@ -21,7 +21,6 @@ const COLUMNS = [{
|
|
|
21
21
|
if (!value) {
|
|
22
22
|
return '';
|
|
23
23
|
}
|
|
24
|
-
|
|
25
24
|
return currencyFormatter.format(value);
|
|
26
25
|
}
|
|
27
26
|
}, {
|
|
@@ -46,6 +45,7 @@ const ROWS = [{
|
|
|
46
45
|
id: 0,
|
|
47
46
|
title: 'Avatar',
|
|
48
47
|
gross: 2847246203,
|
|
48
|
+
budget: 237000000,
|
|
49
49
|
director: 'James Cameron',
|
|
50
50
|
company: '20th Century Fox',
|
|
51
51
|
year: 2009,
|
|
@@ -57,6 +57,7 @@ const ROWS = [{
|
|
|
57
57
|
id: 1,
|
|
58
58
|
title: 'Avengers: Endgame',
|
|
59
59
|
gross: 2797501328,
|
|
60
|
+
budget: 356000000,
|
|
60
61
|
director: 'Anthony & Joe Russo',
|
|
61
62
|
company: 'Disney Studios',
|
|
62
63
|
year: 2019,
|
|
@@ -69,6 +70,7 @@ const ROWS = [{
|
|
|
69
70
|
id: 2,
|
|
70
71
|
title: 'Titanic',
|
|
71
72
|
gross: 2187425379,
|
|
73
|
+
budget: 200000000,
|
|
72
74
|
director: 'James Cameron',
|
|
73
75
|
company: '20th Century Fox',
|
|
74
76
|
year: 1997,
|
|
@@ -80,6 +82,7 @@ const ROWS = [{
|
|
|
80
82
|
id: 3,
|
|
81
83
|
title: 'Star Wars: The Force Awakens',
|
|
82
84
|
gross: 2068223624,
|
|
85
|
+
budget: 306000000,
|
|
83
86
|
director: 'J. J. Abrams',
|
|
84
87
|
company: 'Disney Studios',
|
|
85
88
|
year: 2015,
|
|
@@ -92,6 +95,7 @@ const ROWS = [{
|
|
|
92
95
|
id: 4,
|
|
93
96
|
title: 'Avengers: Infinity War',
|
|
94
97
|
gross: 2048359754,
|
|
98
|
+
budget: 321000000,
|
|
95
99
|
director: 'Anthony & Joe Russo',
|
|
96
100
|
company: 'Disney Studios',
|
|
97
101
|
year: 2018,
|
|
@@ -104,6 +108,7 @@ const ROWS = [{
|
|
|
104
108
|
id: 5,
|
|
105
109
|
title: 'Spider-Man: No Way Home',
|
|
106
110
|
gross: 1892768346,
|
|
111
|
+
budget: 200000000,
|
|
107
112
|
director: 'Jon Watts',
|
|
108
113
|
company: 'Disney Studios',
|
|
109
114
|
year: 2021,
|
|
@@ -116,6 +121,7 @@ const ROWS = [{
|
|
|
116
121
|
id: 6,
|
|
117
122
|
title: 'Jurassic World',
|
|
118
123
|
gross: 1671713208,
|
|
124
|
+
budget: 150000000,
|
|
119
125
|
director: 'Colin Trevorrow',
|
|
120
126
|
company: 'Universal Pictures',
|
|
121
127
|
year: 2015,
|
|
@@ -128,6 +134,7 @@ const ROWS = [{
|
|
|
128
134
|
id: 7,
|
|
129
135
|
title: 'The Lion King',
|
|
130
136
|
gross: 1656943394,
|
|
137
|
+
budget: 260000000,
|
|
131
138
|
director: 'Jon Favreau',
|
|
132
139
|
company: 'Disney Studios',
|
|
133
140
|
year: 2019,
|
|
@@ -139,6 +146,7 @@ const ROWS = [{
|
|
|
139
146
|
id: 8,
|
|
140
147
|
title: 'The Avengers',
|
|
141
148
|
gross: 1518812988,
|
|
149
|
+
budget: 220000000,
|
|
142
150
|
director: 'Joss Whedon',
|
|
143
151
|
company: 'Disney Studios',
|
|
144
152
|
year: 2012,
|
|
@@ -151,6 +159,7 @@ const ROWS = [{
|
|
|
151
159
|
id: 9,
|
|
152
160
|
title: 'Furious 7',
|
|
153
161
|
gross: 1516045911,
|
|
162
|
+
budget: 190000000,
|
|
154
163
|
director: 'James Wan',
|
|
155
164
|
company: 'Universal Pictures',
|
|
156
165
|
year: 2015,
|
|
@@ -163,6 +172,7 @@ const ROWS = [{
|
|
|
163
172
|
id: 10,
|
|
164
173
|
title: 'Frozen II',
|
|
165
174
|
gross: 1450026933,
|
|
175
|
+
budget: 150000000,
|
|
166
176
|
director: 'Chris Buck & Jennifer Lee',
|
|
167
177
|
company: 'Disney Studios',
|
|
168
178
|
year: 2019,
|
|
@@ -175,6 +185,7 @@ const ROWS = [{
|
|
|
175
185
|
id: 11,
|
|
176
186
|
title: 'Avengers: Age of Ultron',
|
|
177
187
|
gross: 1402804868,
|
|
188
|
+
budget: 280000000,
|
|
178
189
|
director: 'Joss Whedon',
|
|
179
190
|
company: 'Disney Studios',
|
|
180
191
|
year: 2015,
|
|
@@ -187,6 +198,7 @@ const ROWS = [{
|
|
|
187
198
|
id: 12,
|
|
188
199
|
title: 'Black Panther',
|
|
189
200
|
gross: 1347280838,
|
|
201
|
+
budget: 200000000,
|
|
190
202
|
director: 'Ryan Coogler',
|
|
191
203
|
company: 'Disney Studios',
|
|
192
204
|
year: 2018,
|
|
@@ -199,6 +211,7 @@ const ROWS = [{
|
|
|
199
211
|
id: 13,
|
|
200
212
|
title: 'Harry Potter and the Deathly Hallows – Part 2',
|
|
201
213
|
gross: 1342025430,
|
|
214
|
+
budget: 125000000,
|
|
202
215
|
director: 'David Yates',
|
|
203
216
|
company: 'Warner Bros. Pictures',
|
|
204
217
|
year: 2011,
|
|
@@ -211,6 +224,7 @@ const ROWS = [{
|
|
|
211
224
|
id: 14,
|
|
212
225
|
title: 'Star Wars: The Last Jedi',
|
|
213
226
|
gross: 1332539889,
|
|
227
|
+
budget: 317000000,
|
|
214
228
|
director: 'Rian Johnson',
|
|
215
229
|
company: 'Disney Studios',
|
|
216
230
|
year: 2017,
|
|
@@ -223,6 +237,7 @@ const ROWS = [{
|
|
|
223
237
|
id: 15,
|
|
224
238
|
title: 'Jurassic World: Fallen Kingdom',
|
|
225
239
|
gross: 1309484461,
|
|
240
|
+
budget: 170000000,
|
|
226
241
|
director: 'J. A. Bayona',
|
|
227
242
|
company: 'Universal Pictures',
|
|
228
243
|
year: 2018,
|
|
@@ -235,6 +250,7 @@ const ROWS = [{
|
|
|
235
250
|
id: 16,
|
|
236
251
|
title: 'Frozen',
|
|
237
252
|
gross: 1290000000,
|
|
253
|
+
budget: 150000000,
|
|
238
254
|
director: 'Chris Buck & Jennifer Lee',
|
|
239
255
|
company: 'Disney Studios',
|
|
240
256
|
year: 2013,
|
|
@@ -247,6 +263,7 @@ const ROWS = [{
|
|
|
247
263
|
id: 17,
|
|
248
264
|
title: 'Beauty and the Beast',
|
|
249
265
|
gross: 1263521136,
|
|
266
|
+
budget: 160000000,
|
|
250
267
|
director: 'Bill Condon',
|
|
251
268
|
company: 'Disney Studios',
|
|
252
269
|
year: 2017,
|
|
@@ -258,6 +275,7 @@ const ROWS = [{
|
|
|
258
275
|
id: 18,
|
|
259
276
|
title: 'Incredibles 2',
|
|
260
277
|
gross: 1242805359,
|
|
278
|
+
budget: 200000000,
|
|
261
279
|
director: 'Brad Bird',
|
|
262
280
|
company: 'Disney Studios',
|
|
263
281
|
year: 2018,
|
|
@@ -269,6 +287,7 @@ const ROWS = [{
|
|
|
269
287
|
id: 19,
|
|
270
288
|
title: 'The Fate of the Furious',
|
|
271
289
|
gross: 1238764765,
|
|
290
|
+
budget: 250000000,
|
|
272
291
|
director: 'F. Gary Gray',
|
|
273
292
|
company: 'Universal Pictures',
|
|
274
293
|
year: 2017,
|
|
@@ -281,6 +300,7 @@ const ROWS = [{
|
|
|
281
300
|
id: 20,
|
|
282
301
|
title: 'Iron Man 3',
|
|
283
302
|
gross: 1214811252,
|
|
303
|
+
budget: 200000000,
|
|
284
304
|
director: 'Shane Black',
|
|
285
305
|
company: 'Disney Studios',
|
|
286
306
|
year: 2013,
|
|
@@ -293,6 +313,7 @@ const ROWS = [{
|
|
|
293
313
|
id: 21,
|
|
294
314
|
title: 'Minions',
|
|
295
315
|
gross: 1159398397,
|
|
316
|
+
budget: 74000000,
|
|
296
317
|
director: 'Pierre Coffin & Kyle Balda',
|
|
297
318
|
company: 'Universal Pictures',
|
|
298
319
|
year: 2015,
|
|
@@ -304,6 +325,7 @@ const ROWS = [{
|
|
|
304
325
|
id: 22,
|
|
305
326
|
title: 'Captain America: Civil War',
|
|
306
327
|
gross: 1153329473,
|
|
328
|
+
budget: 250000000,
|
|
307
329
|
director: 'Anthony & Joe Russo',
|
|
308
330
|
company: 'Disney Studios',
|
|
309
331
|
year: 2016,
|
|
@@ -316,6 +338,7 @@ const ROWS = [{
|
|
|
316
338
|
id: 23,
|
|
317
339
|
title: 'Aquaman',
|
|
318
340
|
gross: 1148485886,
|
|
341
|
+
budget: 160000000,
|
|
319
342
|
director: 'James Wan',
|
|
320
343
|
company: 'Warner Bros. Pictures',
|
|
321
344
|
year: 2018,
|
|
@@ -328,6 +351,7 @@ const ROWS = [{
|
|
|
328
351
|
id: 24,
|
|
329
352
|
title: 'The Lord of the Rings: The Return of the King',
|
|
330
353
|
gross: 1146030912,
|
|
354
|
+
budget: 94000000,
|
|
331
355
|
director: 'Peter Jackson',
|
|
332
356
|
company: 'New Line Cinema',
|
|
333
357
|
year: 2003,
|
|
@@ -340,6 +364,7 @@ const ROWS = [{
|
|
|
340
364
|
id: 25,
|
|
341
365
|
title: 'Spider-Man: Far From Home',
|
|
342
366
|
gross: 1131927996,
|
|
367
|
+
budget: 160000000,
|
|
343
368
|
director: 'Jon Watts',
|
|
344
369
|
company: 'Disney Studios',
|
|
345
370
|
year: 2019,
|
|
@@ -352,6 +377,7 @@ const ROWS = [{
|
|
|
352
377
|
id: 26,
|
|
353
378
|
title: 'Captain Marvel',
|
|
354
379
|
gross: 1128274794,
|
|
380
|
+
budget: 152000000,
|
|
355
381
|
director: 'Anna Boden & Ryan Fleck',
|
|
356
382
|
company: 'Disney Studios',
|
|
357
383
|
year: 2019,
|
|
@@ -364,6 +390,7 @@ const ROWS = [{
|
|
|
364
390
|
id: 27,
|
|
365
391
|
title: 'Transformers: Dark of the Moon',
|
|
366
392
|
gross: 1123794079,
|
|
393
|
+
budget: 195000000,
|
|
367
394
|
director: 'Michael Bay',
|
|
368
395
|
company: 'Paramount Pictures',
|
|
369
396
|
year: 2011,
|
|
@@ -376,6 +403,7 @@ const ROWS = [{
|
|
|
376
403
|
id: 28,
|
|
377
404
|
title: 'Skyfall',
|
|
378
405
|
gross: 1108561013,
|
|
406
|
+
budget: 200000000,
|
|
379
407
|
director: 'Sam Mendes',
|
|
380
408
|
company: '20th Century Fox',
|
|
381
409
|
year: 2012,
|
|
@@ -388,6 +416,7 @@ const ROWS = [{
|
|
|
388
416
|
id: 29,
|
|
389
417
|
title: 'Transformers: Age of Extinction',
|
|
390
418
|
gross: 1104054072,
|
|
419
|
+
budget: 210000000,
|
|
391
420
|
director: 'Michael Bay',
|
|
392
421
|
company: 'Paramount Pictures',
|
|
393
422
|
year: 2014,
|
|
@@ -400,6 +429,7 @@ const ROWS = [{
|
|
|
400
429
|
id: 30,
|
|
401
430
|
title: 'The Dark Knight Rises',
|
|
402
431
|
gross: 1081142612,
|
|
432
|
+
budget: 250000000,
|
|
403
433
|
director: 'Christopher Nolan',
|
|
404
434
|
company: 'Warner Bros. Pictures',
|
|
405
435
|
year: 2012,
|
|
@@ -412,6 +442,7 @@ const ROWS = [{
|
|
|
412
442
|
id: 31,
|
|
413
443
|
title: 'Joker',
|
|
414
444
|
gross: 1074251311,
|
|
445
|
+
budget: 55000000,
|
|
415
446
|
director: 'Todd Phillips',
|
|
416
447
|
company: 'Warner Bros. Pictures',
|
|
417
448
|
year: 2019,
|
|
@@ -424,6 +455,7 @@ const ROWS = [{
|
|
|
424
455
|
id: 32,
|
|
425
456
|
title: 'Star Wars: The Rise of Skywalker',
|
|
426
457
|
gross: 1074144248,
|
|
458
|
+
budget: 275000000,
|
|
427
459
|
director: 'J. J. Abrams',
|
|
428
460
|
company: 'Disney Studios',
|
|
429
461
|
year: 2019,
|
|
@@ -436,6 +468,7 @@ const ROWS = [{
|
|
|
436
468
|
id: 33,
|
|
437
469
|
title: 'Toy Story 4',
|
|
438
470
|
gross: 1073394593,
|
|
471
|
+
budget: 200000000,
|
|
439
472
|
director: 'Josh Cooley',
|
|
440
473
|
company: 'Disney Studios',
|
|
441
474
|
year: 2019,
|
|
@@ -448,6 +481,7 @@ const ROWS = [{
|
|
|
448
481
|
id: 34,
|
|
449
482
|
title: 'Toy Story 3',
|
|
450
483
|
gross: 1066969703,
|
|
484
|
+
budget: 200000000,
|
|
451
485
|
director: 'Lee Unkrich',
|
|
452
486
|
company: 'Disney Studios',
|
|
453
487
|
year: 2010,
|
package/modern/hooks/useQuery.js
CHANGED
|
@@ -3,25 +3,21 @@ import * as React from 'react';
|
|
|
3
3
|
import { getGridDefaultColumnTypes, GridLinkOperator } from '@mui/x-data-grid-pro';
|
|
4
4
|
import { isDeepEqual } from '@mui/x-data-grid/internals';
|
|
5
5
|
import { useDemoData, getColumnsFromOptions, getInitialState } from './useDemoData';
|
|
6
|
-
|
|
7
6
|
const simplifiedValueGetter = (field, colDef) => row => {
|
|
8
7
|
const params = {
|
|
9
8
|
id: row.id,
|
|
10
9
|
row,
|
|
11
10
|
field,
|
|
12
11
|
rowNode: {}
|
|
13
|
-
};
|
|
14
|
-
|
|
12
|
+
};
|
|
13
|
+
// @ts-ignore
|
|
15
14
|
return colDef.valueGetter?.(params) || row[field];
|
|
16
15
|
};
|
|
17
|
-
|
|
18
16
|
const getRowComparator = (sortModel, columnsWithDefaultColDef) => {
|
|
19
17
|
if (!sortModel) {
|
|
20
18
|
const comparator = () => 0;
|
|
21
|
-
|
|
22
19
|
return comparator;
|
|
23
20
|
}
|
|
24
|
-
|
|
25
21
|
const sortOperators = sortModel.map(sortItem => {
|
|
26
22
|
const columnField = sortItem.field;
|
|
27
23
|
const colDef = columnsWithDefaultColDef.find(({
|
|
@@ -32,7 +28,6 @@ const getRowComparator = (sortModel, columnsWithDefaultColDef) => {
|
|
|
32
28
|
sortComparator: colDef.sortComparator
|
|
33
29
|
});
|
|
34
30
|
});
|
|
35
|
-
|
|
36
31
|
const comparator = (row1, row2) => sortOperators.reduce((acc, {
|
|
37
32
|
valueGetter,
|
|
38
33
|
sort,
|
|
@@ -41,49 +36,38 @@ const getRowComparator = (sortModel, columnsWithDefaultColDef) => {
|
|
|
41
36
|
if (acc !== 0) {
|
|
42
37
|
return acc;
|
|
43
38
|
}
|
|
44
|
-
|
|
45
39
|
const v1 = valueGetter(row1);
|
|
46
40
|
const v2 = valueGetter(row2);
|
|
47
41
|
return sort === 'desc' ? -1 * sortComparator(v1, v2) : sortComparator(v1, v2);
|
|
48
42
|
}, 0);
|
|
49
|
-
|
|
50
43
|
return comparator;
|
|
51
44
|
};
|
|
52
|
-
|
|
53
45
|
const getFilteredRows = (rows, filterModel, columnsWithDefaultColDef) => {
|
|
54
46
|
if (filterModel === undefined || filterModel.items.length === 0) {
|
|
55
47
|
return rows;
|
|
56
48
|
}
|
|
57
|
-
|
|
58
49
|
const valueGetters = filterModel.items.map(({
|
|
59
|
-
columnField
|
|
60
|
-
}) => simplifiedValueGetter(columnField, columnsWithDefaultColDef.find(({
|
|
61
50
|
field
|
|
62
|
-
}) => field ===
|
|
51
|
+
}) => simplifiedValueGetter(field, columnsWithDefaultColDef.find(column => column.field === field)));
|
|
63
52
|
const filterFunctions = filterModel.items.map(filterItem => {
|
|
64
53
|
const {
|
|
65
|
-
|
|
66
|
-
|
|
54
|
+
field,
|
|
55
|
+
operator
|
|
67
56
|
} = filterItem;
|
|
68
|
-
const colDef = columnsWithDefaultColDef.find(
|
|
69
|
-
field
|
|
70
|
-
}) => field === columnField);
|
|
57
|
+
const colDef = columnsWithDefaultColDef.find(column => column.field === field);
|
|
71
58
|
const filterOperator = colDef.filterOperators.find(({
|
|
72
59
|
value
|
|
73
|
-
}) =>
|
|
60
|
+
}) => operator === value);
|
|
74
61
|
let parsedValue = filterItem.value;
|
|
75
|
-
|
|
76
62
|
if (colDef.valueParser) {
|
|
77
63
|
const parser = colDef.valueParser;
|
|
78
64
|
parsedValue = Array.isArray(filterItem.value) ? filterItem.value?.map(x => parser(x)) : parser(filterItem.value);
|
|
79
65
|
}
|
|
80
|
-
|
|
81
66
|
return filterOperator?.getApplyFilterFn({
|
|
82
67
|
filterItem,
|
|
83
68
|
value: parsedValue
|
|
84
69
|
}, colDef);
|
|
85
70
|
});
|
|
86
|
-
|
|
87
71
|
if (filterModel.linkOperator === GridLinkOperator.Or) {
|
|
88
72
|
return rows.filter(row => filterModel.items.some((_, index) => {
|
|
89
73
|
const value = valueGetters[index](row);
|
|
@@ -92,7 +76,6 @@ const getFilteredRows = (rows, filterModel, columnsWithDefaultColDef) => {
|
|
|
92
76
|
});
|
|
93
77
|
}));
|
|
94
78
|
}
|
|
95
|
-
|
|
96
79
|
return rows.filter(row => filterModel.items.every((_, index) => {
|
|
97
80
|
const value = valueGetters[index](row);
|
|
98
81
|
return filterFunctions[index] === null ? true : filterFunctions[index]({
|
|
@@ -100,22 +83,19 @@ const getFilteredRows = (rows, filterModel, columnsWithDefaultColDef) => {
|
|
|
100
83
|
});
|
|
101
84
|
}));
|
|
102
85
|
};
|
|
86
|
+
|
|
103
87
|
/**
|
|
104
88
|
* Simulates server data loading
|
|
105
89
|
*/
|
|
106
|
-
|
|
107
|
-
|
|
108
90
|
export const loadServerRows = (rows, queryOptions, serverOptions, columnsWithDefaultColDef) => {
|
|
109
91
|
const {
|
|
110
92
|
minDelay = 100,
|
|
111
93
|
maxDelay = 300,
|
|
112
94
|
useCursorPagination
|
|
113
95
|
} = serverOptions;
|
|
114
|
-
|
|
115
96
|
if (maxDelay < minDelay) {
|
|
116
97
|
throw new Error('serverOptions.minDelay is larger than serverOptions.maxDelay ');
|
|
117
98
|
}
|
|
118
|
-
|
|
119
99
|
const delay = Math.random() * (maxDelay - minDelay) + minDelay;
|
|
120
100
|
const {
|
|
121
101
|
cursor,
|
|
@@ -129,7 +109,6 @@ export const loadServerRows = (rows, queryOptions, serverOptions, columnsWithDef
|
|
|
129
109
|
const rowComparator = getRowComparator(queryOptions.sortModel, columnsWithDefaultColDef);
|
|
130
110
|
filteredRows = [...filteredRows].sort(rowComparator);
|
|
131
111
|
const totalRowCount = filteredRows.length;
|
|
132
|
-
|
|
133
112
|
if (!pageSize) {
|
|
134
113
|
firstRowIndex = 0;
|
|
135
114
|
lastRowIndex = filteredRows.length;
|
|
@@ -138,14 +117,12 @@ export const loadServerRows = (rows, queryOptions, serverOptions, columnsWithDef
|
|
|
138
117
|
id
|
|
139
118
|
}) => id === cursor) : 0;
|
|
140
119
|
firstRowIndex = Math.max(firstRowIndex, 0); // if cursor not found return 0
|
|
141
|
-
|
|
142
120
|
lastRowIndex = firstRowIndex + pageSize;
|
|
143
121
|
nextCursor = lastRowIndex >= filteredRows.length ? undefined : filteredRows[lastRowIndex].id;
|
|
144
122
|
} else {
|
|
145
123
|
firstRowIndex = page * pageSize;
|
|
146
124
|
lastRowIndex = (page + 1) * pageSize;
|
|
147
125
|
}
|
|
148
|
-
|
|
149
126
|
const response = {
|
|
150
127
|
returnedRows: filteredRows.slice(firstRowIndex, lastRowIndex),
|
|
151
128
|
nextCursor,
|
|
@@ -157,6 +134,7 @@ export const loadServerRows = (rows, queryOptions, serverOptions, columnsWithDef
|
|
|
157
134
|
}, delay); // simulate network latency
|
|
158
135
|
});
|
|
159
136
|
};
|
|
137
|
+
|
|
160
138
|
const DEFAULT_DATASET_OPTIONS = {
|
|
161
139
|
dataSet: 'Commodity',
|
|
162
140
|
rowLength: 100,
|
|
@@ -170,14 +148,11 @@ const DEFAULT_SERVER_OPTIONS = {
|
|
|
170
148
|
};
|
|
171
149
|
export const createFakeServer = (dataSetOptions, serverOptions) => {
|
|
172
150
|
const dataSetOptionsWithDefault = _extends({}, DEFAULT_DATASET_OPTIONS, dataSetOptions);
|
|
173
|
-
|
|
174
151
|
const serverOptionsWithDefault = _extends({}, DEFAULT_SERVER_OPTIONS, serverOptions);
|
|
175
|
-
|
|
176
152
|
const columns = getColumnsFromOptions(dataSetOptionsWithDefault);
|
|
177
153
|
const initialState = getInitialState(dataSetOptionsWithDefault, columns);
|
|
178
154
|
const defaultColDef = getGridDefaultColumnTypes();
|
|
179
155
|
const columnsWithDefaultColDef = columns.map(column => _extends({}, defaultColDef[column.type || 'string'], column));
|
|
180
|
-
|
|
181
156
|
const useQuery = queryOptions => {
|
|
182
157
|
const {
|
|
183
158
|
data: {
|
|
@@ -196,25 +171,21 @@ export const createFakeServer = (dataSetOptions, serverOptions) => {
|
|
|
196
171
|
// dataset is not ready
|
|
197
172
|
return () => {};
|
|
198
173
|
}
|
|
199
|
-
|
|
200
174
|
queryOptionsRef.current = queryOptions;
|
|
201
175
|
let active = true;
|
|
202
176
|
setIsLoading(true);
|
|
203
177
|
setResponse(prev => Object.keys(prev.pageInfo).length === 0 ? prev : _extends({}, prev, {
|
|
204
178
|
pageInfo: {}
|
|
205
179
|
}));
|
|
206
|
-
|
|
207
180
|
(async function fetchData() {
|
|
208
181
|
const {
|
|
209
182
|
returnedRows,
|
|
210
183
|
nextCursor,
|
|
211
184
|
totalRowCount
|
|
212
185
|
} = await loadServerRows(rows, queryOptions, serverOptionsWithDefault, columnsWithDefaultColDef);
|
|
213
|
-
|
|
214
186
|
if (!active) {
|
|
215
187
|
return;
|
|
216
188
|
}
|
|
217
|
-
|
|
218
189
|
const newRep = {
|
|
219
190
|
rows: returnedRows,
|
|
220
191
|
pageInfo: {
|
|
@@ -226,18 +197,17 @@ export const createFakeServer = (dataSetOptions, serverOptions) => {
|
|
|
226
197
|
setResponse(prev => isDeepEqual(prev, newRep) ? prev : newRep);
|
|
227
198
|
setIsLoading(false);
|
|
228
199
|
})();
|
|
229
|
-
|
|
230
200
|
return () => {
|
|
231
201
|
active = false;
|
|
232
202
|
};
|
|
233
|
-
}, [dataGenerationIsLoading, queryOptions, rows]);
|
|
203
|
+
}, [dataGenerationIsLoading, queryOptions, rows]);
|
|
234
204
|
|
|
205
|
+
// We use queryOptions pointer to be sure that isLoading===true as soon as the options change
|
|
235
206
|
const effectShouldStart = queryOptionsRef.current !== queryOptions;
|
|
236
207
|
return _extends({
|
|
237
208
|
isLoading: isLoading || effectShouldStart
|
|
238
209
|
}, response);
|
|
239
210
|
};
|
|
240
|
-
|
|
241
211
|
return {
|
|
242
212
|
columns,
|
|
243
213
|
columnsWithDefaultColDef,
|
package/modern/index.js
CHANGED
|
@@ -36,14 +36,13 @@ const Country = /*#__PURE__*/React.memo(function Country(props) {
|
|
|
36
36
|
export function renderCountry(params) {
|
|
37
37
|
if (params.value == null) {
|
|
38
38
|
return '';
|
|
39
|
-
}
|
|
40
|
-
// Then we fall back to the default rendering based on `valueGetter` instead of rendering the total price UI.
|
|
41
|
-
|
|
39
|
+
}
|
|
42
40
|
|
|
41
|
+
// If the aggregated value does not have the same unit as the other cell
|
|
42
|
+
// Then we fall back to the default rendering based on `valueGetter` instead of rendering the total price UI.
|
|
43
43
|
if (params.aggregation && !params.aggregation.hasCellUnit) {
|
|
44
44
|
return null;
|
|
45
45
|
}
|
|
46
|
-
|
|
47
46
|
return /*#__PURE__*/_jsx(Country, {
|
|
48
47
|
value: params.value
|
|
49
48
|
});
|
|
@@ -21,7 +21,6 @@ const StyledAutocomplete = styled(Autocomplete)(({
|
|
|
21
21
|
}
|
|
22
22
|
})
|
|
23
23
|
}));
|
|
24
|
-
|
|
25
24
|
function EditCountry(props) {
|
|
26
25
|
const {
|
|
27
26
|
id,
|
|
@@ -29,20 +28,16 @@ function EditCountry(props) {
|
|
|
29
28
|
field
|
|
30
29
|
} = props;
|
|
31
30
|
const apiRef = useGridApiContext();
|
|
32
|
-
const handleChange = React.useCallback((event, newValue) => {
|
|
33
|
-
apiRef.current.setEditCellValue({
|
|
31
|
+
const handleChange = React.useCallback(async (event, newValue) => {
|
|
32
|
+
await apiRef.current.setEditCellValue({
|
|
34
33
|
id,
|
|
35
34
|
field,
|
|
36
35
|
value: newValue
|
|
37
36
|
}, event);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
field
|
|
43
|
-
});
|
|
44
|
-
apiRef.current.setCellMode(id, field, 'view');
|
|
45
|
-
}
|
|
37
|
+
apiRef.current.stopCellEditMode({
|
|
38
|
+
id,
|
|
39
|
+
field
|
|
40
|
+
});
|
|
46
41
|
}, [apiRef, field, id]);
|
|
47
42
|
return /*#__PURE__*/_jsx(StyledAutocomplete, {
|
|
48
43
|
value: value,
|
|
@@ -76,12 +71,10 @@ function EditCountry(props) {
|
|
|
76
71
|
id: params.id,
|
|
77
72
|
inputProps: _extends({}, params.inputProps, {
|
|
78
73
|
autoComplete: 'new-password' // disable autocomplete and autofill
|
|
79
|
-
|
|
80
74
|
})
|
|
81
75
|
}, params.InputProps))
|
|
82
76
|
});
|
|
83
77
|
}
|
|
84
|
-
|
|
85
78
|
export function renderEditCountry(params) {
|
|
86
79
|
return /*#__PURE__*/_jsx(EditCountry, _extends({}, params));
|
|
87
80
|
}
|