import { useEffect, useRef, useState } from 'react' import { createPortal } from 'react-dom' import { X } from 'lucide-react' import { ImageCropper } from './ImageCropper' import { useT } from '../i18n/useT' import modalStyles from './CategoryModal.module.css' import styles from './AddWebsiteSliderSlideModal.module.css' export interface WebsiteSliderSlideFormData { image: string | null title: string linkUrl: string } interface AddWebsiteSliderSlideModalProps { open: boolean onClose: () => void onSubmit: (data: WebsiteSliderSlideFormData) => void isSubmitting?: boolean } const ANIMATION_MS = 220 export function AddWebsiteSliderSlideModal({ open, onClose, onSubmit, isSubmitting = false, }: AddWebsiteSliderSlideModalProps) { const t = useT() const formRef = useRef(null) const [mounted, setMounted] = useState(open) const [closing, setClosing] = useState(false) const [image, setImage] = useState(null) const [title, setTitle] = useState('') const [linkUrl, setLinkUrl] = useState('') useEffect(() => { if (open) { setMounted(true) setClosing(false) setImage(null) setTitle('') setLinkUrl('') } else if (mounted) { setClosing(true) const timer = setTimeout(() => { setMounted(false) setClosing(false) }, ANIMATION_MS) return () => clearTimeout(timer) } }, [open, mounted]) useEffect(() => { if (!mounted || closing) return const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose() } document.addEventListener('keydown', onKey) return () => document.removeEventListener('keydown', onKey) }, [mounted, closing, onClose]) if (!mounted) return null function handleSubmit(e: React.FormEvent) { e.preventDefault() if (!image) return onSubmit({ image, title: title.trim(), linkUrl: linkUrl.trim(), }) } return createPortal(
e.target === e.currentTarget && onClose()} role="presentation" >

{t('website.sliders.modal.title')}

setTitle(e.target.value)} disabled={isSubmitting} />
setLinkUrl(e.target.value)} disabled={isSubmitting} />
, document.body, ) }