@mui/x-data-grid-pro
Version:
The Pro plan edition of the MUI X Data Grid components.
69 lines (67 loc) • 2.96 kB
JavaScript
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridDetailPanels = GridDetailPanels;
var React = _interopRequireWildcard(require("react"));
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
var _xDataGrid = require("@mui/x-data-grid");
var _useGridPrivateApiContext = require("../hooks/utils/useGridPrivateApiContext");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _detailPanel = require("../hooks/features/detailPanel");
var _GridDetailPanel = require("./GridDetailPanel");
var _gridDetailPanelSelector = require("../hooks/features/detailPanel/gridDetailPanelSelector");
var _jsxRuntime = require("react/jsx-runtime");
const useUtilityClasses = () => {
const slots = {
detailPanel: ['detailPanel']
};
return (0, _composeClasses.default)(slots, _xDataGrid.getDataGridUtilityClass, {});
};
function GridDetailPanels(props) {
const rootProps = (0, _useGridRootProps.useGridRootProps)();
if (!rootProps.getDetailPanelContent) {
return null;
}
return /*#__PURE__*/React.createElement(GridDetailPanelsImpl, props);
}
function GridDetailPanelsImpl({
virtualScroller
}) {
const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
const classes = useUtilityClasses();
const {
setPanels
} = virtualScroller;
const expandedRowIds = (0, _xDataGrid.useGridSelector)(apiRef, _detailPanel.gridDetailPanelExpandedRowIdsSelector);
const detailPanelsContent = (0, _xDataGrid.useGridSelector)(apiRef, _detailPanel.gridDetailPanelExpandedRowsContentCacheSelector);
const detailPanelsHeights = (0, _xDataGrid.useGridSelector)(apiRef, _gridDetailPanelSelector.gridDetailPanelRawHeightCacheSelector);
const getDetailPanel = React.useCallback(rowId => {
const content = detailPanelsContent[rowId];
// Check if the id exists in the current page
const rowIndex = apiRef.current.getRowIndexRelativeToVisibleRows(rowId);
const exists = rowIndex !== undefined;
if (! /*#__PURE__*/React.isValidElement(content) || !exists) {
return null;
}
const heightCache = detailPanelsHeights[rowId];
const height = heightCache.autoHeight ? 'auto' : heightCache.height;
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridDetailPanel.GridDetailPanel, {
rowId: rowId,
height: height,
className: classes.detailPanel,
children: content
}, `panel-${rowId}`);
}, [apiRef, classes.detailPanel, detailPanelsHeights, detailPanelsContent]);
React.useEffect(() => {
const map = new Map();
for (const rowId of expandedRowIds) {
map.set(rowId, getDetailPanel(rowId));
}
setPanels(map);
}, [expandedRowIds, setPanels, getDetailPanel]);
return null;
}
;