39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
import type { Key } from '../../_util/type';
|
|
import type { DataEntity } from '../../vc-tree/interface';
|
|
import { conductCheck } from '../../vc-tree/utils/conductUtil';
|
|
import type { LabeledValueType, RawValueType } from '../TreeSelect';
|
|
import type { Ref, ShallowRef } from 'vue';
|
|
import { shallowRef, watchEffect } from 'vue';
|
|
|
|
export default (
|
|
rawLabeledValues: ShallowRef<LabeledValueType[]>,
|
|
rawHalfCheckedValues: ShallowRef<LabeledValueType[]>,
|
|
treeConduction: Ref<boolean>,
|
|
keyEntities: Ref<Record<Key, DataEntity>>,
|
|
maxLevel: Ref<number>,
|
|
levelEntities: ShallowRef<Map<number, Set<DataEntity>>>,
|
|
) => {
|
|
const newRawCheckedValues = shallowRef<RawValueType[]>([]);
|
|
const newRawHalfCheckedValues = shallowRef<RawValueType[]>([]);
|
|
|
|
watchEffect(() => {
|
|
let checkedKeys: RawValueType[] = rawLabeledValues.value.map(({ value }) => value);
|
|
let halfCheckedKeys: RawValueType[] = rawHalfCheckedValues.value.map(({ value }) => value);
|
|
|
|
const missingValues = checkedKeys.filter(key => !keyEntities.value[key]);
|
|
|
|
if (treeConduction.value) {
|
|
({ checkedKeys, halfCheckedKeys } = conductCheck(
|
|
checkedKeys,
|
|
true,
|
|
keyEntities.value,
|
|
maxLevel.value,
|
|
levelEntities.value,
|
|
));
|
|
}
|
|
newRawCheckedValues.value = Array.from(new Set([...missingValues, ...checkedKeys]));
|
|
newRawHalfCheckedValues.value = halfCheckedKeys;
|
|
});
|
|
return [newRawCheckedValues, newRawHalfCheckedValues];
|
|
};
|