import { usePaginatedList } from '~/shared/composables/usePaginatedList' /** * Site Starseed rattache a une adresse du client, tel qu'embarque en LISTE * (groupe site:read) pour la colonne « Site(s) » du Repertoire (badges colores). */ export interface ClientSite { id: number name: string color: string } /** * Categorie rattachee au client, embarquee en LISTE (groupe category:read). * Seul le `code` (stable, MAJUSCULE — ERP-78) est affiche dans la colonne * « Catégories ». Les autres champs sont presents mais non utilises ici. */ export interface ClientCategory { code: string name?: string } /** * Vue MINIMALE d'un client pour le Repertoire (datatable). Volontairement * partielle : seuls les champs des colonnes + l'id (navigation) sont types ici. * Le detail complet (onglets) est hors perimetre de cet ecran (ERP-62). */ export interface Client { id: number companyName: string categories: ClientCategory[] sites: ClientSite[] /** Date ISO de derniere modification (default:read) — colonne « Dernière activité ». */ updatedAt: string | null isArchived: boolean } /** * Repertoire clients (ERP-62) — simple enveloppe de `usePaginatedList` * sur la ressource `/clients` (RG-13 : pagination serveur obligatoire ; jamais * de chargement integral en memoire). * * Les filtres (recherche, categories, sites, archives) sont pilotes par la page * via `setFilters` du composable partage — la remise en page 1 est garantie. * * Volontairement PAR INSTANCE (pas de singleton module-level) : l'etat tableau * est propre a l'ecran Repertoire et meurt avec lui, comme tout consommateur de * `usePaginatedList` (cf. sites.vue / categories.vue). Aucun reset au logout a * gerer. */ export function useClientsRepository() { return usePaginatedList({ url: '/clients' }) }