import type { TranslationKey } from "@/lib/i18n"; export const DASHBOARD_SECTION_SETTINGS = [ { id: "warnings", titleKey: "settings.dashboardSections.warnings.title", descriptionKey: "settings.dashboardSections.warnings.description", defaultVisible: true, }, { id: "weatherBrief", titleKey: "settings.dashboardSections.weatherBrief.title", descriptionKey: "settings.dashboardSections.weatherBrief.description", defaultVisible: true, }, { id: "forecast", titleKey: "settings.dashboardSections.forecast.title", descriptionKey: "settings.dashboardSections.forecast.description", defaultVisible: true, }, { id: "favorites", titleKey: "settings.dashboardSections.favorites.title", descriptionKey: "settings.dashboardSections.favorites.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; export type DashboardSectionOrder = DashboardSectionId[]; export const DEFAULT_DASHBOARD_SECTION_ORDER = DASHBOARD_SECTION_SETTINGS.map( (section) => section.id, ) as DashboardSectionOrder; 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>) : {}; return DASHBOARD_SECTION_SETTINGS.reduce( (visibility, section) => ({ ...visibility, [section.id]: typeof stored[section.id] === "boolean" ? stored[section.id] : section.defaultVisible, }), {} as DashboardSectionVisibility, ); } export function normalizeDashboardSectionOrder(value: unknown): DashboardSectionOrder { const allowedIds = new Set(DASHBOARD_SECTION_SETTINGS.map((section) => section.id)); const stored = Array.isArray(value) ? value.filter((sectionId): sectionId is DashboardSectionId => allowedIds.has(sectionId as DashboardSectionId)) : []; return [ ...stored, ...DEFAULT_DASHBOARD_SECTION_ORDER.filter((sectionId) => !stored.includes(sectionId)), ] as DashboardSectionOrder; }