UNPKG

comic-plus

Version:

<p align="center"> <img width="200px" src="./logo.png"/> </p>

51 lines (50 loc) 1.54 kB
import { getCurrentInstance, inject, computed, onMounted, onBeforeUnmount } from "vue"; import { STEP_PROVIDE } from "./type.mjs"; import "../../../utils/config.mjs"; import { isVueComponent } from "../../../utils/typescript.mjs"; import "@vueuse/core"; import "../../../icons/index.mjs"; import { CloseFilled, CheckOne } from "../../../icons/components/components.mjs"; const useStepItem = (props) => { const instance = getCurrentInstance(); const { props: injectProps, addItem, removeItem, itemList, maxWidth } = inject(STEP_PROVIDE); const isFinish = computed(() => { if (!injectProps.active) return false; return itemList.value.findIndex((id) => id === instance.uid) < injectProps.active; }); const isCurrent = computed(() => { if (injectProps.active === null || injectProps.active === void 0) return false; return currentIndex.value === injectProps.active; }); const currentIndex = computed(() => { return itemList.value.findIndex((id) => id === instance.uid); }); const currentIcon = computed(() => { if (isVueComponent(props.icon)) return props.icon; if (isCurrent.value) { return props.error ? CloseFilled : null; } return isFinish.value ? CheckOne : null; }); onMounted(() => { addItem(instance.uid); }); onBeforeUnmount(() => { removeItem(instance.uid); }); return { instance, injectProps, addItem, removeItem, itemList, isFinish, isCurrent, currentIndex, currentIcon, maxWidth }; }; export { useStepItem };