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