import React, { useEffect, useState } from "react"; import { Spinner, Text, VStack, Table, Heading, HStack, Card, SimpleGrid, Button, } from "@chakra-ui/react"; import { Lock, LockOpen } from "lucide-react"; import MyAlert from "../myChakra/MyAlert"; import { formatDateTime } from "@/utils/userFuncs"; const API_BASE = (import.meta as any).env?.VITE_BACKEND_URL || import.meta.env.VITE_BACKEND_URL || "http://localhost:8002"; type Loan = { id: number; username: string; start_date: string; end_date: string; returned_date: string | null; take_date: string | null; loaned_items_name: string[] | string; }; type Device = { id: number; item_name: string; can_borrow_role: string; inSafe: number; entry_created_at: string; }; const Landingpage: React.FC = () => { const [isLoading, setIsLoading] = useState(false); const [loans, setLoans] = useState([]); const [devices, setDevices] = useState([]); const [isError, setIsError] = useState(false); const [errorStatus, setErrorStatus] = useState<"error" | "success">("error"); const [errorMessage, setErrorMessage] = useState(""); const [errorDsc, setErrorDsc] = useState(""); const setError = ( status: "error" | "success", message: string, description: string ) => { setIsError(false); setErrorStatus(status); setErrorMessage(message); setErrorDsc(description); setIsError(true); }; useEffect(() => { const fetchData = async () => { setIsLoading(true); try { const loanRes = await fetch(`${API_BASE}/apiV2/allLoans`); const loanData = await loanRes.json(); if (Array.isArray(loanData)) { setLoans(loanData); } else { setError( "error", "Fehler beim Laden", "Unerwartetes Datenformat erhalten. (Ausleihen)" ); } const deviceRes = await fetch(`${API_BASE}/apiV2/allItems`); const deviceData = await deviceRes.json(); if (Array.isArray(deviceData)) { setDevices(deviceData); } else { setError( "error", "Fehler beim Laden", "Unerwartetes Datenformat erhalten. (Geräte)" ); } } catch (e) { setError( "error", "Fehler beim Laden", "Die Ausleihen konnten nicht geladen werden." ); } finally { setIsLoading(false); } }; fetchData(); }, []); return ( <> Matthias-Claudius-Schule Technik Alle Ausleihen {isError && ( )} {isLoading && ( Loading... )} {!isLoading && ( # Benutzername Startdatum Enddatum Ausgeliehene Artikel Rückgabedatum Ausleihdatum {loans.map((loan) => ( {loan.id} {loan.username} {formatDateTime(loan.start_date)} {formatDateTime(loan.end_date)} {Array.isArray(loan.loaned_items_name) ? loan.loaned_items_name.join(", ") : loan.loaned_items_name} {formatDateTime(loan.returned_date)} {formatDateTime(loan.take_date)} ))} )} {!isLoading && loans.length === 0 && !isError && ( Keine Ausleihen vorhanden. )} Alle Geräte {/* Responsive Grid mit gleich hohen Karten */} {devices.map((device) => ( {device.inSafe ? : } {device.item_name} Ausleihrolle: {device.can_borrow_role} ))} Legende: ); }; export default Landingpage;