import React, { useState, useEffect } from "react"; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, Table, TableBody, TableCell, TableContainer, TableRow, IconButton, Paper, Box, CircularProgress } from "@mui/material"; import ContentCopyIcon from "@mui/icons-material/ContentCopy"; import CloseIcon from "@mui/icons-material/Close"; import DeleteIcon from "@mui/icons-material/Delete"; import { Images } from "../../Types/Images"; import ApiService from '../../services/ApiService'; import { ENV_VARIABLES } from '../../constants'; type Props = { galleryOpen: boolean; setDialogOpen: React.Dispatch>; setImageLinks: React.Dispatch>; }; const ImageDialog: React.FC = ({ galleryOpen, setDialogOpen, setImageLinks }) => { const [copiedId, setCopiedId] = useState(null); const [images, setImages] = useState([]); const [totalImg, setTotalImg] = useState(0); const [imgPage, setImgPage] = useState(1); const [imgLimit] = useState(3); const [loading, setLoading] = useState(false); const [deleteConfirm, setDeleteConfirm] = useState<{ id: string | null; linked: boolean }>({ id: null, linked: false }); const fetchImages = async (page: number, limit: number) => { const data = await ApiService.getImages(page, limit); setImages(data.images); setTotalImg(data.total); }; useEffect(() => { fetchImages(imgPage, imgLimit); }, [imgPage]); const onCopy = (id: string) => { const escLink = `${ENV_VARIABLES.IMG_URL}/api/image/get/${id}`; setCopiedId(id); setImageLinks(prevLinks => [...prevLinks, escLink]); }; const handleDelete = async (id: string) => { setLoading(true); const isDeleted = await ApiService.deleteImage(id); setLoading(false); if (!isDeleted) { setDeleteConfirm({ id, linked: true }); } else { setImages(images.filter(image => image.id !== id)); setDeleteConfirm({ id: null, linked: false }); } }; const confirmDelete = async () => { if (deleteConfirm.id) { setLoading(true); await ApiService.deleteImage(deleteConfirm.id); setImages(images.filter(image => image.id !== deleteConfirm.id)); setDeleteConfirm({ id: null, linked: false }); setLoading(false); } }; const handleNextPage = () => { if ((imgPage * imgLimit) < totalImg) { setImgPage(prev => prev + 1); } }; const handlePrevPage = () => { if (imgPage > 1) { setImgPage(prev => prev - 1); } }; return ( setDialogOpen(false)} maxWidth="xl"> Images disponibles setDialogOpen(false)} style={{ position: "absolute", right: 8, top: 8 }} > {loading ? ( ) : ( {images.map((obj: Images) => ( {`Image {obj.file_name} {obj.id} onCopy(obj.id)} size="small" data-testid={`copy-button-${obj.id}`}> handleDelete(obj.id)} size="small" color="primary" data-testid={`delete-button-${obj.id}`}> {copiedId === obj.id && Copié!} ))}
)}
{deleteConfirm.linked && ( setDeleteConfirm({ id: null, linked: false })}> Confirmer la suppression Cette image est liée à d'autres objets. Êtes-vous sûr de vouloir la supprimer ? )}
); }; export default ImageDialog;