{"version":3,"file":"group.mjs","sources":["../../src/checkbox/group.tsx"],"sourcesContent":["import { defineComponent, provide, computed, watchEffect, ref, toRefs } from 'vue';\nimport intersection from 'lodash/intersection';\nimport isObject from 'lodash/isObject';\nimport isUndefined from 'lodash/isUndefined';\nimport Checkbox from './checkbox';\nimport props from './checkbox-group-props';\nimport { CheckboxOptionObj, TdCheckboxProps, CheckboxGroupValue } from './type';\nimport { CheckboxGroupInjectionKey } from './constants';\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: 'XCheckboxGroup',\n  props,\n\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    const isCheckAll = computed<boolean>(() => {\n      const optionItems = optionList.value.filter((item) => !item.disabled && !item.checkAll).map((t) => t.value);\n      const intersectionValues = intersection(optionItems, innerValue.value);\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    const getAllCheckboxValue = (): CheckboxGroupValue => {\n      const val = new Set<TdCheckboxProps['value']>();\n      for (let i = 0, len = optionList.value.length; i < len; i++) {\n        const item = optionList.value[i];\n        if (item.checkAll) continue;\n        if (item.disabled) continue;\n        val.add(item.value);\n        if (maxExceeded.value) break;\n      }\n      return [...val];\n    };\n\n    const onCheckAllChange = (checked: boolean, context: { e: Event; source?: 'x-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        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        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":["name","props","innerValue","setInnerValue","isUndefined","watchEffect","isObject","label","value","val","type","option","current","e","arr","provide","checkedValues","handleCheckboxChange","onCheckedChange","children","_createVNode","Checkbox","_mergeProps","optionList"],"mappings":"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"}