// object_form.js — ajoute/retire des lignes de champ dans le formulaire de // définition d'objet, bascule l'affichage du sélecteur "objet lié" // uniquement quand le type choisi est "relation", et l'affichage des // bornes mini/maxi (2.2 — bornage automatique) uniquement pour un champ // numérique. const fieldsList = document.getElementById('fieldsList'); const template = document.getElementById('fieldRowTemplate'); const btnAddField = document.getElementById('btnAddField'); const NUMERIC_FIELD_TYPES = ['nombre_entier', 'nombre_decimal']; function wireRow(row) { const typeSelect = row.querySelector('.fieldTypeSelect'); const relationWrap = row.querySelector('.relationTarget'); const boundsWrap = row.querySelector('.boundsTarget'); function syncFieldTypeVisibility() { relationWrap.style.display = typeSelect.value === 'relation' ? 'block' : 'none'; if (boundsWrap) boundsWrap.style.display = NUMERIC_FIELD_TYPES.includes(typeSelect.value) ? 'flex' : 'none'; } typeSelect.addEventListener('change', syncFieldTypeVisibility); syncFieldTypeVisibility(); row.querySelector('.btnRemoveField').addEventListener('click', () => { row.remove(); }); } function addFieldRow() { const clone = template.content.cloneNode(true); const row = clone.querySelector('.fieldRowCard'); fieldsList.appendChild(clone); wireRow(fieldsList.lastElementChild); } btnAddField.addEventListener('click', addFieldRow); // Toujours démarrer avec un premier champ prêt à remplir. addFieldRow();