"use client"; import { useMemo, useState } from "react"; import { type z } from "zod"; import { Status } from "~/components/global"; import { PreviewDocument, PreviewImage, PreviewInformation, PreviewManga, PreviewMedia, PreviewRich, PreviewUnknown, } from "~/components/preview"; import { Button } from "~/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card"; import { type getFileType } from "~/lib/previewHelper"; import { cn } from "~/lib/utils"; import { type Schema_File } from "~/types/schema"; import config from "config"; type Props = { data: z.infer; fileType: "unknown" | ReturnType; token: string; playlist: z.infer[]; paths: string[]; }; export default function PreviewLayout({ data, fileType, token, playlist }: Props) { const [view, setView] = useState<"markdown" | "raw">("markdown"); const PreviewComponent = useMemo(() => { switch (fileType) { case "image": return ; case "video": case "audio": return ( ); case "code": return ( ); case "markdown": case "text": return ( ); case "document": return ( ); case "pdf": return ( ); case "manga": return ; case "unknown": default: return ; } }, [fileType, data, view, token, playlist]); return (
Preview of {data.name} {["text", "markdown"].includes(fileType) && (
)}
{config.apiConfig.streamMaxSize && Number(data.size ?? 0) > config.apiConfig.streamMaxSize ? ( ) : ( <>{PreviewComponent} )} {/* */}
); }