/** * ========================================================================= * PLATEFORME ECO-PANNEAU.FR - VERSION 1.0.0 * Socle Éditeur (Entités) - Modale d'édition Intervenants/Lots/Entreprises * ========================================================================= */ window.pano_EntityEditorModal = ({ editingEntity, setEditingEntity, saveEditedEntity, showToast, clientUid, panneauId }) => { const { useState } = React; const isIntervenant = editingEntity.location.type === 'intervenant'; const isLot = editingEntity.location.type === 'lot'; const ConfirmModal = window.pano_ConfirmModal || (() => null); const Button = window.pano_Button || (() => null); const Modal = window.pano_Modal || (() => null); const { SearchIcon, UploadCloudIcon, Trash2Icon } = window.pano_getIcons(); const predefinedRoles = ["Architecte", "Maître d'œuvre", "Bureau d'études", "Bureau de contrôle", "CSPS"]; const isCustomRole = editingEntity.data.role && !predefinedRoles.includes(editingEntity.data.role); const [roleType, setRoleType] = useState(isCustomRole ? "Personnalisé" : (editingEntity.data.role || "")); // Capture de l'état initial pour détecter s'il y a eu des modifications (Alerte "unsaved") const [initialData] = useState(JSON.stringify(editingEntity.data)); const isDirty = JSON.stringify(editingEntity.data) !== initialData; const handleSiretLookup = async () => { const siret = editingEntity.data.siret; if (!siret || siret.length < 9) { window.pano_showToast("Veuillez saisir un SIREN (9) ou SIRET (14) valide.", "error"); return; } const payload = { siret }; if (window.CURRENT_DELEGATE_TOKEN) { payload.delegate_token = window.CURRENT_DELEGATE_TOKEN; } const d = await window.pano_apiFetch('systeme/siret_lookup', { body: payload, successMessage: "Informations récupérées avec succès." }); if (d) { setEditingEntity({ ...editingEntity, data: { ...editingEntity.data, name: d.data.name || editingEntity.data.address, address: d.data.address || editingEntity.data.address, siret: d.data.siret || editingEntity.data.siret } }); } }; const handleEntityLogoUpload = async (e) => { const file = e.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = async (event) => { const base64Url = event.target.result; setEditingEntity(prev => ({ ...prev, data: { ...prev.data, logoUrl: base64Url } })); try { const fileId = await window.pano_uploadFile(file, 'image', null, false, false, clientUid, panneauId); setEditingEntity(prev => ({ ...prev, data: { ...prev.data, logoId: fileId } })); } catch (err) { window.pano_showToast(err, "error"); setEditingEntity(prev => ({ ...prev, data: { ...prev.data, logoUrl: '' } })); } }; reader.readAsDataURL(file); }; return ( setEditingEntity(null)} requireConfirm={isDirty} zIndex="z-[250]">
{ e.preventDefault(); saveEditedEntity(); }} className="space-y-4"> {!isLot && (
setEditingEntity({...editingEntity, data: {...editingEntity.data, siret: e.target.value.replace(/\s/g, '')}})} placeholder="Saisir SIRET pour auto-remplir" className="flex-1 border-2 border-slate-200 rounded-xl p-3 focus:border-emerald-500 outline-none transition font-bold" maxLength={14} />
)}
setEditingEntity({...editingEntity, data: {...editingEntity.data, name: e.target.value}})} className="w-full border-2 border-slate-200 rounded-xl p-3 focus:border-emerald-500 outline-none transition font-bold" required autoFocus />
{isIntervenant && (
{roleType === 'Personnalisé' && ( setEditingEntity({...editingEntity, data: {...editingEntity.data, role: e.target.value}})} placeholder="Précisez la fonction" className="w-full border-2 border-emerald-200 rounded-xl p-3 mt-2 focus:border-emerald-500 outline-none transition font-bold bg-emerald-50" required /> )}
)} {!isLot && (
Coordonnées (optionnel)
setEditingEntity({...editingEntity, data: {...editingEntity.data, address: e.target.value}})} className="w-full border border-slate-200 rounded-lg p-2.5 text-sm focus:border-emerald-500 outline-none transition font-medium" />
setEditingEntity({...editingEntity, data: {...editingEntity.data, phone: e.target.value}})} className="w-full border border-slate-200 rounded-lg p-2.5 text-sm focus:border-emerald-500 outline-none transition font-medium" />
setEditingEntity({...editingEntity, data: {...editingEntity.data, email: e.target.value}})} className="w-full border border-slate-200 rounded-lg p-2.5 text-sm focus:border-emerald-500 outline-none transition font-medium" />
setEditingEntity({...editingEntity, data: {...editingEntity.data, website: e.target.value}})} placeholder="https://" className="w-full border border-slate-200 rounded-lg p-2.5 text-sm focus:border-emerald-500 outline-none transition font-medium" />
{(editingEntity.data.logoUrl || editingEntity.data.logoId) && (
)}
)}
); }; /* EOF ========== [_react/_socle_editeur_entite.jsx] */