提交 | 用户 | age
|
2407b3
|
1 |
import type { BasicTableProps, TableRowSelection } from '../types/table'; |
601368
|
2 |
import { computed, ref, unref, ComputedRef, Ref, toRaw } from 'vue'; |
V |
3 |
import { ROW_KEY } from '../const'; |
faf3f4
|
4 |
|
601368
|
5 |
export function useRowSelection( |
V |
6 |
propsRef: ComputedRef<BasicTableProps>, |
|
7 |
tableData: Ref<Recordable[]>, |
|
8 |
emit: EmitType |
|
9 |
) { |
faf3f4
|
10 |
const selectedRowKeysRef = ref<string[]>([]); |
354904
|
11 |
const selectedRowRef = ref<Recordable[]>([]); |
faf3f4
|
12 |
|
2407b3
|
13 |
const getRowSelectionRef = computed((): TableRowSelection | null => { |
354904
|
14 |
const { rowSelection } = unref(propsRef); |
faf3f4
|
15 |
if (!rowSelection) { |
陈 |
16 |
return null; |
|
17 |
} |
c3096e
|
18 |
|
faf3f4
|
19 |
return { |
陈 |
20 |
selectedRowKeys: unref(selectedRowKeysRef), |
|
21 |
hideDefaultSelections: false, |
c3096e
|
22 |
onChange: (selectedRowKeys: string[], selectedRows: Recordable[]) => { |
faf3f4
|
23 |
selectedRowKeysRef.value = selectedRowKeys; |
陈 |
24 |
selectedRowRef.value = selectedRows; |
|
25 |
emit('selection-change', { |
|
26 |
keys: selectedRowKeys, |
|
27 |
rows: selectedRows, |
|
28 |
}); |
|
29 |
}, |
c3096e
|
30 |
...(rowSelection === undefined ? {} : rowSelection), |
faf3f4
|
31 |
}; |
陈 |
32 |
}); |
a1ffb6
|
33 |
|
601368
|
34 |
const getAutoCreateKey = computed(() => { |
V |
35 |
return unref(propsRef).autoCreateKey && !unref(propsRef).rowKey; |
|
36 |
}); |
|
37 |
|
|
38 |
const getRowKey = computed(() => { |
|
39 |
const { rowKey } = unref(propsRef); |
|
40 |
return unref(getAutoCreateKey) ? ROW_KEY : rowKey; |
|
41 |
}); |
|
42 |
|
faf3f4
|
43 |
function setSelectedRowKeys(rowKeys: string[]) { |
陈 |
44 |
selectedRowKeysRef.value = rowKeys; |
601368
|
45 |
|
V |
46 |
const rows = toRaw(unref(tableData)).filter((item) => |
|
47 |
rowKeys.includes(item[unref(getRowKey) as string]) |
|
48 |
); |
|
49 |
selectedRowRef.value = rows; |
|
50 |
} |
|
51 |
|
|
52 |
function setSelectedRows(rows: Recordable[]) { |
|
53 |
selectedRowRef.value = rows; |
faf3f4
|
54 |
} |
陈 |
55 |
|
|
56 |
function clearSelectedRowKeys() { |
|
57 |
selectedRowRef.value = []; |
|
58 |
selectedRowKeysRef.value = []; |
|
59 |
} |
|
60 |
|
|
61 |
function deleteSelectRowByKey(key: string) { |
|
62 |
const selectedRowKeys = unref(selectedRowKeysRef); |
|
63 |
const index = selectedRowKeys.findIndex((item) => item === key); |
|
64 |
if (index !== -1) { |
|
65 |
unref(selectedRowKeysRef).splice(index, 1); |
|
66 |
} |
|
67 |
} |
354904
|
68 |
|
faf3f4
|
69 |
function getSelectRowKeys() { |
陈 |
70 |
return unref(selectedRowKeysRef); |
|
71 |
} |
354904
|
72 |
|
V |
73 |
function getSelectRows<T = Recordable>() { |
|
74 |
// const ret = toRaw(unref(selectedRowRef)).map((item) => toRaw(item)); |
|
75 |
return unref(selectedRowRef) as T[]; |
faf3f4
|
76 |
} |
陈 |
77 |
|
116a1f
|
78 |
function getRowSelection() { |
V |
79 |
return unref(getRowSelectionRef)!; |
|
80 |
} |
|
81 |
|
faf3f4
|
82 |
return { |
116a1f
|
83 |
getRowSelection, |
faf3f4
|
84 |
getRowSelectionRef, |
陈 |
85 |
getSelectRows, |
|
86 |
getSelectRowKeys, |
|
87 |
setSelectedRowKeys, |
|
88 |
clearSelectedRowKeys, |
|
89 |
deleteSelectRowByKey, |
601368
|
90 |
setSelectedRows, |
faf3f4
|
91 |
}; |
陈 |
92 |
} |