/** * Helpers purs du « Point de départ » d'une tournée (M6.5+). * * Le point de départ peut être choisi parmi les sites de l'utilisateur ou saisi * en adresse libre (autocomplete BAN). Ces helpers ne touchent ni à l'API ni à * l'état réactif : ils formatent des libellés à partir d'un site, donc testables * unitairement (cf. startPoint.spec.ts). La composition du libellé stocké * (`startLabel`) reste dans le composant car elle dépend d'i18n (préfixe * « Site de … »). */ /** Sous-ensemble d'un site nécessaire au formatage du point de départ. */ export interface StartSite { name: string street: string postalCode: string city: string /** Adresse complète reconstituée côté backend (peut être absente). */ fullAddress?: string } /** * Adresse postale complète d'un site (« rue, CP ville »), à géocoder via la BAN. * Utilise `fullAddress` du backend si présent, sinon recompose depuis les champs. */ export function siteFullAddress(site: StartSite): string { if (site.fullAddress && site.fullAddress.trim() !== '') { return site.fullAddress.trim() } const cityLine = [site.postalCode, site.city].filter(Boolean).join(' ') return [site.street, cityLine].filter(Boolean).join(', ') } /** Libellé d'une option du select de sites : « {nom} — {code postal} ». */ export function siteOptionLabel(site: Pick): string { return `${site.name} — ${site.postalCode}` }