feat: add dashboard section visibility settings
This commit is contained in:
38
lib/dashboard-sections.ts
Normal file
38
lib/dashboard-sections.ts
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user