import React, { useState } from 'react'; import { getGravatarUrl } from '@/utils/gravatar'; // Assurez-vous que cette fonction est définie pour générer les URLs Gravatar import { getRightStr } from '@/utils/rights'; // Fonction existante pour récupérer le nom des rôles import logger from '@/utils/logger'; export default function RecipientInput({ label, recipients, setRecipients, searchRecipients, // Fonction pour effectuer la recherche establishmentId, // ID de l'établissement required = false, // Ajout de la prop required avec valeur par défaut }) { const [inputValue, setInputValue] = useState(''); const [suggestions, setSuggestions] = useState([]); const [selectedIndex, setSelectedIndex] = useState(-1); const handleInputChange = async (e) => { const value = e.target.value; setInputValue(value); if (value.trim() !== '') { try { const results = await searchRecipients(establishmentId, value); setSuggestions(results); } catch (error) { logger.error('Erreur lors de la recherche des destinataires:', error); setSuggestions([]); } } else { setSuggestions([]); } }; const handleKeyDown = (e) => { if (e.key === 'Enter') { e.preventDefault(); if (selectedIndex >= 0 && selectedIndex < suggestions.length) { handleSuggestionClick(suggestions[selectedIndex]); } else { const trimmedValue = inputValue.trim(); if (trimmedValue && !recipients.includes(trimmedValue)) { setRecipients([...recipients, trimmedValue]); setInputValue(''); setSuggestions([]); } } } else if (e.key === 'ArrowDown') { e.preventDefault(); setSelectedIndex((prevIndex) => prevIndex < suggestions.length - 1 ? prevIndex + 1 : 0 ); } else if (e.key === 'ArrowUp') { e.preventDefault(); setSelectedIndex((prevIndex) => prevIndex > 0 ? prevIndex - 1 : suggestions.length - 1 ); } }; const handleSuggestionClick = (suggestion) => { if (!recipients.includes(suggestion.email)) { setRecipients([...recipients, suggestion.email]); } setInputValue(''); setSuggestions([]); }; const handleRemoveRecipient = (email) => { setRecipients(recipients.filter((recipient) => recipient !== email)); }; return (
{recipients.map((email, index) => (
{email} {email}
))}
{suggestions.length > 0 && ( )}
); }