feat: add dashboard section visibility settings

This commit is contained in:
zv
2026-06-14 17:34:52 +02:00
parent 6be00da027
commit 9087e1215c
6 changed files with 96 additions and 6 deletions

38
lib/dashboard-sections.ts Normal file
View File

@@ -0,0 +1,38 @@
import type { TranslationKey } from "@/lib/i18n";
export const DASHBOARD_SECTION_SETTINGS = [
{
id: "weatherBrief",
titleKey: "settings.dashboardSections.weatherBrief.title",
descriptionKey: "settings.dashboardSections.weatherBrief.description",
defaultVisible: true,
},
{
id: "featuredStations",
titleKey: "settings.dashboardSections.featuredStations.title",
descriptionKey: "settings.dashboardSections.featuredStations.description",
defaultVisible: false,
},
] as const satisfies ReadonlyArray<{
id: string;
titleKey: TranslationKey;
descriptionKey: TranslationKey;
defaultVisible: boolean;
}>;
export type DashboardSectionId = typeof DASHBOARD_SECTION_SETTINGS[number]["id"];
export type DashboardSectionVisibility = Record<DashboardSectionId, boolean>;
export const DEFAULT_DASHBOARD_SECTION_VISIBILITY = DASHBOARD_SECTION_SETTINGS.reduce((visibility, section) => ({
...visibility,
[section.id]: section.defaultVisible,
}), {} as DashboardSectionVisibility);
export function normalizeDashboardSectionVisibility(value: unknown): DashboardSectionVisibility {
const stored = value && typeof value === "object" ? value as Partial<Record<DashboardSectionId, unknown>> : {};
return DASHBOARD_SECTION_SETTINGS.reduce((visibility, section) => ({
...visibility,
[section.id]: typeof stored[section.id] === "boolean" ? stored[section.id] : section.defaultVisible,
}), {} as DashboardSectionVisibility);
}