// modules/admin/pages/assets/ViewDocumentAsset.jsx import { useParams, useNavigate } from "react-router-dom"; import { ArrowLeft, Lock, Globe, FileText, Download } from "lucide-react"; import { useDateFormat } from "@/hooks/useDateFormat"; import { useAssetFetchState } from "@/hooks/useAssetFetchState"; import { useAssetPreviewSrc } from "@/hooks/useAssetPreviewSrc"; import { downloadAsset } from "@/utils/media.util"; import { Spinner } from "@/components/ui/spinner"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Separator } from "@/components/ui/separator"; import { MediaFallback } from "@/components/generic/MediaFallback"; import AssetPageLoader from "@/components/generic/AssetLoader"; function MetaRow({ label, value }) { if (!value && value !== 0) return null; return (
{label} {String(value)}
); } const PREVIEWABLE = ["pdf", "txt", "html", "htm", "csv", "md"]; export default function ViewDocumentAsset() { const { assetId } = useParams(); const navigate = useNavigate(); const { fmtDateTime } = useDateFormat(); const { asset: selectedAsset, loading, notFound } = useAssetFetchState(assetId); const { src: streamUrl } = useAssetPreviewSrc(selectedAsset, { scope: "admin" }); if (loading) { return ; } if (notFound) { return (

Asset not found.

); } const a = selectedAsset; const canPreview = PREVIEWABLE.includes((a.extension ?? "").toLowerCase()); return (
{/* ── Header ── */}

{a.display_name ?? a.original_name}

{a.mime_type}

{/* ── Document preview ── */}
{canPreview && streamUrl ? (