// components/utilities/files/FilePreview.tsx "use client"; import { useEffect, useState } from "react"; import { rawUrl, isPreviewableImage, isPreviewableText, isPreviewablePdf } from "./api"; export default function FilePreview({ path, mime, name }: { path: string; mime?: string | null; name?: string }) { const [text, setText] = useState(""); useEffect(() => { let cancelled = false; async function load() { setText(""); if (isPreviewableText(mime, name)) { try { const res = await fetch(rawUrl(path), { cache: "no-store" }); const t = await res.text(); if (!cancelled) setText(t.slice(0, 100_000)); // safety cap } catch { if (!cancelled) setText("Unable to load text preview."); } } } load(); return () => { cancelled = true; }; }, [path, mime, name]); if (isPreviewableImage(mime, name)) { return (
{/* eslint-disable-next-line @next/next/no-img-element */} {name
); } if (isPreviewablePdf(mime, name)) { return (