feat(custom-fields) : invalide le cache de suggestions apres save

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>
This commit is contained in:
Matthieu
2026-05-11 15:09:17 +02:00
parent e6a85a9de4
commit 17ca857cc3
2 changed files with 7 additions and 0 deletions

View File

@@ -7,6 +7,7 @@
import { ref, type Ref } from 'vue' import { ref, type Ref } from 'vue'
import { useToast } from './useToast' import { useToast } from './useToast'
import { useCustomFieldNameSuggestions } from './useCustomFieldNameSuggestions'
import { humanizeError } from '~/shared/utils/errorMessages' import { humanizeError } from '~/shared/utils/errorMessages'
import { import {
listModelTypes, listModelTypes,
@@ -79,6 +80,7 @@ export function invalidateEntityTypeCache(category: ModelCategory) {
export function useEntityTypes(config: EntityTypeConfig) { export function useEntityTypes(config: EntityTypeConfig) {
const { category, label } = config const { category, label } = config
const { showSuccess, showError } = useToast() const { showSuccess, showError } = useToast()
const { invalidate: invalidateCustomFieldNames } = useCustomFieldNameSuggestions()
const state = getOrCreateState(category) const state = getOrCreateState(category)
const normalizeItem = (item: ModelType): EntityType => ({ const normalizeItem = (item: ModelType): EntityType => ({
@@ -124,6 +126,7 @@ export function useEntityTypes(config: EntityTypeConfig) {
}) })
const normalized = normalizeItem(data) const normalized = normalizeItem(data)
state.types.value.push(normalized) state.types.value.push(normalized)
invalidateCustomFieldNames()
showSuccess(`Type de ${label} "${data.name}" créé`) showSuccess(`Type de ${label} "${data.name}" créé`)
return { success: true, data: normalized } return { success: true, data: normalized }
} catch (error) { } catch (error) {
@@ -150,6 +153,7 @@ export function useEntityTypes(config: EntityTypeConfig) {
const normalized = normalizeItem(data) const normalized = normalizeItem(data)
const index = state.types.value.findIndex((t) => t.id === id) const index = state.types.value.findIndex((t) => t.id === id)
if (index !== -1) state.types.value[index] = normalized if (index !== -1) state.types.value[index] = normalized
invalidateCustomFieldNames()
showSuccess(`Type de ${label} "${data.name}" mis à jour`) showSuccess(`Type de ${label} "${data.name}" mis à jour`)
return { success: true, data: normalized } return { success: true, data: normalized }
} catch (error) { } catch (error) {

View File

@@ -1,5 +1,6 @@
import { reactive, ref } from 'vue' import { reactive, ref } from 'vue'
import { useApi } from '~/composables/useApi' import { useApi } from '~/composables/useApi'
import { useCustomFieldNameSuggestions } from '~/composables/useCustomFieldNameSuggestions'
import { useToast } from '~/composables/useToast' import { useToast } from '~/composables/useToast'
// --- Types --- // --- Types ---
@@ -88,6 +89,7 @@ const parseOptions = (optionsText: string): string[] =>
export function useMachineCustomFieldDefs(deps: Deps) { export function useMachineCustomFieldDefs(deps: Deps) {
const { apiCall } = useApi() const { apiCall } = useApi()
const { showSuccess, showError } = useToast() const { showSuccess, showError } = useToast()
const { invalidate: invalidateCustomFieldNames } = useCustomFieldNameSuggestions()
// --- State --- // --- State ---
@@ -294,6 +296,7 @@ export function useMachineCustomFieldDefs(deps: Deps) {
} }
showSuccess('Champs personnalisés sauvegardés avec succès') showSuccess('Champs personnalisés sauvegardés avec succès')
invalidateCustomFieldNames()
await deps.onSaved() await deps.onSaved()
} catch { } catch {
showError('Erreur inattendue lors de la sauvegarde des champs personnalisés') showError('Erreur inattendue lors de la sauvegarde des champs personnalisés')