import { useState, useMemo } from 'react' import './CreateMyTreeButton.css' import PzBusy from './PzBusy.jsx' import { t } from '../i18n/index.js' function normalizeSlug(input) { return input .toLowerCase() .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') .replace(/[^a-z0-9]+/g, '-') .replace(/^-+|-+$/g, '') } const CreateMyTreeButton = ({ onCreateTree, loading }) => { const [open, setOpen] = useState(false) const [name, setName] = useState('') const [error, setError] = useState('') const slug = useMemo(() => normalizeSlug(name.trim()), [name]) const canSubmit = name.trim().length >= 2 && slug.length >= 3 && !loading const handleOpen = () => { setError('') setOpen(true) } const handleClose = () => { setOpen(false) setName('') setError('') } const handleSubmit = async (e) => { e.preventDefault() if (!canSubmit) return setError('') const result = await onCreateTree(name.trim()) if (result !== null && result !== undefined) { setError(typeof result === 'string' ? result : t('Erreur lors de la création. Essayez un autre nom.')) } } return ( <> {!open && ( )} {open && (
{t('Créer votre arbre dès maintenant')}
setName(e.target.value)} placeholder={t('Ex : Famille Martin')} required /> {slug && (
{t('Adresse :')} {slug}
)} {error &&
{error}
}
)} ) } export default CreateMyTreeButton