tav-ui
Version:
108 lines (105 loc) • 3.44 kB
JavaScript
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