tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 15.1 kB
Source Map (JSON)
{"version":3,"file":"group.mjs","sources":["../../../components/checkbox/group.tsx"],"sourcesContent":["import { defineComponent, provide, computed, watchEffect, ref, toRefs } from 'vue';\nimport { isObject, isUndefined, intersection } from 'lodash-es';\n\nimport Checkbox from './checkbox';\nimport props from './checkbox-group-props';\nimport { CheckboxOptionObj, TdCheckboxProps, CheckboxGroupValue } from './type';\nimport { CheckboxGroupInjectionKey } from './constants';\nimport { useVModel, useTNodeJSX, usePrefixClass, useChildComponentSlots } from '@tdesign/shared-hooks';\n\nexport default defineComponent({\n name: 'TCheckboxGroup',\n props,\n setup(props) {\n /** 样式 */\n const COMPONENT_NAME = usePrefixClass('checkbox-group');\n const renderTNodeJSX = useTNodeJSX();\n\n const { isArray } = Array;\n const { value, modelValue } = toRefs(props);\n const [rawValue, setRawValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n const innerValue = computed(() => (isArray(rawValue.value) ? rawValue.value : []));\n\n const optionList = ref<Array<CheckboxOptionObj>>([]);\n\n const intersectionLen = computed<number>(() => {\n const values = optionList.value.map((item) => item.value);\n const n = intersection(innerValue.value, values);\n return n.length;\n });\n\n /**\n * 计算是否所有选项都被选中。\n * 此函数不接受参数,但依赖于外部的 `optionList` 和 `innerValue` 变量。\n *\n * @returns {boolean} 如果所有符合条件的选项都被选中,则返回 `true`;否则返回 `false`。\n */\n const isCheckAll = computed<boolean>(() => {\n // 筛选出非禁用、非只读且不设置为“全选”的选项,并提取其值\n const optionItems = optionList.value\n .filter((item) => !item.disabled && !item.readonly && !item.checkAll)\n .map((t) => t.value);\n\n // 计算当前选中值与筛选后的选项值的交集\n const intersectionValues = intersection(optionItems, innerValue.value);\n\n // 判断交集的长度是否等于所有选项值的长度,以确定是否所有选项都被选中\n return intersectionValues.length === optionItems.length;\n });\n\n const indeterminate = computed<boolean>(\n () => !isCheckAll.value && intersectionLen.value < optionList.value.length && intersectionLen.value !== 0,\n );\n\n const maxExceeded = computed<boolean>(() => !isUndefined(props.max) && innerValue.value.length === props.max);\n\n watchEffect(() => {\n if (!props.options) return [];\n optionList.value = props.options.map((item) => {\n return isObject(item) ? item : { label: String(item), value: item };\n });\n });\n\n /**\n * 获取所有复选框的值。\n * 此函数遍历 `optionList` 中的项,忽略被标记为 `checkAll`、`disabled` 或 `readonly` 的项,\n * 并收集非这些状态的项的值到一个 Set 集合中。如果达到最大限制 `maxExceeded`,则停止遍历。\n *\n */\n const getAllCheckboxValue = () => {\n const checkAllVal = new Set<TdCheckboxProps['value']>();\n const uncheckAllVal = new Set<TdCheckboxProps['value']>();\n // 遍历选项列表,忽略特定状态的项,并收集有效值\n for (let i = 0, len = optionList.value.length; i < len; i++) {\n const item = optionList.value[i];\n\n // 如果项被标记为检查所有、禁用或只读,且未选中,则跳过当前循环迭代\n if (item.checkAll) continue;\n if (item.disabled) {\n if (!innerValue.value.includes(item.value)) continue;\n else uncheckAllVal.add(item.value); // 添加禁用状态项的值到集合中\n }\n if (item.readonly) {\n if (!innerValue.value.includes(item.value)) continue;\n else uncheckAllVal.add(item.value); // 添加禁用状态项的值到集合中\n }\n\n checkAllVal.add(item.value); // 添加非排除状态项的值到集合中\n\n // 如果已达到最大限制,则终止循环\n if (maxExceeded.value) break;\n }\n\n return { checkAllVal: [...checkAllVal], uncheckAllVal: [...uncheckAllVal] }; // 从 Set 集合转换为数组并返回\n };\n\n const onCheckAllChange = (checked: boolean, context: { e: Event; source?: 't-checkbox' }) => {\n const { checkAllVal, uncheckAllVal } = getAllCheckboxValue();\n\n const value: CheckboxGroupValue = checked ? checkAllVal : uncheckAllVal;\n setRawValue(value, {\n e: context.e,\n type: checked ? 'check' : 'uncheck',\n current: undefined,\n option: undefined,\n });\n };\n\n const handleCheckboxChange = (data: { checked: boolean; e: Event; option: TdCheckboxProps }) => {\n const currentValue = data.option.value;\n const val = [...innerValue.value];\n if (data.checked) {\n val.push(currentValue);\n } else {\n const i = val.indexOf(currentValue);\n val.splice(i, 1);\n }\n setRawValue(val, {\n e: data.e,\n current: data.option.value,\n option: data.option,\n type: data.checked ? 'check' : 'uncheck',\n });\n };\n\n const onCheckedChange = (p: { checked: boolean; checkAll: boolean; e: Event; option: TdCheckboxProps }) => {\n const { checked, checkAll, e } = p;\n if (checkAll) {\n onCheckAllChange(checked, { e });\n } else {\n handleCheckboxChange(p);\n }\n };\n\n const getChildComponentSlots = useChildComponentSlots();\n\n const getOptionListBySlots = () => {\n const nodes = getChildComponentSlots('Checkbox');\n const arr: Array<CheckboxOptionObj> = [];\n nodes?.forEach((node) => {\n const option = node.props as CheckboxOptionObj;\n if (!option) return;\n // @ts-ignore types only declare checkAll not declare check-all\n if (option['check-all'] === '' || option['check-all'] === true) {\n option.checkAll = true;\n }\n arr.push(option);\n });\n return arr;\n };\n\n provide(\n CheckboxGroupInjectionKey,\n computed(() => ({\n name: props.name,\n isCheckAll: isCheckAll.value,\n checkedValues: innerValue.value,\n maxExceeded: maxExceeded.value,\n disabled: props.disabled,\n readonly: props.readonly,\n indeterminate: indeterminate.value,\n handleCheckboxChange,\n onCheckedChange,\n })),\n );\n\n return () => {\n let children = null;\n if (props.options?.length) {\n children = optionList.value?.map((option, index) => (\n <Checkbox\n key={`${option.value || ''}${index}`}\n lazyLoad={props.lazyLoad}\n {...option}\n index={index}\n checked={innerValue.value.includes(option.value)}\n data={option}\n ></Checkbox>\n ));\n } else {\n const nodes = renderTNodeJSX('default');\n optionList.value = getOptionListBySlots();\n children = nodes;\n }\n return (\n <div class={COMPONENT_NAME.value} role=\"group\" aria-label=\"checkbox-group\">\n {children}\n </div>\n );\n };\n },\n});\n"],"names":["defineComponent","name","props","setup","COMPONENT_NAME","usePrefixClass","renderTNodeJSX","useTNodeJSX","isArray","Array","_toRefs","toRefs","value","modelValue","_useVModel","useVModel","defaultValue","onChange","_useVModel2","_slicedToArray","rawValue","setRawValue","innerValue","computed","optionList","ref","intersectionLen","values","map","item","n","intersection","length","isCheckAll","optionItems","filter","disabled","readonly","checkAll","t","intersectionValues","indeterminate","maxExceeded","isUndefined","max","watchEffect","options","isObject","label","String","getAllCheckboxValue","checkAllVal","Set","uncheckAllVal","i","len","includes","add","_toConsumableArray","onCheckAllChange","checked","context","_getAllCheckboxValue","e","type","current","option","handleCheckboxChange","data","currentValue","val","push","indexOf","splice","onCheckedChange","p","getChildComponentSlots","useChildComponentSlots","getOptionListBySlots","nodes","arr","forEach","node","provide","CheckboxGroupInjectionKey","checkedValues","_props2$options","children","_optionList$value","index","_createVNode","Checkbox","_mergeProps","concat","lazyLoad"],"mappings":"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"}