import React from "react"; import Cookies from "js-cookie"; import { createLoan, addToRemove, rmFromRemove } from "../utils/userHandler"; import { BORROWABLE_ITEMS_UPDATED_EVENT } from "../utils/fetchData"; interface BorrowItem { id: number; item_name: string; can_borrow_role: string; inSafe: number; } const LOCAL_STORAGE_KEY = "borrowableItems"; function normalizeBorrowable(data: any): BorrowItem[] { const rawArr = Array.isArray(data) ? data : Array.isArray(data?.items) ? data.items : Array.isArray(data?.data) ? data.data : []; return rawArr .map((raw: any) => { const idRaw = raw.id ?? raw.item_id ?? raw.itemId ?? raw.itemID ?? raw.itemIdPk; const id = Number(idRaw); const item_name = String(raw.item_name ?? raw.name ?? raw.title ?? ""); const can_borrow_role = String( raw.can_borrow_role ?? raw.role ?? raw.requiredRole ?? "" ); const inSafeRaw = raw.inSafe ?? raw.in_safe ?? raw.inLocker ?? raw.isInSafe ?? raw.safe; const inSafe = typeof inSafeRaw === "boolean" ? Number(inSafeRaw) : Number(isNaN(Number(inSafeRaw)) ? 0 : Number(inSafeRaw)); if (!Number.isFinite(id) || !item_name) return null; return { id, item_name, can_borrow_role, inSafe }; }) .filter(Boolean) as BorrowItem[]; } function useBorrowableItems() { const [items, setItems] = React.useState([]); const readFromStorage = React.useCallback(() => { try { const raw = localStorage.getItem(LOCAL_STORAGE_KEY) || "[]"; const parsed = JSON.parse(raw); const arr = normalizeBorrowable(parsed); setItems(arr); } catch { setItems([]); } }, []); React.useEffect(() => { readFromStorage(); const onStorage = (e: StorageEvent) => { if (e.key === LOCAL_STORAGE_KEY) readFromStorage(); }; window.addEventListener("storage", onStorage); const onBorrowableUpdated = () => readFromStorage(); window.addEventListener( BORROWABLE_ITEMS_UPDATED_EVENT, onBorrowableUpdated ); return () => { window.removeEventListener("storage", onStorage); window.removeEventListener( BORROWABLE_ITEMS_UPDATED_EVENT, onBorrowableUpdated ); }; }, [readFromStorage]); return items; } const Form2: React.FC = () => { const items = useBorrowableItems(); return (

2. Gegenstand auswählen

{items.length === 0 ? (
Keine Gegenstände verfügbar für diesen Zeitraum.
) : ( <> {/* Mobile: card list */}
{items.map((item) => ( ))}
{/* Desktop: table */}
{items.map((item) => ( ))}
Gegenstand
{item.item_name} { if (e.target.checked) addToRemove(item.id); else rmFromRemove(item.id); }} id={`item-${item.id}`} className="h-4 w-4 accent-indigo-600" />
)}
); }; export default Form2;