UNPKG

@mui/x-data-grid

Version:

The Community plan edition of the MUI X Data Grid components.

57 lines (55 loc) 3.13 kB
"use strict"; '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;