feat: allow dashboard section reordering
This commit is contained in:
@@ -1,12 +1,30 @@
|
||||
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",
|
||||
@@ -23,6 +41,11 @@ export const DASHBOARD_SECTION_SETTINGS = [
|
||||
export type DashboardSectionId = (typeof DASHBOARD_SECTION_SETTINGS)[number]["id"];
|
||||
|
||||
export type DashboardSectionVisibility = Record<DashboardSectionId, boolean>;
|
||||
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) => ({
|
||||
@@ -42,3 +65,14 @@ export function normalizeDashboardSectionVisibility(value: unknown): DashboardSe
|
||||
{} as DashboardSectionVisibility,
|
||||
);
|
||||
}
|
||||
|
||||
export function normalizeDashboardSectionOrder(value: unknown): DashboardSectionOrder {
|
||||
const allowedIds = new Set<DashboardSectionId>(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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user