mirror of
https://github.com/siop-spelev/siop2.git
synced 2026-08-08 20:51:53 +00:00
feat(r6): R6.3 — Ressources sur mobile (Stock, Tiers, Fichiers)
api/ressources.ts (usePartners, useParts/usePart, useCreatePurchaseOrder, useDocuments). Écran Stock (sous-seuil en tête) + fiche pièce + "Commander" pré-rempli en une ligne (fournisseur figé, quantité = manquant jusqu'au seuil, prix = dernier connu — BC multi-lignes détaillé réservé au web, D4). Tiers en lecture seule (création/édition réservées au web). Fichiers en métadonnées seules — l'ouverture demande expo-sharing (dépendance native absente, donc un nouveau build natif) : différée explicitement plutôt qu'ajoutée à la légère au milieu de cette passe. Menu : Stock & achats / Tiers / Fichiers routent réellement. Typecheck propre, 17 tests Jest, lint 5/5 paquets. Contrat non touché, toutes les opérations utilisées existaient déjà depuis R3. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
47
apps/mobile/src/api/ressources.ts
Normal file
47
apps/mobile/src/api/ressources.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||||
import type { PurchaseOrderCreate } from '@siop/shared';
|
||||
import { api, unwrap } from './client';
|
||||
|
||||
/** Hooks R6.3 — Ressources (Stock, Tiers, Fichiers) : mêmes opérations que
|
||||
* le web (gestion.ts), périmètre mobile plus étroit (D4 — consultation +
|
||||
* action courante « commander », pas les flux de gestion les plus denses :
|
||||
* pas de création/édition de pièce ou de tiers sur mobile pour l'instant). */
|
||||
|
||||
export function usePartners() {
|
||||
return useQuery({
|
||||
queryKey: ['partners'],
|
||||
queryFn: async () => (await unwrap(await api.GET('/partners'))).partners,
|
||||
});
|
||||
}
|
||||
|
||||
export function useParts() {
|
||||
return useQuery({
|
||||
queryKey: ['parts'],
|
||||
queryFn: async () => (await unwrap(await api.GET('/parts'))).parts,
|
||||
});
|
||||
}
|
||||
|
||||
export function usePart(id: string) {
|
||||
return useQuery({
|
||||
queryKey: ['parts', id],
|
||||
queryFn: async () => unwrap(await api.GET('/parts/{id}', { params: { path: { id } } })),
|
||||
});
|
||||
}
|
||||
|
||||
export function useCreatePurchaseOrder() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: async (body: PurchaseOrderCreate) =>
|
||||
unwrap(await api.POST('/purchase-orders', { body })),
|
||||
onSuccess: () => queryClient.invalidateQueries({ queryKey: ['purchase-orders'] }),
|
||||
});
|
||||
}
|
||||
|
||||
/** Bibliothèque complète (sans filtre appareil/OT — voir aussi
|
||||
* `useDocumentsOT` dans exploitation.ts, scopée à un OT). */
|
||||
export function useDocuments() {
|
||||
return useQuery({
|
||||
queryKey: ['documents'],
|
||||
queryFn: async () => (await unwrap(await api.GET('/documents'))).documents,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user