@redsift/table 12.5.6 → 12.5.7-muiv6

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