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"; import { onTake, onReturn } from "../utils/userHandler"; 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 m = iso.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/); if (!m) return iso; const [, y, M, d, h, min] = m; return `${d}.${M}.${y} ${h}:${min}`; }; async function fetchUserLoans(): Promise { const res = await fetch("https://backend.insta.the1s.de/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 takeMutation = useMutation({ mutationFn: (loanID: number) => onTake(loanID), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["userLoans"] }); }, }); const returnMutation = useMutation({ mutationFn: (loanID: number) => onReturn(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:{" "} {loan.take_date ? ( formatDate(loan.take_date) ) : ( )}
Zurück:{" "} {loan.returned_date ? ( 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)} {loan.take_date ? ( formatDate(loan.take_date) ) : ( )} {loan.returned_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;