'use client' import { useEffect, useState } from 'react' import { ClipboardListIcon } from 'lucide-react' import { LazyDialogModuleFallback } from '@/components/campaign/LazyDialogModuleFallback' import type { NucleusUpdateFormAction } from '@/components/campaign/NucleusUpdateForm' import { useLazyDialogModule } from '@/components/campaign/useLazyDialogModule' import { Button } from '@/components/ui/button' import { Dialog, DialogTrigger } from '@/components/ui/dialog' type NucleusUpdateFormModule = { default: typeof import('./NucleusUpdateForm').NucleusUpdateForm } const loadNucleusUpdateForm = (): Promise => import('./NucleusUpdateForm').then((module) => ({ default: module.NucleusUpdateForm })) export const NucleusUpdateFormShell = ({ action, defaultOpen = false, loadDialogModule = loadNucleusUpdateForm, nucleusId, }: { action: NucleusUpdateFormAction defaultOpen?: boolean loadDialogModule?: () => Promise nucleusId: number }) => { const [activated, setActivated] = useState(defaultOpen) const [mutationPending, setMutationPending] = useState(false) const { component: FormComponent, load, resetAfterClose, status, } = useLazyDialogModule(loadDialogModule) useEffect(() => { if (activated) load() }, [activated, load]) const closeDialog = () => { setActivated(false) setMutationPending(false) resetAfterClose() } return ( { if (!open && mutationPending) return if (open) { setActivated(true) load() return } closeDialog() }} > {activated ? ( FormComponent ? ( ) : ( ) ) : null} ) }