@mui/x-data-grid
Version:
The Community plan edition of the MUI X Data Grid components.
57 lines (55 loc) • 3.13 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.useGridDataSourceFilterModelChange = void 0;
var React = _interopRequireWildcard(require("react"));
var _useLazyRef = _interopRequireDefault(require("@mui/utils/useLazyRef"));
var _isDeepEqual = require("@mui/x-internals/isDeepEqual");
var _columns = require("../columns");
var _gridFilterSelector = require("../filter/gridFilterSelector");
var _gridFilterState = require("../filter/gridFilterState");
var _gridFilterUtils = require("../filter/gridFilterUtils");
/**
* The parts of a filter model that can change the rows the data source returns, so that a
* change to the rest is not mistaken for a new query. A logic operator needs two operands to
* mean anything, and quick filter values only apply once one of them is truthy
* (`buildAggregatedQuickFilterApplier` returns `null` otherwise).
* Falsy values are kept when another one applies: `passFilterLogic` runs the whole array
* through its logic operator, so `['a', '']` and `['a']` do not match the same rows.
*/
const getApplicableFilterModel = (model, columnsLookup) => {
const defaultModel = (0, _gridFilterState.getDefaultGridFilterModel)();
const {
items
} = (0, _gridFilterUtils.removeIncompleteFilterItems)(model, columnsLookup);
const appliesQuickFilter = model.quickFilterValues?.some(Boolean) ?? false;
const quickFilterValues = appliesQuickFilter ? model.quickFilterValues ?? [] : [];
return {
items,
logicOperator: items.length > 1 ? model.logicOperator ?? defaultModel.logicOperator : null,
quickFilterValues,
quickFilterLogicOperator: quickFilterValues.length > 1 ? model.quickFilterLogicOperator ?? defaultModel.quickFilterLogicOperator : null,
quickFilterExcludeHiddenColumns: appliesQuickFilter ? model.quickFilterExcludeHiddenColumns ?? defaultModel.quickFilterExcludeHiddenColumns : null
};
};
/**
* Tracks the filter model as the data source sees it, the parts that cannot apply excluded.
* Returns a predicate telling whether a new model would ask for something else: editing an
* incomplete item, or flipping a logic operator that has nothing to combine, is a no-op.
*/
const useGridDataSourceFilterModelChange = apiRef => {
const lastFetchedFilterModel = (0, _useLazyRef.default)(() => getApplicableFilterModel((0, _gridFilterSelector.gridFilterModelSelector)(apiRef), (0, _columns.gridColumnLookupSelector)(apiRef)));
return React.useCallback(filterModel => {
const applicableFilterModel = getApplicableFilterModel(filterModel, (0, _columns.gridColumnLookupSelector)(apiRef));
if ((0, _isDeepEqual.isDeepEqual)(applicableFilterModel, lastFetchedFilterModel.current)) {
return false;
}
lastFetchedFilterModel.current = applicableFilterModel;
return true;
}, [apiRef, lastFetchedFilterModel]);
};
exports.useGridDataSourceFilterModelChange = useGridDataSourceFilterModelChange;