import type { DescriptionProps, DescInstance, UseDescReturnType } from './typing';
|
import { ref, getCurrentInstance, unref } from 'vue';
|
import { isProdMode } from '@/utils/env';
|
|
export function useDescription(props?: Partial<DescriptionProps>): UseDescReturnType {
|
if (!getCurrentInstance()) {
|
throw new Error('useDescription() can only be used inside setup() or functional components!');
|
}
|
const desc = ref<Nullable<DescInstance>>(null);
|
const loaded = ref(false);
|
|
function register(instance: DescInstance) {
|
if (unref(loaded) && isProdMode()) {
|
return;
|
}
|
desc.value = instance;
|
props && instance.setDescProps(props);
|
loaded.value = true;
|
}
|
|
const methods: DescInstance = {
|
setDescProps: (descProps: Partial<DescriptionProps>): void => {
|
unref(desc)?.setDescProps(descProps);
|
},
|
};
|
|
return [register, methods];
|
}
|