import { ViewType } from '@oinone/kunlun-meta'; import { computed, type ComputedRef, inject, type InjectionKey, provide } from 'vue'; /** * 元数据上下文 */ export interface MetaContext { viewType: ComputedRef; model: ComputedRef; modelName: ComputedRef; module: ComputedRef; moduleName: ComputedRef; metadataHandle: ComputedRef; rootHandle: ComputedRef; parentHandle: ComputedRef; slotName: ComputedRef; inline: ComputedRef; } /** * 默认元数据上下文 */ export const defaultMetaContext = { viewType: computed(() => ViewType.Form), model: computed(() => ''), modelName: computed(() => ''), module: computed(() => ''), moduleName: computed(() => ''), metadataHandle: computed(() => ''), rootHandle: computed(() => ''), parentHandle: computed(() => ''), slotName: computed(() => undefined), inline: computed(() => false) }; /** * 元数据Provider/Inject键 */ const MetaContextKey: InjectionKey = Symbol('MetaContext'); /** * 提供元数据上下文 * @param state 元数据可选项 */ export const useProviderMetaContext = (state: Partial): void => { provide(MetaContextKey, { ...defaultMetaContext, ...state }); }; /** * 获取元数据上下文 */ export const useInjectMetaContext = (): MetaContext => { const res = inject(MetaContextKey, defaultMetaContext); if (!res) { return { ...defaultMetaContext }; } return res; };