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 ); }