import { useEffect, useRef, useState } from 'react' import { createPortal } from 'react-dom' import { X } from 'lucide-react' import { useLocale } from '@meshkee/dashboard-ui' import { useT } from '../i18n/useT' import { ImageCropper } from './ImageCropper' import type { Brand, BrandFormData } from '../types/brand' import styles from './BrandModal.module.css' interface BrandModalProps { open: boolean onClose: () => void onSubmit: (data: BrandFormData) => void editingBrand?: Brand | null title?: string isSubmitting?: boolean } const ANIMATION_MS = 220 export function BrandModal({ open, onClose, onSubmit, editingBrand = null, title, isSubmitting = false, }: BrandModalProps) { const t = useT() const { locale } = useLocale() const isFa = locale === 'fa' const formRef = useRef(null) const [mounted, setMounted] = useState(open) const [closing, setClosing] = useState(false) const [nameEn, setNameEn] = useState('') const [nameFa, setNameFa] = useState('') const [about, setAbout] = useState('') const [image, setImage] = useState(null) const [imageMediaId, setImageMediaId] = useState(null) useEffect(() => { if (open) { setMounted(true) setClosing(false) setNameEn(editingBrand?.nameEn ?? '') setNameFa(editingBrand?.nameFa ?? '') setAbout(editingBrand?.about ?? '') setImage(editingBrand?.imageUrl ?? null) setImageMediaId(editingBrand?.imageMediaId ?? null) } else if (mounted) { setClosing(true) const timer = setTimeout(() => { setMounted(false) setClosing(false) }, ANIMATION_MS) return () => clearTimeout(timer) } }, [open, editingBrand, 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() onSubmit({ nameFa: nameFa.trim(), nameEn: nameEn.trim(), about: about.trim(), image, imageMediaId, }) } return createPortal(
e.stopPropagation()} role="dialog" aria-modal="true" aria-labelledby="brand-modal-title" lang={isFa ? 'fa' : 'en'} dir={isFa ? 'rtl' : 'ltr'} >

{title ?? t('brands.add')}

setNameFa(e.target.value)} disabled={isSubmitting} />
setNameEn(e.target.value)} required disabled={isSubmitting} />