Files
Starseed/frontend/modules/catalog/composables/useStorage.ts
T
tristan e3e1f9738c feat(catalog) : M7 — écran Modification d'un stockage /admin/storages/{id}/edit (ERP-218)
- Route /admin/storages/{id}/edit, gate catalog.storages.manage, détail via useStorage (GET /api/storages/{id})
- Formulaire factorisé create/edit dans useStorageForm : prefill + bouton « Enregistrer » → PATCH /api/storages/{id} (RG-7.08)
- Mêmes champs/validations que l'ajout (RG-7.01→7.06), erreurs 422 inline par champ
- 409 doublon (site, type, numéro, exclut le courant côté back) → inline sous Numéro + toast
- Pas d'onglets (HP-M7-06) ; libellés i18n edit.* + toast.updateSuccess
- Tests Vitest useStorageForm mode édition (prefill + PATCH + 409)
2026-06-30 11:58:02 +02:00

42 lines
1.3 KiB
TypeScript

import { ref } from 'vue'
import type { Storage } from '~/modules/catalog/types/storage'
/**
* Chargement d'un stockage unique (ecran « Modification stockage », M7 — ERP-218).
* Lit le detail via `GET /api/storages/{id}` — meme structure que la ligne de liste
* (site / storageType embarques + displayName, § 4.0.bis).
*
* L'en-tete `Accept: application/ld+json` est impose pour obtenir le payload Hydra
* complet (IRI `@id` des relations, necessaires au pre-remplissage des selects).
* Etat 100 % local a l'instance (refs) — aucune persistance URL.
*/
export function useStorage(id: number | string) {
const api = useApi()
const storage = ref<Storage | null>(null)
const loading = ref(false)
const error = ref(false)
/** Charge le detail du stockage. En cas d'echec : `error = true`, `storage = null`. */
async function load(): Promise<void> {
loading.value = true
error.value = false
try {
storage.value = await api.get<Storage>(
`/storages/${id}`,
{},
{ headers: { Accept: 'application/ld+json' }, toast: false },
)
}
catch {
error.value = true
storage.value = null
}
finally {
loading.value = false
}
}
return { storage, loading, error, load }
}