import React from "react"; import { Trash, ArrowLeftRight } from "lucide-react"; import { handleDeleteLoan } from "../utils/userHandler"; import { useMutation, useQuery } from "@tanstack/react-query"; import Cookies from "js-cookie"; import { queryClient } from "../utils/queryClient"; type Loan = { id: number; username: string; loan_code: number; start_date: string; end_date: string; take_date: string | null; returned_date: string | null; created_at: string; loaned_items_id: number[]; loaned_items_name: string[]; }; const formatDate = (iso: string | null) => { if (!iso) return "-"; const d = new Date(iso); if (Number.isNaN(d.getTime())) return iso; return d.toLocaleString("de-DE", { dateStyle: "short", timeStyle: "short" }); }; async function fetchUserLoans(): Promise { const res = await fetch("http://localhost:8002/api/userLoans", { method: "GET", headers: { Authorization: `Bearer ${Cookies.get("token") || ""}` }, }); if (!res.ok) throw new Error("Failed to fetch user loans"); const data = await res.json(); if (data === "No loans found for this user") return []; return Array.isArray(data) ? (data as Loan[]) : []; } const Form4: React.FC = () => { const { data: userLoans = [], isFetching } = useQuery({ queryKey: ["userLoans"], queryFn: fetchUserLoans, }); const deleteMutation = useMutation({ mutationFn: (loanID: number) => handleDeleteLoan(loanID), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["userLoans"] }); }, }); const onDelete = (loanID: number) => deleteMutation.mutate(loanID); if (isFetching) { return (

Lade Ausleihen…

); } if (userLoans.length === 0) { return (

Keine Ausleihen gefunden.

); } return (

Meine Ausleihen

Tippe auf das Papierkorb-Symbol, um eine Ausleihe zu löschen.

{/* Mobile: cards */}
{userLoans.map((loan) => (
Leihcode: {loan.loan_code}
Start:{" "} {formatDate(loan.start_date)}
Ende:{" "} {formatDate(loan.end_date)}
Abgeholt:{" "} {formatDate(loan.take_date)}
Zurück:{" "} {formatDate(loan.returned_date)}
Gegenstände:{" "} {Array.isArray(loan.loaned_items_name) ? loan.loaned_items_name.join(", ") : "-"}
))}
{/* Desktop: table */}
{userLoans.map((loan) => ( ))}
Leihcode Start Ende Abgeholt Zurückgegeben Erstellt Gegenstände Aktionen
{loan.loan_code} {formatDate(loan.start_date)} {formatDate(loan.end_date)} {formatDate(loan.take_date)} {formatDate(loan.returned_date)} {formatDate(loan.created_at)}
{Array.isArray(loan.loaned_items_name) ? loan.loaned_items_name.join(", ") : "-"}
{/* Scroll hint */}
Hinweis: Horizontal scrollen, um alle Spalten zu sehen.
); }; export default Form4;