"use client" import { useEffect, useRef, useState } from "react" import { useQueryClient } from "@tanstack/react-query" import { File, FileText, Image as ImageIcon, Play } from "lucide-react" import type { EmailAttachment, EmailAttachmentKind } from "@/lib/email-data" import { resolveAttachmentKind } from "@/lib/attachment-display" import { mailAttachmentCanThumb, useMailAttachmentThumb, } from "@/lib/api/hooks/use-mail-attachment-thumb" import { cn } from "@/lib/utils" function useInView(rootMargin = "120px") { const ref = useRef(null) const [inView, setInView] = useState(false) useEffect(() => { const el = ref.current if (!el) return const observer = new IntersectionObserver( ([entry]) => { if (entry?.isIntersecting) { setInView(true) observer.disconnect() } }, { rootMargin } ) observer.observe(el) return () => observer.disconnect() }, [rootMargin]) return { ref, inView } } function AttachmentKindFallback({ kind }: { kind: EmailAttachmentKind }) { if (kind === "image") { return } if (kind === "pdf") { return (
PDF
) } return } function ThumbMedia({ url, display, onError, }: { url: string display: "image" | "video" onError: () => void }) { if (display === "video") { return ( <>