UNPKG

@mui/x-data-grid-premium

Version:

The Premium plan edition of the Data Grid Components (MUI X).

225 lines (219 loc) 8.32 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.wrapColumnWithAggregationValue = exports.unwrapColumnFromAggregation = void 0; var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var React = _interopRequireWildcard(require("react")); var _gridAggregationSelectors = require("./gridAggregationSelectors"); var _GridFooterCell = require("../../../components/GridFooterCell"); var _GridAggregationHeader = require("../../../components/GridAggregationHeader"); var _jsxRuntime = require("react/jsx-runtime"); const _excluded = ["aggregationWrappedProperties"]; function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } const AGGREGATION_WRAPPABLE_PROPERTIES = ['valueGetter', 'valueFormatter', 'renderCell', 'renderHeader', 'filterOperators']; const getAggregationValueWrappedValueGetter = ({ value: valueGetter, getCellAggregationResult }) => { const wrappedValueGetter = (value, row, column, apiRef) => { const rowId = apiRef.current.getRowId(row); const cellAggregationResult = getCellAggregationResult(rowId, column.field); if (cellAggregationResult != null) { return cellAggregationResult?.value ?? null; } if (valueGetter) { return valueGetter(value, row, column, apiRef); } return row[column.field]; }; return wrappedValueGetter; }; const getAggregationValueWrappedValueFormatter = ({ value: valueFormatter, aggregationRule, getCellAggregationResult }) => { // If neither the inline aggregation function nor the footer aggregation function have a custom value formatter, // Then we don't wrap the column value formatter if (!aggregationRule.aggregationFunction.valueFormatter) { return valueFormatter; } const wrappedValueFormatter = (value, row, column, apiRef) => { const rowId = apiRef.current.getRowId(row); if (rowId != null) { const cellAggregationResult = getCellAggregationResult(rowId, column.field); if (cellAggregationResult != null) { return aggregationRule.aggregationFunction.valueFormatter?.(value, row, column, apiRef); } } if (valueFormatter) { return valueFormatter(value, row, column, apiRef); } return value; }; return wrappedValueFormatter; }; const getAggregationValueWrappedRenderCell = ({ value: renderCell, aggregationRule, getCellAggregationResult }) => { const wrappedRenderCell = params => { const cellAggregationResult = getCellAggregationResult(params.id, params.field); if (cellAggregationResult != null) { if (!renderCell) { if (cellAggregationResult.position === 'footer') { return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridFooterCell.GridFooterCell, (0, _extends2.default)({}, params)); } return params.formattedValue; } const aggregationMeta = { hasCellUnit: aggregationRule.aggregationFunction.hasCellUnit ?? true, aggregationFunctionName: aggregationRule.aggregationFunctionName }; return renderCell((0, _extends2.default)({}, params, { aggregation: aggregationMeta })); } if (!renderCell) { return params.formattedValue; } return renderCell(params); }; return wrappedRenderCell; }; /** * Skips the filtering for aggregated rows */ const getWrappedFilterOperators = ({ value: filterOperators, apiRef, getCellAggregationResult }) => filterOperators.map(operator => { const baseGetApplyFilterFn = operator.getApplyFilterFn; const getApplyFilterFn = (filterItem, colDef) => { const filterFn = baseGetApplyFilterFn(filterItem, colDef); if (!filterFn) { return null; } return (value, row, column, api) => { if (getCellAggregationResult(apiRef.current.getRowId(row), column.field) != null) { return true; } return filterFn(value, row, column, api); }; }; return (0, _extends2.default)({}, operator, { getApplyFilterFn }); }); /** * Add the aggregation method around the header name */ const getWrappedRenderHeader = ({ value: renderHeader, aggregationRule }) => { const wrappedRenderHeader = params => { return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridAggregationHeader.GridAggregationHeader, (0, _extends2.default)({}, params, { aggregation: { aggregationRule }, renderHeader: renderHeader })); }; return wrappedRenderHeader; }; /** * Add a wrapper around each wrappable property of the column to customize the behavior of the aggregation cells. */ const wrapColumnWithAggregationValue = ({ column, apiRef, aggregationRule }) => { const getCellAggregationResult = (id, field) => { let cellAggregationPosition = null; const rowNode = apiRef.current.getRowNode(id); if (rowNode.type === 'group') { cellAggregationPosition = 'inline'; } else if (id.toString().startsWith('auto-generated-group-footer-')) { cellAggregationPosition = 'footer'; } if (cellAggregationPosition == null) { return null; } // TODO: Add custom root id const groupId = cellAggregationPosition === 'inline' ? id : rowNode.parent ?? ''; const aggregationResult = (0, _gridAggregationSelectors.gridAggregationLookupSelector)(apiRef)?.[groupId]?.[field]; if (!aggregationResult || aggregationResult.position !== cellAggregationPosition) { return null; } return aggregationResult; }; let didWrapSomeProperty = false; const wrappedColumn = (0, _extends2.default)({}, column, { aggregationWrappedProperties: [] }); const wrapColumnProperty = (property, wrapper) => { const originalValue = column[property]; const wrappedProperty = wrapper({ apiRef, value: originalValue, colDef: column, aggregationRule, getCellAggregationResult }); if (wrappedProperty !== originalValue) { didWrapSomeProperty = true; wrappedColumn[property] = wrappedProperty; wrappedColumn.aggregationWrappedProperties.push({ name: property, originalValue, wrappedValue: wrappedProperty }); } }; wrapColumnProperty('valueGetter', getAggregationValueWrappedValueGetter); wrapColumnProperty('valueFormatter', getAggregationValueWrappedValueFormatter); wrapColumnProperty('renderCell', getAggregationValueWrappedRenderCell); wrapColumnProperty('renderHeader', getWrappedRenderHeader); wrapColumnProperty('filterOperators', getWrappedFilterOperators); if (!didWrapSomeProperty) { return column; } return wrappedColumn; }; /** * Remove the aggregation wrappers around the wrappable properties of the column. */ exports.wrapColumnWithAggregationValue = wrapColumnWithAggregationValue; const unwrapColumnFromAggregation = ({ column }) => { if (!column.aggregationWrappedProperties) { return column; } const _ref = column, { aggregationWrappedProperties } = _ref, unwrappedColumn = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded); aggregationWrappedProperties.forEach(({ name, originalValue, wrappedValue }) => { // The value changed since we wrapped it if (wrappedValue !== unwrappedColumn[name]) { return; } unwrappedColumn[name] = originalValue; }); return unwrappedColumn; }; exports.unwrapColumnFromAggregation = unwrapColumnFromAggregation;