123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- // Composables
- import { useProxiedModel } from "../../../composables/proxiedModel.mjs"; // Utilities
- import { computed, inject, provide } from 'vue';
- import { deepEqual, propsFactory, wrapInArray } from "../../../util/index.mjs"; // Types
- const singleSelectStrategy = {
- showSelectAll: false,
- allSelected: () => [],
- select: _ref => {
- let {
- items,
- value
- } = _ref;
- return new Set(value ? [items[0]?.value] : []);
- },
- selectAll: _ref2 => {
- let {
- selected
- } = _ref2;
- return selected;
- }
- };
- const pageSelectStrategy = {
- showSelectAll: true,
- allSelected: _ref3 => {
- let {
- currentPage
- } = _ref3;
- return currentPage;
- },
- select: _ref4 => {
- let {
- items,
- value,
- selected
- } = _ref4;
- for (const item of items) {
- if (value) selected.add(item.value);else selected.delete(item.value);
- }
- return selected;
- },
- selectAll: _ref5 => {
- let {
- value,
- currentPage,
- selected
- } = _ref5;
- return pageSelectStrategy.select({
- items: currentPage,
- value,
- selected
- });
- }
- };
- const allSelectStrategy = {
- showSelectAll: true,
- allSelected: _ref6 => {
- let {
- allItems
- } = _ref6;
- return allItems;
- },
- select: _ref7 => {
- let {
- items,
- value,
- selected
- } = _ref7;
- for (const item of items) {
- if (value) selected.add(item.value);else selected.delete(item.value);
- }
- return selected;
- },
- selectAll: _ref8 => {
- let {
- value,
- allItems,
- selected
- } = _ref8;
- return allSelectStrategy.select({
- items: allItems,
- value,
- selected
- });
- }
- };
- export const makeDataTableSelectProps = propsFactory({
- showSelect: Boolean,
- selectStrategy: {
- type: [String, Object],
- default: 'page'
- },
- modelValue: {
- type: Array,
- default: () => []
- },
- valueComparator: {
- type: Function,
- default: deepEqual
- }
- }, 'DataTable-select');
- export const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');
- export function provideSelection(props, _ref9) {
- let {
- allItems,
- currentPage
- } = _ref9;
- const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {
- return new Set(wrapInArray(v).map(v => {
- return allItems.value.find(item => props.valueComparator(v, item.value))?.value ?? v;
- }));
- }, v => {
- return [...v.values()];
- });
- const allSelectable = computed(() => allItems.value.filter(item => item.selectable));
- const currentPageSelectable = computed(() => currentPage.value.filter(item => item.selectable));
- const selectStrategy = computed(() => {
- if (typeof props.selectStrategy === 'object') return props.selectStrategy;
- switch (props.selectStrategy) {
- case 'single':
- return singleSelectStrategy;
- case 'all':
- return allSelectStrategy;
- case 'page':
- default:
- return pageSelectStrategy;
- }
- });
- function isSelected(items) {
- return wrapInArray(items).every(item => selected.value.has(item.value));
- }
- function isSomeSelected(items) {
- return wrapInArray(items).some(item => selected.value.has(item.value));
- }
- function select(items, value) {
- const newSelected = selectStrategy.value.select({
- items,
- value,
- selected: new Set(selected.value)
- });
- selected.value = newSelected;
- }
- function toggleSelect(item) {
- select([item], !isSelected([item]));
- }
- function selectAll(value) {
- const newSelected = selectStrategy.value.selectAll({
- value,
- allItems: allSelectable.value,
- currentPage: currentPageSelectable.value,
- selected: new Set(selected.value)
- });
- selected.value = newSelected;
- }
- const someSelected = computed(() => selected.value.size > 0);
- const allSelected = computed(() => {
- const items = selectStrategy.value.allSelected({
- allItems: allSelectable.value,
- currentPage: currentPageSelectable.value
- });
- return !!items.length && isSelected(items);
- });
- const showSelectAll = computed(() => selectStrategy.value.showSelectAll);
- const data = {
- toggleSelect,
- select,
- selectAll,
- isSelected,
- isSomeSelected,
- someSelected,
- allSelected,
- showSelectAll
- };
- provide(VDataTableSelectionSymbol, data);
- return data;
- }
- export function useSelection() {
- const data = inject(VDataTableSelectionSymbol);
- if (!data) throw new Error('Missing selection!');
- return data;
- }
- //# sourceMappingURL=select.mjs.map
|