init component
This commit is contained in:
64
node_modules/buetify/lib/components/table/composables/useSelectableTable.js
generated
vendored
Executable file
64
node_modules/buetify/lib/components/table/composables/useSelectableTable.js
generated
vendored
Executable file
@@ -0,0 +1,64 @@
|
||||
import { constant, constVoid } from 'fp-ts/lib/function';
|
||||
import { computed, toRef, provide, inject, shallowRef } from 'vue';
|
||||
import { useProxy } from '../../../composables/proxy/useProxy';
|
||||
import { constEmptyArray } from '../../../utils/helpers';
|
||||
import { toggleBTableRow } from '../shared';
|
||||
import { toSet } from './shared';
|
||||
export const BTableSelectablePropsDefinition = {
|
||||
isSelectable: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
selectedRows: {
|
||||
type: Array,
|
||||
default: constEmptyArray
|
||||
},
|
||||
'onUpdate:selectedRows': {
|
||||
type: Function,
|
||||
default: constant(constVoid)
|
||||
},
|
||||
onSelectRow: {
|
||||
type: Function,
|
||||
default: constant(constVoid)
|
||||
},
|
||||
onUnselectRow: {
|
||||
type: Function,
|
||||
default: constant(constVoid)
|
||||
}
|
||||
};
|
||||
const USE_SELECTABLE_TABLE_INJECTION_SYMBOL = Symbol();
|
||||
export function useSelectableTable(props) {
|
||||
const {
|
||||
value: selectedRows
|
||||
} = useProxy(computed(() => props.isSelectable ? props.selectedRows : []), toRef(props, 'onUpdate:selectedRows'));
|
||||
const selectedRowIds = computed(() => toSet(selectedRows.value));
|
||||
|
||||
function toggleRowSelection(row) {
|
||||
if (row.isSelectable ?? props.isSelectable) {
|
||||
const ids = selectedRowIds.value;
|
||||
ids.has(row.id) ? props.onUnselectRow(row) : props.onSelectRow(row);
|
||||
selectedRows.value = toggleBTableRow(row, selectedRows.value);
|
||||
}
|
||||
}
|
||||
|
||||
const state = {
|
||||
isSelectable: toRef(props, 'isSelectable'),
|
||||
selectedRowIds,
|
||||
toggleRowSelection
|
||||
};
|
||||
provide(USE_SELECTABLE_TABLE_INJECTION_SYMBOL, state);
|
||||
return state;
|
||||
}
|
||||
|
||||
function useDefaultSelectableTableState() {
|
||||
return {
|
||||
isSelectable: shallowRef(false),
|
||||
selectedRowIds: computed(() => new Set()),
|
||||
toggleRowSelection: constVoid
|
||||
};
|
||||
}
|
||||
|
||||
export function useInjectedSelectableTable() {
|
||||
return inject(USE_SELECTABLE_TABLE_INJECTION_SYMBOL, useDefaultSelectableTableState, true);
|
||||
}
|
||||
//# sourceMappingURL=useSelectableTable.js.map
|
||||
Reference in New Issue
Block a user