Fix fournisseur handling across catalog flows

This commit is contained in:
Matthieu
2025-12-03 11:29:11 +01:00
parent 34af59d054
commit 936a73fde3
16 changed files with 519 additions and 65 deletions

View File

@@ -1,7 +1,8 @@
import { ref } from 'vue'
import { useToast } from './useToast'
import { useApi } from './useApi'
import { buildConstructeurRequestPayload } from '~/shared/constructeurUtils'
import { buildConstructeurRequestPayload, uniqueConstructeurIds } from '~/shared/constructeurUtils'
import { useConstructeurs } from './useConstructeurs'
const composants = ref([])
const loading = ref(false)
@@ -9,13 +10,38 @@ const loading = ref(false)
export function useComposants () {
const { showSuccess, showError, showInfo } = useToast()
const { get, post, patch, delete: del } = useApi()
const { ensureConstructeurs } = useConstructeurs()
const withResolvedConstructeurs = async (composant) => {
if (!composant || typeof composant !== 'object') {
return composant
}
const ids = uniqueConstructeurIds(
composant.constructeurIds,
composant.constructeurs,
composant.constructeur,
)
const hasConstructeurs =
Array.isArray(composant.constructeurs) && composant.constructeurs.length > 0
if (ids.length && !hasConstructeurs) {
const resolved = await ensureConstructeurs(ids)
if (resolved.length) {
composant.constructeurs = resolved
composant.constructeurIds = ids
}
}
return composant
}
const loadComposants = async () => {
loading.value = true
try {
const result = await get('/composants')
if (result.success) {
composants.value = result.data
const items = Array.isArray(result.data) ? result.data : []
const enrichedItems = await Promise.all(items.map((item) => withResolvedConstructeurs(item)))
composants.value = enrichedItems
showInfo(`Chargement de ${composants.value.length} composant(s) réussi`)
}
} catch (error) {
@@ -30,7 +56,8 @@ const loadComposants = async () => {
try {
const result = await post('/composants', buildConstructeurRequestPayload(composantData))
if (result.success) {
composants.value.push(result.data)
const enriched = await withResolvedConstructeurs(result.data)
composants.value.push(enriched)
const displayName = result.data?.name
|| composantData?.definition?.name
|| composantData?.name
@@ -51,7 +78,7 @@ const loadComposants = async () => {
try {
const result = await patch(`/composants/${id}`, buildConstructeurRequestPayload(composantData))
if (result.success) {
const updated = result.data
const updated = await withResolvedConstructeurs(result.data)
const index = composants.value.findIndex(comp => comp.id === id)
if (index !== -1) {
composants.value[index] = updated