diff --git a/docs/data/data-grid/column-dimensions/ColumnAutosizingGroupedRows.js b/docs/data/data-grid/column-dimensions/ColumnAutosizingGroupedRows.js
index f3f84feeb385f..d31942001dcc7 100644
--- a/docs/data/data-grid/column-dimensions/ColumnAutosizingGroupedRows.js
+++ b/docs/data/data-grid/column-dimensions/ColumnAutosizingGroupedRows.js
@@ -20,9 +20,9 @@ export default function ColumnAutosizingGroupedRows() {
});
React.useEffect(() => {
- return apiRef.current.subscribeEvent('rowExpansionChange', (params) => {
+ return apiRef.current?.subscribeEvent('rowExpansionChange', (params) => {
if (params.childrenExpanded) {
- apiRef.current.autosizeColumns({ includeOutliers: true });
+ apiRef.current?.autosizeColumns({ includeOutliers: true });
}
});
}, [apiRef]);
diff --git a/docs/data/data-grid/column-dimensions/ColumnAutosizingGroupedRows.tsx b/docs/data/data-grid/column-dimensions/ColumnAutosizingGroupedRows.tsx
index f3f84feeb385f..d31942001dcc7 100644
--- a/docs/data/data-grid/column-dimensions/ColumnAutosizingGroupedRows.tsx
+++ b/docs/data/data-grid/column-dimensions/ColumnAutosizingGroupedRows.tsx
@@ -20,9 +20,9 @@ export default function ColumnAutosizingGroupedRows() {
});
React.useEffect(() => {
- return apiRef.current.subscribeEvent('rowExpansionChange', (params) => {
+ return apiRef.current?.subscribeEvent('rowExpansionChange', (params) => {
if (params.childrenExpanded) {
- apiRef.current.autosizeColumns({ includeOutliers: true });
+ apiRef.current?.autosizeColumns({ includeOutliers: true });
}
});
}, [apiRef]);
diff --git a/docs/data/data-grid/column-menu/ColumnMenuGridPremiumSnap.js b/docs/data/data-grid/column-menu/ColumnMenuGridPremiumSnap.js
index 8fcabe12685fc..774b8aafde589 100644
--- a/docs/data/data-grid/column-menu/ColumnMenuGridPremiumSnap.js
+++ b/docs/data/data-grid/column-menu/ColumnMenuGridPremiumSnap.js
@@ -34,7 +34,7 @@ export default function ColumnMenuGridPremiumSnap() {
React.useEffect(() => {
// To avoid an issue around Popper being open before the ref is set.
Promise.resolve().then(() => {
- apiRef.current.showColumnMenu('gross');
+ apiRef.current?.showColumnMenu('gross');
console.log('after showColumnMenu');
});
}, [apiRef]);
diff --git a/docs/data/data-grid/column-menu/ColumnMenuGridPremiumSnap.tsx b/docs/data/data-grid/column-menu/ColumnMenuGridPremiumSnap.tsx
index 8fcabe12685fc..774b8aafde589 100644
--- a/docs/data/data-grid/column-menu/ColumnMenuGridPremiumSnap.tsx
+++ b/docs/data/data-grid/column-menu/ColumnMenuGridPremiumSnap.tsx
@@ -34,7 +34,7 @@ export default function ColumnMenuGridPremiumSnap() {
React.useEffect(() => {
// To avoid an issue around Popper being open before the ref is set.
Promise.resolve().then(() => {
- apiRef.current.showColumnMenu('gross');
+ apiRef.current?.showColumnMenu('gross');
console.log('after showColumnMenu');
});
}, [apiRef]);
diff --git a/docs/data/data-grid/column-pinning/ColumnPinningDynamicRowHeight.js b/docs/data/data-grid/column-pinning/ColumnPinningDynamicRowHeight.js
index 30ef6c800feeb..70161e5042210 100644
--- a/docs/data/data-grid/column-pinning/ColumnPinningDynamicRowHeight.js
+++ b/docs/data/data-grid/column-pinning/ColumnPinningDynamicRowHeight.js
@@ -66,7 +66,7 @@ export default function ColumnPinningDynamicRowHeight() {
}, []);
React.useLayoutEffect(() => {
- apiRef.current.resetRowHeights();
+ apiRef.current?.resetRowHeights();
}, [apiRef, showEditDelete]);
return (
diff --git a/docs/data/data-grid/column-pinning/ColumnPinningDynamicRowHeight.tsx b/docs/data/data-grid/column-pinning/ColumnPinningDynamicRowHeight.tsx
index a11beca2f55f5..12df03e703696 100644
--- a/docs/data/data-grid/column-pinning/ColumnPinningDynamicRowHeight.tsx
+++ b/docs/data/data-grid/column-pinning/ColumnPinningDynamicRowHeight.tsx
@@ -71,7 +71,7 @@ export default function ColumnPinningDynamicRowHeight() {
}, []);
React.useLayoutEffect(() => {
- apiRef.current.resetRowHeights();
+ apiRef.current?.resetRowHeights();
}, [apiRef, showEditDelete]);
return (
diff --git a/docs/data/data-grid/column-recipes/ColumnSizingPersistWidthOrder.tsx b/docs/data/data-grid/column-recipes/ColumnSizingPersistWidthOrder.tsx
index ab02705eecc86..13e84bc26b11f 100644
--- a/docs/data/data-grid/column-recipes/ColumnSizingPersistWidthOrder.tsx
+++ b/docs/data/data-grid/column-recipes/ColumnSizingPersistWidthOrder.tsx
@@ -50,7 +50,7 @@ export default function ColumnSizingPersistWidthOrder() {
}
const useColumnsState = (
- apiRef: React.RefObject
,
+ apiRef: React.RefObject,
columns: GridColDef[],
) => {
const [widths, setWidths] = React.useState>(
diff --git a/docs/data/data-grid/column-visibility/ColumnSelectorGridSnap.js b/docs/data/data-grid/column-visibility/ColumnSelectorGridSnap.js
index 67b7eed794c35..2f45d0dbec3ef 100644
--- a/docs/data/data-grid/column-visibility/ColumnSelectorGridSnap.js
+++ b/docs/data/data-grid/column-visibility/ColumnSelectorGridSnap.js
@@ -17,7 +17,7 @@ export default function ColumnSelectorGridSnap() {
const apiRef = useGridApiRef();
React.useEffect(() => {
- apiRef.current.showPreferences(GridPreferencePanelsValue.columns);
+ apiRef.current?.showPreferences(GridPreferencePanelsValue.columns);
}, [apiRef]);
return (
diff --git a/docs/data/data-grid/column-visibility/ColumnSelectorGridSnap.tsx b/docs/data/data-grid/column-visibility/ColumnSelectorGridSnap.tsx
index 67b7eed794c35..2f45d0dbec3ef 100644
--- a/docs/data/data-grid/column-visibility/ColumnSelectorGridSnap.tsx
+++ b/docs/data/data-grid/column-visibility/ColumnSelectorGridSnap.tsx
@@ -17,7 +17,7 @@ export default function ColumnSelectorGridSnap() {
const apiRef = useGridApiRef();
React.useEffect(() => {
- apiRef.current.showPreferences(GridPreferencePanelsValue.columns);
+ apiRef.current?.showPreferences(GridPreferencePanelsValue.columns);
}, [apiRef]);
return (
diff --git a/docs/data/data-grid/components/CustomColumnMenu.js b/docs/data/data-grid/components/CustomColumnMenu.js
index 6f16e3267d1f0..dedbe7fa3e807 100644
--- a/docs/data/data-grid/components/CustomColumnMenu.js
+++ b/docs/data/data-grid/components/CustomColumnMenu.js
@@ -83,7 +83,7 @@ export default function CustomColumnMenu() {
onClick={(event) => {
event.stopPropagation();
setColor((current) => (current === 'primary' ? 'secondary' : 'primary'));
- apiRef.current.showColumnMenu('default');
+ apiRef.current?.showColumnMenu('default');
}}
>
Toggle menu background
diff --git a/docs/data/data-grid/components/CustomColumnMenu.tsx b/docs/data/data-grid/components/CustomColumnMenu.tsx
index 9a0a7fa8d4f3e..398d88e26bc4a 100644
--- a/docs/data/data-grid/components/CustomColumnMenu.tsx
+++ b/docs/data/data-grid/components/CustomColumnMenu.tsx
@@ -92,7 +92,7 @@ export default function CustomColumnMenu() {
onClick={(event) => {
event.stopPropagation();
setColor((current) => (current === 'primary' ? 'secondary' : 'primary'));
- apiRef.current.showColumnMenu('default');
+ apiRef.current?.showColumnMenu('default');
}}
>
Toggle menu background
diff --git a/docs/data/data-grid/demo/PopularFeaturesDemo.js b/docs/data/data-grid/demo/PopularFeaturesDemo.js
index 9c057dd2115a1..5fc08a3c767ec 100644
--- a/docs/data/data-grid/demo/PopularFeaturesDemo.js
+++ b/docs/data/data-grid/demo/PopularFeaturesDemo.js
@@ -453,11 +453,14 @@ export default function PopularFeaturesDemo() {
const onRowClick = React.useCallback(
(params) => {
- const rowNode = apiRef.current.getRowNode(params.id);
+ const rowNode = apiRef.current?.getRowNode(params.id);
if (rowNode && rowNode.type === 'group') {
- apiRef.current.setRowChildrenExpansion(params.id, !rowNode.childrenExpanded);
+ apiRef.current?.setRowChildrenExpansion(
+ params.id,
+ !rowNode.childrenExpanded,
+ );
} else {
- apiRef.current.toggleDetailPanel(params.id);
+ apiRef.current?.toggleDetailPanel(params.id);
}
},
[apiRef],
diff --git a/docs/data/data-grid/demo/PopularFeaturesDemo.tsx b/docs/data/data-grid/demo/PopularFeaturesDemo.tsx
index c19ce91642127..7126c0b049531 100644
--- a/docs/data/data-grid/demo/PopularFeaturesDemo.tsx
+++ b/docs/data/data-grid/demo/PopularFeaturesDemo.tsx
@@ -474,11 +474,14 @@ export default function PopularFeaturesDemo() {
const onRowClick = React.useCallback>(
(params) => {
- const rowNode = apiRef.current.getRowNode(params.id);
+ const rowNode = apiRef.current?.getRowNode(params.id);
if (rowNode && rowNode.type === 'group') {
- apiRef.current.setRowChildrenExpansion(params.id, !rowNode.childrenExpanded);
+ apiRef.current?.setRowChildrenExpansion(
+ params.id,
+ !rowNode.childrenExpanded,
+ );
} else {
- apiRef.current.toggleDetailPanel(params.id);
+ apiRef.current?.toggleDetailPanel(params.id);
}
},
[apiRef],
diff --git a/docs/data/data-grid/events/SubscribeToEventsApiRef.js b/docs/data/data-grid/events/SubscribeToEventsApiRef.js
index b974362438268..f578031917099 100644
--- a/docs/data/data-grid/events/SubscribeToEventsApiRef.js
+++ b/docs/data/data-grid/events/SubscribeToEventsApiRef.js
@@ -16,7 +16,7 @@ export default function SubscribeToEventsApiRef() {
};
// The `subscribeEvent` method will automatically unsubscribe in the cleanup function of the `useEffect`.
- return apiRef.current.subscribeEvent('rowClick', handleRowClick);
+ return apiRef.current?.subscribeEvent('rowClick', handleRowClick);
}, [apiRef]);
return (
diff --git a/docs/data/data-grid/events/SubscribeToEventsApiRef.tsx b/docs/data/data-grid/events/SubscribeToEventsApiRef.tsx
index 3da681d79f88c..9d4d82261adc1 100644
--- a/docs/data/data-grid/events/SubscribeToEventsApiRef.tsx
+++ b/docs/data/data-grid/events/SubscribeToEventsApiRef.tsx
@@ -16,7 +16,7 @@ export default function SubscribeToEventsApiRef() {
};
// The `subscribeEvent` method will automatically unsubscribe in the cleanup function of the `useEffect`.
- return apiRef.current.subscribeEvent('rowClick', handleRowClick);
+ return apiRef.current?.subscribeEvent('rowClick', handleRowClick);
}, [apiRef]);
return (
diff --git a/docs/data/data-grid/filtering-recipes/FilteredRowCount.js b/docs/data/data-grid/filtering-recipes/FilteredRowCount.js
index ce723ee414503..ddfcfdee406c8 100644
--- a/docs/data/data-grid/filtering-recipes/FilteredRowCount.js
+++ b/docs/data/data-grid/filtering-recipes/FilteredRowCount.js
@@ -45,7 +45,12 @@ export default function FilteredRowCount() {
const getFilteredRowsCount = React.useCallback(
(filterModel) => {
- const { filteredRowsLookup } = apiRef.current.getFilterState(filterModel);
+ const filterState = apiRef.current?.getFilterState(filterModel);
+ if (!filterState) {
+ return 0;
+ }
+
+ const { filteredRowsLookup } = filterState;
return Object.keys(filteredRowsLookup).filter(
(rowId) => filteredRowsLookup[rowId] === true,
).length;
@@ -72,7 +77,7 @@ export default function FilteredRowCount() {
return (