page.tsx 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. "use client";
  2. import Image from "next/image";
  3. import Link from "next/link";
  4. import { UploadForm } from "../components/uploadForm";
  5. import { FilesTable } from "../components/filesTable";
  6. import { useState } from "react";
  7. interface FileData {
  8. id: string;
  9. filename: string;
  10. mimetype: string;
  11. size: number;
  12. createdAt: string;
  13. updatedAt: string;
  14. }
  15. export default function FilesPage() {
  16. const [, setNewFile] = useState<FileData | null>(null);
  17. const handleFileUploaded = (file: FileData) => {
  18. // This will trigger the FilesTable to add the new file
  19. setNewFile(file);
  20. };
  21. return (
  22. <div className="grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20 font-[family-name:var(--font-geist-sans)]">
  23. <main className="flex flex-col gap-8 row-start-2 items-center sm:items-start">
  24. <h1 className="text-3xl font-bold text-center sm:text-left">
  25. File Management
  26. </h1>
  27. <p className="text-sm text-center sm:text-left max-w-[600px]">
  28. Upload and manage your media files here. Select files to upload them to the server.
  29. </p>
  30. <div className="flex flex-col gap-4 items-center sm:items-start">
  31. <h2 className="text-xl font-semibold">Upload Files</h2>
  32. <UploadForm onFileUploaded={handleFileUploaded} />
  33. </div>
  34. <div className="w-full max-w-6xl">
  35. <h2 className="text-2xl font-semibold mb-4">Files in Database</h2>
  36. <FilesTable onFileAdded={handleFileUploaded} />
  37. </div>
  38. <div className="flex gap-4 items-center flex-col sm:flex-row">
  39. <Link
  40. className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5"
  41. href="/"
  42. >
  43. Back to Home
  44. </Link>
  45. <Link
  46. className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5"
  47. href="/api-docs"
  48. >
  49. API Documentation
  50. </Link>
  51. </div>
  52. </main>
  53. </div>
  54. );
  55. }