be079cdbe2
Au retour depuis une fiche (flèche de l'app ou du navigateur), la liste revenait toujours sur l'onglet Clients. L'onglet actif est désormais transmis via history.state (hors URL), comme sur Starseed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
36 lines
1.4 KiB
TypeScript
36 lines
1.4 KiB
TypeScript
/**
|
|
* Onglet actif transmis d'une page à l'autre via l'état d'historique
|
|
* (`history.state`), SANS le mettre dans l'URL. Sert à préserver l'onglet courant
|
|
* du Répertoire (Clients / Prospects / Prestataires) lors de l'aller-retour
|
|
* liste ↔ fiche, dans les deux sens (flèche de l'app ET flèche du navigateur).
|
|
*
|
|
* On reste fidèle à la règle « état d'UI local, pas dans l'URL » : l'onglet
|
|
* voyage dans l'entrée d'historique de la navigation, l'URL ne change pas.
|
|
*/
|
|
|
|
/**
|
|
* Lit la clé d'onglet posée dans `history.state.tab` si elle fait partie des
|
|
* onglets valides. Retourne `null` sinon : navigation directe / deep link,
|
|
* rechargement de page, ou onglet inexistant.
|
|
*/
|
|
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
|
|
}
|
|
|
|
/**
|
|
* Estampille l'entrée d'historique COURANTE avec l'onglet actif, sans créer de
|
|
* nouvelle entrée ni changer l'URL. À appeler juste avant de naviguer vers une
|
|
* fiche : au retour via la flèche du navigateur (popstate), cette entrée
|
|
* « liste » est restaurée avec son onglet.
|
|
*/
|
|
export function stampHistoryTab(tab: string): void {
|
|
if (typeof window === 'undefined') {
|
|
return
|
|
}
|
|
window.history.replaceState({ ...window.history.state, tab }, '')
|
|
}
|