64c3b9b6ec
Écran de modification (ajout pré-rempli, bouton « Enregistrer ») et pose des
onglets Fournisseurs/Clients en placeholder « en cours de développement ».
- route /admin/products/{id}/edit : useProduct(id) charge le détail, prefill du formulaire principal
- RG-6.08 : useProductForm en mode édition → PATCH /products/{id} (merge-patch), bouton « Enregistrer »
- unicité du code re-validée serveur en édition (409 doublon mappé inline)
- onglets Fournisseurs + Clients : ComingSoonPlaceholder, aucun appel API ni champ (HP-M6-01 / RG-6.10)
- mêmes onglets placeholder posés sur l'écran Ajouter (cohérence)
- i18n admin.products.edit / tab ; 11 tests Vitest (prefill + PATCH + placeholder)
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import { ref } from 'vue'
|
|
import type { Product } from '~/modules/catalog/types/product'
|
|
|
|
/**
|
|
* Chargement d'un produit unique (ecran « Modification produit », M6 — ERP-206).
|
|
* Lit le detail via `GET /api/products/{id}` — meme structure que la ligne de
|
|
* liste (category / sites / storageTypes embarques, § 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 useProduct(id: number | string) {
|
|
const api = useApi()
|
|
|
|
const product = ref<Product | null>(null)
|
|
const loading = ref(false)
|
|
const error = ref(false)
|
|
|
|
/** Charge le detail du produit. En cas d'echec : `error = true`, `product = null`. */
|
|
async function load(): Promise<void> {
|
|
loading.value = true
|
|
error.value = false
|
|
try {
|
|
product.value = await api.get<Product>(
|
|
`/products/${id}`,
|
|
{},
|
|
{ headers: { Accept: 'application/ld+json' }, toast: false },
|
|
)
|
|
}
|
|
catch {
|
|
error.value = true
|
|
product.value = null
|
|
}
|
|
finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
return { product, loading, error, load }
|
|
}
|