UNPKG

tav-ui

Version:
108 lines (105 loc) 3.44 kB
import { ref, computed, unref, watch, nextTick, toRaw } from 'vue'; import { omit } from 'lodash-es'; import { findNodeAll } from '../../../../utils/helper/treeHelper2.mjs'; import { isFunction } from '../../../../utils/is2.mjs'; import { ROW_KEY } from '../const2.mjs'; function useRowSelection(propsRef, tableData, emit) { const selectedRowKeysRef = ref([]); const selectedRowRef = ref([]); const changing = ref(false); const tempSelectedRowKeysRef = ref([]); const getRowSelectionRef = computed(() => { const { rowSelection } = unref(propsRef); if (!rowSelection) { return null; } return { ...changing.value ? { selectedRowKeys: unref(tempSelectedRowKeysRef) } : {}, hideSelectAll: false, onChange: (selectedRowKeys) => { setSelectedRowKeys(selectedRowKeys, false); }, ...omit([rowSelection, "onChange"]) }; }); watch(() => unref(propsRef).rowSelection?.selectedRowKeys, (v) => { setSelectedRowKeys(v); }); watch(() => unref(selectedRowKeysRef), () => { nextTick(() => { const { rowSelection } = unref(propsRef); if (rowSelection) { const { onChange } = rowSelection; if (onChange && isFunction(onChange)) onChange(getSelectRowKeys(), getSelectRows()); } emit("selection-change", { keys: getSelectRowKeys(), rows: getSelectRows() }); }); }, { deep: true }); const getAutoCreateKey = computed(() => { return unref(propsRef).autoCreateKey && !unref(propsRef).rowKey; }); const getRowKey = computed(() => { const { rowKey } = unref(propsRef); return unref(getAutoCreateKey) ? ROW_KEY : rowKey; }); function setTempSelectedRowKeysRef(keys) { tempSelectedRowKeysRef.value = keys; changing.value = true; nextTick(() => { changing.value = false; }); } function setSelectedRowKeys(rowKeys, syncDom = true) { selectedRowKeysRef.value = rowKeys; const allSelectedRows = findNodeAll(toRaw(unref(tableData)).concat(toRaw(unref(selectedRowRef))), (item) => rowKeys.includes(item[unref(getRowKey)]), { children: propsRef.value.childrenColumnName ?? "children" }); const trueSelectedRows = []; rowKeys.forEach((key) => { const found = allSelectedRows.find((item) => item[unref(getRowKey)] === key); found && trueSelectedRows.push(found); }); selectedRowRef.value = trueSelectedRows; syncDom && setTempSelectedRowKeysRef(rowKeys); } function setSelectedRows(rows) { selectedRowRef.value = rows; } function clearSelectedRowKeys() { selectedRowRef.value = []; selectedRowKeysRef.value = []; setTempSelectedRowKeysRef([]); } function deleteSelectRowByKey(key) { const selectedRowKeys = unref(selectedRowKeysRef); const index = selectedRowKeys.findIndex((item) => item === key); if (index !== -1) { unref(selectedRowKeysRef).splice(index, 1); } } function getSelectRowKeys() { return unref(selectedRowKeysRef); } function getSelectRows() { return unref(selectedRowRef); } function getRowSelection() { return unref(getRowSelectionRef); } return { getRowSelection, getRowSelectionRef, getSelectRows, getSelectRowKeys, setSelectedRowKeys, clearSelectedRowKeys, deleteSelectRowByKey, setSelectedRows }; } export { useRowSelection }; //# sourceMappingURL=useRowSelection2.mjs.map