Vben
2021-06-17 e9064631c7914d70d541834d37f47aea1466c525
提交 | 用户 | 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 }