@redsift/table 12.5.5 → 12.5.6-muiv7
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/_internal/BaseComponents.js +1 -1
- package/_internal/BasePopper.js +2453 -0
- package/_internal/BasePopper.js.map +1 -0
- package/_internal/DataGrid2.js +102 -180
- package/_internal/DataGrid2.js.map +1 -1
- package/_internal/GridToolbarFilterSemanticField2.js +2 -1339
- package/_internal/GridToolbarFilterSemanticField2.js.map +1 -1
- package/_internal/Pagination.js +1 -1
- package/_internal/Portal.js +6563 -0
- package/_internal/Portal.js.map +1 -0
- package/_internal/ServerSideControlledPagination.js +11710 -70
- package/_internal/ServerSideControlledPagination.js.map +1 -1
- package/_internal/StatefulDataGrid.js +1 -1
- package/_internal/StatefulDataGrid2.js +1833 -989
- package/_internal/StatefulDataGrid2.js.map +1 -1
- package/_internal/Toolbar2.js +1 -1
- package/_internal/Toolbar2.js.map +1 -1
- package/_internal/ToolbarWrapper2.js.map +1 -1
- package/_internal/jsx-runtime.js +1342 -0
- package/_internal/jsx-runtime.js.map +1 -0
- package/_internal/useControlledDatagridState.js +1218 -6
- package/_internal/useControlledDatagridState.js.map +1 -1
- package/index.d.ts +229 -503
- package/index.js +143 -177
- package/index.js.map +1 -1
- package/package.json +10 -9
- package/_internal/BaseIconButton.js +0 -126
- package/_internal/BaseIconButton.js.map +0 -1
package/_internal/DataGrid2.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { a as _objectWithoutProperties, b as _extends, _ as _objectSpread2 } from './_rollupPluginBabelHelpers.js';
|
|
2
2
|
import React__default, { forwardRef, useRef, useState, useEffect, useMemo } from 'react';
|
|
3
|
-
import { createTheme, ThemeProvider as ThemeProvider$1 } from '@mui/material/styles';
|
|
4
3
|
import classNames from 'classnames';
|
|
5
|
-
import { LicenseInfo } from '@mui/x-license';
|
|
6
4
|
import { useTheme, RedsiftColorBlueN, RedsiftColorNeutralXDarkGrey, RedsiftColorNeutralWhite, ThemeProvider } from '@redsift/design-system';
|
|
7
|
-
import { useGridApiRef, gridFilteredSortedRowEntriesSelector, gridFilteredSortedRowIdsSelector,
|
|
8
|
-
import { u as useControlledDatagridState, S as StyledDataGrid } from './useControlledDatagridState.js';
|
|
9
|
-
import { n as normalizeRowSelectionModel, o as onServerSideSelectionStatusChange, g as getSelectionCount, i as isRowSelected, S as ServerSideControlledPagination, C as ControlledPagination, f as fixServerSideHeaderCheckboxSelection } from './ServerSideControlledPagination.js';
|
|
10
|
-
import { B as BaseButton, a as BaseCheckbox, c as BaseIconButton, b as BaseIcon } from './BaseIconButton.js';
|
|
11
|
-
import { T as ToolbarWrapper } from './ToolbarWrapper2.js';
|
|
5
|
+
import { useGridApiRef, gridFilteredSortedRowEntriesSelector, gridFilteredSortedRowIdsSelector, DataGridPro } from '@mui/x-data-grid-pro';
|
|
6
|
+
import { L as LicenseInfo, u as useControlledDatagridState, T as ThemeProvider$1, S as StyledDataGrid, B as BelowToolbar, a as BottomPagination, b as baseGridSlots } from './useControlledDatagridState.js';
|
|
12
7
|
import { T as Toolbar } from './Toolbar2.js';
|
|
8
|
+
import { o as onServerSideSelectionStatusChange, f as fixServerSideHeaderCheckboxSelection } from './ServerSideControlledPagination.js';
|
|
9
|
+
import { b as createTheme } from './Portal.js';
|
|
13
10
|
|
|
14
|
-
const _excluded = ["apiRef", "autoHeight", "className", "slots", "slotProps", "filterModel", "columnVisibilityModel", "pinnedColumns", "sortModel", "paginationModel", "height", "hideToolbar", "initialState", "isRowSelectable", "license", "onFilterModelChange", "rowSelectionModel", "onPaginationModelChange", "onRowSelectionModelChange", "onColumnVisibilityModelChange", "onPinnedColumnsChange", "onSortModelChange", "pagination", "paginationPlacement", "selectionBannerPlacement", "paginationProps", "rows", "pageSizeOptions", "sx", "theme", "paginationMode", "rowCount"
|
|
11
|
+
const _excluded = ["apiRef", "autoHeight", "className", "slots", "slotProps", "filterModel", "columnVisibilityModel", "pinnedColumns", "sortModel", "paginationModel", "height", "hideToolbar", "initialState", "isRowSelectable", "license", "onFilterModelChange", "rowSelectionModel", "onPaginationModelChange", "onRowSelectionModelChange", "onColumnVisibilityModelChange", "onPinnedColumnsChange", "onSortModelChange", "pagination", "paginationPlacement", "selectionBannerPlacement", "paginationProps", "rows", "pageSizeOptions", "sx", "theme", "paginationMode", "rowCount"];
|
|
15
12
|
const COMPONENT_NAME = 'DataGrid';
|
|
16
13
|
const CLASSNAME = 'redsift-datagrid';
|
|
17
14
|
|
|
@@ -88,7 +85,6 @@ const CLASSNAME = 'redsift-datagrid';
|
|
|
88
85
|
*/
|
|
89
86
|
|
|
90
87
|
const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
91
|
-
var _ref7;
|
|
92
88
|
const datagridRef = ref || useRef();
|
|
93
89
|
const {
|
|
94
90
|
apiRef: propsApiRef,
|
|
@@ -118,17 +114,17 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
118
114
|
selectionBannerPlacement = 'top',
|
|
119
115
|
paginationProps,
|
|
120
116
|
rows,
|
|
121
|
-
pageSizeOptions
|
|
117
|
+
pageSizeOptions,
|
|
122
118
|
sx,
|
|
123
119
|
theme: propsTheme,
|
|
124
120
|
paginationMode = 'client',
|
|
125
|
-
rowCount
|
|
126
|
-
density
|
|
121
|
+
rowCount
|
|
127
122
|
} = props,
|
|
128
123
|
forwardedProps = _objectWithoutProperties(props, _excluded);
|
|
129
124
|
const theme = useTheme(propsTheme);
|
|
130
125
|
const _apiRef = useGridApiRef();
|
|
131
126
|
const apiRef = propsApiRef !== null && propsApiRef !== void 0 ? propsApiRef : _apiRef;
|
|
127
|
+
const RenderedToolbar = slots !== null && slots !== void 0 && slots.toolbar ? slots.toolbar : Toolbar;
|
|
132
128
|
LicenseInfo.setLicenseKey(license);
|
|
133
129
|
const height = propsHeight !== null && propsHeight !== void 0 ? propsHeight : autoHeight ? undefined : '500px';
|
|
134
130
|
const {
|
|
@@ -156,9 +152,9 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
156
152
|
propsSortModel,
|
|
157
153
|
propsOnPaginationModelChange
|
|
158
154
|
});
|
|
159
|
-
const [rowSelectionModel, setRowSelectionModel] = useState(
|
|
155
|
+
const [rowSelectionModel, setRowSelectionModel] = useState(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
|
|
160
156
|
useEffect(() => {
|
|
161
|
-
setRowSelectionModel(
|
|
157
|
+
setRowSelectionModel(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
|
|
162
158
|
}, [propsRowSelectionModel]);
|
|
163
159
|
const onRowSelectionModelChange = (selectionModel, details) => {
|
|
164
160
|
setRowSelectionModel(selectionModel);
|
|
@@ -177,33 +173,22 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
177
173
|
// Version counter to force re-renders when selectionStatus ref changes
|
|
178
174
|
const [, forceSelectionUpdate] = useState(0);
|
|
179
175
|
|
|
180
|
-
// Track when the grid API is ready to ensure top pagination renders correctly
|
|
181
|
-
const [gridReady, setGridReady] = useState(false);
|
|
182
|
-
|
|
183
176
|
// The checkboxSelectionVisibleOnly should only be applied to client-side pagination,
|
|
184
177
|
// for server-side pagination it produces inconsistent behavior when selecting all rows in pages 2 and beyond
|
|
185
178
|
const checkboxSelectionVisibleOnly = Boolean(pagination) && Boolean(paginationMode != 'server');
|
|
186
179
|
|
|
187
180
|
// Banner and pager placements are independent. `belowToolbar` (for either) renders
|
|
188
|
-
// in
|
|
181
|
+
// in the toolbar-slot row, and only applies when pagination is on.
|
|
189
182
|
const bannerAtTop = selectionBannerPlacement === 'top';
|
|
190
183
|
const bannerAtBottom = selectionBannerPlacement === 'bottom';
|
|
191
184
|
const bannerBelowToolbar = selectionBannerPlacement === 'belowToolbar' && Boolean(pagination);
|
|
192
185
|
const pagerBelowToolbar = paginationPlacement === 'belowToolbar' && Boolean(pagination);
|
|
193
|
-
const belowToolbarActive = bannerBelowToolbar || pagerBelowToolbar;
|
|
194
|
-
|
|
195
|
-
// Force re-render when the grid API becomes ready (for top pagination)
|
|
196
|
-
useEffect(() => {
|
|
197
|
-
if (apiRef.current && !gridReady) {
|
|
198
|
-
setGridReady(true);
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
186
|
|
|
202
187
|
// in server-side pagination we want to update the selection status
|
|
203
188
|
// every time we navigate between pages, resize our page or select something
|
|
204
189
|
useEffect(() => {
|
|
205
190
|
if (paginationMode == 'server') {
|
|
206
|
-
onServerSideSelectionStatusChange(rowSelectionModel, apiRef, selectionStatusRef, forceSelectionUpdate, isRowSelectable, paginationModel.page, paginationModel.pageSize);
|
|
191
|
+
onServerSideSelectionStatusChange(Array.isArray(rowSelectionModel) ? rowSelectionModel : [rowSelectionModel], apiRef, selectionStatusRef, forceSelectionUpdate, isRowSelectable, paginationModel.page, paginationModel.pageSize);
|
|
207
192
|
}
|
|
208
193
|
}, [rowSelectionModel, paginationModel.page, paginationModel.pageSize, rows]);
|
|
209
194
|
if (!Array.isArray(rows)) {
|
|
@@ -215,15 +200,15 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
215
200
|
// receive the fresh value in the same render cycle — no extra re-render needed.
|
|
216
201
|
// The ref is kept in sync for the onRowSelectionModelChange callback's deselect logic.
|
|
217
202
|
let selectionStatus = selectionStatusRef.current;
|
|
218
|
-
if (pagination && paginationMode !== 'server' &&
|
|
203
|
+
if (pagination && paginationMode !== 'server' && Array.isArray(rowSelectionModel) && rowSelectionModel.length > 0) {
|
|
219
204
|
try {
|
|
220
|
-
// Use manual page slicing instead of
|
|
221
|
-
//
|
|
222
|
-
//
|
|
223
|
-
|
|
205
|
+
// Use manual page slicing with our React state's paginationModel instead of
|
|
206
|
+
// gridPaginatedVisibleSortedGridRow*Selector(apiRef). In MUI v7, the apiRef's
|
|
207
|
+
// internal pagination state can lag behind the React state after a page change,
|
|
208
|
+
// causing the selection status to be one page behind.
|
|
224
209
|
const pageStart = paginationModel.page * paginationModel.pageSize;
|
|
225
|
-
const
|
|
226
|
-
const selectableRowsInPage = isRowSelectable ?
|
|
210
|
+
const pageEnd = pageStart + paginationModel.pageSize;
|
|
211
|
+
const selectableRowsInPage = isRowSelectable ? gridFilteredSortedRowEntriesSelector(apiRef).slice(pageStart, pageEnd).filter(_ref => {
|
|
227
212
|
let {
|
|
228
213
|
model
|
|
229
214
|
} = _ref;
|
|
@@ -235,29 +220,24 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
235
220
|
id
|
|
236
221
|
} = _ref2;
|
|
237
222
|
return id;
|
|
238
|
-
}) :
|
|
239
|
-
let {
|
|
240
|
-
id
|
|
241
|
-
} = _ref3;
|
|
242
|
-
return id;
|
|
243
|
-
});
|
|
223
|
+
}) : gridFilteredSortedRowIdsSelector(apiRef).slice(pageStart, pageEnd);
|
|
244
224
|
const numberOfSelectableRowsInPage = selectableRowsInPage.length;
|
|
245
|
-
const selectableRowsInTable = isRowSelectable ?
|
|
225
|
+
const selectableRowsInTable = isRowSelectable ? gridFilteredSortedRowEntriesSelector(apiRef).filter(_ref3 => {
|
|
246
226
|
let {
|
|
247
227
|
model
|
|
248
|
-
} =
|
|
228
|
+
} = _ref3;
|
|
249
229
|
return isRowSelectable({
|
|
250
230
|
row: model
|
|
251
231
|
});
|
|
252
|
-
}).map(
|
|
232
|
+
}).map(_ref4 => {
|
|
253
233
|
let {
|
|
254
234
|
id
|
|
255
|
-
} =
|
|
235
|
+
} = _ref4;
|
|
256
236
|
return id;
|
|
257
237
|
}) : gridFilteredSortedRowIdsSelector(apiRef);
|
|
258
238
|
const numberOfSelectableRowsInTable = selectableRowsInTable.length;
|
|
259
|
-
const numberOfSelectedRows =
|
|
260
|
-
const selectedOnCurrentPage = selectableRowsInPage.filter(id =>
|
|
239
|
+
const numberOfSelectedRows = rowSelectionModel.length;
|
|
240
|
+
const selectedOnCurrentPage = selectableRowsInPage.filter(id => rowSelectionModel.includes(id));
|
|
261
241
|
if (numberOfSelectedRows === numberOfSelectableRowsInTable && numberOfSelectableRowsInPage < numberOfSelectableRowsInTable) {
|
|
262
242
|
selectionStatus = {
|
|
263
243
|
type: 'table',
|
|
@@ -301,6 +281,49 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
301
281
|
}
|
|
302
282
|
}
|
|
303
283
|
}), [theme]);
|
|
284
|
+
|
|
285
|
+
// Per-render data for the stable `BelowToolbar` slot (which wraps the resolved toolbar and,
|
|
286
|
+
// depending on placement, the banner/pager), injected via `slotProps.toolbar` so the slot
|
|
287
|
+
// identity stays constant and the toolbar is re-rendered, not remounted. Typed as
|
|
288
|
+
// ToolbarWrapper props so mistakes are caught here; cast to MUI's slot type only at the
|
|
289
|
+
// injection site below.
|
|
290
|
+
const toolbarSlotProps = {
|
|
291
|
+
hideToolbar,
|
|
292
|
+
RenderedToolbar,
|
|
293
|
+
filterModel,
|
|
294
|
+
onFilterModelChange,
|
|
295
|
+
pagination,
|
|
296
|
+
displaySelection: bannerAtTop || bannerBelowToolbar,
|
|
297
|
+
displayPagination: ['top', 'both'].includes(paginationPlacement) || pagerBelowToolbar,
|
|
298
|
+
displayRowsPerPage: pagerBelowToolbar,
|
|
299
|
+
selectionStatus,
|
|
300
|
+
apiRef,
|
|
301
|
+
isRowSelectable,
|
|
302
|
+
paginationModel,
|
|
303
|
+
onPaginationModelChange,
|
|
304
|
+
pageSizeOptions,
|
|
305
|
+
paginationProps,
|
|
306
|
+
paginationMode,
|
|
307
|
+
rowCount
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
// Per-render data for the stable bottom `BottomPagination` slot, handed over via
|
|
311
|
+
// `slotProps.pagination` for the same reason as the toolbar above.
|
|
312
|
+
const bottomPaginationSlotProps = {
|
|
313
|
+
pagination,
|
|
314
|
+
paginationMode,
|
|
315
|
+
displaySelection: bannerAtBottom,
|
|
316
|
+
displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
|
|
317
|
+
displayPagination: ['bottom', 'both'].includes(paginationPlacement),
|
|
318
|
+
selectionStatus,
|
|
319
|
+
paginationModel,
|
|
320
|
+
onPaginationModelChange,
|
|
321
|
+
apiRef,
|
|
322
|
+
isRowSelectable,
|
|
323
|
+
pageSizeOptions,
|
|
324
|
+
paginationProps,
|
|
325
|
+
rowCount
|
|
326
|
+
};
|
|
304
327
|
return /*#__PURE__*/React__default.createElement(ThemeProvider, {
|
|
305
328
|
value: {
|
|
306
329
|
theme
|
|
@@ -311,126 +334,34 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
311
334
|
ref: datagridRef,
|
|
312
335
|
className: classNames(DataGrid.className, className),
|
|
313
336
|
$height: height
|
|
314
|
-
},
|
|
315
|
-
displaySelection: bannerAtTop,
|
|
316
|
-
displayRowsPerPage: ['top', 'both'].includes(paginationPlacement),
|
|
317
|
-
displayPagination: ['top', 'both'].includes(paginationPlacement),
|
|
318
|
-
selectionStatus: selectionStatus,
|
|
319
|
-
paginationModel: paginationModel,
|
|
320
|
-
onPaginationModelChange: onPaginationModelChange,
|
|
321
|
-
pageSizeOptions: pageSizeOptions,
|
|
322
|
-
paginationProps: paginationProps,
|
|
323
|
-
rowCount: rowCount
|
|
324
|
-
}) : /*#__PURE__*/React__default.createElement(ControlledPagination, {
|
|
325
|
-
displaySelection: bannerAtTop,
|
|
326
|
-
displayRowsPerPage: ['top', 'both'].includes(paginationPlacement),
|
|
327
|
-
displayPagination: ['top', 'both'].includes(paginationPlacement),
|
|
328
|
-
selectionStatus: selectionStatus,
|
|
329
|
-
apiRef: apiRef,
|
|
330
|
-
isRowSelectable: isRowSelectable,
|
|
331
|
-
paginationModel: paginationModel,
|
|
332
|
-
onPaginationModelChange: onPaginationModelChange,
|
|
333
|
-
pageSizeOptions: pageSizeOptions,
|
|
334
|
-
paginationProps: paginationProps
|
|
335
|
-
}) : null, /*#__PURE__*/React__default.createElement(DataGridPremium, _extends({}, forwardedProps, {
|
|
337
|
+
}, /*#__PURE__*/React__default.createElement(DataGridPro, _extends({}, forwardedProps, {
|
|
336
338
|
rowCount: rowCount,
|
|
337
339
|
apiRef: apiRef,
|
|
338
340
|
autoHeight: autoHeight,
|
|
339
341
|
checkboxSelectionVisibleOnly: checkboxSelectionVisibleOnly,
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
})),
|
|
358
|
-
densityCompactIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
359
|
-
displayName: "densityCompactIcon"
|
|
360
|
-
})),
|
|
361
|
-
densityStandardIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
362
|
-
displayName: "densityStandardIcon"
|
|
363
|
-
})),
|
|
364
|
-
densityComfortableIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
365
|
-
displayName: "densityComfortableIcon"
|
|
366
|
-
})),
|
|
367
|
-
detailPanelCollapseIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
368
|
-
displayName: "detailPanelCollapseIcon"
|
|
369
|
-
})),
|
|
370
|
-
detailPanelExpandIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
371
|
-
displayName: "detailPanelExpandIcon"
|
|
372
|
-
})),
|
|
373
|
-
exportIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
374
|
-
displayName: "exportIcon"
|
|
375
|
-
})),
|
|
376
|
-
openFilterButtonIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
377
|
-
displayName: "openFilterButtonIcon"
|
|
378
|
-
}))
|
|
379
|
-
}, slots), belowToolbarActive ? {
|
|
380
|
-
toolbar: toolbarProps => {
|
|
381
|
-
var _ref6;
|
|
382
|
-
return /*#__PURE__*/React__default.createElement(ToolbarWrapper, _extends({}, toolbarProps, {
|
|
383
|
-
RenderedToolbar: (_ref6 = slots === null || slots === void 0 ? void 0 : slots.toolbar) !== null && _ref6 !== void 0 ? _ref6 : Toolbar,
|
|
384
|
-
hideToolbar: hideToolbar,
|
|
385
|
-
filterModel: filterModel,
|
|
386
|
-
onFilterModelChange: onFilterModelChange,
|
|
387
|
-
pagination: pagination,
|
|
388
|
-
paginationMode: paginationMode,
|
|
389
|
-
displaySelection: bannerBelowToolbar,
|
|
390
|
-
displayPagination: pagerBelowToolbar,
|
|
391
|
-
displayRowsPerPage: pagerBelowToolbar,
|
|
392
|
-
selectionStatus: selectionStatus,
|
|
393
|
-
apiRef: apiRef,
|
|
394
|
-
isRowSelectable: isRowSelectable,
|
|
395
|
-
paginationModel: paginationModel,
|
|
396
|
-
onPaginationModelChange: onPaginationModelChange,
|
|
397
|
-
pageSizeOptions: pageSizeOptions,
|
|
398
|
-
paginationProps: paginationProps,
|
|
399
|
-
rowCount: rowCount
|
|
400
|
-
}));
|
|
401
|
-
}
|
|
402
|
-
} : {}), {}, {
|
|
403
|
-
pagination: props => pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends({}, props, {
|
|
404
|
-
displaySelection: bannerAtBottom,
|
|
405
|
-
displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
|
|
406
|
-
displayPagination: ['bottom', 'both'].includes(paginationPlacement),
|
|
407
|
-
selectionStatus: selectionStatus,
|
|
408
|
-
paginationModel: paginationModel,
|
|
409
|
-
onPaginationModelChange: onPaginationModelChange,
|
|
410
|
-
pageSizeOptions: pageSizeOptions,
|
|
411
|
-
paginationProps: paginationProps,
|
|
412
|
-
rowCount: rowCount
|
|
413
|
-
})) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends({}, props, {
|
|
414
|
-
displaySelection: bannerAtBottom,
|
|
415
|
-
displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
|
|
416
|
-
displayPagination: ['bottom', 'both'].includes(paginationPlacement),
|
|
417
|
-
selectionStatus: selectionStatus,
|
|
418
|
-
apiRef: apiRef,
|
|
419
|
-
isRowSelectable: isRowSelectable,
|
|
420
|
-
paginationModel: paginationModel,
|
|
421
|
-
onPaginationModelChange: onPaginationModelChange,
|
|
422
|
-
pageSizeOptions: pageSizeOptions,
|
|
423
|
-
paginationProps: paginationProps
|
|
424
|
-
})) : null
|
|
342
|
+
slots: _objectSpread2(_objectSpread2(_objectSpread2({}, baseGridSlots), slots), {}, {
|
|
343
|
+
// `BelowToolbar` and `BottomPagination` are stable module-level components; their
|
|
344
|
+
// per-render data is injected via `slotProps` below. A fresh inline function here
|
|
345
|
+
// would remount the slot's subtree every render — for the toolbar that dropped
|
|
346
|
+
// quick-search focus on every keystroke. The consumer's `slots.toolbar` (or the
|
|
347
|
+
// default DS Toolbar) is preserved via `RenderedToolbar` inside ToolbarWrapper.
|
|
348
|
+
toolbar: BelowToolbar,
|
|
349
|
+
pagination: BottomPagination
|
|
350
|
+
}),
|
|
351
|
+
slotProps: _objectSpread2(_objectSpread2({}, slotProps), {}, {
|
|
352
|
+
// Inject the per-render slot data (built above) here rather than closing over it
|
|
353
|
+
// in inline slots, so the `toolbar`/`pagination` slot identities stay stable.
|
|
354
|
+
// Consumer slot props are spread first; the DS layout data wins (and, for the
|
|
355
|
+
// toolbar, is forwarded on to `RenderedToolbar` by ToolbarWrapper). Cast at the
|
|
356
|
+
// MUI boundary because these are ToolbarWrapper props, not the MUI slot prop types.
|
|
357
|
+
toolbar: _objectSpread2(_objectSpread2({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.toolbar), toolbarSlotProps),
|
|
358
|
+
pagination: _objectSpread2(_objectSpread2({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.pagination), bottomPaginationSlotProps)
|
|
425
359
|
}),
|
|
426
|
-
slotProps: _objectSpread2({}, slotProps),
|
|
427
360
|
filterModel: filterModel,
|
|
428
361
|
columnVisibilityModel: columnVisibilityModel,
|
|
429
362
|
pinnedColumns: pinnedColumns,
|
|
430
363
|
sortModel: sortModel,
|
|
431
|
-
initialState:
|
|
432
|
-
density: (_ref7 = density !== null && density !== void 0 ? density : initialState === null || initialState === void 0 ? void 0 : initialState.density) !== null && _ref7 !== void 0 ? _ref7 : 'standard'
|
|
433
|
-
}),
|
|
364
|
+
initialState: initialState,
|
|
434
365
|
isRowSelectable: isRowSelectable,
|
|
435
366
|
onFilterModelChange: onFilterModelChange,
|
|
436
367
|
onColumnVisibilityModelChange: onColumnVisibilityModelChange,
|
|
@@ -450,52 +381,43 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
450
381
|
// Fix server-side header checkbox: when MUI deselects all due to indeterminate
|
|
451
382
|
// state (cross-page selections exist, 0 on current page), convert to "select page".
|
|
452
383
|
if (pagination && paginationMode === 'server') {
|
|
453
|
-
effectiveSelectionModel = fixServerSideHeaderCheckboxSelection(newSelectionModel, rowSelectionModel, selectionStatusRef, apiRef, isRowSelectable);
|
|
384
|
+
effectiveSelectionModel = fixServerSideHeaderCheckboxSelection(newSelectionModel, Array.isArray(rowSelectionModel) ? rowSelectionModel : [rowSelectionModel], selectionStatusRef, apiRef, isRowSelectable);
|
|
454
385
|
}
|
|
455
386
|
if (pagination && paginationMode != 'server') {
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
const
|
|
459
|
-
const pageStart = paginationModel.page * paginationModel.pageSize;
|
|
460
|
-
const pageEntries = allFilteredEntries.slice(pageStart, pageStart + paginationModel.pageSize);
|
|
461
|
-
const selectableRowsInPage = isRowSelectable ? pageEntries.filter(_ref8 => {
|
|
387
|
+
const cbPageStart = paginationModel.page * paginationModel.pageSize;
|
|
388
|
+
const cbPageEnd = cbPageStart + paginationModel.pageSize;
|
|
389
|
+
const selectableRowsInPage = isRowSelectable ? gridFilteredSortedRowEntriesSelector(apiRef).slice(cbPageStart, cbPageEnd).filter(_ref5 => {
|
|
462
390
|
let {
|
|
463
391
|
model
|
|
464
|
-
} =
|
|
392
|
+
} = _ref5;
|
|
465
393
|
return isRowSelectable({
|
|
466
394
|
row: model
|
|
467
395
|
});
|
|
468
|
-
}).map(
|
|
396
|
+
}).map(_ref6 => {
|
|
469
397
|
let {
|
|
470
398
|
id
|
|
471
|
-
} =
|
|
399
|
+
} = _ref6;
|
|
472
400
|
return id;
|
|
473
|
-
}) :
|
|
474
|
-
let {
|
|
475
|
-
id
|
|
476
|
-
} = _ref10;
|
|
477
|
-
return id;
|
|
478
|
-
});
|
|
401
|
+
}) : gridFilteredSortedRowIdsSelector(apiRef).slice(cbPageStart, cbPageEnd);
|
|
479
402
|
const numberOfSelectableRowsInPage = selectableRowsInPage.length;
|
|
480
|
-
const selectableRowsInTable = isRowSelectable ?
|
|
403
|
+
const selectableRowsInTable = isRowSelectable ? gridFilteredSortedRowEntriesSelector(apiRef).filter(_ref7 => {
|
|
481
404
|
let {
|
|
482
405
|
model
|
|
483
|
-
} =
|
|
406
|
+
} = _ref7;
|
|
484
407
|
return isRowSelectable({
|
|
485
408
|
row: model
|
|
486
409
|
});
|
|
487
|
-
}).map(
|
|
410
|
+
}).map(_ref8 => {
|
|
488
411
|
let {
|
|
489
412
|
id
|
|
490
|
-
} =
|
|
413
|
+
} = _ref8;
|
|
491
414
|
return id;
|
|
492
415
|
}) : gridFilteredSortedRowIdsSelector(apiRef);
|
|
493
416
|
const numberOfSelectableRowsInTable = selectableRowsInTable.length;
|
|
494
|
-
const numberOfSelectedRows =
|
|
417
|
+
const numberOfSelectedRows = newSelectionModel.length;
|
|
495
418
|
if (selectionStatusRef.current.type === 'table' && numberOfSelectedRows === numberOfSelectableRowsInTable - numberOfSelectableRowsInPage || selectionStatusRef.current.type === 'table' && numberOfSelectedRows === numberOfSelectableRowsInTable || selectionStatusRef.current.type === 'page' && numberOfSelectedRows === numberOfSelectableRowsInPage) {
|
|
496
419
|
setTimeout(() => {
|
|
497
|
-
|
|
498
|
-
(_apiRef$current = apiRef.current) === null || _apiRef$current === void 0 ? void 0 : _apiRef$current.selectRows([], true, true);
|
|
420
|
+
apiRef.current.selectRows([], true, true);
|
|
499
421
|
}, 0);
|
|
500
422
|
}
|
|
501
423
|
if (numberOfSelectedRows === numberOfSelectableRowsInPage && numberOfSelectableRowsInPage < numberOfSelectableRowsInTable) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGrid2.js","sources":["../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import React, { forwardRef, RefObject, useEffect, useMemo, useRef, useState } from 'react';\nimport { ThemeProvider as MuiThemeProvider, createTheme } from '@mui/material/styles';\nimport classNames from 'classnames';\nimport { LicenseInfo } from '@mui/x-license';\nimport {\n Comp,\n RedsiftColorBlueN,\n RedsiftColorNeutralWhite,\n RedsiftColorNeutralXDarkGrey,\n ThemeProvider,\n useTheme,\n} from '@redsift/design-system';\nimport {\n DataGridPremium,\n GridApiPremium,\n GridCallbackDetails,\n gridFilteredSortedRowEntriesSelector,\n gridFilteredSortedRowIdsSelector,\n GridRowParams,\n GridRowSelectionModel,\n useGridApiRef,\n} from '@mui/x-data-grid-premium';\n\nimport { StyledDataGrid } from './styles';\nimport { DataGridProps, SelectionStatus } from './types';\nimport { BaseIcon, BaseButton, BaseIconButton, BaseCheckbox } from '../BaseComponents';\nimport {\n onServerSideSelectionStatusChange,\n fixServerSideHeaderCheckboxSelection,\n ServerSideControlledPagination,\n ControlledPagination,\n} from '../Pagination';\nimport { ToolbarWrapper } from '../ToolbarWrapper';\nimport { Toolbar } from '../Toolbar';\nimport { useControlledDatagridState } from '../../hooks/useControlledDatagridState';\nimport { getSelectionCount, isRowSelected, normalizeRowSelectionModel } from '../../utils/rowSelection';\n\nconst COMPONENT_NAME = 'DataGrid';\nconst CLASSNAME = 'redsift-datagrid';\n\n/**\n * DataGrid displays tabular data with sorting, filtering, pagination, and row selection.\n * Built on MUI X DataGrid Pro with Red Sift styling and theming.\n *\n * Requires MUI Premium license key (set via `MUI_LICENSE_KEY` env variable).\n *\n * Use `createColumn()` to get pre-configured column definitions with typed filter operators.\n * Supported types: `string`, `number`, `date`, `dateTime`, `singleSelect`, `multiSelect`, `tags`.\n * For `boolean` columns, use `type: 'boolean'` directly (no createColumn wrapper needed).\n *\n * @example\n * // Basic data grid with typed columns\n * <DataGrid\n * columns={[\n * { ...createColumn('number'), field: 'id', headerName: 'ID', width: 90 },\n * { ...createColumn('string'), field: 'name', headerName: 'Name', width: 150 },\n * { ...createColumn('string'), field: 'email', headerName: 'Email', flex: 1 },\n * ]}\n * rows={users}\n * />\n *\n * @example\n * // Custom cell renderer with Shield component\n * const columns = [\n * { field: 'domain', headerName: 'Domain' },\n * {\n * field: 'status',\n * headerName: 'Status',\n * renderCell: ({ value }) => (\n * <Shield variant={value === 'active' ? 'success' : 'fail'}>\n * {value}\n * </Shield>\n * ),\n * },\n * ];\n * <DataGrid columns={columns} rows={data} />\n *\n * @example\n * // With pagination and sorting\n * <DataGrid\n * columns={columns}\n * rows={data}\n * pagination\n * paginationModel={{ page: 0, pageSize: 25 }}\n * pageSizeOptions={[10, 25, 50]}\n * sortModel={[{ field: 'createdAt', sort: 'desc' }]}\n * />\n *\n * @example\n * // With row selection and checkbox\n * <DataGrid\n * columns={columns}\n * rows={data}\n * checkboxSelection\n * rowSelectionModel={selectedIds}\n * onRowSelectionModelChange={setSelectedIds}\n * />\n *\n * @example\n * // Server-side pagination\n * <DataGrid\n * columns={columns}\n * rows={pageData}\n * pagination\n * paginationMode=\"server\"\n * rowCount={totalRows}\n * paginationModel={{ page, pageSize }}\n * pageSizeOptions={[10, 25, 50]}\n * onPaginationModelChange={setPaginationModel}\n * />\n */\n\nexport const DataGrid: Comp<DataGridProps, HTMLDivElement> = forwardRef((props, ref) => {\n const datagridRef = ref || useRef<HTMLDivElement>();\n\n const {\n apiRef: propsApiRef,\n autoHeight,\n className,\n slots,\n slotProps,\n filterModel: propsFilterModel,\n columnVisibilityModel: propsColumnVisibilityModel,\n pinnedColumns: propsPinnedColumns,\n sortModel: propsSortModel,\n paginationModel: propsPaginationModel,\n height: propsHeight,\n hideToolbar,\n initialState,\n isRowSelectable,\n license = process.env.MUI_LICENSE_KEY,\n onFilterModelChange: propsOnFilterModelChange,\n rowSelectionModel: propsRowSelectionModel,\n onPaginationModelChange: propsOnPaginationModelChange,\n onRowSelectionModelChange: propsOnRowSelectionModelChange,\n onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,\n onPinnedColumnsChange: propsOnPinnedColumnsChange,\n onSortModelChange: propsOnSortModelChange,\n pagination,\n paginationPlacement = 'both',\n selectionBannerPlacement = 'top',\n paginationProps,\n rows,\n pageSizeOptions = [5, 10, 25, 50],\n sx,\n theme: propsTheme,\n paginationMode = 'client',\n rowCount,\n density,\n ...forwardedProps\n } = props;\n\n const theme = useTheme(propsTheme);\n\n const _apiRef = useGridApiRef();\n const apiRef = propsApiRef ?? _apiRef;\n\n LicenseInfo.setLicenseKey(license!);\n\n const height = propsHeight ?? (autoHeight ? undefined : '500px');\n\n const {\n columnVisibilityModel,\n filterModel,\n onColumnVisibilityModelChange,\n onFilterModelChange,\n onPaginationModelChange,\n onPinnedColumnsChange,\n onSortModelChange,\n paginationModel,\n pinnedColumns,\n sortModel,\n } = useControlledDatagridState({\n initialState,\n pageSizeOptions,\n propsColumnVisibilityModel,\n propsFilterModel,\n propsOnColumnVisibilityModelChange,\n propsOnFilterModelChange,\n propsOnPinnedColumnsChange,\n propsOnSortModelChange,\n propsPaginationModel,\n propsPinnedColumns,\n propsSortModel,\n propsOnPaginationModelChange,\n });\n\n const [rowSelectionModel, setRowSelectionModel] = useState(() => normalizeRowSelectionModel(propsRowSelectionModel));\n useEffect(() => {\n setRowSelectionModel(normalizeRowSelectionModel(propsRowSelectionModel));\n }, [propsRowSelectionModel]);\n\n const onRowSelectionModelChange = (selectionModel: GridRowSelectionModel, details: GridCallbackDetails) => {\n setRowSelectionModel(selectionModel);\n if (propsOnRowSelectionModelChange) {\n propsOnRowSelectionModelChange(selectionModel, details);\n }\n };\n\n const selectionStatusRef = useRef<SelectionStatus>({\n type: 'none',\n numberOfSelectedRows: 0,\n numberOfSelectedRowsInPage: 0,\n page: paginationModel.page,\n pageSize: paginationModel.pageSize,\n });\n\n // Version counter to force re-renders when selectionStatus ref changes\n const [, forceSelectionUpdate] = useState(0);\n\n // Track when the grid API is ready to ensure top pagination renders correctly\n const [gridReady, setGridReady] = useState(false);\n\n // The checkboxSelectionVisibleOnly should only be applied to client-side pagination,\n // for server-side pagination it produces inconsistent behavior when selecting all rows in pages 2 and beyond\n const checkboxSelectionVisibleOnly = Boolean(pagination) && Boolean(paginationMode != 'server');\n\n // Banner and pager placements are independent. `belowToolbar` (for either) renders\n // in a row inside the toolbar slot, and only applies when pagination is on.\n const bannerAtTop = selectionBannerPlacement === 'top';\n const bannerAtBottom = selectionBannerPlacement === 'bottom';\n const bannerBelowToolbar = selectionBannerPlacement === 'belowToolbar' && Boolean(pagination);\n const pagerBelowToolbar = paginationPlacement === 'belowToolbar' && Boolean(pagination);\n const belowToolbarActive = bannerBelowToolbar || pagerBelowToolbar;\n\n // Force re-render when the grid API becomes ready (for top pagination)\n useEffect(() => {\n if (apiRef.current && !gridReady) {\n setGridReady(true);\n }\n });\n\n // in server-side pagination we want to update the selection status\n // every time we navigate between pages, resize our page or select something\n useEffect(() => {\n if (paginationMode == 'server') {\n onServerSideSelectionStatusChange(\n rowSelectionModel,\n apiRef,\n selectionStatusRef,\n forceSelectionUpdate,\n isRowSelectable,\n paginationModel.page,\n paginationModel.pageSize\n );\n }\n }, [rowSelectionModel, paginationModel.page, paginationModel.pageSize, rows]);\n\n if (!Array.isArray(rows)) {\n return null;\n }\n\n // Compute selection status synchronously during render for client-side pagination.\n // This value is passed directly to ToolbarWrapper and ControlledPagination, so slots\n // receive the fresh value in the same render cycle — no extra re-render needed.\n // The ref is kept in sync for the onRowSelectionModelChange callback's deselect logic.\n let selectionStatus: SelectionStatus = selectionStatusRef.current;\n if (pagination && paginationMode !== 'server' && getSelectionCount(rowSelectionModel) > 0) {\n try {\n // Use manual page slicing instead of gridPaginatedVisibleSorted* selectors.\n // MUI's paginated selectors use apiRef internal state which may be stale when\n // paginationModel prop changes — our React state is always up to date.\n const allFilteredEntries = gridFilteredSortedRowEntriesSelector(apiRef);\n const pageStart = paginationModel.page * paginationModel.pageSize;\n const pageEntries = allFilteredEntries.slice(pageStart, pageStart + paginationModel.pageSize);\n\n const selectableRowsInPage = isRowSelectable\n ? pageEntries\n .filter(({ model }) => isRowSelectable({ row: model } as GridRowParams))\n .map(({ id }) => id)\n : pageEntries.map(({ id }) => id);\n const numberOfSelectableRowsInPage = selectableRowsInPage.length;\n\n const selectableRowsInTable = isRowSelectable\n ? allFilteredEntries\n .filter(({ model }) => isRowSelectable({ row: model } as GridRowParams))\n .map(({ id }) => id)\n : gridFilteredSortedRowIdsSelector(apiRef);\n const numberOfSelectableRowsInTable = selectableRowsInTable.length;\n\n const numberOfSelectedRows = getSelectionCount(rowSelectionModel);\n const selectedOnCurrentPage = selectableRowsInPage.filter((id) => isRowSelected(rowSelectionModel, id));\n\n if (\n numberOfSelectedRows === numberOfSelectableRowsInTable &&\n numberOfSelectableRowsInPage < numberOfSelectableRowsInTable\n ) {\n selectionStatus = { type: 'table', numberOfSelectedRows };\n } else if (\n selectedOnCurrentPage.length === numberOfSelectableRowsInPage &&\n numberOfSelectableRowsInPage > 0 &&\n numberOfSelectableRowsInPage < numberOfSelectableRowsInTable\n ) {\n selectionStatus = { type: 'page', numberOfSelectedRows: selectedOnCurrentPage.length };\n } else if (numberOfSelectedRows > 0) {\n selectionStatus = { type: 'other', numberOfSelectedRows };\n } else {\n selectionStatus = { type: 'none', numberOfSelectedRows: 0 };\n }\n } catch {\n // apiRef may not be initialized on first render\n }\n } else if (pagination && paginationMode !== 'server') {\n selectionStatus = { type: 'none', numberOfSelectedRows: 0 };\n }\n selectionStatusRef.current = selectionStatus;\n\n const muiTheme = useMemo(\n () =>\n createTheme({\n palette: {\n mode: theme as 'light' | 'dark',\n primary: { main: RedsiftColorBlueN },\n background: {\n default: theme === 'dark' ? RedsiftColorNeutralXDarkGrey : RedsiftColorNeutralWhite,\n paper: theme === 'dark' ? RedsiftColorNeutralXDarkGrey : RedsiftColorNeutralWhite,\n },\n },\n }),\n [theme]\n );\n\n return (\n <ThemeProvider value={{ theme }}>\n <MuiThemeProvider theme={muiTheme}>\n {/* <pre>{JSON.stringify(selectionStatus, null, 2)}</pre> */}\n <StyledDataGrid\n ref={datagridRef as RefObject<HTMLDivElement>}\n className={classNames(DataGrid.className, className)}\n $height={height}\n >\n {pagination && gridReady && (bannerAtTop || ['top', 'both'].includes(paginationPlacement!)) ? (\n paginationMode == 'server' ? (\n <ServerSideControlledPagination\n displaySelection={bannerAtTop}\n displayRowsPerPage={['top', 'both'].includes(paginationPlacement!)}\n displayPagination={['top', 'both'].includes(paginationPlacement!)}\n selectionStatus={selectionStatus}\n paginationModel={paginationModel}\n onPaginationModelChange={onPaginationModelChange}\n pageSizeOptions={pageSizeOptions as any as number[]}\n paginationProps={paginationProps}\n rowCount={rowCount!}\n />\n ) : (\n <ControlledPagination\n displaySelection={bannerAtTop}\n displayRowsPerPage={['top', 'both'].includes(paginationPlacement!)}\n displayPagination={['top', 'both'].includes(paginationPlacement!)}\n selectionStatus={selectionStatus}\n apiRef={apiRef}\n isRowSelectable={isRowSelectable}\n paginationModel={paginationModel}\n onPaginationModelChange={onPaginationModelChange}\n pageSizeOptions={pageSizeOptions as any as number[]}\n paginationProps={paginationProps}\n />\n )\n ) : null}\n <DataGridPremium\n {...forwardedProps}\n rowCount={rowCount!}\n apiRef={apiRef}\n autoHeight={autoHeight}\n checkboxSelectionVisibleOnly={checkboxSelectionVisibleOnly}\n disableRowSelectionExcludeModel\n showToolbar={!hideToolbar || belowToolbarActive}\n slots={{\n baseButton: BaseButton,\n baseCheckbox: BaseCheckbox,\n baseIconButton: BaseIconButton,\n columnFilteredIcon: (props) => <BaseIcon {...props} displayName=\"columnFilteredIcon\" />,\n columnSelectorIcon: (props) => <BaseIcon {...props} displayName=\"columnSelectorIcon\" />,\n columnSortedAscendingIcon: (props) => <BaseIcon {...props} displayName=\"columnSortedAscendingIcon\" />,\n columnSortedDescendingIcon: (props) => <BaseIcon {...props} displayName=\"columnSortedDescendingIcon\" />,\n densityCompactIcon: (props) => <BaseIcon {...props} displayName=\"densityCompactIcon\" />,\n densityStandardIcon: (props) => <BaseIcon {...props} displayName=\"densityStandardIcon\" />,\n densityComfortableIcon: (props) => <BaseIcon {...props} displayName=\"densityComfortableIcon\" />,\n detailPanelCollapseIcon: (props) => <BaseIcon {...props} displayName=\"detailPanelCollapseIcon\" />,\n detailPanelExpandIcon: (props) => <BaseIcon {...props} displayName=\"detailPanelExpandIcon\" />,\n exportIcon: (props) => <BaseIcon {...props} displayName=\"exportIcon\" />,\n openFilterButtonIcon: (props) => <BaseIcon {...props} displayName=\"openFilterButtonIcon\" />,\n ...slots,\n // When the banner and/or pager is placed below the toolbar, wrap the resolved\n // toolbar (consumer-provided slot, or the default DS Toolbar) so the banner (left)\n // and/or pager (right) render directly beneath it. `showToolbar` is forced on\n // above so this slot still renders when `hideToolbar` is set.\n ...(belowToolbarActive\n ? {\n toolbar: (toolbarProps: any) => (\n <ToolbarWrapper\n {...toolbarProps}\n RenderedToolbar={(slots?.toolbar as React.JSXElementConstructor<any>) ?? Toolbar}\n hideToolbar={hideToolbar}\n filterModel={filterModel}\n onFilterModelChange={onFilterModelChange}\n pagination={pagination}\n paginationMode={paginationMode}\n displaySelection={bannerBelowToolbar}\n displayPagination={pagerBelowToolbar}\n displayRowsPerPage={pagerBelowToolbar}\n selectionStatus={selectionStatus}\n apiRef={apiRef}\n isRowSelectable={isRowSelectable}\n paginationModel={paginationModel}\n onPaginationModelChange={onPaginationModelChange}\n pageSizeOptions={pageSizeOptions as any as number[]}\n paginationProps={paginationProps}\n rowCount={rowCount!}\n />\n ),\n }\n : {}),\n pagination: (props) =>\n pagination ? (\n paginationMode == 'server' ? (\n <ServerSideControlledPagination\n {...props}\n displaySelection={bannerAtBottom}\n displayRowsPerPage={['bottom', 'both'].includes(paginationPlacement!)}\n displayPagination={['bottom', 'both'].includes(paginationPlacement!)}\n selectionStatus={selectionStatus}\n paginationModel={paginationModel}\n onPaginationModelChange={onPaginationModelChange}\n pageSizeOptions={pageSizeOptions as any as number[]}\n paginationProps={paginationProps}\n rowCount={rowCount!}\n />\n ) : (\n <ControlledPagination\n {...props}\n displaySelection={bannerAtBottom}\n displayRowsPerPage={['bottom', 'both'].includes(paginationPlacement!)}\n displayPagination={['bottom', 'both'].includes(paginationPlacement!)}\n selectionStatus={selectionStatus}\n apiRef={apiRef}\n isRowSelectable={isRowSelectable}\n paginationModel={paginationModel}\n onPaginationModelChange={onPaginationModelChange}\n pageSizeOptions={pageSizeOptions as any as number[]}\n paginationProps={paginationProps}\n />\n )\n ) : null,\n }}\n slotProps={{\n ...slotProps,\n }}\n filterModel={filterModel}\n columnVisibilityModel={columnVisibilityModel}\n pinnedColumns={pinnedColumns}\n sortModel={sortModel}\n initialState={{ ...initialState, density: density ?? initialState?.density ?? 'standard' }}\n isRowSelectable={isRowSelectable}\n onFilterModelChange={onFilterModelChange}\n onColumnVisibilityModelChange={onColumnVisibilityModelChange}\n onPinnedColumnsChange={onPinnedColumnsChange}\n onSortModelChange={onSortModelChange}\n pagination={pagination}\n paginationMode={paginationMode}\n keepNonExistentRowsSelected={paginationMode == 'server'}\n rows={rows}\n pageSizeOptions={pageSizeOptions}\n paginationModel={paginationModel}\n onPaginationModelChange={onPaginationModelChange}\n rowSelectionModel={rowSelectionModel}\n onRowSelectionModelChange={(newSelectionModel, details) => {\n let effectiveSelectionModel = newSelectionModel;\n\n // Fix server-side header checkbox: when MUI deselects all due to indeterminate\n // state (cross-page selections exist, 0 on current page), convert to \"select page\".\n if (pagination && paginationMode === 'server') {\n effectiveSelectionModel = fixServerSideHeaderCheckboxSelection(\n newSelectionModel,\n rowSelectionModel,\n selectionStatusRef,\n apiRef as React.MutableRefObject<GridApiPremium>,\n isRowSelectable\n );\n }\n\n if (pagination && paginationMode != 'server') {\n // Use manual page slicing instead of gridPaginatedVisibleSorted* selectors\n // to avoid stale apiRef pagination state.\n const allFilteredEntries = gridFilteredSortedRowEntriesSelector(apiRef);\n const pageStart = paginationModel.page * paginationModel.pageSize;\n const pageEntries = allFilteredEntries.slice(pageStart, pageStart + paginationModel.pageSize);\n\n const selectableRowsInPage = isRowSelectable\n ? pageEntries\n .filter(({ model }) => isRowSelectable({ row: model } as GridRowParams))\n .map(({ id }) => id)\n : pageEntries.map(({ id }) => id);\n const numberOfSelectableRowsInPage = selectableRowsInPage.length;\n\n const selectableRowsInTable = isRowSelectable\n ? allFilteredEntries\n .filter(({ model }) => isRowSelectable({ row: model } as GridRowParams))\n .map(({ id }) => id)\n : gridFilteredSortedRowIdsSelector(apiRef);\n const numberOfSelectableRowsInTable = selectableRowsInTable.length;\n\n const numberOfSelectedRows = getSelectionCount(newSelectionModel);\n\n if (\n (selectionStatusRef.current.type === 'table' &&\n numberOfSelectedRows === numberOfSelectableRowsInTable - numberOfSelectableRowsInPage) ||\n (selectionStatusRef.current.type === 'table' &&\n numberOfSelectedRows === numberOfSelectableRowsInTable) ||\n (selectionStatusRef.current.type === 'page' && numberOfSelectedRows === numberOfSelectableRowsInPage)\n ) {\n setTimeout(() => {\n apiRef.current?.selectRows([], true, true);\n }, 0);\n }\n\n if (\n numberOfSelectedRows === numberOfSelectableRowsInPage &&\n numberOfSelectableRowsInPage < numberOfSelectableRowsInTable\n ) {\n selectionStatusRef.current = {\n type: 'page',\n numberOfSelectedRows,\n };\n } else if (\n numberOfSelectedRows === numberOfSelectableRowsInTable &&\n numberOfSelectableRowsInPage < numberOfSelectableRowsInTable\n ) {\n selectionStatusRef.current = {\n type: 'table',\n numberOfSelectedRows,\n };\n } else if (numberOfSelectedRows > 0) {\n selectionStatusRef.current = {\n type: 'other',\n numberOfSelectedRows,\n };\n } else {\n selectionStatusRef.current = {\n type: 'none',\n numberOfSelectedRows,\n };\n }\n forceSelectionUpdate((v) => v + 1);\n }\n onRowSelectionModelChange?.(effectiveSelectionModel, details);\n }}\n sx={{\n ...sx,\n '.MuiDataGrid-columnHeaders': {\n flexDirection: 'column',\n alignItems: 'normal',\n },\n '.MuiDataGrid-selectedRowCount': {\n margin: 'none',\n },\n }}\n />\n </StyledDataGrid>\n </MuiThemeProvider>\n </ThemeProvider>\n );\n});\nDataGrid.className = CLASSNAME;\nDataGrid.displayName = COMPONENT_NAME;\n"],"names":["COMPONENT_NAME","CLASSNAME","DataGrid","forwardRef","props","ref","_ref7","datagridRef","useRef","apiRef","propsApiRef","autoHeight","className","slots","slotProps","filterModel","propsFilterModel","columnVisibilityModel","propsColumnVisibilityModel","pinnedColumns","propsPinnedColumns","sortModel","propsSortModel","paginationModel","propsPaginationModel","height","propsHeight","hideToolbar","initialState","isRowSelectable","license","process","env","MUI_LICENSE_KEY","onFilterModelChange","propsOnFilterModelChange","rowSelectionModel","propsRowSelectionModel","onPaginationModelChange","propsOnPaginationModelChange","onRowSelectionModelChange","propsOnRowSelectionModelChange","onColumnVisibilityModelChange","propsOnColumnVisibilityModelChange","onPinnedColumnsChange","propsOnPinnedColumnsChange","onSortModelChange","propsOnSortModelChange","pagination","paginationPlacement","selectionBannerPlacement","paginationProps","rows","pageSizeOptions","sx","theme","propsTheme","paginationMode","rowCount","density","forwardedProps","_objectWithoutProperties","_excluded","useTheme","_apiRef","useGridApiRef","LicenseInfo","setLicenseKey","undefined","useControlledDatagridState","setRowSelectionModel","useState","normalizeRowSelectionModel","useEffect","selectionModel","details","selectionStatusRef","type","numberOfSelectedRows","numberOfSelectedRowsInPage","page","pageSize","forceSelectionUpdate","gridReady","setGridReady","checkboxSelectionVisibleOnly","Boolean","bannerAtTop","bannerAtBottom","bannerBelowToolbar","pagerBelowToolbar","belowToolbarActive","current","onServerSideSelectionStatusChange","Array","isArray","selectionStatus","getSelectionCount","allFilteredEntries","gridFilteredSortedRowEntriesSelector","pageStart","pageEntries","slice","selectableRowsInPage","filter","_ref","model","row","map","_ref2","id","_ref3","numberOfSelectableRowsInPage","length","selectableRowsInTable","_ref4","_ref5","gridFilteredSortedRowIdsSelector","numberOfSelectableRowsInTable","selectedOnCurrentPage","isRowSelected","muiTheme","useMemo","createTheme","palette","mode","primary","main","RedsiftColorBlueN","background","default","RedsiftColorNeutralXDarkGrey","RedsiftColorNeutralWhite","paper","React","createElement","ThemeProvider","value","MuiThemeProvider","StyledDataGrid","classNames","$height","includes","ServerSideControlledPagination","displaySelection","displayRowsPerPage","displayPagination","ControlledPagination","DataGridPremium","_extends","disableRowSelectionExcludeModel","showToolbar","_objectSpread","baseButton","BaseButton","baseCheckbox","BaseCheckbox","baseIconButton","BaseIconButton","columnFilteredIcon","BaseIcon","displayName","columnSelectorIcon","columnSortedAscendingIcon","columnSortedDescendingIcon","densityCompactIcon","densityStandardIcon","densityComfortableIcon","detailPanelCollapseIcon","detailPanelExpandIcon","exportIcon","openFilterButtonIcon","toolbar","toolbarProps","_ref6","ToolbarWrapper","RenderedToolbar","Toolbar","keepNonExistentRowsSelected","newSelectionModel","effectiveSelectionModel","fixServerSideHeaderCheckboxSelection","_ref8","_ref9","_ref10","_ref11","_ref12","setTimeout","_apiRef$current","selectRows","v","flexDirection","alignItems","margin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataGrid2.js","sources":["../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import React, { forwardRef, RefObject, useEffect, useMemo, useRef, useState } from 'react';\nimport { ThemeProvider as MuiThemeProvider, createTheme } from '@mui/material/styles';\nimport classNames from 'classnames';\nimport { LicenseInfo } from '@mui/x-license';\nimport {\n Comp,\n RedsiftColorBlueN,\n RedsiftColorNeutralWhite,\n RedsiftColorNeutralXDarkGrey,\n ThemeProvider,\n useTheme,\n} from '@redsift/design-system';\nimport {\n DataGridPro,\n GridCallbackDetails,\n gridFilteredSortedRowEntriesSelector,\n gridFilteredSortedRowIdsSelector,\n GridRowParams,\n GridRowSelectionModel,\n useGridApiRef,\n} from '@mui/x-data-grid-pro';\n\nimport { StyledDataGrid } from './styles';\nimport { DataGridProps, SelectionStatus } from './types';\nimport { Toolbar as DefaultToolbar } from '../Toolbar';\nimport { ToolbarWrapperProps } from '../ToolbarWrapper';\nimport { baseGridSlots, BelowToolbar, BottomPagination } from './defaultSlots';\nimport { onServerSideSelectionStatusChange, fixServerSideHeaderCheckboxSelection } from '../Pagination';\nimport { useControlledDatagridState } from '../../hooks/useControlledDatagridState';\n\nconst COMPONENT_NAME = 'DataGrid';\nconst CLASSNAME = 'redsift-datagrid';\n\n/**\n * DataGrid displays tabular data with sorting, filtering, pagination, and row selection.\n * Built on MUI X DataGrid Pro with Red Sift styling and theming.\n *\n * Requires MUI Premium license key (set via `MUI_LICENSE_KEY` env variable).\n *\n * Use `createColumn()` to get pre-configured column definitions with typed filter operators.\n * Supported types: `string`, `number`, `date`, `dateTime`, `singleSelect`, `multiSelect`, `tags`.\n * For `boolean` columns, use `type: 'boolean'` directly (no createColumn wrapper needed).\n *\n * @example\n * // Basic data grid with typed columns\n * <DataGrid\n * columns={[\n * { ...createColumn('number'), field: 'id', headerName: 'ID', width: 90 },\n * { ...createColumn('string'), field: 'name', headerName: 'Name', width: 150 },\n * { ...createColumn('string'), field: 'email', headerName: 'Email', flex: 1 },\n * ]}\n * rows={users}\n * />\n *\n * @example\n * // Custom cell renderer with Shield component\n * const columns = [\n * { field: 'domain', headerName: 'Domain' },\n * {\n * field: 'status',\n * headerName: 'Status',\n * renderCell: ({ value }) => (\n * <Shield variant={value === 'active' ? 'success' : 'fail'}>\n * {value}\n * </Shield>\n * ),\n * },\n * ];\n * <DataGrid columns={columns} rows={data} />\n *\n * @example\n * // With pagination and sorting\n * <DataGrid\n * columns={columns}\n * rows={data}\n * pagination\n * paginationModel={{ page: 0, pageSize: 25 }}\n * pageSizeOptions={[10, 25, 50]}\n * sortModel={[{ field: 'createdAt', sort: 'desc' }]}\n * />\n *\n * @example\n * // With row selection and checkbox\n * <DataGrid\n * columns={columns}\n * rows={data}\n * checkboxSelection\n * rowSelectionModel={selectedIds}\n * onRowSelectionModelChange={setSelectedIds}\n * />\n *\n * @example\n * // Server-side pagination\n * <DataGrid\n * columns={columns}\n * rows={pageData}\n * pagination\n * paginationMode=\"server\"\n * rowCount={totalRows}\n * paginationModel={{ page, pageSize }}\n * pageSizeOptions={[10, 25, 50]}\n * onPaginationModelChange={setPaginationModel}\n * />\n */\n\nexport const DataGrid: Comp<DataGridProps, HTMLDivElement> = forwardRef((props, ref) => {\n const datagridRef = ref || useRef<HTMLDivElement>();\n\n const {\n apiRef: propsApiRef,\n autoHeight,\n className,\n slots,\n slotProps,\n filterModel: propsFilterModel,\n columnVisibilityModel: propsColumnVisibilityModel,\n pinnedColumns: propsPinnedColumns,\n sortModel: propsSortModel,\n paginationModel: propsPaginationModel,\n height: propsHeight,\n hideToolbar,\n initialState,\n isRowSelectable,\n license = process.env.MUI_LICENSE_KEY,\n onFilterModelChange: propsOnFilterModelChange,\n rowSelectionModel: propsRowSelectionModel,\n onPaginationModelChange: propsOnPaginationModelChange,\n onRowSelectionModelChange: propsOnRowSelectionModelChange,\n onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,\n onPinnedColumnsChange: propsOnPinnedColumnsChange,\n onSortModelChange: propsOnSortModelChange,\n pagination,\n paginationPlacement = 'both',\n selectionBannerPlacement = 'top',\n paginationProps,\n rows,\n pageSizeOptions,\n sx,\n theme: propsTheme,\n paginationMode = 'client',\n rowCount,\n ...forwardedProps\n } = props;\n\n const theme = useTheme(propsTheme);\n\n const _apiRef = useGridApiRef();\n const apiRef = propsApiRef ?? _apiRef;\n\n const RenderedToolbar = slots?.toolbar ? slots.toolbar : DefaultToolbar;\n\n LicenseInfo.setLicenseKey(license!);\n\n const height = propsHeight ?? (autoHeight ? undefined : '500px');\n\n const {\n columnVisibilityModel,\n filterModel,\n onColumnVisibilityModelChange,\n onFilterModelChange,\n onPaginationModelChange,\n onPinnedColumnsChange,\n onSortModelChange,\n paginationModel,\n pinnedColumns,\n sortModel,\n } = useControlledDatagridState({\n initialState,\n pageSizeOptions,\n propsColumnVisibilityModel,\n propsFilterModel,\n propsOnColumnVisibilityModelChange,\n propsOnFilterModelChange,\n propsOnPinnedColumnsChange,\n propsOnSortModelChange,\n propsPaginationModel,\n propsPinnedColumns,\n propsSortModel,\n propsOnPaginationModelChange,\n });\n\n const [rowSelectionModel, setRowSelectionModel] = useState(propsRowSelectionModel ?? []);\n useEffect(() => {\n setRowSelectionModel(propsRowSelectionModel ?? []);\n }, [propsRowSelectionModel]);\n\n const onRowSelectionModelChange = (selectionModel: GridRowSelectionModel, details: GridCallbackDetails) => {\n setRowSelectionModel(selectionModel);\n if (propsOnRowSelectionModelChange) {\n propsOnRowSelectionModelChange(selectionModel, details);\n }\n };\n\n const selectionStatusRef = useRef<SelectionStatus>({\n type: 'none',\n numberOfSelectedRows: 0,\n numberOfSelectedRowsInPage: 0,\n page: paginationModel.page,\n pageSize: paginationModel.pageSize,\n });\n\n // Version counter to force re-renders when selectionStatus ref changes\n const [, forceSelectionUpdate] = useState(0);\n\n // The checkboxSelectionVisibleOnly should only be applied to client-side pagination,\n // for server-side pagination it produces inconsistent behavior when selecting all rows in pages 2 and beyond\n const checkboxSelectionVisibleOnly = Boolean(pagination) && Boolean(paginationMode != 'server');\n\n // Banner and pager placements are independent. `belowToolbar` (for either) renders\n // in the toolbar-slot row, and only applies when pagination is on.\n const bannerAtTop = selectionBannerPlacement === 'top';\n const bannerAtBottom = selectionBannerPlacement === 'bottom';\n const bannerBelowToolbar = selectionBannerPlacement === 'belowToolbar' && Boolean(pagination);\n const pagerBelowToolbar = paginationPlacement === 'belowToolbar' && Boolean(pagination);\n\n // in server-side pagination we want to update the selection status\n // every time we navigate between pages, resize our page or select something\n useEffect(() => {\n if (paginationMode == 'server') {\n onServerSideSelectionStatusChange(\n Array.isArray(rowSelectionModel) ? rowSelectionModel : [rowSelectionModel],\n apiRef,\n selectionStatusRef,\n forceSelectionUpdate,\n isRowSelectable,\n paginationModel.page,\n paginationModel.pageSize\n );\n }\n }, [rowSelectionModel, paginationModel.page, paginationModel.pageSize, rows]);\n\n if (!Array.isArray(rows)) {\n return null;\n }\n\n // Compute selection status synchronously during render for client-side pagination.\n // This value is passed directly to ToolbarWrapper and ControlledPagination, so slots\n // receive the fresh value in the same render cycle — no extra re-render needed.\n // The ref is kept in sync for the onRowSelectionModelChange callback's deselect logic.\n let selectionStatus: SelectionStatus = selectionStatusRef.current;\n if (pagination && paginationMode !== 'server' && Array.isArray(rowSelectionModel) && rowSelectionModel.length > 0) {\n try {\n // Use manual page slicing with our React state's paginationModel instead of\n // gridPaginatedVisibleSortedGridRow*Selector(apiRef). In MUI v7, the apiRef's\n // internal pagination state can lag behind the React state after a page change,\n // causing the selection status to be one page behind.\n const pageStart = paginationModel.page * paginationModel.pageSize;\n const pageEnd = pageStart + paginationModel.pageSize;\n\n const selectableRowsInPage = isRowSelectable\n ? gridFilteredSortedRowEntriesSelector(apiRef)\n .slice(pageStart, pageEnd)\n .filter(({ model }) => isRowSelectable({ row: model } as GridRowParams))\n .map(({ id }) => id)\n : gridFilteredSortedRowIdsSelector(apiRef).slice(pageStart, pageEnd);\n const numberOfSelectableRowsInPage = selectableRowsInPage.length;\n\n const selectableRowsInTable = isRowSelectable\n ? gridFilteredSortedRowEntriesSelector(apiRef)\n .filter(({ model }) => isRowSelectable({ row: model } as GridRowParams))\n .map(({ id }) => id)\n : gridFilteredSortedRowIdsSelector(apiRef);\n const numberOfSelectableRowsInTable = selectableRowsInTable.length;\n\n const numberOfSelectedRows = rowSelectionModel.length;\n const selectedOnCurrentPage = selectableRowsInPage.filter((id) => rowSelectionModel.includes(id));\n\n if (\n numberOfSelectedRows === numberOfSelectableRowsInTable &&\n numberOfSelectableRowsInPage < numberOfSelectableRowsInTable\n ) {\n selectionStatus = { type: 'table', numberOfSelectedRows };\n } else if (\n selectedOnCurrentPage.length === numberOfSelectableRowsInPage &&\n numberOfSelectableRowsInPage > 0 &&\n numberOfSelectableRowsInPage < numberOfSelectableRowsInTable\n ) {\n selectionStatus = { type: 'page', numberOfSelectedRows: selectedOnCurrentPage.length };\n } else if (numberOfSelectedRows > 0) {\n selectionStatus = { type: 'other', numberOfSelectedRows };\n } else {\n selectionStatus = { type: 'none', numberOfSelectedRows: 0 };\n }\n } catch {\n // apiRef may not be initialized on first render\n }\n } else if (pagination && paginationMode !== 'server') {\n selectionStatus = { type: 'none', numberOfSelectedRows: 0 };\n }\n selectionStatusRef.current = selectionStatus;\n\n const muiTheme = useMemo(\n () =>\n createTheme({\n palette: {\n mode: theme,\n primary: { main: RedsiftColorBlueN },\n background: {\n default: theme === 'dark' ? RedsiftColorNeutralXDarkGrey : RedsiftColorNeutralWhite,\n paper: theme === 'dark' ? RedsiftColorNeutralXDarkGrey : RedsiftColorNeutralWhite,\n },\n },\n }),\n [theme]\n );\n\n // Per-render data for the stable `BelowToolbar` slot (which wraps the resolved toolbar and,\n // depending on placement, the banner/pager), injected via `slotProps.toolbar` so the slot\n // identity stays constant and the toolbar is re-rendered, not remounted. Typed as\n // ToolbarWrapper props so mistakes are caught here; cast to MUI's slot type only at the\n // injection site below.\n const toolbarSlotProps: Partial<ToolbarWrapperProps> = {\n hideToolbar,\n RenderedToolbar,\n filterModel,\n onFilterModelChange,\n pagination,\n displaySelection: bannerAtTop || bannerBelowToolbar,\n displayPagination: ['top', 'both'].includes(paginationPlacement!) || pagerBelowToolbar,\n displayRowsPerPage: pagerBelowToolbar,\n selectionStatus,\n apiRef,\n isRowSelectable,\n paginationModel,\n onPaginationModelChange,\n pageSizeOptions,\n paginationProps,\n paginationMode,\n rowCount,\n };\n\n // Per-render data for the stable bottom `BottomPagination` slot, handed over via\n // `slotProps.pagination` for the same reason as the toolbar above.\n const bottomPaginationSlotProps: Partial<ToolbarWrapperProps> = {\n pagination,\n paginationMode,\n displaySelection: bannerAtBottom,\n displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement!),\n displayPagination: ['bottom', 'both'].includes(paginationPlacement!),\n selectionStatus,\n paginationModel,\n onPaginationModelChange,\n apiRef,\n isRowSelectable,\n pageSizeOptions,\n paginationProps,\n rowCount,\n };\n\n return (\n <ThemeProvider value={{ theme }}>\n <MuiThemeProvider theme={muiTheme}>\n {/* <pre>{JSON.stringify(selectionStatus, null, 2)}</pre> */}\n <StyledDataGrid\n ref={datagridRef as RefObject<HTMLDivElement>}\n className={classNames(DataGrid.className, className)}\n $height={height}\n >\n <DataGridPro\n {...forwardedProps}\n rowCount={rowCount!}\n apiRef={apiRef}\n autoHeight={autoHeight}\n checkboxSelectionVisibleOnly={checkboxSelectionVisibleOnly}\n slots={{\n // Stable base/icon slots (created once) — see defaultSlots.\n ...baseGridSlots,\n ...slots,\n // `BelowToolbar` and `BottomPagination` are stable module-level components; their\n // per-render data is injected via `slotProps` below. A fresh inline function here\n // would remount the slot's subtree every render — for the toolbar that dropped\n // quick-search focus on every keystroke. The consumer's `slots.toolbar` (or the\n // default DS Toolbar) is preserved via `RenderedToolbar` inside ToolbarWrapper.\n toolbar: BelowToolbar,\n pagination: BottomPagination,\n }}\n slotProps={{\n ...slotProps,\n // Inject the per-render slot data (built above) here rather than closing over it\n // in inline slots, so the `toolbar`/`pagination` slot identities stay stable.\n // Consumer slot props are spread first; the DS layout data wins (and, for the\n // toolbar, is forwarded on to `RenderedToolbar` by ToolbarWrapper). Cast at the\n // MUI boundary because these are ToolbarWrapper props, not the MUI slot prop types.\n toolbar: { ...slotProps?.toolbar, ...toolbarSlotProps } as unknown as NonNullable<\n DataGridProps['slotProps']\n >['toolbar'],\n pagination: { ...slotProps?.pagination, ...bottomPaginationSlotProps } as unknown as NonNullable<\n DataGridProps['slotProps']\n >['pagination'],\n }}\n filterModel={filterModel}\n columnVisibilityModel={columnVisibilityModel}\n pinnedColumns={pinnedColumns}\n sortModel={sortModel}\n initialState={initialState}\n isRowSelectable={isRowSelectable}\n onFilterModelChange={onFilterModelChange}\n onColumnVisibilityModelChange={onColumnVisibilityModelChange}\n onPinnedColumnsChange={onPinnedColumnsChange}\n onSortModelChange={onSortModelChange}\n pagination={pagination}\n paginationMode={paginationMode}\n keepNonExistentRowsSelected={paginationMode == 'server'}\n rows={rows}\n pageSizeOptions={pageSizeOptions}\n paginationModel={paginationModel}\n onPaginationModelChange={onPaginationModelChange}\n rowSelectionModel={rowSelectionModel}\n onRowSelectionModelChange={(newSelectionModel, details) => {\n let effectiveSelectionModel = newSelectionModel;\n\n // Fix server-side header checkbox: when MUI deselects all due to indeterminate\n // state (cross-page selections exist, 0 on current page), convert to \"select page\".\n if (pagination && paginationMode === 'server') {\n effectiveSelectionModel = fixServerSideHeaderCheckboxSelection(\n newSelectionModel,\n Array.isArray(rowSelectionModel) ? rowSelectionModel : [rowSelectionModel],\n selectionStatusRef,\n apiRef,\n isRowSelectable\n );\n }\n\n if (pagination && paginationMode != 'server') {\n const cbPageStart = paginationModel.page * paginationModel.pageSize;\n const cbPageEnd = cbPageStart + paginationModel.pageSize;\n\n const selectableRowsInPage = isRowSelectable\n ? gridFilteredSortedRowEntriesSelector(apiRef)\n .slice(cbPageStart, cbPageEnd)\n .filter(({ model }) => isRowSelectable({ row: model } as GridRowParams))\n .map(({ id }) => id)\n : gridFilteredSortedRowIdsSelector(apiRef).slice(cbPageStart, cbPageEnd);\n const numberOfSelectableRowsInPage = selectableRowsInPage.length;\n\n const selectableRowsInTable = isRowSelectable\n ? gridFilteredSortedRowEntriesSelector(apiRef)\n .filter(({ model }) => isRowSelectable({ row: model } as GridRowParams))\n .map(({ id }) => id)\n : gridFilteredSortedRowIdsSelector(apiRef);\n const numberOfSelectableRowsInTable = selectableRowsInTable.length;\n\n const numberOfSelectedRows = newSelectionModel.length;\n\n if (\n (selectionStatusRef.current.type === 'table' &&\n numberOfSelectedRows === numberOfSelectableRowsInTable - numberOfSelectableRowsInPage) ||\n (selectionStatusRef.current.type === 'table' &&\n numberOfSelectedRows === numberOfSelectableRowsInTable) ||\n (selectionStatusRef.current.type === 'page' && numberOfSelectedRows === numberOfSelectableRowsInPage)\n ) {\n setTimeout(() => {\n apiRef.current.selectRows([], true, true);\n }, 0);\n }\n\n if (\n numberOfSelectedRows === numberOfSelectableRowsInPage &&\n numberOfSelectableRowsInPage < numberOfSelectableRowsInTable\n ) {\n selectionStatusRef.current = {\n type: 'page',\n numberOfSelectedRows,\n };\n } else if (\n numberOfSelectedRows === numberOfSelectableRowsInTable &&\n numberOfSelectableRowsInPage < numberOfSelectableRowsInTable\n ) {\n selectionStatusRef.current = {\n type: 'table',\n numberOfSelectedRows,\n };\n } else if (numberOfSelectedRows > 0) {\n selectionStatusRef.current = {\n type: 'other',\n numberOfSelectedRows,\n };\n } else {\n selectionStatusRef.current = {\n type: 'none',\n numberOfSelectedRows,\n };\n }\n forceSelectionUpdate((v) => v + 1);\n }\n onRowSelectionModelChange?.(effectiveSelectionModel, details);\n }}\n sx={{\n ...sx,\n '.MuiDataGrid-columnHeaders': {\n flexDirection: 'column',\n alignItems: 'normal',\n },\n '.MuiDataGrid-selectedRowCount': {\n margin: 'none',\n },\n }}\n />\n </StyledDataGrid>\n </MuiThemeProvider>\n </ThemeProvider>\n );\n});\nDataGrid.className = CLASSNAME;\nDataGrid.displayName = COMPONENT_NAME;\n"],"names":["COMPONENT_NAME","CLASSNAME","DataGrid","forwardRef","props","ref","datagridRef","useRef","apiRef","propsApiRef","autoHeight","className","slots","slotProps","filterModel","propsFilterModel","columnVisibilityModel","propsColumnVisibilityModel","pinnedColumns","propsPinnedColumns","sortModel","propsSortModel","paginationModel","propsPaginationModel","height","propsHeight","hideToolbar","initialState","isRowSelectable","license","process","env","MUI_LICENSE_KEY","onFilterModelChange","propsOnFilterModelChange","rowSelectionModel","propsRowSelectionModel","onPaginationModelChange","propsOnPaginationModelChange","onRowSelectionModelChange","propsOnRowSelectionModelChange","onColumnVisibilityModelChange","propsOnColumnVisibilityModelChange","onPinnedColumnsChange","propsOnPinnedColumnsChange","onSortModelChange","propsOnSortModelChange","pagination","paginationPlacement","selectionBannerPlacement","paginationProps","rows","pageSizeOptions","sx","theme","propsTheme","paginationMode","rowCount","forwardedProps","_objectWithoutProperties","_excluded","useTheme","_apiRef","useGridApiRef","RenderedToolbar","toolbar","DefaultToolbar","LicenseInfo","setLicenseKey","undefined","useControlledDatagridState","setRowSelectionModel","useState","useEffect","selectionModel","details","selectionStatusRef","type","numberOfSelectedRows","numberOfSelectedRowsInPage","page","pageSize","forceSelectionUpdate","checkboxSelectionVisibleOnly","Boolean","bannerAtTop","bannerAtBottom","bannerBelowToolbar","pagerBelowToolbar","onServerSideSelectionStatusChange","Array","isArray","selectionStatus","current","length","pageStart","pageEnd","selectableRowsInPage","gridFilteredSortedRowEntriesSelector","slice","filter","_ref","model","row","map","_ref2","id","gridFilteredSortedRowIdsSelector","numberOfSelectableRowsInPage","selectableRowsInTable","_ref3","_ref4","numberOfSelectableRowsInTable","selectedOnCurrentPage","includes","muiTheme","useMemo","createTheme","palette","mode","primary","main","RedsiftColorBlueN","background","default","RedsiftColorNeutralXDarkGrey","RedsiftColorNeutralWhite","paper","toolbarSlotProps","displaySelection","displayPagination","displayRowsPerPage","bottomPaginationSlotProps","React","createElement","ThemeProvider","value","MuiThemeProvider","StyledDataGrid","classNames","$height","DataGridPro","_extends","_objectSpread","baseGridSlots","BelowToolbar","BottomPagination","keepNonExistentRowsSelected","newSelectionModel","effectiveSelectionModel","fixServerSideHeaderCheckboxSelection","cbPageStart","cbPageEnd","_ref5","_ref6","_ref7","_ref8","setTimeout","selectRows","v","flexDirection","alignItems","margin","displayName"],"mappings":"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"}
|