Sur les pages d'edition de categorie composant/piece, ajoute un
loadCategory() apres updateModelType + syncExecute pour que la formule
mise a jour par propagateCustomFieldRename soit refletee dans le form
sans avoir a recharger la page.
La regex \w+ ne capturait pas les caracteres accentues (ex. {Diametre}
avec 'è'), le placeholder restait litteral dans la reference auto.
Remplace par [^}]+ avec le flag u/gu cote PHP et JS pour matcher
n'importe quel caractere entre les accolades.
useApi() prepend deja apiBaseUrl (= /api), donc l'appel doit etre
/custom-fields/names et non /api/custom-fields/names (sinon 404 sur
/api/api/custom-fields/names).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Apres chaque save reussi de champs perso (machine via
useMachineCustomFieldDefs, ModelType via useEntityTypes), on invalide
le cache useCustomFieldNameSuggestions pour que les noms nouvellement
crees apparaissent dans les futures autocomplete.
Note : le plan mentionnait ModelTypeForm.vue, mais le save reel se
fait dans useEntityTypes (le composant ne fait qu'emit 'submit').
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Encapsule SearchSelect en mode creatable, branche useCustomFieldName-
Suggestions, charge la liste au focus. Permet de remplacer un simple
<input v-model='field.name'> par <CustomFieldNameInput v-model='field.name'>
dans les editeurs de champs perso.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Cache module-level partage entre toutes les instances. Lazy load au
premier appel a load(). invalidate() permet de forcer un refresh apres
creation/modification d'un champ perso.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
En mode creatable=true, le composant emit le texte tape en temps reel
et ne reset plus au blur. Une ligne 'Creer XYZ' apparait quand le texte
ne matche aucune option. Mode strict (defaut) inchange. Le composant
emit aussi 'focus' pour permettre au parent de charger les donnees au
premier focus.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Retourne la liste plate des noms de champs perso distincts (table
custom_fields), pour alimenter une autocompletion cote frontend.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
L'investigation initiale supposait des customFields JSON dans les
skeleton_*_requirements ; en realite SkeletonStructureService traduit
les customFields du payload ModelType en entites CustomField stockees
dans la table custom_fields. Le SQL est donc un simple SELECT DISTINCT.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Spec validee : endpoint backend qui agrege les noms existants (table
custom_fields + JSON dans skeleton requirements), composant
CustomFieldNameInput qui wrap SearchSelect en mode creatable, cache
module-level partage entre toutes les instances, invalidation apres save.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>