FileNavigator.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // components/FileNavigator.js
  2. "use client";
  3. import { BsFiletypePdf } from "react-icons/bs";
  4. import { FcFolder } from "react-icons/fc";
  5. import { useRouter } from "next/navigation";
  6. export default function FileNavigator({ files, currentPath, isAdmin = false }) {
  7. const router = useRouter();
  8. const handleFolderClick = (folderName) => {
  9. const segments = currentPath.split("/").filter(Boolean);
  10. const newPath = [...segments, folderName].join("/");
  11. const basePath = isAdmin ? "/admin-view" : "/niederlassung";
  12. router.push(`${basePath}/${newPath}`);
  13. };
  14. // Extrahiere den aktuellen Ordnernamen für die dynamische Nachricht
  15. const folderName = currentPath.split("/").pop();
  16. // Unterteile die Ordner und Dateien
  17. const folders = files.filter((file) => file.type === "folder");
  18. const documents = files.filter((file) => file.type === "file");
  19. return (
  20. <div>
  21. {/* Ordner nebeneinander anzeigen */}
  22. <div className="flex flex-wrap gap-4 mb-6">
  23. {folders.map((folder) => (
  24. <div
  25. key={folder.name}
  26. className="flex items-center p-3 hover:bg-sky-100 rounded-lg cursor-pointer "
  27. onClick={() => handleFolderClick(folder.name)}
  28. >
  29. <FcFolder className="mr-2 text-3xl" />
  30. <span className="text-left text-sm text-stone-950">
  31. {folder.name}
  32. </span>
  33. </div>
  34. ))}
  35. </div>
  36. {/* Dateien untereinander anzeigen */}
  37. <ul>
  38. {documents.map((file) => (
  39. <li key={file.name} className="mb-4 flex items-center">
  40. <a
  41. href={`/api/files/${currentPath}/${file.name}`}
  42. target="_blank"
  43. rel="noopener noreferrer"
  44. className="flex items-center hover:bg-sky-100 p-3 rounded-lg cursor-pointer"
  45. >
  46. <BsFiletypePdf className="text-red-500 mr-2 text-xl" />
  47. <span className="text-left text-sm text-stone-950">
  48. {file.name}
  49. </span>
  50. </a>
  51. </li>
  52. ))}
  53. </ul>
  54. </div>
  55. );
  56. }