@mui/x-data-grid
Version:
The community edition of the data grid component (MUI X).
46 lines • 1.57 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import { useGridLogger } from '../../utils/useGridLogger';
import { useGridApiMethod } from '../../utils/useGridApiMethod';
import { gridDensitySelector } from './densitySelector';
import { isDeepEqual } from '../../../utils/utils';
export const COMPACT_DENSITY_FACTOR = 0.7;
export const COMFORTABLE_DENSITY_FACTOR = 1.3;
const DENSITY_FACTORS = {
compact: COMPACT_DENSITY_FACTOR,
comfortable: COMFORTABLE_DENSITY_FACTOR,
standard: 1
};
export const densityStateInitializer = (state, props) => _extends({}, state, {
density: {
value: props.density,
factor: DENSITY_FACTORS[props.density]
}
});
export const useGridDensity = (apiRef, props) => {
const logger = useGridLogger(apiRef, 'useDensity');
const setDensity = React.useCallback(newDensity => {
logger.debug(`Set grid density to ${newDensity}`);
apiRef.current.setState(state => {
const currentDensityState = gridDensitySelector(state);
const newDensityState = {
value: newDensity,
factor: DENSITY_FACTORS[newDensity]
};
if (isDeepEqual(currentDensityState, newDensityState)) {
return state;
}
return _extends({}, state, {
density: newDensityState
});
});
apiRef.current.forceUpdate();
}, [logger, apiRef]);
React.useEffect(() => {
apiRef.current.setDensity(props.density);
}, [apiRef, props.density]);
const densityApi = {
setDensity
};
useGridApiMethod(apiRef, densityApi, 'public');
};