import { notFound } from "next/navigation"; import { FilePreview } from "~/app/_components/FilePreview"; import { HomeButton } from "~/app/_components/HomeButton"; // Import the client component import { Toaster } from "react-hot-toast"; import { FileActionsContainer, FileDescriptionContainer, } from "~/app/_components/ActionButtons"; // Import the client component import type { Metadata } from "next"; import { checkOwner } from "~/utils/checkOwner"; // Import the client component import { auth } from "~/server/auth"; interface FileDetails { name: string; size: number; owner: string; ownerId: string; ownerAvatar: string | null; uploadDate: string; id: string; isOwner: boolean; type: string; url: string; description: string; isPublic: boolean; } export async function generateMetadata({ searchParams, }: { searchParams: Promise<{ id?: string }>; }): Promise { const resolvedSearchParams = await searchParams; // Resolve the promise const fileId = resolvedSearchParams.id; if (!fileId) { return { title: "File Not Found", description: "The file you are looking for does not exist.", }; } const fileDetails = await fetchFileDetails(fileId); if (!fileDetails) { return { title: "File Not Found", description: "The file you are looking for does not exist.", }; } return { title: fileDetails.name, description: fileDetails.description || fileDetails.name, openGraph: { title: fileDetails.name, description: fileDetails.description || fileDetails.name, url: `${process.env.NEXT_PUBLIC_PAGE_URL}/share?id=${fileDetails.id}`, images: [ { url: `${process.env.NEXT_PUBLIC_PAGE_URL}/api/files/serv?id=${fileDetails.id}`, alt: `${fileDetails.name} preview`, }, ], }, }; } async function fetchFileDetails(fileId: string): Promise { try { const response = await fetch( `${process.env.NEXT_PUBLIC_PAGE_URL}/api/files/share?id=${encodeURIComponent( fileId, )}`, { cache: "no-store" }, ); if (!response.ok) { return null; } return response.json(); } catch (err) { console.error("Failed to fetch file details:", err); return null; } } export default async function FilePreviewContainer({ searchParams, }: { searchParams: Promise<{ id?: string }>; }) { const resolvedSearchParams = await searchParams; // Resolve the promise const fileId = resolvedSearchParams.id; if (!fileId) { notFound(); } const fileDetails = await fetchFileDetails(fileId); const session = await auth(); if (!fileDetails) { return (

No File Found

); } return (

File Details

{fileDetails.type !== "unknown" && ( )}

Name: {fileDetails.name}

Size:{" "} {fileDetails.size > 1024 * 1024 * 1024 ? (fileDetails.size / (1024 * 1024 * 1024)).toFixed(2) + " GB" : fileDetails.size > 1024 * 1024 ? (fileDetails.size / (1024 * 1024)).toFixed(2) + " MB" : fileDetails.size > 1024 ? (fileDetails.size / 1024).toFixed(2) + " KB" : fileDetails.size + " Bytes"}

Owner:{" "} Owner avatar{" "} {fileDetails.owner}

Upload Date:{" "} {new Date(fileDetails.uploadDate).toLocaleString()}

Description:{" "}
); }