import type { Ref } from 'vue' import { onUnmounted, shallowRef } from 'vue' import { useEntryEditStub, type EntryEditController } from '@/composables/useEntryEditStub.ts' export type { EntryEditController } let proInstance: EntryEditController | null = null let stubInstance: EntryEditController | null = null export function resolveEntryEditController(): EntryEditController { const factory = window.IvyForms?.useEntryEdit if (factory) { if (!proInstance) { proInstance = factory() } return proInstance } if (!stubInstance) { stubInstance = useEntryEditStub() } return stubInstance } export function refreshEntryEditController(holder: Ref): void { const next = resolveEntryEditController() if (holder.value !== next) { holder.value = next } } export function useEntryEditHolder(): Ref { const holder = shallowRef(resolveEntryEditController()) const refresh = () => refreshEntryEditController(holder) if (typeof window !== 'undefined') { window.addEventListener('ivyforms:ready', refresh, { once: true }) window.addEventListener('ivyforms:pro_features_loaded', refresh) window.addEventListener('ivyforms:entry_edit_ready', refresh) onUnmounted(() => { window.removeEventListener('ivyforms:ready', refresh) window.removeEventListener('ivyforms:pro_features_loaded', refresh) window.removeEventListener('ivyforms:entry_edit_ready', refresh) }) } return holder }