UNPKG

tdesign-vue-next

Version:
1 lines 14.8 kB
{"version":3,"file":"group.mjs","sources":["../../../components/checkbox/group.tsx"],"sourcesContent":["import { defineComponent, provide, computed, watchEffect, ref, toRefs } from 'vue';\nimport { intersection } from 'lodash-es';\nimport { isObject } from 'lodash-es';\nimport { isUndefined } from 'lodash-es';\nimport Checkbox from './checkbox';\nimport props from './checkbox-group-props';\nimport { CheckboxOptionObj, TdCheckboxProps, CheckboxGroupValue } from './type';\nimport { CheckboxGroupInjectionKey } from './consts';\nimport useVModel from '../hooks/useVModel';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { useChildComponentSlots } from '../hooks/slot';\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 [innerValue, setInnerValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n\n const optionList = ref<Array<CheckboxOptionObj>>([]);\n\n const intersectionLen = computed<number>(() => {\n if (!isArray(innerValue.value)) return 0;\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 * @returns {CheckboxGroupValue} 返回一个数组,包含所有非 `checkAll`、`disabled`、`readonly` 状态复选框的值。\n */\n const getAllCheckboxValue = (): CheckboxGroupValue => {\n const val = new Set<TdCheckboxProps['value']>();\n\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) continue;\n if (item.readonly) continue;\n\n val.add(item.value); // 添加非排除状态项的值到集合中\n\n // 如果已达到最大限制,则终止循环\n if (maxExceeded.value) break;\n }\n\n return [...val]; // 从 Set 集合转换为数组并返回\n };\n\n const onCheckAllChange = (checked: boolean, context: { e: Event; source?: 't-checkbox' }) => {\n const value: CheckboxGroupValue = checked ? getAllCheckboxValue() : [];\n setInnerValue(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 if (!isArray(innerValue.value)) {\n console.warn(`TDesign CheckboxGroup Warn: \\`value\\` must be an array, instead of ${typeof innerValue.value}`);\n return;\n }\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 setInnerValue(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","innerValue","setInnerValue","optionList","ref","intersectionLen","computed","values","map","item","n","intersection","length","isCheckAll","optionItems","filter","disabled","readonly","checkAll","t","intersectionValues","indeterminate","maxExceeded","isUndefined","max","watchEffect","options","isObject","label","String","getAllCheckboxValue","val","Set","i","len","add","_toConsumableArray","onCheckAllChange","checked","context","e","type","current","option","handleCheckboxChange","data","currentValue","console","warn","concat","_typeof","push","indexOf","splice","onCheckedChange","p","getChildComponentSlots","useChildComponentSlots","getOptionListBySlots","nodes","arr","forEach","node","provide","CheckboxGroupInjectionKey","checkedValues","_props2$options","children","_optionList$value","index","_innerValue$value","_createVNode","Checkbox","_mergeProps","lazyLoad","includes"],"mappings":"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"}