@mui/x-data-grid
Version:
The Community plan edition of the MUI X Data Grid components.
29 lines • 1.47 kB
JavaScript
import { createSelector, createRootSelector, createSelectorMemoized } from "../../../utils/createSelector.js";
import { gridDataRowIdsSelector, gridRowsLookupSelector } from "../rows/gridRowsSelector.js";
import { gridFilteredRowCountSelector } from "../filter/gridFilterSelector.js";
import { createRowSelectionManager } from "../../../models/gridRowSelectionManager.js";
export const gridRowSelectionStateSelector = createRootSelector(state => state.rowSelection);
export const gridRowSelectionManagerSelector = createSelectorMemoized(gridRowSelectionStateSelector, createRowSelectionManager);
export const gridRowSelectionCountSelector = createSelector(gridRowSelectionStateSelector, gridFilteredRowCountSelector, (selection, filteredRowCount) => {
if (selection.type === 'include') {
return selection.ids.size;
}
// In exclude selection, all rows are selectable.
return filteredRowCount - selection.ids.size;
});
export const gridRowSelectionIdsSelector = createSelectorMemoized(gridRowSelectionStateSelector, gridRowsLookupSelector, gridDataRowIdsSelector, (selectionModel, rowsLookup, rowIds) => {
const map = new Map();
if (selectionModel.type === 'include') {
for (const id of selectionModel.ids) {
map.set(id, rowsLookup[id]);
}
} else {
for (let i = 0; i < rowIds.length; i += 1) {
const id = rowIds[i];
if (!selectionModel.ids.has(id)) {
map.set(id, rowsLookup[id]);
}
}
}
return map;
});