UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 6.41 kB
{"version":3,"file":"use-check.mjs","names":[],"sources":["../../../../../../../packages/components/transfer/src/composables/use-check.ts"],"sourcesContent":["import { computed, watch } from 'vue'\nimport { isFunction } from '@element-plus/utils'\nimport { CHECKED_CHANGE_EVENT } from '../transfer-panel'\nimport { usePropsAlias } from './use-props-alias'\n\nimport type { SetupContext } from 'vue'\nimport type { CheckboxValueType } from '@element-plus/components/checkbox'\nimport type { TransferDataItem, TransferKey } from '../transfer'\nimport type {\n TransferPanelEmits,\n TransferPanelProps,\n TransferPanelState,\n} from '../transfer-panel'\n\nexport const useCheck = <T extends TransferDataItem = TransferDataItem>(\n props: Required<\n Pick<\n TransferPanelProps<T>,\n 'data' | 'format' | 'defaultChecked' | 'props' // 'props' needed by usePropsAlias\n >\n > & { filterMethod: TransferPanelProps<T>['filterMethod'] },\n panelState: TransferPanelState,\n emit: SetupContext<TransferPanelEmits>['emit']\n) => {\n const propsAlias = usePropsAlias(props)\n\n const filteredData = computed(() => {\n return props.data.filter((item) => {\n if (isFunction(props.filterMethod)) {\n return props.filterMethod(panelState.query, item)\n } else {\n const label = String(\n item[propsAlias.value.label] || item[propsAlias.value.key]\n )\n return label.toLowerCase().includes(panelState.query.toLowerCase())\n }\n })\n })\n\n const checkableData = computed(() =>\n filteredData.value.filter((item) => !item[propsAlias.value.disabled])\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[propsAlias.value.key]\n )\n panelState.allChecked =\n checkableDataKeys.length > 0 &&\n checkableDataKeys.every((item) => panelState.checked.includes(item))\n }\n\n const handleAllCheckedChange = (value: CheckboxValueType) => {\n panelState.checked = value\n ? checkableData.value.map((item) => item[propsAlias.value.key])\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: TransferKey[] = []\n const filteredDataKeys = filteredData.value.map(\n (item) => item[propsAlias.value.key]\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: TransferKey[] = []\n const checkableDataKeys = checkableData.value.map(\n (item) => item[propsAlias.value.key]\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 filteredData,\n checkableData,\n checkedSummary,\n isIndeterminate,\n updateAllChecked,\n handleAllCheckedChange,\n }\n}\n"],"mappings":";;;;;;AAcA,MAAa,YACX,OAMA,YACA,SACG;CACH,MAAM,aAAa,cAAc,MAAM;CAEvC,MAAM,eAAe,eAAe;AAClC,SAAO,MAAM,KAAK,QAAQ,SAAS;AACjC,OAAI,WAAW,MAAM,aAAa,CAChC,QAAO,MAAM,aAAa,WAAW,OAAO,KAAK;OAKjD,QAHc,OACZ,KAAK,WAAW,MAAM,UAAU,KAAK,WAAW,MAAM,KACvD,CACY,aAAa,CAAC,SAAS,WAAW,MAAM,aAAa,CAAC;IAErE;GACF;CAEF,MAAM,gBAAgB,eACpB,aAAa,MAAM,QAAQ,SAAS,CAAC,KAAK,WAAW,MAAM,UAAU,CACtE;CAED,MAAM,iBAAiB,eAAe;EACpC,MAAM,gBAAgB,WAAW,QAAQ;EACzC,MAAM,aAAa,MAAM,KAAK;EAC9B,MAAM,EAAE,WAAW,eAAe,MAAM;AAExC,MAAI,aAAa,WACf,QAAO,gBAAgB,IACnB,WACG,QAAQ,gBAAgB,cAAc,UAAU,CAAC,CACjD,QAAQ,cAAc,WAAW,UAAU,CAAC,GAC/C,UAAU,QAAQ,cAAc,WAAW,UAAU,CAAC;MAE1D,QAAO,GAAG,cAAc,GAAG;GAE7B;CAEF,MAAM,kBAAkB,eAAe;EACrC,MAAM,gBAAgB,WAAW,QAAQ;AACzC,SAAO,gBAAgB,KAAK,gBAAgB,cAAc,MAAM;GAChE;CAEF,MAAM,yBAAyB;EAC7B,MAAM,oBAAoB,cAAc,MAAM,KAC3C,SAAS,KAAK,WAAW,MAAM,KACjC;AACD,aAAW,aACT,kBAAkB,SAAS,KAC3B,kBAAkB,OAAO,SAAS,WAAW,QAAQ,SAAS,KAAK,CAAC;;CAGxE,MAAM,0BAA0B,UAA6B;AAC3D,aAAW,UAAU,QACjB,cAAc,MAAM,KAAK,SAAS,KAAK,WAAW,MAAM,KAAK,GAC7D,EAAE;;AAGR,aACQ,WAAW,UAChB,KAAK,WAAW;AACf,oBAAkB;AAElB,MAAI,WAAW,kBAIb,MAAK,sBAAsB,KAHT,IACf,OAAO,OAAO,CACd,QAAQ,MAAM,CAAC,IAAI,SAAS,EAAE,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC,CACf;OACrC;AACL,QAAK,sBAAsB,IAAI;AAC/B,cAAW,oBAAoB;;GAGpC;AAED,OAAM,qBAAqB;AACzB,oBAAkB;GAClB;AAEF,aACQ,MAAM,YACN;EACJ,MAAM,UAAyB,EAAE;EACjC,MAAM,mBAAmB,aAAa,MAAM,KACzC,SAAS,KAAK,WAAW,MAAM,KACjC;AACD,aAAW,QAAQ,SAAS,SAAS;AACnC,OAAI,iBAAiB,SAAS,KAAK,CACjC,SAAQ,KAAK,KAAK;IAEpB;AACF,aAAW,oBAAoB;AAC/B,aAAW,UAAU;GAExB;AAED,aACQ,MAAM,iBACX,KAAK,WAAW;AACf,MACE,UACA,IAAI,WAAW,OAAO,UACtB,IAAI,OAAO,SAAS,OAAO,SAAS,KAAK,CAAC,CAE1C;EAEF,MAAM,UAAyB,EAAE;EACjC,MAAM,oBAAoB,cAAc,MAAM,KAC3C,SAAS,KAAK,WAAW,MAAM,KACjC;AAED,MAAI,SAAS,SAAS;AACpB,OAAI,kBAAkB,SAAS,KAAK,CAClC,SAAQ,KAAK,KAAK;IAEpB;AACF,aAAW,oBAAoB;AAC/B,aAAW,UAAU;IAEvB,EACE,WAAW,MACZ,CACF;AAED,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD"}