UNPKG

@mui/x-data-grid

Version:

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

156 lines (141 loc) 8.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisibleColumnFieldsSelector = exports.gridVisibleColumnDefinitionsSelector = exports.gridPinnedColumnsSelector = exports.gridInitialColumnVisibilityModelSelector = exports.gridHasColSpanSelector = exports.gridFilterableColumnLookupSelector = exports.gridFilterableColumnDefinitionsSelector = exports.gridExistingPinnedColumnSelector = exports.gridColumnsStateSelector = exports.gridColumnVisibilityModelSelector = exports.gridColumnPositionsSelector = exports.gridColumnLookupSelector = exports.gridColumnFieldsSelector = exports.gridColumnDefinitionsSelector = void 0; var _createSelector = require("../../../utils/createSelector"); var _gridColumnsInterfaces = require("./gridColumnsInterfaces"); var _gridCoreSelector = require("../../core/gridCoreSelector"); var _listView = require("../listView"); /** * Get the columns state * @category Columns */ const gridColumnsStateSelector = exports.gridColumnsStateSelector = (0, _createSelector.createRootSelector)(state => state.columns); /** * Get an array of column fields in the order rendered on screen. * @category Columns */ const gridColumnFieldsSelector = exports.gridColumnFieldsSelector = (0, _createSelector.createSelector)(gridColumnsStateSelector, columnsState => columnsState.orderedFields); /** * Get the columns as a lookup (an object containing the field for keys and the definition for values). * @category Columns */ const gridColumnLookupSelector = exports.gridColumnLookupSelector = (0, _createSelector.createSelector)(gridColumnsStateSelector, columnsState => columnsState.lookup); /** * Get an array of column definitions in the order rendered on screen.. * @category Columns */ const gridColumnDefinitionsSelector = exports.gridColumnDefinitionsSelector = (0, _createSelector.createSelectorMemoized)(gridColumnFieldsSelector, gridColumnLookupSelector, (allFields, lookup) => allFields.map(field => lookup[field])); /** * Get the column visibility model, containing the visibility status of each column. * If a column is not registered in the model, it is visible. * @category Visible Columns */ const gridColumnVisibilityModelSelector = exports.gridColumnVisibilityModelSelector = (0, _createSelector.createSelector)(gridColumnsStateSelector, columnsState => columnsState.columnVisibilityModel); /** * Get the "initial" column visibility model, containing the visibility status of each column. * It is updated when the `columns` prop is updated or when `updateColumns` API method is called. * If a column is not registered in the model, it is visible. * @category Visible Columns */ const gridInitialColumnVisibilityModelSelector = exports.gridInitialColumnVisibilityModelSelector = (0, _createSelector.createSelector)(gridColumnsStateSelector, columnsState => columnsState.initialColumnVisibilityModel); /** * Get the visible columns as a lookup (an object containing the field for keys and the definition for values). * @category Visible Columns */ const gridVisibleColumnDefinitionsSelector = exports.gridVisibleColumnDefinitionsSelector = (0, _createSelector.createSelectorMemoized)(gridColumnDefinitionsSelector, gridColumnVisibilityModelSelector, _listView.gridListViewSelector, _listView.gridListColumnSelector, (columns, columnVisibilityModel, listView, listColumn) => listView && listColumn ? [listColumn] : columns.filter(column => columnVisibilityModel[column.field] !== false)); /** * Get the field of each visible column. * @category Visible Columns */ const gridVisibleColumnFieldsSelector = exports.gridVisibleColumnFieldsSelector = (0, _createSelector.createSelectorMemoized)(gridVisibleColumnDefinitionsSelector, visibleColumns => visibleColumns.map(column => column.field)); /** * Get the visible pinned columns model. * @category Visible Columns */ const gridPinnedColumnsSelector = exports.gridPinnedColumnsSelector = (0, _createSelector.createRootSelector)(state => state.pinnedColumns); /** * Get all existing pinned columns. Place the columns on the side that depends on the rtl state. * @category Pinned Columns * @ignore - Do not document */ const gridExistingPinnedColumnSelector = exports.gridExistingPinnedColumnSelector = (0, _createSelector.createSelectorMemoized)(gridPinnedColumnsSelector, gridColumnFieldsSelector, _gridCoreSelector.gridIsRtlSelector, (model, orderedFields, isRtl) => filterMissingColumns(model, orderedFields, isRtl)); /** * Get the visible pinned columns. * @category Visible Columns */ const gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisiblePinnedColumnDefinitionsSelector = (0, _createSelector.createSelectorMemoized)(gridColumnsStateSelector, gridPinnedColumnsSelector, gridVisibleColumnFieldsSelector, _gridCoreSelector.gridIsRtlSelector, _listView.gridListViewSelector, (columnsState, model, visibleColumnFields, isRtl, listView) => { if (listView) { return _gridColumnsInterfaces.EMPTY_PINNED_COLUMN_FIELDS; } const visiblePinnedFields = filterMissingColumns(model, visibleColumnFields, isRtl); const visiblePinnedColumns = { left: visiblePinnedFields.left.map(field => columnsState.lookup[field]), right: visiblePinnedFields.right.map(field => columnsState.lookup[field]) }; return visiblePinnedColumns; }); function filterMissingColumns(pinnedColumns, columns, invert) { if (!Array.isArray(pinnedColumns.left) && !Array.isArray(pinnedColumns.right)) { return _gridColumnsInterfaces.EMPTY_PINNED_COLUMN_FIELDS; } if (pinnedColumns.left?.length === 0 && pinnedColumns.right?.length === 0) { return _gridColumnsInterfaces.EMPTY_PINNED_COLUMN_FIELDS; } const filter = (newPinnedColumns, remainingColumns) => { if (!Array.isArray(newPinnedColumns)) { return []; } return newPinnedColumns.filter(field => remainingColumns.includes(field)); }; const leftPinnedColumns = filter(pinnedColumns.left, columns); const columnsWithoutLeftPinnedColumns = columns.filter( // Filter out from the remaining columns those columns already pinned to the left field => !leftPinnedColumns.includes(field)); const rightPinnedColumns = filter(pinnedColumns.right, columnsWithoutLeftPinnedColumns); if (invert) { return { left: rightPinnedColumns, right: leftPinnedColumns }; } return { left: leftPinnedColumns, right: rightPinnedColumns }; } /** * Get the left position in pixel of each visible columns relative to the left of the first column. * @category Visible Columns */ const gridColumnPositionsSelector = exports.gridColumnPositionsSelector = (0, _createSelector.createSelectorMemoized)(gridVisibleColumnDefinitionsSelector, visibleColumns => { const positions = []; let currentPosition = 0; for (let i = 0; i < visibleColumns.length; i += 1) { positions.push(currentPosition); currentPosition += visibleColumns[i].computedWidth; } return positions; }); /** * Get the filterable columns as an array. * @category Columns */ const gridFilterableColumnDefinitionsSelector = exports.gridFilterableColumnDefinitionsSelector = (0, _createSelector.createSelectorMemoized)(gridColumnDefinitionsSelector, columns => columns.filter(col => col.filterable)); /** * Get the filterable columns as a lookup (an object containing the field for keys and the definition for values). * @category Columns */ const gridFilterableColumnLookupSelector = exports.gridFilterableColumnLookupSelector = (0, _createSelector.createSelectorMemoized)(gridColumnDefinitionsSelector, columns => columns.reduce((acc, col) => { if (col.filterable) { acc[col.field] = col; } return acc; }, {})); /** * Checks if some column has a colSpan field. * @category Columns * @ignore - Do not document */ const gridHasColSpanSelector = exports.gridHasColSpanSelector = (0, _createSelector.createSelectorMemoized)(gridColumnDefinitionsSelector, columns => columns.some(column => column.colSpan !== undefined));