import { useEffect } from 'react'; import { Text, View } from 'react-native'; import { FileIcon, HelpCircle, ScrollText, BookOpen, type LucideIcon, } from 'lucide-react-native'; import type { Particle } from '@/api/types'; import { useNetwork } from '@/hooks/use-networks'; import { resolveHumanDisplay } from '@/lib/humans'; const TYPE_META: Record = { quest: { icon: ScrollText, label: 'Quest' }, paper: { icon: BookOpen, label: 'Paper' }, file: { icon: FileIcon, label: 'File' }, }; const PLACEHOLDER_DURATION_MS = 5000; interface FallbackParticleViewProps { particle: Particle; networkId: string; paused: boolean; onEnded: () => void; } export function FallbackParticleView({ particle, networkId, paused, onEnded, }: FallbackParticleViewProps) { const network = useNetwork(networkId); const creator = resolveHumanDisplay( particle.created_by_human_id, network?.humans, ); const meta = TYPE_META[particle.type] ?? { icon: HelpCircle, label: particle.type, }; const Icon = meta.icon; const title = (() => { switch (particle.type) { case 'quest': return particle.properties.title; case 'paper': return particle.properties.title; case 'file': return particle.properties.filename; case 'folder': return particle.properties.name; default: return null; } })(); useEffect(() => { if (paused) return; const timeout = setTimeout(onEnded, PLACEHOLDER_DURATION_MS); return () => clearTimeout(timeout); }, [paused, onEnded, particle.id]); return ( {meta.label} {title ? ( {title} ) : null} From {creator.displayName} View on desktop ); }