export type DashboardTileId = | "aufgaben" | "einsatzbereitschaft" | "prueftermine" | "ablaufdaten" | "kennzahlen" | "maengel" | "qualifikation" | "aktivitaet"; export const ALLE_TILE_IDS: DashboardTileId[] = [ "aufgaben", "einsatzbereitschaft", "prueftermine", "ablaufdaten", "kennzahlen", "maengel", "qualifikation", "aktivitaet", ]; export const GRID_SPALTEN = 12; export const GRID_ZEILENHOEHE = 56; export interface RasterPosition { x: number; y: number; w: number; h: number; } // Freie Grid-Positionen als Startzustand - grob nach Wichtigkeit sortiert, // Aufgaben-Kachel volle Breite oben. export const STANDARD_RASTER: Record = { aufgaben: { x: 0, y: 0, w: 12, h: 3 }, einsatzbereitschaft: { x: 0, y: 3, w: 4, h: 5 }, prueftermine: { x: 4, y: 3, w: 4, h: 5 }, ablaufdaten: { x: 8, y: 3, w: 4, h: 5 }, kennzahlen: { x: 0, y: 8, w: 4, h: 5 }, maengel: { x: 4, y: 8, w: 4, h: 5 }, qualifikation: { x: 8, y: 8, w: 4, h: 4 }, aktivitaet: { x: 0, y: 13, w: 8, h: 5 }, }; export interface DashboardLayout { raster: Record; ausgeblendet: DashboardTileId[]; } const SPEICHER_KEY = "mabea-dashboard-layout-v2"; function istGueltigeId(wert: unknown): wert is DashboardTileId { return typeof wert === "string" && (ALLE_TILE_IDS as string[]).includes(wert); } function istGueltigePosition(wert: unknown): wert is RasterPosition { if (!wert || typeof wert !== "object") return false; const p = wert as Record; return typeof p.x === "number" && typeof p.y === "number" && typeof p.w === "number" && typeof p.h === "number"; } export function layoutLaden(): DashboardLayout { try { const roh = localStorage.getItem(SPEICHER_KEY); if (!roh) return { raster: { ...STANDARD_RASTER }, ausgeblendet: [] }; const geparst = JSON.parse(roh); const raster: Record = { ...STANDARD_RASTER }; if (geparst.raster && typeof geparst.raster === "object") { for (const [id, position] of Object.entries(geparst.raster)) { if (istGueltigeId(id) && istGueltigePosition(position)) raster[id] = position; } } const ausgeblendet = Array.isArray(geparst.ausgeblendet) ? geparst.ausgeblendet.filter(istGueltigeId) : []; return { raster, ausgeblendet }; } catch { return { raster: { ...STANDARD_RASTER }, ausgeblendet: [] }; } } export function layoutSpeichern(layout: DashboardLayout): void { try { localStorage.setItem(SPEICHER_KEY, JSON.stringify(layout)); } catch { // Speichern optional - Layout fällt auf Standard zurück } }