feat(directory) : conserve l'onglet actif au retour liste ↔ fiche (LST-72)
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>
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* 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 }, '')
|
||||
}
|
||||
Reference in New Issue
Block a user