// modules/admin/pages/assets/ViewDocumentAsset.jsx
import { useParams, useNavigate } from "react-router-dom";
import { ArrowLeft, Lock, Globe, FileText, Pencil } from "lucide-react";
import { useDateFormat } from "@/hooks/useDateFormat";
import { useAssetFetchState } from "@/hooks/useAssetFetchState";
import { useAssetPreviewSrc } from "@/hooks/useAssetPreviewSrc";
import { formatFileSize } from "@/utils/format.util";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { Separator } from "@/components/ui/separator";
import FileZoomViewer from "@/components/generic/FileZoomViewer";
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, loading: previewLoading } = useAssetPreviewSrc(selectedAsset, { scope: "admin" });
if (loading) {
return ;
}
if (notFound) {
return (
File not found.
);
}
const a = selectedAsset;
const ext = (a.extension ?? "").toLowerCase();
const canPreview = PREVIEWABLE.includes(ext);
const isPdf = ext === "pdf";
return (
{/* ── Header ── */}
{a.display_name ?? a.original_name}
{a.mime_type}
{/* ── Document preview ── */}
{isPdf ? (
) : canPreview && streamUrl ? (
) : (
Preview not available for this file type.
)}
{/* ── Metadata panel ── */}
File Info
Storage
Access
{a.is_public
? <>Public>
: <>Private>
}
Timestamps
{a.description && (
Description
{a.description}
)}
);
}