import React, { useEffect, useState } from "react"; import Cookies from "js-cookie"; import { getTableData, readCachedTableData } from "../utils/userHandler"; import { EllipsisVertical } from "lucide-react"; import SubHeaderAdmin from "./SubHeaderAdmin"; interface DataPackage { losnummer: string; vorname: string | null; nachname: string | null; adresse: string | null; plz: string | null; email: string | null; [key: string]: any; } const Table: React.FC = () => { const [rows, setRows] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); // Hilfsfunktion zum Einlesen & Normalisieren der LocalStorage-Daten const loadFromCache = () => { const cached = readCachedTableData(); if (!cached) { setRows([]); return; } // Server könnte entweder ein Objekt oder ein Array liefern const normalized: DataPackage[] = Array.isArray(cached) ? cached : [cached]; setRows(normalized); }; useEffect(() => { // Initial lokale Daten laden (falls schon vorhanden) loadFromCache(); // Frische Daten vom Backend holen const token = Cookies.get("token") || ""; if (!token) return; // Kein Token => nur Cache anzeigen setLoading(true); getTableData(token) .then((data) => { if (data === null) { setError("Fehler beim Laden der Daten."); } else { setError(null); } loadFromCache(); }) .finally(() => setLoading(false)); }, []); // Reagieren auf LocalStorage-Änderungen (z.B. in anderen Tabs) useEffect(() => { const handler = (e: StorageEvent) => { if (e.key === "tableData") { loadFromCache(); } }; window.addEventListener("storage", handler); return () => window.removeEventListener("storage", handler); }, []); const formatValue = (v: any) => v === null || v === undefined || v === "" ? "-" : String(v); return ( <>
{loading && ( Laden... )} {error && {error}}
{rows.length === 0 && !loading && ( )} {rows.map((row, idx) => ( ))}
Losnummer Vorname Nachname Adresse PLZ Email
Keine Daten vorhanden.
{formatValue(row.losnummer)}
); }; export default Table;