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 styles from './CategoryModal.module.css' export interface StoreSpecialModalValues { key: string title: string } interface StoreSpecialModalProps { open: boolean onClose: () => void onSubmit: (values: StoreSpecialModalValues) => void initialKey?: string initialTitle?: string title?: string submitLabel?: string isSubmitting?: boolean } const ANIMATION_MS = 220 const KEY_PATTERN = /^[a-zA-Z][a-zA-Z0-9_-]*$/ export function StoreSpecialModal({ open, onClose, onSubmit, initialKey = '', initialTitle = '', title, submitLabel, isSubmitting = false, }: StoreSpecialModalProps) { 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 [groupKey, setGroupKey] = useState(initialKey) const [groupTitle, setGroupTitle] = useState(initialTitle) useEffect(() => { if (open) { setMounted(true) setClosing(false) setGroupKey(initialKey) setGroupTitle(initialTitle) } else if (mounted) { setClosing(true) const timer = setTimeout(() => { setMounted(false) setClosing(false) }, ANIMATION_MS) return () => clearTimeout(timer) } }, [open, initialKey, initialTitle, 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 const trimmedKey = groupKey.trim() const trimmedTitle = groupTitle.trim() const keyValid = KEY_PATTERN.test(trimmedKey) const canSubmit = keyValid && trimmedTitle.length > 0 function handleSubmit(e: React.FormEvent) { e.preventDefault() if (!canSubmit) return onSubmit({ key: trimmedKey, title: trimmedTitle }) } return createPortal(
e.target === e.currentTarget && onClose()} role="presentation" >

{title ?? t('website.specialItems.createTitle')}

setGroupKey(e.target.value)} placeholder={t('website.groupKeyPlaceholder')} autoFocus disabled={isSubmitting} dir="ltr" autoComplete="off" spellCheck={false} />

{t('website.groupKeyHint')}

setGroupTitle(e.target.value)} placeholder={t('website.groupValuePlaceholder')} disabled={isSubmitting} dir={isFa ? 'rtl' : 'ltr'} />
, document.body, ) }