UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 5.13 kB
{"version":3,"file":"use-collapse.mjs","sources":["../../../../../../packages/components/collapse/src/use-collapse.ts"],"sourcesContent":["import { computed, provide, ref, watch } from 'vue'\nimport {\n debugWarn,\n ensureArray,\n isBoolean,\n isPromise,\n throwError,\n} from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport { CHANGE_EVENT, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { collapseContextKey } from './constants'\n\nimport type { SetupContext } from 'vue'\nimport type {\n CollapseActiveName,\n CollapseEmits,\n CollapseProps,\n} from './collapse'\n\nconst SCOPE = 'ElCollapse'\nexport const useCollapse = (\n props: CollapseProps,\n emit: SetupContext<CollapseEmits>['emit']\n) => {\n const activeNames = ref(ensureArray(props.modelValue))\n\n const setActiveNames = (_activeNames: CollapseActiveName[]) => {\n activeNames.value = _activeNames\n const value = props.accordion ? activeNames.value[0] : activeNames.value\n emit(UPDATE_MODEL_EVENT, value)\n emit(CHANGE_EVENT, value)\n }\n\n const handleChange = (name: CollapseActiveName) => {\n if (props.accordion) {\n setActiveNames([activeNames.value[0] === name ? '' : name])\n } else {\n const _activeNames = [...activeNames.value]\n const index = _activeNames.indexOf(name)\n\n if (index > -1) {\n _activeNames.splice(index, 1)\n } else {\n _activeNames.push(name)\n }\n setActiveNames(_activeNames)\n }\n }\n\n const handleItemClick = async (name: CollapseActiveName) => {\n const { beforeCollapse } = props\n if (!beforeCollapse) {\n handleChange(name)\n return\n }\n\n const shouldChange = beforeCollapse(name)\n const isPromiseOrBool = [\n isPromise(shouldChange),\n isBoolean(shouldChange),\n ].includes(true)\n if (!isPromiseOrBool) {\n throwError(\n SCOPE,\n 'beforeCollapse must return type `Promise<boolean>` or `boolean`'\n )\n }\n\n if (isPromise(shouldChange)) {\n shouldChange\n .then((result) => {\n if (result !== false) {\n handleChange(name)\n }\n })\n .catch((e) => {\n debugWarn(SCOPE, `some error occurred: ${e}`)\n })\n } else if (shouldChange) {\n handleChange(name)\n }\n }\n\n watch(\n () => props.modelValue,\n () => (activeNames.value = ensureArray(props.modelValue)),\n { deep: true }\n )\n\n provide(collapseContextKey, {\n activeNames,\n handleItemClick,\n })\n return {\n activeNames,\n setActiveNames,\n }\n}\n\nexport const useCollapseDOM = (props: CollapseProps) => {\n const ns = useNamespace('collapse')\n\n const rootKls = computed(() => [\n ns.b(),\n ns.b(`icon-position-${props.expandIconPosition}`),\n ])\n\n return {\n rootKls,\n }\n}\n"],"names":["ensureArray"],"mappings":"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"}