import React from "react"; import { Table, Spinner, Text, VStack, Button, HStack, IconButton, Heading, Icon, Input, } from "@chakra-ui/react"; import { Tooltip } from "@/components/ui/tooltip"; import MyAlert from "./myChakra/MyAlert"; import { Trash2, RefreshCcwDot, CirclePlus, CheckCircle2, XCircle, Save, } from "lucide-react"; import Cookies from "js-cookie"; import { useState, useEffect } from "react"; import { deleteItem, handleEditItems, changeSafeState, } from "@/utils/userActions"; import AddItemForm from "./AddItemForm"; import { formatDateTime } from "@/utils/userFuncs"; import { API_BASE } from "@/config/api.config"; type Items = { id: number; item_name: string; can_borrow_role: string; in_safe: boolean; safe_nr: string; door_key: string; entry_created_at: string; entry_updated_at: string; last_borrowed_person: string | null; currently_borrowing: string | null; }; const ItemTable: React.FC = () => { const [items, setItems] = useState([]); const [errorStatus, setErrorStatus] = useState<"error" | "success">("error"); const [errorMessage, setErrorMessage] = useState(""); const [errorDsc, setErrorDsc] = useState(""); const [isError, setIsError] = useState(false); const [isLoading, setIsLoading] = useState(false); const [reload, setReload] = useState(false); const [addForm, setAddForm] = useState(false); const handleItemNameChange = (id: number, value: string) => { setItems((prev) => prev.map((it) => (it.id === id ? { ...it, item_name: value } : it)) ); }; const handleCanBorrowRoleChange = (id: number, value: string) => { setItems((prev) => prev.map((it) => (it.id === id ? { ...it, can_borrow_role: value } : it)) ); }; const handleLockerNumberChange = (id: number, value: string) => { setItems((prev) => prev.map((it) => (it.id === id ? { ...it, safe_nr: value } : it)) ); }; const handleDoorKeyChange = (id: number, value: string) => { setItems((prev) => prev.map((it) => (it.id === id ? { ...it, door_key: value } : it)) ); }; 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 response = await fetch( `${API_BASE}/api/admin/item-data/all-items`, { method: "GET", headers: { Authorization: `Bearer ${Cookies.get("token")}`, }, } ); const data = await response.json(); return data; } catch (error) { setError("error", "Failed to fetch items", "There is an error"); } finally { setIsLoading(false); } }; fetchData().then((data) => { if (Array.isArray(data)) { setItems(data); } }); }, [reload]); return ( <> {/* Action toolbar */} setReload(!reload)} > {/* End action toolbar */} Gegenstände {isError && ( )} {isLoading && ( Loading... )} {addForm && ( { setAddForm(false); setReload(!reload); }} alert={setError} /> )} {/* make table fill available width, like UserTable */} {!isLoading && ( # Gegenstand Ausleih Berechtigung Im Schließfach Schließfachnummer Schlüssel Eintrag erstellt am Eintrag aktualisiert am LaP * Dav ** Aktionen {items.map((item) => ( {item.id} handleItemNameChange(item.id, e.target.value) } value={item.item_name} /> handleCanBorrowRoleChange(item.id, e.target.value) } value={item.can_borrow_role} /> handleLockerNumberChange(item.id, e.target.value) } value={item.safe_nr} /> handleDoorKeyChange(item.id, e.target.value) } value={item.door_key} /> {formatDateTime(item.entry_created_at)} {formatDateTime(item.entry_updated_at)} {item.last_borrowed_person} {item.currently_borrowing} ))} )} * LaP = Letzte ausleihende Person ** Dav = Derzeit ausgeliehen von ); }; export default ItemTable;