60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
import type { LucideIcon } from "lucide-react"
|
|
import { Home, ShieldCheck, UserRound } from "lucide-react"
|
|
|
|
export type CompteSettingsSectionId = "home" | "personal-info" | "security"
|
|
|
|
export type CompteSettingsNavItem = {
|
|
id: CompteSettingsSectionId
|
|
label: string
|
|
description: string
|
|
href: string
|
|
icon: LucideIcon
|
|
}
|
|
|
|
export const COMPTE_SETTINGS_NAV: CompteSettingsNavItem[] = [
|
|
{
|
|
id: "home",
|
|
label: "Accueil",
|
|
description: "Vue d'ensemble de votre compte Ulti",
|
|
href: "/compte",
|
|
icon: Home,
|
|
},
|
|
{
|
|
id: "personal-info",
|
|
label: "Informations personnelles",
|
|
description: "Nom, adresse e-mail et identifiant",
|
|
href: "/compte/informations",
|
|
icon: UserRound,
|
|
},
|
|
{
|
|
id: "security",
|
|
label: "Sécurité",
|
|
description: "Mot de passe, sessions et appareils",
|
|
href: "/compte/securite",
|
|
icon: ShieldCheck,
|
|
},
|
|
]
|
|
|
|
export function isCompteSettingsNavActive(
|
|
pathname: string | null,
|
|
item: CompteSettingsNavItem
|
|
): boolean {
|
|
if (item.href === "/compte") {
|
|
return pathname === "/compte" || pathname === "/compte/accueil"
|
|
}
|
|
return (
|
|
pathname === item.href || Boolean(pathname?.startsWith(`${item.href}/`))
|
|
)
|
|
}
|
|
|
|
export function resolveCompteSettingsSection(
|
|
segments: string[] | undefined
|
|
): CompteSettingsSectionId {
|
|
const slug = segments?.[0]
|
|
const match = COMPTE_SETTINGS_NAV.find((item) => {
|
|
if (item.id === "home") return !slug || slug === "accueil"
|
|
return item.href.endsWith(`/${slug}`)
|
|
})
|
|
return match?.id ?? "home"
|
|
}
|