Skip to content

Commit

Permalink
[DataGrid] Avoid undefined value for pagination rowCount (#16558)
Browse files Browse the repository at this point in the history
Co-authored-by: Lukas Tyla <[email protected]>
  • Loading branch information
cherniavskii and LukasTy authored Feb 13, 2025
1 parent 9d5bfbe commit 6b4fdc8
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,8 @@ export const useDataGridPremiumComponent = (
useGridInitializeState(columnPinningStateInitializer, apiRef, props);
useGridInitializeState(columnsStateInitializer, apiRef, props);
useGridInitializeState(rowPinningStateInitializer, apiRef, props);
useGridInitializeState(paginationStateInitializer, apiRef, props);
useGridInitializeState(rowsStateInitializer, apiRef, props);
useGridInitializeState(paginationStateInitializer, apiRef, props);
useGridInitializeState(editingStateInitializer, apiRef, props);
useGridInitializeState(focusStateInitializer, apiRef, props);
useGridInitializeState(sortingStateInitializer, apiRef, props);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,6 @@ export const useGridClipboardImport = (
const onProcessRowUpdateError = props.onProcessRowUpdateError;
const getRowId = props.getRowId;
const enableClipboardPaste = !props.disableClipboardPaste;
const rootEl = apiRef.current.rootElementRef?.current;
const logger = useGridLogger(apiRef, 'useGridClipboardImport');

const splitClipboardPastedText = props.splitClipboardPastedText;
Expand All @@ -366,6 +365,7 @@ export const useGridClipboardImport = (
}
}

const rootEl = apiRef.current.rootElementRef?.current;
if (!rootEl) {
return;
}
Expand Down Expand Up @@ -418,7 +418,6 @@ export const useGridClipboardImport = (
onProcessRowUpdateError,
getRowId,
enableClipboardPaste,
rootEl,
splitClipboardPastedText,
pagination,
paginationMode,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,8 @@ export const useDataGridProComponent = (
useGridInitializeState(columnPinningStateInitializer, apiRef, props);
useGridInitializeState(columnsStateInitializer, apiRef, props);
useGridInitializeState(rowPinningStateInitializer, apiRef, props);
useGridInitializeState(paginationStateInitializer, apiRef, props);
useGridInitializeState(rowsStateInitializer, apiRef, props);
useGridInitializeState(paginationStateInitializer, apiRef, props);
useGridInitializeState(editingStateInitializer, apiRef, props);
useGridInitializeState(focusStateInitializer, apiRef, props);
useGridInitializeState(sortingStateInitializer, apiRef, props);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,8 @@ export const useGridInfiniteLoader = (
}
});

const virtualScroller = apiRef.current.virtualScrollerRef.current;

React.useEffect(() => {
const virtualScroller = apiRef.current.virtualScrollerRef.current;
if (!isEnabled) {
return;
}
Expand All @@ -85,7 +84,7 @@ export const useGridInfiniteLoader = (
if (triggerElement.current) {
observer.current.observe(triggerElement.current);
}
}, [apiRef, virtualScroller, handleLoadMoreRows, isEnabled, props.scrollEndThreshold]);
}, [apiRef, handleLoadMoreRows, isEnabled, props.scrollEndThreshold]);

const updateTarget = (node: HTMLElement | null) => {
if (triggerElement.current !== node) {
Expand Down
2 changes: 1 addition & 1 deletion packages/x-data-grid/src/DataGrid/useDataGridComponent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@ export const useDataGridComponent = (
*/
useGridInitializeState(rowSelectionStateInitializer, apiRef, props);
useGridInitializeState(columnsStateInitializer, apiRef, props);
useGridInitializeState(paginationStateInitializer, apiRef, props);
useGridInitializeState(rowsStateInitializer, apiRef, props);
useGridInitializeState(paginationStateInitializer, apiRef, props);
useGridInitializeState(editingStateInitializer, apiRef, props);
useGridInitializeState(focusStateInitializer, apiRef, props);
useGridInitializeState(sortingStateInitializer, apiRef, props);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,12 @@ export const useGridClipboard = (
[apiRef, ignoreValueFormatter, clipboardCopyCellDelimiter],
);

useGridNativeEventListener(apiRef, apiRef.current.rootElementRef!, 'keydown', handleCopy);
useGridNativeEventListener(
apiRef,
() => apiRef.current.rootElementRef.current,
'keydown',
handleCopy,
);

useGridApiOptionHandler(apiRef, 'clipboardCopy', props.onClipboardCopy);
};
39 changes: 13 additions & 26 deletions packages/x-data-grid/src/hooks/utils/useGridNativeEventListener.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import * as React from 'react';
import { RefObject } from '@mui/x-internals/types';
import { isFunction } from '../../utils/utils';
import { useGridLogger } from './useGridLogger';
import { GridPrivateApiCommon } from '../../models/api/gridApiCommon';
import { useGridApiOptionHandler } from './useGridApiEventHandler';

export const useGridNativeEventListener = <
PrivateApi extends GridPrivateApiCommon,
Expand All @@ -15,32 +14,20 @@ export const useGridNativeEventListener = <
options?: AddEventListenerOptions,
) => {
const logger = useGridLogger(apiRef, 'useNativeEventListener');
const [added, setAdded] = React.useState(false);
const handlerRef = React.useRef(handler);

const targetElement = isFunction(ref) ? ref() : (ref?.current ?? null);
useGridApiOptionHandler(apiRef, 'rootMount', () => {
const targetElement = typeof ref === 'function' ? ref() : ref.current;

const wrapHandler = React.useCallback((event: HTMLElementEventMap[K]) => {
return handlerRef.current && handlerRef.current(event);
}, []);

React.useEffect(() => {
handlerRef.current = handler;
}, [handler]);

React.useEffect(() => {
if (targetElement && eventName && !added) {
logger.debug(`Binding native ${eventName} event`);
targetElement.addEventListener(eventName, wrapHandler, options);

setAdded(true);
if (!targetElement || !eventName || !handler) {
return undefined;
}

const unsubscribe = () => {
logger.debug(`Clearing native ${eventName} event`);
targetElement.removeEventListener(eventName, wrapHandler, options);
};
logger.debug(`Binding native ${eventName} event`);
targetElement.addEventListener(eventName, handler, options);

apiRef.current.subscribeEvent('unmount', unsubscribe);
}
}, [targetElement, wrapHandler, eventName, added, logger, options, apiRef]);
return () => {
logger.debug(`Clearing native ${eventName} event`);
targetElement.removeEventListener(eventName, handler, options);
};
});
};

0 comments on commit 6b4fdc8

Please sign in to comment.