Files
Starseed/frontend/shared/utils/historyTab.ts
T
tristan ebcc5e0cea
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m42s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m10s
feat(commercial) : conserve l'onglet actif entre consultation et edition client
Au passage consultation <-> edition d'un client, l'onglet courant (Information / Contact / Adresse / Comptabilite...) est conserve dans les deux sens, transmis via history.state (l'URL ne change pas — etat d'UI hors URL).

- Nouveau util shared readHistoryTab : lit history.state.tab et le valide contre les onglets autorises (fallback Information : navigation directe, refresh, onglet hors role).

- Consultation goEdit et edition goBack posent l'onglet courant ; chaque page initialise activeTab depuis l'historique.

- Test unitaire du util (present/valide, hors-cles, absent, valeur non-string).
2026-06-08 13:39:35 +02:00

23 lines
991 B
TypeScript

/**
* Onglet actif transmis d'une page a l'autre via l'etat d'historique
* (`history.state`), SANS le mettre dans l'URL. Sert a preserver l'onglet courant
* au passage consultation <-> edition d'un client (dans les deux sens).
*
* On reste donc fidele a la regle « etat d'UI local, pas dans l'URL » : l'onglet
* voyage dans l'entree d'historique de la navigation, l'URL ne change pas.
*/
/**
* Lit la cle d'onglet posee par la page precedente (`history.state.tab`) si elle
* fait partie des onglets valides pour l'utilisateur. Retourne `null` sinon :
* navigation directe / deep link, rechargement de page, ou onglet inexistant
* pour ce role (ex: Comptabilite sans la permission).
*/
export function readHistoryTab(validKeys: string[]): string | null {
if (typeof window === 'undefined') {
return null
}
const tab = (window.history.state as Record<string, unknown> | null)?.tab
return typeof tab === 'string' && validKeys.includes(tab) ? tab : null
}