import Modal from './Modal.jsx'; /** * FraisFormModal — formulaire partagé de saisie/édition d'un frais d'opération * (frais_operations, catégories gestion/distribution/autre — cf. project_frais_operation.md). * * Extrait de InvestissementDetail.jsx (Étape 5, page dédiée Frais, 02/09/26) sur le modèle de * RembFormModal.jsx : composant volontairement "bête" côté état, le parent garde la propriété * du form (state, effets de bord au changement de champ comme le chargement des comptes du * détenteur). Utilisé par InvestissementDetail.jsx (mode `locked` : investissement déjà * déterminé par le contexte, pas de sélecteur) et par la page Frais.jsx (mode complet, avec * sélecteur d'investissement). * * La catégorie "souscription" n'apparaît jamais dans le sélecteur de ce formulaire : elle est * unique par investissement et se saisit/modifie uniquement depuis l'étape "Frais" du formulaire * "Modifier l'investissement" (décision Olivier, 31/08/26) — ce composant ne gère jamais cette * catégorie, y compris depuis la page dédiée Frais. * * Props : * open, onClose — état d'ouverture * editingId — id en édition, null si création * form — { investissement_id?, montant, mode_reglement, compte_id, * date_operation, categorie, notes } * onFieldChange(key, value) — pour les champs à effets de bord (ex. investissement_id, * qui déclenche côté parent le rechargement des comptes du * détenteur ; mode_reglement, qui réinitialise compte_id) * err — message d'erreur à afficher * onSubmit — handler de soumission du formulaire * onDelete — handler de suppression (optionnel, affiche le bouton si fourni) * comptesInvestisseur — comptes du détenteur de l'investissement courant (select * "Compte de règlement" quand mode_reglement === 'compte_courant') * locked — bool : masque le sélecteur d'investissement (mode * InvestissementDetail.jsx, investissement déjà connu du contexte) * investissementOptions — liste pour le onFieldChange('investissement_id', e.target.value)}> {investissementOptions.map(i => ( ))} )}
onFieldChange('montant', e.target.value)} />
onFieldChange('date_operation', e.target.value)} />
{form.mode_reglement === 'compte_courant' && (
{comptesInvestisseur.length > 0 ? ( ) : (

Aucun compte défini pour ce détenteur. Créer un compte →

)}
)}
onFieldChange('notes', e.target.value)} placeholder="Précisions optionnelles…" />
); }