comic-plus
Version:
<p align="center"> <img width="200px" src="./logo.png"/> </p>
51 lines (50 loc) • 1.54 kB
JavaScript
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
};