9ca9cb1d42
- Page /clients (route à plat) : MalioDataTable 6 colonnes (contact, téléphone formaté, codes catégories, badges sites), toggle « Voir les archivés » (état local), boutons Ajouter (manage) / Exporter (view, download xlsx), clic ligne vers le détail, empty state. - Composable useClientsRepository (wrapper de usePaginatedList) + util formatPhoneFR + clé i18n showArchived. - Contrat back : la liste client:read expose désormais les codes catégories (category:read) et les sites agrégés des adresses (site:read + Client::getSites) ; jointures anti N+1 dans createListQueryBuilder. Tests back + front.
24 lines
1.0 KiB
TypeScript
24 lines
1.0 KiB
TypeScript
/**
|
|
* Formatage d'un numero de telephone francais en groupes de 2 chiffres
|
|
* (`XX XX XX XX XX`).
|
|
*
|
|
* Signature cible partagee avec le ticket 1.13 / ERP-66 : si ce dernier livre
|
|
* une version plus riche (validation, indicatif international), elle remplacera
|
|
* cette implementation minimale. En attendant, on couvre le besoin du Repertoire
|
|
* clients (ERP-62) : afficher un telephone lisible a partir de la valeur stockee
|
|
* en base (deja normalisee en 10 chiffres par le ClientProcessor, RG-1.20).
|
|
*
|
|
* - Ne garde que les chiffres puis groupe par 2 (tolere une saisie deja espacee
|
|
* ou pointee, ex: `06.12.34.56.78` ou `0612345678`).
|
|
* - Retourne une chaine vide si la valeur est vide/nulle (cellule vide propre).
|
|
*/
|
|
export function formatPhoneFR(value: string | null | undefined): string {
|
|
const digits = (value ?? '').replace(/\D/g, '')
|
|
if (digits.length === 0) {
|
|
return ''
|
|
}
|
|
|
|
// Groupe par paquets de 2 ; un dernier groupe impair reste tel quel.
|
|
return digits.match(/.{1,2}/g)?.join(' ') ?? digits
|
|
}
|