import { useCallback, useState } from 'react'; import { toast } from 'sonner'; import { ConfirmDestructiveOverlay } from '@/components/confirm-destructive-overlay'; import { softDeleteParticle } from '@/lib/firestore-particles'; import { particlePath, toFirestoreDocPath } from '@/lib/particle-path'; import type { Particle } from '@/api/types'; import { useSuspendPlayback } from '@/hooks/use-suspend-playback'; interface DeleteParticleOverlayProps { networkId: string; streamId: string; particle: Particle; userId: string; onClose: () => void; } export function DeleteParticleOverlay({ networkId, streamId, particle, userId, onClose, }: DeleteParticleOverlayProps) { useSuspendPlayback(true, 'delete-particle'); const [deleting, setDeleting] = useState(false); const handleDelete = useCallback(async () => { if (deleting) return; setDeleting(true); try { const docPath = toFirestoreDocPath( particlePath(networkId, [streamId, particle.id]), ); await softDeleteParticle(docPath, userId); toast.success('Particle deleted'); onClose(); } catch (e) { const message = e instanceof Error ? e.message : 'Failed to delete particle'; toast.error(message); setDeleting(false); } }, [deleting, networkId, onClose, particle.id, streamId, userId]); return ( This cannot be undone. Other viewers will see a "This particle was deleted" message in its place.

} confirmLabel="Delete" pendingLabel="Deleting…" isPending={deleting} onConfirm={handleDelete} onClose={onClose} /> ); }