From 0acaa8aa730d3e034c9f82aa76121408a9f88756 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Fri, 10 May 2024 22:13:30 +0200 Subject: [PATCH] [DataGrid] Reduce bundle size with error messages (#12992) --- .../src/DataGridPremium/DataGridPremium.tsx | 13 ++++--- .../src/DataGridPro/DataGridPro.tsx | 4 +- .../x-data-grid/src/DataGrid/DataGrid.tsx | 37 +++++++++++-------- .../src/internals/utils/propValidation.ts | 15 +++----- 4 files changed, 38 insertions(+), 31 deletions(-) diff --git a/packages/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx b/packages/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx index 2528ab754e58b..33c17ae307f2f 100644 --- a/packages/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx +++ b/packages/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx @@ -28,10 +28,11 @@ export type { GridPremiumSlotsComponent as GridSlots } from '../models'; const releaseInfo = getReleaseInfo(); -const dataGridPremiumPropValidators: PropValidator[] = [ - ...propValidatorsDataGrid, - ...propValidatorsDataGridPro, -]; +let dataGridPremiumPropValidators: PropValidator[]; + +if (process.env.NODE_ENV !== 'production') { + dataGridPremiumPropValidators = [...propValidatorsDataGrid, ...propValidatorsDataGridPro]; +} const DataGridPremiumRaw = React.forwardRef(function DataGridPremium( inProps: DataGridPremiumProps, @@ -42,7 +43,9 @@ const DataGridPremiumRaw = React.forwardRef(function DataGridPremium [] = [ - ...propValidatorsDataGrid, - // Only validate in MIT version - (props) => - (props.columns && - props.columns.some((column) => column.resizable) && - [ - `MUI X: \`column.resizable = true\` is not a valid prop.`, - 'Column resizing is not available in the MIT version.', - '', - 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.', - ].join('\n')) || - undefined, -]; +let propValidators: PropValidator[]; + +if (process.env.NODE_ENV !== 'production') { + propValidators = [ + ...propValidatorsDataGrid, + // Only validate in MIT version + (props) => + (props.columns && + props.columns.some((column) => column.resizable) && + [ + `MUI X: \`column.resizable = true\` is not a valid prop.`, + 'Column resizing is not available in the MIT version.', + '', + 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.', + ].join('\n')) || + undefined, + ]; +} const DataGridRaw = React.forwardRef(function DataGrid( inProps: DataGridProps, @@ -37,8 +41,9 @@ const DataGridRaw = React.forwardRef(function DataGrid [] = [ ]; const warnedOnceCache = new Set(); -const warnOnce = (message: string) => { +function warnOnce(message: string) { if (!warnedOnceCache.has(message)) { console.error(message); warnedOnceCache.add(message); } -}; +} -export const validateProps = (props: TProps, validators: PropValidator[]) => { - if (process.env.NODE_ENV === 'production') { - return; - } +export function validateProps(props: TProps, validators: PropValidator[]) { validators.forEach((validator) => { const warning = validator(props); if (warning) { warnOnce(warning); } }); -}; +} -export const clearWarningsCache = () => { +export function clearWarningsCache() { warnedOnceCache.clear(); -}; +}