import React, { useState, useEffect } from "react"; interface ImageZoomModalProps { isOpen: boolean; onClose: () => void; imageUrl: string; productName: string; } /** * ImageZoomModal Component * Modal para exibir zoom de imagem de produto * Layout baseado no ConfirmDialog */ const ImageZoomModal: React.FC = ({ isOpen, onClose, imageUrl, productName, }) => { const [isAnimating, setIsAnimating] = useState(false); const [shouldRender, setShouldRender] = useState(false); const [imageError, setImageError] = useState(false); useEffect(() => { if (isOpen) { setShouldRender(true); setImageError(false); // Pequeno delay para garantir que o DOM está pronto antes de iniciar a animação setTimeout(() => setIsAnimating(true), 10); } else { // Iniciar animação de saída setIsAnimating(false); // Remover do DOM após a animação terminar const timer = setTimeout(() => setShouldRender(false), 300); return () => clearTimeout(timer); } }, [isOpen]); // Não renderizar se não deve estar visível if (!shouldRender) return null; const handleClose = () => { setIsAnimating(false); setTimeout(() => { onClose(); }, 300); }; return (
{/* Overlay */}
{/* Modal */}
{/* Header */}

Visualização da Imagem

{productName}

{/* Content - Imagem */}
{imageUrl && !imageError ? (
{productName} { setImageError(true); }} />
) : (

Imagem não disponível

)}
{/* Actions */}
); }; export default ImageZoomModal;