@redsift/table 12.5.5-alpha.2 → 12.5.5-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.
@@ -1,15 +1,16 @@
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, 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';
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 } from './useControlledDatagridState.js';
7
+ import { T as Toolbar } from './Toolbar2.js';
8
+ import { o as onServerSideSelectionStatusChange, f as fixServerSideHeaderCheckboxSelection, S as ServerSideControlledPagination, C as ControlledPagination } from './ControlledPagination.js';
9
+ import { b as createTheme } from './Portal.js';
10
+ import { B as BaseButton, a as BaseCheckbox, c as BasePopper, b as BaseIcon } from './BasePopper.js';
11
+ import { T as ToolbarWrapper } from './ToolbarWrapper2.js';
11
12
 
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", "paginationProps", "rows", "pageSizeOptions", "sx", "theme", "paginationMode", "rowCount", "density"];
13
+ 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"];
13
14
  const COMPONENT_NAME = 'DataGrid';
14
15
  const CLASSNAME = 'redsift-datagrid';
15
16
 
@@ -86,7 +87,6 @@ const CLASSNAME = 'redsift-datagrid';
86
87
  */
87
88
 
88
89
  const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
89
- var _ref6;
90
90
  const datagridRef = ref || useRef();
91
91
  const {
92
92
  apiRef: propsApiRef,
@@ -113,19 +113,20 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
113
113
  onSortModelChange: propsOnSortModelChange,
114
114
  pagination,
115
115
  paginationPlacement = 'both',
116
+ selectionBannerPlacement = 'top',
116
117
  paginationProps,
117
118
  rows,
118
- pageSizeOptions = [5, 10, 25, 50],
119
+ pageSizeOptions,
119
120
  sx,
120
121
  theme: propsTheme,
121
122
  paginationMode = 'client',
122
- rowCount,
123
- density
123
+ rowCount
124
124
  } = props,
125
125
  forwardedProps = _objectWithoutProperties(props, _excluded);
126
126
  const theme = useTheme(propsTheme);
127
127
  const _apiRef = useGridApiRef();
128
128
  const apiRef = propsApiRef !== null && propsApiRef !== void 0 ? propsApiRef : _apiRef;
129
+ const RenderedToolbar = slots !== null && slots !== void 0 && slots.toolbar ? slots.toolbar : Toolbar;
129
130
  LicenseInfo.setLicenseKey(license);
130
131
  const height = propsHeight !== null && propsHeight !== void 0 ? propsHeight : autoHeight ? undefined : '500px';
131
132
  const {
@@ -153,9 +154,9 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
153
154
  propsSortModel,
154
155
  propsOnPaginationModelChange
155
156
  });
156
- const [rowSelectionModel, setRowSelectionModel] = useState(() => normalizeRowSelectionModel(propsRowSelectionModel));
157
+ const [rowSelectionModel, setRowSelectionModel] = useState(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
157
158
  useEffect(() => {
158
- setRowSelectionModel(normalizeRowSelectionModel(propsRowSelectionModel));
159
+ setRowSelectionModel(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
159
160
  }, [propsRowSelectionModel]);
160
161
  const onRowSelectionModelChange = (selectionModel, details) => {
161
162
  setRowSelectionModel(selectionModel);
@@ -174,25 +175,22 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
174
175
  // Version counter to force re-renders when selectionStatus ref changes
175
176
  const [, forceSelectionUpdate] = useState(0);
176
177
 
177
- // Track when the grid API is ready to ensure top pagination renders correctly
178
- const [gridReady, setGridReady] = useState(false);
179
-
180
178
  // The checkboxSelectionVisibleOnly should only be applied to client-side pagination,
181
179
  // for server-side pagination it produces inconsistent behavior when selecting all rows in pages 2 and beyond
182
180
  const checkboxSelectionVisibleOnly = Boolean(pagination) && Boolean(paginationMode != 'server');
183
181
 
184
- // Force re-render when the grid API becomes ready (for top pagination)
185
- useEffect(() => {
186
- if (apiRef.current && !gridReady) {
187
- setGridReady(true);
188
- }
189
- });
182
+ // Banner and pager placements are independent. `belowToolbar` (for either) renders
183
+ // in the toolbar-slot row, and only applies when pagination is on.
184
+ const bannerAtTop = selectionBannerPlacement === 'top';
185
+ const bannerAtBottom = selectionBannerPlacement === 'bottom';
186
+ const bannerBelowToolbar = selectionBannerPlacement === 'belowToolbar' && Boolean(pagination);
187
+ const pagerBelowToolbar = paginationPlacement === 'belowToolbar' && Boolean(pagination);
190
188
 
191
189
  // in server-side pagination we want to update the selection status
192
190
  // every time we navigate between pages, resize our page or select something
193
191
  useEffect(() => {
194
192
  if (paginationMode == 'server') {
195
- onServerSideSelectionStatusChange(rowSelectionModel, apiRef, selectionStatusRef, forceSelectionUpdate, isRowSelectable, paginationModel.page, paginationModel.pageSize);
193
+ onServerSideSelectionStatusChange(Array.isArray(rowSelectionModel) ? rowSelectionModel : [rowSelectionModel], apiRef, selectionStatusRef, forceSelectionUpdate, isRowSelectable, paginationModel.page, paginationModel.pageSize);
196
194
  }
197
195
  }, [rowSelectionModel, paginationModel.page, paginationModel.pageSize, rows]);
198
196
  if (!Array.isArray(rows)) {
@@ -204,15 +202,15 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
204
202
  // receive the fresh value in the same render cycle — no extra re-render needed.
205
203
  // The ref is kept in sync for the onRowSelectionModelChange callback's deselect logic.
206
204
  let selectionStatus = selectionStatusRef.current;
207
- if (pagination && paginationMode !== 'server' && getSelectionCount(rowSelectionModel) > 0) {
205
+ if (pagination && paginationMode !== 'server' && Array.isArray(rowSelectionModel) && rowSelectionModel.length > 0) {
208
206
  try {
209
- // Use manual page slicing instead of gridPaginatedVisibleSorted* selectors.
210
- // MUI's paginated selectors use apiRef internal state which may be stale when
211
- // paginationModel prop changes our React state is always up to date.
212
- const allFilteredEntries = gridFilteredSortedRowEntriesSelector(apiRef);
207
+ // Use manual page slicing with our React state's paginationModel instead of
208
+ // gridPaginatedVisibleSortedGridRow*Selector(apiRef). In MUI v7, the apiRef's
209
+ // internal pagination state can lag behind the React state after a page change,
210
+ // causing the selection status to be one page behind.
213
211
  const pageStart = paginationModel.page * paginationModel.pageSize;
214
- const pageEntries = allFilteredEntries.slice(pageStart, pageStart + paginationModel.pageSize);
215
- const selectableRowsInPage = isRowSelectable ? pageEntries.filter(_ref => {
212
+ const pageEnd = pageStart + paginationModel.pageSize;
213
+ const selectableRowsInPage = isRowSelectable ? gridFilteredSortedRowEntriesSelector(apiRef).slice(pageStart, pageEnd).filter(_ref => {
216
214
  let {
217
215
  model
218
216
  } = _ref;
@@ -224,29 +222,24 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
224
222
  id
225
223
  } = _ref2;
226
224
  return id;
227
- }) : pageEntries.map(_ref3 => {
228
- let {
229
- id
230
- } = _ref3;
231
- return id;
232
- });
225
+ }) : gridFilteredSortedRowIdsSelector(apiRef).slice(pageStart, pageEnd);
233
226
  const numberOfSelectableRowsInPage = selectableRowsInPage.length;
234
- const selectableRowsInTable = isRowSelectable ? allFilteredEntries.filter(_ref4 => {
227
+ const selectableRowsInTable = isRowSelectable ? gridFilteredSortedRowEntriesSelector(apiRef).filter(_ref3 => {
235
228
  let {
236
229
  model
237
- } = _ref4;
230
+ } = _ref3;
238
231
  return isRowSelectable({
239
232
  row: model
240
233
  });
241
- }).map(_ref5 => {
234
+ }).map(_ref4 => {
242
235
  let {
243
236
  id
244
- } = _ref5;
237
+ } = _ref4;
245
238
  return id;
246
239
  }) : gridFilteredSortedRowIdsSelector(apiRef);
247
240
  const numberOfSelectableRowsInTable = selectableRowsInTable.length;
248
- const numberOfSelectedRows = getSelectionCount(rowSelectionModel);
249
- const selectedOnCurrentPage = selectableRowsInPage.filter(id => isRowSelected(rowSelectionModel, id));
241
+ const numberOfSelectedRows = rowSelectionModel.length;
242
+ const selectedOnCurrentPage = selectableRowsInPage.filter(id => rowSelectionModel.includes(id));
250
243
  if (numberOfSelectedRows === numberOfSelectableRowsInTable && numberOfSelectableRowsInPage < numberOfSelectableRowsInTable) {
251
244
  selectionStatus = {
252
245
  type: 'table',
@@ -300,38 +293,16 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
300
293
  ref: datagridRef,
301
294
  className: classNames(DataGrid.className, className),
302
295
  $height: height
303
- }, pagination && ['top', 'both'].includes(paginationPlacement) && gridReady ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, {
304
- displaySelection: true,
305
- displayRowsPerPage: ['top', 'both'].includes(paginationPlacement),
306
- displayPagination: ['top', 'both'].includes(paginationPlacement),
307
- selectionStatus: selectionStatus,
308
- paginationModel: paginationModel,
309
- onPaginationModelChange: onPaginationModelChange,
310
- pageSizeOptions: pageSizeOptions,
311
- paginationProps: paginationProps,
312
- rowCount: rowCount
313
- }) : /*#__PURE__*/React__default.createElement(ControlledPagination, {
314
- displaySelection: true,
315
- displayRowsPerPage: ['top', 'both'].includes(paginationPlacement),
316
- displayPagination: ['top', 'both'].includes(paginationPlacement),
317
- selectionStatus: selectionStatus,
318
- apiRef: apiRef,
319
- isRowSelectable: isRowSelectable,
320
- paginationModel: paginationModel,
321
- onPaginationModelChange: onPaginationModelChange,
322
- pageSizeOptions: pageSizeOptions,
323
- paginationProps: paginationProps
324
- }) : null, /*#__PURE__*/React__default.createElement(DataGridPremium, _extends({}, forwardedProps, {
296
+ }, /*#__PURE__*/React__default.createElement(DataGridPro, _extends({}, forwardedProps, {
325
297
  rowCount: rowCount,
326
298
  apiRef: apiRef,
327
299
  autoHeight: autoHeight,
328
300
  checkboxSelectionVisibleOnly: checkboxSelectionVisibleOnly,
329
- disableRowSelectionExcludeModel: true,
330
- showToolbar: !hideToolbar,
331
301
  slots: _objectSpread2(_objectSpread2({
332
302
  baseButton: BaseButton,
333
303
  baseCheckbox: BaseCheckbox,
334
- baseIconButton: BaseIconButton,
304
+ // baseTextField,
305
+ basePopper: BasePopper,
335
306
  columnFilteredIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
336
307
  displayName: "columnFilteredIcon"
337
308
  })),
@@ -366,8 +337,27 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
366
337
  displayName: "openFilterButtonIcon"
367
338
  }))
368
339
  }, slots), {}, {
340
+ toolbar: props => /*#__PURE__*/React__default.createElement(ToolbarWrapper, _extends({}, props, {
341
+ hideToolbar: hideToolbar,
342
+ RenderedToolbar: RenderedToolbar,
343
+ filterModel: filterModel,
344
+ onFilterModelChange: onFilterModelChange,
345
+ pagination: pagination,
346
+ displaySelection: bannerAtTop || bannerBelowToolbar,
347
+ displayPagination: ['top', 'both'].includes(paginationPlacement) || pagerBelowToolbar,
348
+ displayRowsPerPage: pagerBelowToolbar,
349
+ selectionStatus: selectionStatus,
350
+ apiRef: apiRef,
351
+ isRowSelectable: isRowSelectable,
352
+ paginationModel: paginationModel,
353
+ onPaginationModelChange: onPaginationModelChange,
354
+ pageSizeOptions: pageSizeOptions,
355
+ paginationProps: paginationProps,
356
+ paginationMode: paginationMode,
357
+ rowCount: rowCount
358
+ })),
369
359
  pagination: props => pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends({}, props, {
370
- displaySelection: false,
360
+ displaySelection: bannerAtBottom,
371
361
  displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
372
362
  displayPagination: ['bottom', 'both'].includes(paginationPlacement),
373
363
  selectionStatus: selectionStatus,
@@ -377,7 +367,7 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
377
367
  paginationProps: paginationProps,
378
368
  rowCount: rowCount
379
369
  })) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends({}, props, {
380
- displaySelection: false,
370
+ displaySelection: bannerAtBottom,
381
371
  displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
382
372
  displayPagination: ['bottom', 'both'].includes(paginationPlacement),
383
373
  selectionStatus: selectionStatus,
@@ -394,9 +384,7 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
394
384
  columnVisibilityModel: columnVisibilityModel,
395
385
  pinnedColumns: pinnedColumns,
396
386
  sortModel: sortModel,
397
- initialState: _objectSpread2(_objectSpread2({}, initialState), {}, {
398
- density: (_ref6 = density !== null && density !== void 0 ? density : initialState === null || initialState === void 0 ? void 0 : initialState.density) !== null && _ref6 !== void 0 ? _ref6 : 'standard'
399
- }),
387
+ initialState: initialState,
400
388
  isRowSelectable: isRowSelectable,
401
389
  onFilterModelChange: onFilterModelChange,
402
390
  onColumnVisibilityModelChange: onColumnVisibilityModelChange,
@@ -416,52 +404,43 @@ const DataGrid = /*#__PURE__*/forwardRef((props, ref) => {
416
404
  // Fix server-side header checkbox: when MUI deselects all due to indeterminate
417
405
  // state (cross-page selections exist, 0 on current page), convert to "select page".
418
406
  if (pagination && paginationMode === 'server') {
419
- effectiveSelectionModel = fixServerSideHeaderCheckboxSelection(newSelectionModel, rowSelectionModel, selectionStatusRef, apiRef, isRowSelectable);
407
+ effectiveSelectionModel = fixServerSideHeaderCheckboxSelection(newSelectionModel, Array.isArray(rowSelectionModel) ? rowSelectionModel : [rowSelectionModel], selectionStatusRef, apiRef, isRowSelectable);
420
408
  }
421
409
  if (pagination && paginationMode != 'server') {
422
- // Use manual page slicing instead of gridPaginatedVisibleSorted* selectors
423
- // to avoid stale apiRef pagination state.
424
- const allFilteredEntries = gridFilteredSortedRowEntriesSelector(apiRef);
425
- const pageStart = paginationModel.page * paginationModel.pageSize;
426
- const pageEntries = allFilteredEntries.slice(pageStart, pageStart + paginationModel.pageSize);
427
- const selectableRowsInPage = isRowSelectable ? pageEntries.filter(_ref7 => {
410
+ const cbPageStart = paginationModel.page * paginationModel.pageSize;
411
+ const cbPageEnd = cbPageStart + paginationModel.pageSize;
412
+ const selectableRowsInPage = isRowSelectable ? gridFilteredSortedRowEntriesSelector(apiRef).slice(cbPageStart, cbPageEnd).filter(_ref5 => {
428
413
  let {
429
414
  model
430
- } = _ref7;
415
+ } = _ref5;
431
416
  return isRowSelectable({
432
417
  row: model
433
418
  });
434
- }).map(_ref8 => {
435
- let {
436
- id
437
- } = _ref8;
438
- return id;
439
- }) : pageEntries.map(_ref9 => {
419
+ }).map(_ref6 => {
440
420
  let {
441
421
  id
442
- } = _ref9;
422
+ } = _ref6;
443
423
  return id;
444
- });
424
+ }) : gridFilteredSortedRowIdsSelector(apiRef).slice(cbPageStart, cbPageEnd);
445
425
  const numberOfSelectableRowsInPage = selectableRowsInPage.length;
446
- const selectableRowsInTable = isRowSelectable ? allFilteredEntries.filter(_ref10 => {
426
+ const selectableRowsInTable = isRowSelectable ? gridFilteredSortedRowEntriesSelector(apiRef).filter(_ref7 => {
447
427
  let {
448
428
  model
449
- } = _ref10;
429
+ } = _ref7;
450
430
  return isRowSelectable({
451
431
  row: model
452
432
  });
453
- }).map(_ref11 => {
433
+ }).map(_ref8 => {
454
434
  let {
455
435
  id
456
- } = _ref11;
436
+ } = _ref8;
457
437
  return id;
458
438
  }) : gridFilteredSortedRowIdsSelector(apiRef);
459
439
  const numberOfSelectableRowsInTable = selectableRowsInTable.length;
460
- const numberOfSelectedRows = getSelectionCount(newSelectionModel);
440
+ const numberOfSelectedRows = newSelectionModel.length;
461
441
  if (selectionStatusRef.current.type === 'table' && numberOfSelectedRows === numberOfSelectableRowsInTable - numberOfSelectableRowsInPage || selectionStatusRef.current.type === 'table' && numberOfSelectedRows === numberOfSelectableRowsInTable || selectionStatusRef.current.type === 'page' && numberOfSelectedRows === numberOfSelectableRowsInPage) {
462
442
  setTimeout(() => {
463
- var _apiRef$current;
464
- (_apiRef$current = apiRef.current) === null || _apiRef$current === void 0 ? void 0 : _apiRef$current.selectRows([], true, true);
443
+ apiRef.current.selectRows([], true, true);
465
444
  }, 0);
466
445
  }
467
446
  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 { 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 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 // 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 && ['top', 'both'].includes(paginationPlacement!) && gridReady ? (\n paginationMode == 'server' ? (\n <ServerSideControlledPagination\n displaySelection\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\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}\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 pagination: (props) =>\n pagination ? (\n paginationMode == 'server' ? (\n <ServerSideControlledPagination\n {...props}\n displaySelection={false}\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={false}\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","_ref6","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","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","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","keepNonExistentRowsSelected","newSelectionModel","effectiveSelectionModel","fixServerSideHeaderCheckboxSelection","_ref7","_ref8","_ref9","_ref10","_ref11","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 { BaseIcon, BaseButton, BaseCheckbox, BasePopper } from '../BaseComponents';\nimport { ToolbarWrapper } from '../ToolbarWrapper';\nimport {\n onServerSideSelectionStatusChange,\n fixServerSideHeaderCheckboxSelection,\n ServerSideControlledPagination,\n ControlledPagination,\n} 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 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 baseButton: BaseButton,\n baseCheckbox: BaseCheckbox,\n // baseTextField,\n basePopper: BasePopper,\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 toolbar: (props) => (\n <ToolbarWrapper\n {...props}\n hideToolbar={hideToolbar}\n RenderedToolbar={RenderedToolbar}\n filterModel={filterModel}\n onFilterModelChange={onFilterModelChange}\n pagination={pagination}\n displaySelection={bannerAtTop || bannerBelowToolbar}\n displayPagination={['top', 'both'].includes(paginationPlacement!) || pagerBelowToolbar}\n displayRowsPerPage={pagerBelowToolbar}\n selectionStatus={selectionStatus}\n apiRef={apiRef}\n isRowSelectable={isRowSelectable}\n paginationModel={paginationModel}\n onPaginationModelChange={onPaginationModelChange}\n pageSizeOptions={pageSizeOptions}\n paginationProps={paginationProps}\n paginationMode={paginationMode}\n rowCount={rowCount}\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}\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}\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}\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","React","createElement","ThemeProvider","value","MuiThemeProvider","StyledDataGrid","classNames","$height","DataGridPro","_extends","_objectSpread","baseButton","BaseButton","baseCheckbox","BaseCheckbox","basePopper","BasePopper","columnFilteredIcon","BaseIcon","displayName","columnSelectorIcon","columnSortedAscendingIcon","columnSortedDescendingIcon","densityCompactIcon","densityStandardIcon","densityComfortableIcon","detailPanelCollapseIcon","detailPanelExpandIcon","exportIcon","openFilterButtonIcon","ToolbarWrapper","displaySelection","displayPagination","displayRowsPerPage","ServerSideControlledPagination","ControlledPagination","keepNonExistentRowsSelected","newSelectionModel","effectiveSelectionModel","fixServerSideHeaderCheckboxSelection","cbPageStart","cbPageEnd","_ref5","_ref6","_ref7","_ref8","setTimeout","selectRows","v","flexDirection","alignItems","margin"],"mappings":"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"}