Some checks are pending
E2E / Playwright e2e (push) Waiting to run
- Replaced hardcoded "Agenda" labels with dynamic ULTICAL_APP_NAME in various components for consistency. - Introduced new AiUsageSection and CompteAiUsageSection components to track AI usage and costs. - Updated settings and metadata to reflect changes in AI cost policies and usage limits. - Enhanced user interface elements for better accessibility and user experience across admin settings.
123 lines
3.0 KiB
TypeScript
123 lines
3.0 KiB
TypeScript
import type { LucideIcon } from "lucide-react"
|
|
import { ULTICAL_APP_NAME } from "@/lib/suite/page-metadata"
|
|
import {
|
|
Bell,
|
|
Bot,
|
|
CalendarDays,
|
|
FolderKanban,
|
|
Monitor,
|
|
Users,
|
|
} from "lucide-react"
|
|
|
|
export type MailSettingsSectionId =
|
|
| "display"
|
|
| "accounts"
|
|
| "labels"
|
|
| "notifications"
|
|
| "automation"
|
|
| "agenda"
|
|
|
|
export type MailSettingsNavItem = {
|
|
id: MailSettingsSectionId
|
|
label: string
|
|
description: string
|
|
href: string
|
|
icon: LucideIcon
|
|
}
|
|
|
|
export const MAIL_SETTINGS_NAV: MailSettingsNavItem[] = [
|
|
{
|
|
id: "display",
|
|
label: "Affichage",
|
|
description: "Densité, thème, boîte de réception, volet de lecture",
|
|
href: "/mail/settings",
|
|
icon: Monitor,
|
|
},
|
|
{
|
|
id: "accounts",
|
|
label: "Comptes mail",
|
|
description: "IMAP, SMTP, identités d'envoi et signatures",
|
|
href: "/mail/settings/accounts",
|
|
icon: Users,
|
|
},
|
|
{
|
|
id: "labels",
|
|
label: "Libellés et dossiers",
|
|
description: "Organisation unifiée cross-comptes",
|
|
href: "/mail/settings/labels",
|
|
icon: FolderKanban,
|
|
},
|
|
{
|
|
id: "notifications",
|
|
label: "Notifications",
|
|
description: "Alertes desktop, mobile et e-mail",
|
|
href: "/mail/settings/notifications",
|
|
icon: Bell,
|
|
},
|
|
{
|
|
id: "automation",
|
|
label: "Automatisations",
|
|
description: "Règles, webhooks, LLM, recherche web, tokens API",
|
|
href: "/mail/settings/automation",
|
|
icon: Bot,
|
|
},
|
|
{
|
|
id: "agenda",
|
|
label: ULTICAL_APP_NAME,
|
|
description: "Affichage, visio, invitations, agendas et vues",
|
|
href: "/mail/settings/agenda",
|
|
icon: CalendarDays,
|
|
},
|
|
]
|
|
|
|
export function isMailSettingsNavActive(
|
|
pathname: string | null,
|
|
item: MailSettingsNavItem
|
|
): boolean {
|
|
if (item.href === "/mail/settings") {
|
|
return (
|
|
pathname === "/mail/settings" || pathname === "/mail/settings/display"
|
|
)
|
|
}
|
|
return (
|
|
pathname === item.href || Boolean(pathname?.startsWith(`${item.href}/`))
|
|
)
|
|
}
|
|
|
|
export function resolveMailSettingsSection(
|
|
segments: string[] | undefined
|
|
): MailSettingsSectionId {
|
|
const slug = segments?.[0]
|
|
const match = MAIL_SETTINGS_NAV.find((item) => {
|
|
if (item.id === "display") return !slug || slug === "display"
|
|
return item.href.endsWith(`/${slug}`)
|
|
})
|
|
return match?.id ?? "display"
|
|
}
|
|
|
|
const MAIL_SETTINGS_WIDE_LAYOUT_SECTIONS: MailSettingsSectionId[] = [
|
|
"display",
|
|
"automation",
|
|
"agenda",
|
|
]
|
|
|
|
const MAIL_SETTINGS_LEFT_ALIGNED_SECTIONS: MailSettingsSectionId[] = ["accounts"]
|
|
|
|
export function isMailSettingsWideLayoutPath(pathname: string | null): boolean {
|
|
if (!pathname?.startsWith("/mail/settings")) return false
|
|
return MAIL_SETTINGS_NAV.some(
|
|
(item) =>
|
|
MAIL_SETTINGS_WIDE_LAYOUT_SECTIONS.includes(item.id) &&
|
|
isMailSettingsNavActive(pathname, item)
|
|
)
|
|
}
|
|
|
|
export function isMailSettingsLeftAlignedPath(pathname: string | null): boolean {
|
|
if (!pathname?.startsWith("/mail/settings")) return false
|
|
return MAIL_SETTINGS_NAV.some(
|
|
(item) =>
|
|
MAIL_SETTINGS_LEFT_ALIGNED_SECTIONS.includes(item.id) &&
|
|
isMailSettingsNavActive(pathname, item)
|
|
)
|
|
}
|