@redsift/table 12.5.5 → 12.5.6-muiv6

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.
@@ -1,17 +1,15 @@
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
- import { useTheme, RedsiftColorBlueN, RedsiftColorNeutralXDarkGrey, RedsiftColorNeutralWhite, ThemeProvider } from '@redsift/design-system';
7
- import { useGridApiRef, gridFilteredSortedRowEntriesSelector, gridFilteredSortedRowIdsSelector, DataGridPremium } from '@mui/x-data-grid-premium';
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';
4
+ import { useTheme, ThemeProvider, RedsiftColorBlueN, RedsiftColorNeutralXDarkGrey, RedsiftColorNeutralWhite } from '@redsift/design-system';
5
+ import { useGridApiRef, gridPaginatedVisibleSortedGridRowEntriesSelector, gridPaginatedVisibleSortedGridRowIdsSelector, 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 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 './ControlledPagination.js';
9
+ import { c as createTheme } from './Portal.js';
10
+ import { T as ToolbarWrapper } from './ToolbarWrapper2.js';
13
11
 
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", "density"];
12
+ 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
13
  const COMPONENT_NAME = 'DataGrid';
16
14
  const CLASSNAME = 'redsift-datagrid';
17
15
 
@@ -88,7 +86,6 @@ const CLASSNAME = 'redsift-datagrid';
88
86
  */
89
87
 
90
88
  const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
91
- var _ref7;
92
89
  const datagridRef = ref || useRef();
93
90
  const {
94
91
  apiRef: propsApiRef,
@@ -118,17 +115,17 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
118
115
  selectionBannerPlacement = 'top',
119
116
  paginationProps,
120
117
  rows,
121
- pageSizeOptions = [5, 10, 25, 50],
118
+ pageSizeOptions,
122
119
  sx,
123
120
  theme: propsTheme,
124
121
  paginationMode = 'client',
125
- rowCount,
126
- density
122
+ rowCount
127
123
  } = props,
128
124
  forwardedProps = _objectWithoutProperties(props, _excluded);
129
125
  const theme = useTheme(propsTheme);
130
126
  const _apiRef = useGridApiRef();
131
127
  const apiRef = propsApiRef !== null && propsApiRef !== void 0 ? propsApiRef : _apiRef;
128
+ const RenderedToolbar = slots !== null && slots !== void 0 && slots.toolbar ? slots.toolbar : Toolbar;
132
129
  LicenseInfo.setLicenseKey(license);
133
130
  const height = propsHeight !== null && propsHeight !== void 0 ? propsHeight : autoHeight ? undefined : '500px';
134
131
  const {
@@ -156,9 +153,9 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
156
153
  propsSortModel,
157
154
  propsOnPaginationModelChange
158
155
  });
159
- const [rowSelectionModel, setRowSelectionModel] = useState(() => normalizeRowSelectionModel(propsRowSelectionModel));
156
+ const [rowSelectionModel, setRowSelectionModel] = useState(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
160
157
  useEffect(() => {
161
- setRowSelectionModel(normalizeRowSelectionModel(propsRowSelectionModel));
158
+ setRowSelectionModel(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
162
159
  }, [propsRowSelectionModel]);
163
160
  const onRowSelectionModelChange = (selectionModel, details) => {
164
161
  setRowSelectionModel(selectionModel);
@@ -174,36 +171,22 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
174
171
  pageSize: paginationModel.pageSize
175
172
  });
176
173
 
177
- // Version counter to force re-renders when selectionStatus ref changes
178
- const [, forceSelectionUpdate] = useState(0);
179
-
180
- // Track when the grid API is ready to ensure top pagination renders correctly
181
- const [gridReady, setGridReady] = useState(false);
182
-
183
174
  // The checkboxSelectionVisibleOnly should only be applied to client-side pagination,
184
175
  // for server-side pagination it produces inconsistent behavior when selecting all rows in pages 2 and beyond
185
176
  const checkboxSelectionVisibleOnly = Boolean(pagination) && Boolean(paginationMode != 'server');
186
177
 
187
178
  // Banner and pager placements are independent. `belowToolbar` (for either) renders
188
- // in a row inside the toolbar slot, and only applies when pagination is on.
179
+ // in the toolbar-slot row, and only applies when pagination is on.
189
180
  const bannerAtTop = selectionBannerPlacement === 'top';
190
181
  const bannerAtBottom = selectionBannerPlacement === 'bottom';
191
182
  const bannerBelowToolbar = selectionBannerPlacement === 'belowToolbar' && Boolean(pagination);
192
183
  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
184
 
202
185
  // in server-side pagination we want to update the selection status
203
186
  // every time we navigate between pages, resize our page or select something
204
187
  useEffect(() => {
205
188
  if (paginationMode == 'server') {
206
- onServerSideSelectionStatusChange(rowSelectionModel, apiRef, selectionStatusRef, forceSelectionUpdate, isRowSelectable, paginationModel.page, paginationModel.pageSize);
189
+ onServerSideSelectionStatusChange(Array.isArray(rowSelectionModel) ? rowSelectionModel : [rowSelectionModel], apiRef, selectionStatusRef, isRowSelectable, paginationModel.page, paginationModel.pageSize);
207
190
  }
208
191
  }, [rowSelectionModel, paginationModel.page, paginationModel.pageSize, rows]);
209
192
  if (!Array.isArray(rows)) {
@@ -215,15 +198,9 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
215
198
  // receive the fresh value in the same render cycle — no extra re-render needed.
216
199
  // The ref is kept in sync for the onRowSelectionModelChange callback's deselect logic.
217
200
  let selectionStatus = selectionStatusRef.current;
218
- if (pagination && paginationMode !== 'server' && getSelectionCount(rowSelectionModel) > 0) {
201
+ if (pagination && paginationMode !== 'server' && Array.isArray(rowSelectionModel) && rowSelectionModel.length > 0) {
219
202
  try {
220
- // Use manual page slicing instead of gridPaginatedVisibleSorted* selectors.
221
- // MUI's paginated selectors use apiRef internal state which may be stale when
222
- // paginationModel prop changes — our React state is always up to date.
223
- const allFilteredEntries = gridFilteredSortedRowEntriesSelector(apiRef);
224
- const pageStart = paginationModel.page * paginationModel.pageSize;
225
- const pageEntries = allFilteredEntries.slice(pageStart, pageStart + paginationModel.pageSize);
226
- const selectableRowsInPage = isRowSelectable ? pageEntries.filter(_ref => {
203
+ const selectableRowsInPage = isRowSelectable ? gridPaginatedVisibleSortedGridRowEntriesSelector(apiRef).filter(_ref => {
227
204
  let {
228
205
  model
229
206
  } = _ref;
@@ -235,29 +212,24 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
235
212
  id
236
213
  } = _ref2;
237
214
  return id;
238
- }) : pageEntries.map(_ref3 => {
239
- let {
240
- id
241
- } = _ref3;
242
- return id;
243
- });
215
+ }) : gridPaginatedVisibleSortedGridRowIdsSelector(apiRef);
244
216
  const numberOfSelectableRowsInPage = selectableRowsInPage.length;
245
- const selectableRowsInTable = isRowSelectable ? allFilteredEntries.filter(_ref4 => {
217
+ const selectableRowsInTable = isRowSelectable ? gridFilteredSortedRowEntriesSelector(apiRef).filter(_ref3 => {
246
218
  let {
247
219
  model
248
- } = _ref4;
220
+ } = _ref3;
249
221
  return isRowSelectable({
250
222
  row: model
251
223
  });
252
- }).map(_ref5 => {
224
+ }).map(_ref4 => {
253
225
  let {
254
226
  id
255
- } = _ref5;
227
+ } = _ref4;
256
228
  return id;
257
229
  }) : gridFilteredSortedRowIdsSelector(apiRef);
258
230
  const numberOfSelectableRowsInTable = selectableRowsInTable.length;
259
- const numberOfSelectedRows = getSelectionCount(rowSelectionModel);
260
- const selectedOnCurrentPage = selectableRowsInPage.filter(id => isRowSelected(rowSelectionModel, id));
231
+ const numberOfSelectedRows = rowSelectionModel.length;
232
+ const selectedOnCurrentPage = selectableRowsInPage.filter(id => rowSelectionModel.includes(id));
261
233
  if (numberOfSelectedRows === numberOfSelectableRowsInTable && numberOfSelectableRowsInPage < numberOfSelectableRowsInTable) {
262
234
  selectionStatus = {
263
235
  type: 'table',
@@ -311,126 +283,63 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
311
283
  ref: datagridRef,
312
284
  className: classNames(DataGrid.className, className),
313
285
  $height: height
314
- }, pagination && gridReady && (bannerAtTop || ['top', 'both'].includes(paginationPlacement)) ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, {
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, {
286
+ }, /*#__PURE__*/React__default.createElement(DataGridPro, _extends({}, forwardedProps, {
336
287
  rowCount: rowCount,
337
288
  apiRef: apiRef,
338
289
  autoHeight: autoHeight,
339
290
  checkboxSelectionVisibleOnly: checkboxSelectionVisibleOnly,
340
- disableRowSelectionExcludeModel: true,
341
- showToolbar: !hideToolbar || belowToolbarActive,
342
- slots: _objectSpread2(_objectSpread2(_objectSpread2({
343
- baseButton: BaseButton,
344
- baseCheckbox: BaseCheckbox,
345
- baseIconButton: BaseIconButton,
346
- columnFilteredIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
347
- displayName: "columnFilteredIcon"
348
- })),
349
- columnSelectorIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
350
- displayName: "columnSelectorIcon"
351
- })),
352
- columnSortedAscendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
353
- displayName: "columnSortedAscendingIcon"
354
- })),
355
- columnSortedDescendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
356
- displayName: "columnSortedDescendingIcon"
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, {
291
+ slots: _objectSpread2(_objectSpread2(_objectSpread2({}, baseGridSlots), slots), {}, {
292
+ // The toolbar is already a stable module-level component (ToolbarWrapper) with its
293
+ // per-render data injected via `slotProps.toolbar` below. `BottomPagination` is
294
+ // likewise stable; a fresh inline function here would remount the slot's subtree
295
+ // every render.
296
+ toolbar: ToolbarWrapper,
297
+ pagination: BottomPagination
298
+ }),
299
+ slotProps: _objectSpread2(_objectSpread2({}, slotProps), {}, {
300
+ toolbar: _objectSpread2({
301
+ hideToolbar,
302
+ RenderedToolbar,
303
+ filterModel,
304
+ onFilterModelChange,
305
+ pagination,
306
+ displaySelection: bannerAtTop || bannerBelowToolbar,
307
+ displayPagination: ['top', 'both'].includes(paginationPlacement) || pagerBelowToolbar,
308
+ displayRowsPerPage: pagerBelowToolbar,
309
+ selectionStatus,
310
+ apiRef,
311
+ isRowSelectable,
312
+ paginationModel,
313
+ onPaginationModelChange,
314
+ pageSizeOptions,
315
+ paginationProps,
316
+ paginationMode,
317
+ rowCount
318
+ }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.toolbar),
319
+ // Per-render data for the stable `BottomPagination` slot. Consumer slot props are
320
+ // spread first; the DS layout data wins. Cast at the MUI boundary because these are
321
+ // ToolbarWrapper props, not the MUI slot prop types.
322
+ pagination: _objectSpread2(_objectSpread2({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.pagination), {}, {
323
+ pagination,
324
+ paginationMode,
414
325
  displaySelection: bannerAtBottom,
415
326
  displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
416
327
  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
328
+ selectionStatus,
329
+ paginationModel,
330
+ onPaginationModelChange,
331
+ apiRef,
332
+ isRowSelectable,
333
+ pageSizeOptions,
334
+ paginationProps,
335
+ rowCount
336
+ })
425
337
  }),
426
- slotProps: _objectSpread2({}, slotProps),
427
338
  filterModel: filterModel,
428
339
  columnVisibilityModel: columnVisibilityModel,
429
340
  pinnedColumns: pinnedColumns,
430
341
  sortModel: sortModel,
431
- initialState: _objectSpread2(_objectSpread2({}, 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
- }),
342
+ initialState: initialState,
434
343
  isRowSelectable: isRowSelectable,
435
344
  onFilterModelChange: onFilterModelChange,
436
345
  onColumnVisibilityModelChange: onColumnVisibilityModelChange,
@@ -450,52 +359,41 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
450
359
  // Fix server-side header checkbox: when MUI deselects all due to indeterminate
451
360
  // state (cross-page selections exist, 0 on current page), convert to "select page".
452
361
  if (pagination && paginationMode === 'server') {
453
- effectiveSelectionModel = fixServerSideHeaderCheckboxSelection(newSelectionModel, rowSelectionModel, selectionStatusRef, apiRef, isRowSelectable);
362
+ effectiveSelectionModel = fixServerSideHeaderCheckboxSelection(newSelectionModel, Array.isArray(rowSelectionModel) ? rowSelectionModel : [rowSelectionModel], selectionStatusRef, apiRef, isRowSelectable);
454
363
  }
455
364
  if (pagination && paginationMode != 'server') {
456
- // Use manual page slicing instead of gridPaginatedVisibleSorted* selectors
457
- // to avoid stale apiRef pagination state.
458
- const allFilteredEntries = gridFilteredSortedRowEntriesSelector(apiRef);
459
- const pageStart = paginationModel.page * paginationModel.pageSize;
460
- const pageEntries = allFilteredEntries.slice(pageStart, pageStart + paginationModel.pageSize);
461
- const selectableRowsInPage = isRowSelectable ? pageEntries.filter(_ref8 => {
365
+ const selectableRowsInPage = isRowSelectable ? gridPaginatedVisibleSortedGridRowEntriesSelector(apiRef).filter(_ref5 => {
462
366
  let {
463
367
  model
464
- } = _ref8;
368
+ } = _ref5;
465
369
  return isRowSelectable({
466
370
  row: model
467
371
  });
468
- }).map(_ref9 => {
469
- let {
470
- id
471
- } = _ref9;
472
- return id;
473
- }) : pageEntries.map(_ref10 => {
372
+ }).map(_ref6 => {
474
373
  let {
475
374
  id
476
- } = _ref10;
375
+ } = _ref6;
477
376
  return id;
478
- });
377
+ }) : gridPaginatedVisibleSortedGridRowIdsSelector(apiRef);
479
378
  const numberOfSelectableRowsInPage = selectableRowsInPage.length;
480
- const selectableRowsInTable = isRowSelectable ? allFilteredEntries.filter(_ref11 => {
379
+ const selectableRowsInTable = isRowSelectable ? gridFilteredSortedRowEntriesSelector(apiRef).filter(_ref7 => {
481
380
  let {
482
381
  model
483
- } = _ref11;
382
+ } = _ref7;
484
383
  return isRowSelectable({
485
384
  row: model
486
385
  });
487
- }).map(_ref12 => {
386
+ }).map(_ref8 => {
488
387
  let {
489
388
  id
490
- } = _ref12;
389
+ } = _ref8;
491
390
  return id;
492
391
  }) : gridFilteredSortedRowIdsSelector(apiRef);
493
392
  const numberOfSelectableRowsInTable = selectableRowsInTable.length;
494
- const numberOfSelectedRows = getSelectionCount(newSelectionModel);
393
+ const numberOfSelectedRows = newSelectionModel.length;
495
394
  if (selectionStatusRef.current.type === 'table' && numberOfSelectedRows === numberOfSelectableRowsInTable - numberOfSelectableRowsInPage || selectionStatusRef.current.type === 'table' && numberOfSelectedRows === numberOfSelectableRowsInTable || selectionStatusRef.current.type === 'page' && numberOfSelectedRows === numberOfSelectableRowsInPage) {
496
395
  setTimeout(() => {
497
- var _apiRef$current;
498
- (_apiRef$current = apiRef.current) === null || _apiRef$current === void 0 ? void 0 : _apiRef$current.selectRows([], true, true);
396
+ apiRef.current.selectRows([], true, true);
499
397
  }, 0);
500
398
  }
501
399
  if (numberOfSelectedRows === numberOfSelectableRowsInPage && numberOfSelectableRowsInPage < numberOfSelectableRowsInTable) {
@@ -519,7 +417,6 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
519
417
  numberOfSelectedRows
520
418
  };
521
419
  }
522
- forceSelectionUpdate(v => v + 1);
523
420
  }
524
421
  onRowSelectionModelChange === null || onRowSelectionModelChange === void 0 ? void 0 : onRowSelectionModelChange(effectiveSelectionModel, details);
525
422
  },
@@ -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-pro';\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 gridPaginatedVisibleSortedGridRowEntriesSelector,\n gridPaginatedVisibleSortedGridRowIdsSelector,\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 { ToolbarWrapper } from '../ToolbarWrapper';\nimport { baseGridSlots, 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 // 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 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 const selectableRowsInPage = isRowSelectable\n ? gridPaginatedVisibleSortedGridRowEntriesSelector(apiRef)\n .filter(({ model }) => isRowSelectable({ row: model } as GridRowParams))\n .map(({ id }) => id)\n : gridPaginatedVisibleSortedGridRowIdsSelector(apiRef);\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 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 // The toolbar is already a stable module-level component (ToolbarWrapper) with its\n // per-render data injected via `slotProps.toolbar` below. `BottomPagination` is\n // likewise stable; a fresh inline function here would remount the slot's subtree\n // every render.\n toolbar: ToolbarWrapper,\n pagination: BottomPagination,\n }}\n slotProps={{\n ...slotProps,\n toolbar: {\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 ...slotProps?.toolbar,\n },\n // Per-render data for the stable `BottomPagination` slot. Consumer slot props are\n // spread first; the DS layout data wins. Cast at the MUI boundary because these are\n // ToolbarWrapper props, not the MUI slot prop types.\n pagination: {\n ...slotProps?.pagination,\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 } as unknown as NonNullable<DataGridProps['slotProps']>['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 selectableRowsInPage = isRowSelectable\n ? gridPaginatedVisibleSortedGridRowEntriesSelector(apiRef)\n .filter(({ model }) => isRowSelectable({ row: model } as GridRowParams))\n .map(({ id }) => id)\n : gridPaginatedVisibleSortedGridRowIdsSelector(apiRef);\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 }\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","checkboxSelectionVisibleOnly","Boolean","bannerAtTop","bannerAtBottom","bannerBelowToolbar","pagerBelowToolbar","onServerSideSelectionStatusChange","Array","isArray","selectionStatus","current","length","selectableRowsInPage","gridPaginatedVisibleSortedGridRowEntriesSelector","filter","_ref","model","row","map","_ref2","id","gridPaginatedVisibleSortedGridRowIdsSelector","numberOfSelectableRowsInPage","selectableRowsInTable","gridFilteredSortedRowEntriesSelector","_ref3","_ref4","gridFilteredSortedRowIdsSelector","numberOfSelectableRowsInTable","selectedOnCurrentPage","includes","muiTheme","useMemo","createTheme","palette","mode","primary","main","RedsiftColorBlueN","background","default","RedsiftColorNeutralXDarkGrey","RedsiftColorNeutralWhite","paper","React","createElement","ThemeProvider","value","MuiThemeProvider","StyledDataGrid","classNames","$height","DataGridPro","_extends","_objectSpread","baseGridSlots","ToolbarWrapper","BottomPagination","displaySelection","displayPagination","displayRowsPerPage","keepNonExistentRowsSelected","newSelectionModel","effectiveSelectionModel","fixServerSideHeaderCheckboxSelection","_ref5","_ref6","_ref7","_ref8","setTimeout","selectRows","flexDirection","alignItems","margin","displayName"],"mappings":"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"}