import { ref, unref, watch, type Ref } from 'vue' import type { DescriptionActionType, DescriptionProps } from '../types' export type UseDescriptionPropsReactive = DescriptionProps | Ref export type UseDescriptionReturn = [ (instance: DescriptionActionType) => void, DescriptionActionType, ] export function useDescription(props?: UseDescriptionPropsReactive): UseDescriptionReturn { const descriptionActionRef = ref(null) const getDescriptionProps = (): DescriptionProps | undefined => (props ? unref(props as Ref) : undefined) as DescriptionProps | undefined const getDescriptionAction = (): DescriptionActionType => { const action = unref(descriptionActionRef) if (!action) { throw new Error('ProDescriptions instance has not been registered') } return action } const register = (instance: DescriptionActionType) => { descriptionActionRef.value = instance const descriptionProps = getDescriptionProps() if (descriptionProps && Object.keys(descriptionProps).length > 0) { instance.setProps(descriptionProps) } } if (props) { watch( () => getDescriptionProps(), (descriptionProps) => { if (descriptionProps && descriptionActionRef.value) { descriptionActionRef.value.setProps(descriptionProps) } }, { deep: true } ) } const descriptionActions: DescriptionActionType = { setProps: (descriptionProps) => getDescriptionAction().setProps(descriptionProps), setData: (data) => getDescriptionAction().setData(data), getData: () => getDescriptionAction().getData(), } return [register, descriptionActions] }