Skip to content

Commit da398e5

Browse files
committed
feat(shared): useSelection 支持批量切换选中数据
1 parent 88d6aad commit da398e5

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

src/shared/use-selection/index.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { ComputedRef, MaybeRefOrGetter } from 'vue'
2+
import { isFunction } from '@antfu/utils'
23
import { computed, shallowReactive, toValue } from 'vue'
34

45
export interface UseSelectionOptions<T = any, K = any> {
@@ -56,6 +57,17 @@ export interface UseSelectionReturn<T = any, K = any> {
5657
selected?: boolean,
5758
ignoreSelectable?: boolean,
5859
) => void
60+
/**
61+
* 批量切换选中项
62+
* @param data 数据列表
63+
* @param selected 是否选中
64+
* @param ignoreSelectable 是否忽略 selectable 选项
65+
*/
66+
batchToggleSelection: (
67+
data: T[],
68+
selected?: boolean,
69+
ignoreSelectable?: boolean | ((data: T) => boolean | undefined),
70+
) => void
5971
/**
6072
* 清空选中项
6173
*/
@@ -100,6 +112,15 @@ export function useSelection<T, K = any>({
100112
selection.delete(toKey(data))
101113
}
102114
},
115+
batchToggleSelection(data, selected, ignoreSelectable) {
116+
const ignoreSelectableFn = isFunction(ignoreSelectable)
117+
? ignoreSelectable
118+
: () => ignoreSelectable
119+
120+
data.forEach((item) => {
121+
returned.toggleSelection(item, selected, ignoreSelectableFn(item))
122+
})
123+
},
103124
clearSelection() {
104125
selection.clear()
105126
},

0 commit comments

Comments
 (0)