{"version":3,"file":"use-model.mjs","sources":["../../../../../packages/components/table-select/src/use-model.ts"],"sourcesContent":["import {\n  computed,\n  shallowReactive,\n  shallowRef,\n  Ref,\n  ComputedRef,\n  watch\n} from 'vue'\nimport type { TableSelectProps } from './table-select'\nimport { getChainValue } from '@element-ultra/utils'\n\ninterface Options {\n  props: TableSelectProps\n  data: ComputedRef<any[]>\n  visible: Ref<boolean>\n}\n\nexport default function useModel(options: Options) {\n  const { props, data, visible } = options\n\n  /** 单选数据 */\n  const selected = shallowRef<Record<string, any> | null>(null)\n\n  /** 选中的数据, 使用对象来存储 */\n  const checkedData = shallowRef(shallowReactive<Record<string, any>>({}))\n\n  const setCheckedData = (item: Record<string, any>) => {\n    checkedData.value[getChainValue(item, props.valueKey)] = item\n  }\n\n  const removeCheckedData = (item: Record<string, any>) => {\n    delete checkedData.value[getChainValue(item, props.valueKey)]\n  }\n  const getCheckedData = (item: Record<string, any>) => {\n    return checkedData.value[getChainValue(item, props.valueKey)]\n  }\n\n  /** 选择的数据的数量 */\n  const checkedSize = computed(() => {\n    return Object.keys(checkedData.value).length\n  })\n\n  /** 单选框操作 */\n  const setSelectedData = (row: any) => {\n    selected.value = row\n  }\n\n  const setSelectOrChecked = (\n    value: Record<string, any> | any[] | undefined\n  ) => {\n    if (!value) return\n\n    if (props.multiple) {\n      if (Array.isArray(value)) {\n        value.forEach(setCheckedData)\n      } else {\n        console.error('table-select在多选的情况下, modelValue应传入一个数组')\n      }\n      return\n    }\n    setSelectedData(value)\n  }\n\n  const handleClear = () => {\n    if (props.multiple) {\n      checkedData.value = shallowReactive({})\n    } else {\n      selected.value = null\n    }\n  }\n\n  // 监听值变化\n  watch(\n    () => props.modelValue,\n    value => {\n      handleClear()\n      setSelectOrChecked(value)\n    },\n    { immediate: true }\n  )\n\n  watch(visible, v => {\n    if (v || !props.multiple) return\n    handleClear()\n    setSelectOrChecked(props.modelValue)\n  })\n\n  const indeterminate = computed(() => {\n    return data.value.some(item => !!getCheckedData(item)) && !allChecked.value\n  })\n\n  // 因为要跨分页, 所以需要通过以下的逻辑去判断\n  const allChecked = computed(() => {\n    const { rowDisabled } = props\n    return data.value.every((item, index) => {\n      return !!getCheckedData(item) || rowDisabled?.(item, index)\n    })\n  })\n\n  /** 复选框操作 */\n  const handleToggleCheck = (row: any, rowIndex: number) => {\n    const isChecked = !!getCheckedData(row)\n    if (isChecked) {\n      removeCheckedData(row)\n    } else {\n      !props.rowDisabled?.(row, rowIndex) && setCheckedData(row)\n    }\n  }\n\n  const toggleAllChecked = (checked: boolean) => {\n    if (checked) {\n      const  { rowDisabled } = props\n      data.value.forEach((item, index) => {\n        !rowDisabled?.(item, index) && setCheckedData(item)\n      })\n    } else {\n      data.value.forEach(removeCheckedData)\n    }\n  }\n\n  return {\n    checkedData,\n    allChecked,\n    selected,\n    checkedSize,\n    indeterminate,\n    handleToggleCheck,\n    toggleAllChecked,\n    setSelectedData,\n    handleClear\n  }\n}\n"],"names":[],"mappings":"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"}