"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import type IShortcode from "@/interfaces/IShortcode"; import Image from "next/image"; import Media from "@/interfaces/Media"; import { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "./ui/pagination"; import useMedia from "@/hooks/use-media"; import { Loader2 } from "lucide-react"; interface ShortcodeDialogProps { onSave: (shortcode: IShortcode) => void; open: boolean; setOpen: () => void; shortcode?: IShortcode; } export default function ShortcodeDialog({ onSave, open, setOpen, shortcode, }: ShortcodeDialogProps) { const [_shortcode, setShortcode] = useState( shortcode ?? { code: "", type: "", id: 0 }, ); const handleSave = () => { if (!(_shortcode?.code && (_shortcode.media_id || _shortcode.value))) return; onSave(_shortcode); setOpen(); resetForm(); }; const resetForm = () => { setShortcode({ code: "", type: "", id: 0 }); }; return ( Ajouter un nouveau shortcode Créer un nouveau shortcode ici. Cliquez enregistrer quand vous avez fini.
setShortcode((p) => ({ ...p, code: e.target.value, })) } className="col-span-3" />
setShortcode((p) => ({ ...p, type: v })) } className="w-full" > Valeur Media
setShortcode((p) => ({ ...p, value: e.target.value, media_id: undefined, })) } className="col-span-3" />
{ setShortcode((p) => ({ ...p, media_id: photo.id, value: undefined, })); }} />
); } const LazyImage = ({ photo, onClick, isSelected, }: { photo: Media; onClick: () => void; isSelected: boolean; }) => { return (
{photo.alt}
); }; const PhotoGrid: React.FC<{ onSelect: (photo: Media) => void }> = ({ onSelect, }) => { const { data, error, isLoading, success, setPage, setLimit, mutate } = useMedia(5); const [selectedPhoto, setSelectedPhoto] = useState(null); const handlePhotoClick = (photo: Media) => { setSelectedPhoto(photo); onSelect(photo); }; const handleChangeSelection = () => { setSelectedPhoto(null); // if (!photos) return; // const currentIndex = photos.findIndex( // (photo) => photo.id === selectedPhoto?.id, // ); // const nextIndex = (currentIndex + 1) % photos.length; // setSelectedPhoto(photos[nextIndex]); }; if (isLoading) return ; return (

Gallerie Photo

{selectedPhoto ? (
{selectedPhoto.alt}
) : ( <>
{data?.items?.map((photo) => { return ( handlePhotoClick(photo)} isSelected={false} /> ); })}
{ 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" : "" } /> )}
); };