"use client"; import { useState } from "react"; import Image from "next/image"; import { Plus } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@/components/ui/pagination"; import { PhotoDialog } from "@/components/photo-dialog"; import useFileUpload from "@/hooks/use-file-upload"; import useMedia from "@/hooks/use-media"; import Media from "@/interfaces/Media"; import useApiMutation from "@/hooks/use-api"; import request from "@/lib/request"; export default function PhotoGallery() { const { data, error: mediaError, isLoading, success, setPage, setLimit, mutate, } = useMedia(); console.log(data); const [selectedPhoto, setSelectedPhoto] = useState(null); const [isAddDialogOpen, setIsAddDialogOpen] = useState(false); const { progress, isUploading, error, uploadFile, cancelUpload } = useFileUpload(); const handleAddPhoto = (newPhoto: Omit, file: File) => { uploadFile(file, "/media/upload", (response) => { mutate(); }); }; const handleUpdatePhoto = (updatedPhoto: Omit) => { if (selectedPhoto) { } setSelectedPhoto(null); }; const handleDeletePhoto = async (id: Media["id"]) => { try { const res = await request(`/media/${id}/delete`, { method: "DELETE", requiresAuth: true, }); if (res.status === "Success") mutate(); } catch (e) { console.log(e); } setSelectedPhoto(null); }; return (

Gallerie Photo

{data?.items.map((photo) => (
setSelectedPhoto(photo)} > {photo.alt}
))}
{ e.preventDefault(); setPage((prev) => Math.max(prev - 1, 1)); }} className={ data?.page === 1 ? "pointer-events-none opacity-50" : "" } /> {[...Array(data?.totalPages)].map((_, i) => ( { e.preventDefault(); setPage(i + 1); }} isActive={data?.page === i + 1} > {i + 1} ))} { e.preventDefault(); setPage((prev) => Math.min(prev + 1, data?.totalPages ?? 1), ); }} className={ data?.page === data?.totalPages ? "pointer-events-none opacity-50" : "" } /> setSelectedPhoto((p) => (isUploading ? p : null)) } onDelete={handleDeletePhoto} onSave={handleUpdatePhoto} /> setIsAddDialogOpen(false)} onSave={handleAddPhoto} />
); }