Files
HealthLog/src/components/settings/module-settings-page-ids.ts
T
Marc-André Bombeck 71dbef1742 feat(settings): nine groups, module pages and one switch per state
Settings now reads as nine groups: Account, Tracking, Arrangement,
Notifications, Health profile, AI, Connections, Data and System. On a
phone one button names the current section and opens the grouped list,
replacing the strip of every section.

What moved, every old address still working:
- Sessions, trusted devices and security activity sit under Security;
  the privacy page anchors forward there.
- Notifications holds every reminder kind: the Coach nudges and the
  checkup reminder switches joined, and a card names the reminders set
  where their subject lives (dose times, cycle reminders).
- Arrangement holds order and view only. Mood tags, the labs biomarker
  catalog and on-device text recognition, and the injection sites live on
  module pages under /settings/modules/<id>, linked from each Modules row
  and from the module's own wrench. /settings/layout/mood redirects.
- The timezone saves on change in the Display card, with a one-tap offer
  of the device zone.
- Screening hints sit beside the life circumstances they come from.
- System gains Preview features with the Topics switch.

Duplicates: the Coach and MCP pages show their state and link to the one
switch in Modules (turning MCP off keeps tokens), the Coach overlay shows
the provider and model with a link to Settings > AI instead of a second
set of selects, and the privacy page drops its copy of the export links.

A guard walks every historical /settings address through the redirects
and every forwarded anchor to a page that renders.
2026-10-21 19:43:02 +02:00

41 lines
1.2 KiB
TypeScript

import type { ModuleKey } from "@/lib/modules/registry";
import { surfaceModule } from "@/lib/modules/surface";
/**
* Server-safe ids and copy keys of the module pages under Settings > Modules
* (`/settings/modules/<id>`). The route reads them in
* `generateStaticParams()`, so they live apart from the client bodies in
* `module-settings-pages.tsx`.
*/
export const MODULE_SETTINGS_PAGE_IDS = [
"medications",
"mood",
"labs",
] as const;
export type ModuleSettingsPageId = (typeof MODULE_SETTINGS_PAGE_IDS)[number];
export function isModuleSettingsPageId(
value: string,
): value is ModuleSettingsPageId {
return (MODULE_SETTINGS_PAGE_IDS as readonly string[]).includes(value);
}
/** i18n keys of a page's heading, under `settings.sections.modules.pages`. */
export function moduleSettingsPageKeys(id: ModuleSettingsPageId): {
titleKey: string;
descriptionKey: string;
} {
return {
titleKey: `settings.sections.modules.pages.${id}.title`,
descriptionKey: `settings.sections.modules.pages.${id}.description`,
};
}
/** The module a page belongs to, from the surface map. */
export function moduleSettingsPageModule(
id: ModuleSettingsPageId,
): ModuleKey | undefined {
return surfaceModule(`settings-module:${id}`);
}