diff --git a/packages/x-data-grid-premium/src/hooks/features/export/serializer/excelSerializer.ts b/packages/x-data-grid-premium/src/hooks/features/export/serializer/excelSerializer.ts index 226d24edb71b3..1fe69eebc0c92 100644 --- a/packages/x-data-grid-premium/src/hooks/features/export/serializer/excelSerializer.ts +++ b/packages/x-data-grid-premium/src/hooks/features/export/serializer/excelSerializer.ts @@ -15,6 +15,7 @@ import { isObject, isSingleSelectColDef, gridHasColSpanSelector, + throwMissingRowError, } from '@mui/x-data-grid/internals'; import { warnOnce } from '@mui/x-internals/warning'; import type { ColumnsStylesInterface, GridExcelExportOptions } from '../gridExcelExportInterface'; @@ -82,7 +83,7 @@ export const serializeRowUnsafe = ( const row = apiRef.current.getRow(id); const rowNode = apiRef.current.getRowNode(id); if (!row || !rowNode) { - throw new Error(`MUI X: No row with id #${id} found`); + throwMissingRowError(id); } const outlineLevel = rowNode.depth; const hasColSpan = gridHasColSpanSelector(apiRef); diff --git a/packages/x-data-grid-premium/src/hooks/features/rows/useGridRowsOverridableMethods.ts b/packages/x-data-grid-premium/src/hooks/features/rows/useGridRowsOverridableMethods.ts index deb5f0b2bc8ce..3c02238ecf475 100644 --- a/packages/x-data-grid-premium/src/hooks/features/rows/useGridRowsOverridableMethods.ts +++ b/packages/x-data-grid-premium/src/hooks/features/rows/useGridRowsOverridableMethods.ts @@ -11,6 +11,7 @@ import { useGridRowsOverridableMethodsCommunity, useGridRowsOverridableMethodsPro, useGridSelector, + throwMissingRowError, type ReorderExecutionContext, } from '@mui/x-data-grid-pro/internals'; import type { RefObject } from '@mui/x-internals/types'; @@ -43,11 +44,11 @@ export const useGridRowsOverridableMethods = ( const targetNode = gridRowNodeSelector(apiRef, targetRowId); if (!sourceNode) { - throw new Error(`MUI X: No row with id #${sourceRowId} found.`); + throwMissingRowError(sourceRowId); } if (!targetNode) { - throw new Error(`MUI X: No row with id #${targetRowId} found.`); + throwMissingRowError(targetRowId); } if (sourceNode.type === 'footer') { @@ -104,7 +105,7 @@ export const useGridRowsOverridableMethods = ( const sourceNode = gridRowNodeSelector(apiRef, sourceRowId); if (!sourceNode) { - throw new Error(`MUI X: No row with id #${sourceRowId} found.`); + throwMissingRowError(sourceRowId); } if (sourceNode.type === 'footer') { diff --git a/packages/x-data-grid/src/hooks/features/rows/gridRowsUtils.ts b/packages/x-data-grid/src/hooks/features/rows/gridRowsUtils.ts index 5931a5ace0ee7..b5796f661ebfa 100644 --- a/packages/x-data-grid/src/hooks/features/rows/gridRowsUtils.ts +++ b/packages/x-data-grid/src/hooks/features/rows/gridRowsUtils.ts @@ -33,6 +33,10 @@ import { gridRowNodeSelector } from './gridRowsSelector'; export const GRID_ROOT_GROUP_ID: GridRowId = `auto-generated-group-node-root`; export const GRID_ID_AUTOGENERATED = Symbol('mui.id_autogenerated'); +export function throwMissingRowError(id: GridRowId): never { + throw new Error(`MUI X: No row with id #${id} found.`); +} + export const buildRootGroup = (): GridGroupNode => ({ type: 'group', id: GRID_ROOT_GROUP_ID, diff --git a/packages/x-data-grid/src/hooks/features/rows/useGridParamsApi.ts b/packages/x-data-grid/src/hooks/features/rows/useGridParamsApi.ts index ff287d182bb0d..7b300cc2efa57 100644 --- a/packages/x-data-grid/src/hooks/features/rows/useGridParamsApi.ts +++ b/packages/x-data-grid/src/hooks/features/rows/useGridParamsApi.ts @@ -14,10 +14,9 @@ import { gridFocusCellSelector, gridTabIndexCellSelector } from '../focus/gridFo import type { DataGridProcessedProps } from '../../../models/props/DataGridProps'; import { gridListColumnSelector } from '../listView/gridListViewSelectors'; import { gridRowNodeSelector } from './gridRowsSelector'; +import { throwMissingRowError } from './gridRowsUtils'; import type { GridConfiguration } from '../../../models/configuration/gridConfiguration'; -class MissingRowIdError extends Error {} - /** * @requires useGridColumns (method) * @requires useGridRows (method) @@ -44,7 +43,7 @@ export function useGridParamsApi( const row = apiRef.current.getRow(id); if (!row) { - throw new MissingRowIdError(`MUI X: No row with id #${id} found`); + throwMissingRowError(id); } const params: GridRowParams = { @@ -106,7 +105,7 @@ export function useGridParamsApi( const rowNode = gridRowNodeSelector(apiRef, id); if (!row || !rowNode) { - throw new MissingRowIdError(`MUI X: No row with id #${id} found`); + throwMissingRowError(id); } const cellFocus = gridFocusCellSelector(apiRef); diff --git a/packages/x-data-grid/src/hooks/features/rows/useGridParamsOverridableMethods.ts b/packages/x-data-grid/src/hooks/features/rows/useGridParamsOverridableMethods.ts index 3765b0cb8ce7e..cf69b5d0db71a 100644 --- a/packages/x-data-grid/src/hooks/features/rows/useGridParamsOverridableMethods.ts +++ b/packages/x-data-grid/src/hooks/features/rows/useGridParamsOverridableMethods.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import type { RefObject } from '@mui/x-internals/types'; -import { getRowValue as getRowValueFn } from './gridRowsUtils'; +import { getRowValue as getRowValueFn, throwMissingRowError } from './gridRowsUtils'; import type { GridPrivateApiCommunity } from '../../../models/api/gridApiCommunity'; import type { GridParamsApi } from '../../../models/api/gridParamsApi'; @@ -11,7 +11,7 @@ export const useGridParamsOverridableMethods = (apiRef: RefObject { const currentNode = gridRowNodeSelector(apiRef, id); if (!currentNode) { - throw new Error(`MUI X: No row with id #${id} found.`); + throwMissingRowError(id); } if (currentNode.type !== 'group') { diff --git a/packages/x-data-grid/src/hooks/features/rows/useGridRowsOverridableMethods.ts b/packages/x-data-grid/src/hooks/features/rows/useGridRowsOverridableMethods.ts index 9a037344efd77..701c0b834ffd3 100644 --- a/packages/x-data-grid/src/hooks/features/rows/useGridRowsOverridableMethods.ts +++ b/packages/x-data-grid/src/hooks/features/rows/useGridRowsOverridableMethods.ts @@ -3,7 +3,7 @@ import type { RefObject } from '@mui/x-internals/types'; import type { GridRowId, GridGroupNode } from '../../../models/gridRows'; import { gridRowTreeSelector, gridRowNodeSelector } from './gridRowsSelector'; import { gridExpandedSortedRowIndexLookupSelector } from '../filter/gridFilterSelector'; -import { GRID_ROOT_GROUP_ID } from './gridRowsUtils'; +import { GRID_ROOT_GROUP_ID, throwMissingRowError } from './gridRowsUtils'; import type { GridPrivateApiCommunity } from '../../../models/api/gridApiCommunity'; import type { GridRowProApi } from '../../../models/api/gridRowApi'; @@ -14,11 +14,11 @@ export const useGridRowsOverridableMethods = (apiRef: RefObject