{"version":3,"file":"useCheck.mjs","sources":["../../../../../../packages/components/transfer/src/useCheck.ts"],"sourcesContent":["import { computed, getCurrentInstance, watch } from 'vue'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type { TransferPanelState, Key } from './transfer'\n\nexport const CHECKED_CHANGE_EVENT = 'checked-change'\n\nexport const useCheckProps = {\n  data: {\n    type: Array,\n    default() {\n      return []\n    },\n  },\n  optionRender: Function,\n  placeholder: String,\n  title: String,\n  filterable: Boolean,\n  format: Object,\n  filterMethod: Function,\n  defaultChecked: Array,\n  props: Object,\n}\n\nexport const useCheck = (\n  props: ExtractPropTypes<typeof useCheckProps>,\n  panelState: TransferPanelState\n) => {\n  const { emit } = getCurrentInstance()\n\n  const labelProp = computed(() => props.props.label || 'label')\n\n  const keyProp = computed(() => props.props.key || 'key')\n\n  const disabledProp = computed(() => props.props.disabled || 'disabled')\n\n  const filteredData = computed(() => {\n    return props.data.filter((item) => {\n      if (typeof props.filterMethod === 'function') {\n        return props.filterMethod(panelState.query, item)\n      } else {\n        const label = item[labelProp.value] || item[keyProp.value].toString()\n        return label.toLowerCase().includes(panelState.query.toLowerCase())\n      }\n    })\n  })\n\n  const checkableData = computed(() => {\n    return filteredData.value.filter((item) => !item[disabledProp.value])\n  })\n\n  const checkedSummary = computed(() => {\n    const checkedLength = panelState.checked.length\n    const dataLength = props.data.length\n    const { noChecked, hasChecked } = props.format\n\n    if (noChecked && hasChecked) {\n      return checkedLength > 0\n        ? hasChecked\n            .replace(/\\${checked}/g, checkedLength.toString())\n            .replace(/\\${total}/g, dataLength.toString())\n        : noChecked.replace(/\\${total}/g, dataLength.toString())\n    } else {\n      return `${checkedLength}/${dataLength}`\n    }\n  })\n\n  const isIndeterminate = computed(() => {\n    const checkedLength = panelState.checked.length\n    return checkedLength > 0 && checkedLength < checkableData.value.length\n  })\n\n  const updateAllChecked = () => {\n    const checkableDataKeys = checkableData.value.map(\n      (item) => item[keyProp.value]\n    )\n    panelState.allChecked =\n      checkableDataKeys.length > 0 &&\n      checkableDataKeys.every((item) => panelState.checked.includes(item))\n  }\n\n  const handleAllCheckedChange = (value: Key[]) => {\n    panelState.checked = value\n      ? checkableData.value.map((item) => item[keyProp.value])\n      : []\n  }\n\n  watch(\n    () => panelState.checked,\n    (val, oldVal) => {\n      updateAllChecked()\n\n      if (panelState.checkChangeByUser) {\n        const movedKeys = val\n          .concat(oldVal)\n          .filter((v) => !val.includes(v) || !oldVal.includes(v))\n        emit(CHECKED_CHANGE_EVENT, val, movedKeys)\n      } else {\n        emit(CHECKED_CHANGE_EVENT, val)\n        panelState.checkChangeByUser = true\n      }\n    }\n  )\n\n  watch(checkableData, () => {\n    updateAllChecked()\n  })\n\n  watch(\n    () => props.data,\n    () => {\n      const checked = []\n      const filteredDataKeys = filteredData.value.map(\n        (item) => item[keyProp.value]\n      )\n      panelState.checked.forEach((item) => {\n        if (filteredDataKeys.includes(item)) {\n          checked.push(item)\n        }\n      })\n      panelState.checkChangeByUser = false\n      panelState.checked = checked\n    }\n  )\n\n  watch(\n    () => props.defaultChecked,\n    (val, oldVal) => {\n      if (\n        oldVal &&\n        val.length === oldVal.length &&\n        val.every((item) => oldVal.includes(item))\n      )\n        return\n\n      const checked = []\n      const checkableDataKeys = checkableData.value.map(\n        (item) => item[keyProp.value]\n      )\n\n      val.forEach((item) => {\n        if (checkableDataKeys.includes(item)) {\n          checked.push(item)\n        }\n      })\n      panelState.checkChangeByUser = false\n      panelState.checked = checked\n    },\n    {\n      immediate: true,\n    }\n  )\n\n  return {\n    labelProp,\n    keyProp,\n    disabledProp,\n    filteredData,\n    checkableData,\n    checkedSummary,\n    isIndeterminate,\n    updateAllChecked,\n    handleAllCheckedChange,\n  }\n}\n"],"names":[],"mappings":"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"}