import { Plus, Trash2, Edit3, Check, X, BookOpen } from 'lucide-react'; import { useState } from 'react'; import Table from '@/components/Table'; import Popup from '@/components/Popup'; import InputTextWithColorIcon from '@/components/InputTextWithColorIcon'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; import SpecialityItem from '@/components/Structure/Configuration/SpecialityItem'; const SpecialitiesSection = ({ specialities, setSpecialities, handleCreate, handleEdit, handleDelete }) => { const [newSpeciality, setNewSpeciality] = useState(null); const [editingSpeciality, setEditingSpeciality] = useState(null); const [formData, setFormData] = useState({}); const [localErrors, setLocalErrors] = useState({}); const [popupVisible, setPopupVisible] = useState(false); const [popupMessage, setPopupMessage] = useState(""); const [removePopupVisible, setRemovePopupVisible] = useState(false); const [removePopupMessage, setRemovePopupMessage] = useState(""); const [removePopupOnConfirm, setRemovePopupOnConfirm] = useState(() => {}); // Récupération des messages d'erreur const getError = (field) => { return localErrors?.[field]?.[0]; }; const handleAddSpeciality = () => { setNewSpeciality({ id: Date.now(), name: '', color_code: '' }); }; const handleRemoveSpeciality = (id) => { return handleDelete(id) .then(() => { setSpecialities(prevSpecialities => prevSpecialities.filter(speciality => speciality.id !== id)); }) .catch(error => { console.error(error); }); }; const handleSaveNewSpeciality = () => { if ( newSpeciality.name) { handleCreate(newSpeciality) .then((createdSpeciality) => { setSpecialities([createdSpeciality, ...specialities]); setNewSpeciality(null); setLocalErrors({}); }) .catch((error) => { console.error('Error:', error.message); if (error.details) { console.error('Form errors:', error.details); setLocalErrors(error.details); } }); } else { setPopupMessage("Tous les champs doivent être remplis et valides"); setPopupVisible(true); } }; const handleUpdateSpeciality = (id, updatedSpeciality) => { if ( updatedSpeciality.name) { handleEdit(id, updatedSpeciality) .then((updatedSpeciality) => { setSpecialities(specialities.map(speciality => speciality.id === id ? updatedSpeciality : speciality)); setEditingSpeciality(null); setLocalErrors({}); }) .catch((error) => { console.error('Error:', error.message); if (error.details) { console.error('Form errors:', error.details); setLocalErrors(error.details); } }); } else { setPopupMessage("Tous les champs doivent être remplis et valides"); setPopupVisible(true); } }; const handleChange = (e) => { const { name, value } = e.target; let parsedValue = value; if (name.includes('_color')) { parsedValue = value; } const fieldName = name.includes('_color') ? 'color_code' : name; if (editingSpeciality) { setFormData((prevData) => ({ ...prevData, [fieldName]: parsedValue, })); } else if (newSpeciality) { setNewSpeciality((prevData) => ({ ...prevData, [fieldName]: parsedValue, })); } }; const renderSpecialityCell = (speciality, column) => { const isEditing = editingSpeciality === speciality.id; const isCreating = newSpeciality && newSpeciality.id === speciality.id; const currentData = isEditing ? formData : newSpeciality; if (isEditing || isCreating) { switch (column) { case 'LIBELLE': return ( ); case 'ACTIONS': return (
); default: return null; } } else { switch (column) { case 'LIBELLE': return ( ); case 'MISE A JOUR': return speciality.updated_date_formatted; case 'ACTIONS': return (
); default: return null; } } }; const columns = [ { name: 'LIBELLE', label: 'Libellé' }, { name: 'MISE A JOUR', label: 'Date mise à jour' }, { name: 'ACTIONS', label: 'Actions' } ]; return (

Spécialités

setPopupVisible(false)} onCancel={() => setPopupVisible(false)} uniqueConfirmButton={true} /> setRemovePopupVisible(false)} /> ); }; export default SpecialitiesSection;