layui/.svn/pristine/a5/a5819d69eb0b441dae9b948bffedc507e0353242.svn-base
2022-12-09 16:41:41 +08:00

40 lines
838 B
Plaintext

import {
computed,
inject,
provide,
reactive,
Ref,
isRef,
ComputedRef,
UnwrapNestedRefs,
} from "vue";
export const LevelInjectionKey = Symbol("menuLevelKey");
export function provideLevel(level: Ref<number> | number) {
const computedLevel = computed(() => (isRef(level) ? level.value : level));
provide(
LevelInjectionKey,
reactive({
level: computedLevel,
})
);
}
export default function useLevel(props?: { provideNextLevel?: boolean }) {
const { provideNextLevel } = props || {};
const levelContext = inject(LevelInjectionKey) as UnwrapNestedRefs<{
level: ComputedRef<number>;
}>;
const level = computed(() => levelContext.level || 1);
if (provideNextLevel) {
const nextLevel = computed(() => level.value + 1);
provideLevel(nextLevel);
}
return {
level,
};
}