import React from "react"; import { useState, useEffect } from "react"; import { Table, Spinner, Text, VStack, Button, Input, HStack, IconButton, Heading, } from "@chakra-ui/react"; import { Tooltip } from "@/components/ui/tooltip"; import { fetchUserData } from "@/utils/fetcher"; import { Save, Trash2, RefreshCcwDot, CirclePlus } from "lucide-react"; import { handleDelete, handleEdit } from "@/utils/userActions"; import MyAlert from "./myChakra/MyAlert"; import AddForm from "./AddForm"; import { formatDateTime } from "@/utils/userFuncs"; import ChangePWform from "./ChangePWform"; type User = { id: number; username: string; password: string; role: string; entry_created_at: string; }; const UserTable: React.FC = () => { const [isLoading, setIsLoading] = useState(false); const [users, setUsers] = useState([]); const [isError, setIsError] = useState(false); const [errorStatus, setErrorStatus] = useState<"error" | "success">("error"); const [errorMessage, setErrorMessage] = useState(""); const [errorDsc, setErrorDsc] = useState(""); const [reload, setReload] = useState(false); const [addForm, setAddForm] = useState(false); const [changePWform, setChangePWform] = useState(false); const [changeUsr, setChangeUsr] = useState(""); const setError = ( status: "error" | "success", message: string, description: string ) => { setIsError(false); setErrorStatus(status); setErrorMessage(message); setErrorDsc(description); setIsError(true); }; const handleInputChange = (userId: number, field: string, value: string) => { setUsers((prevUsers) => prevUsers.map((user) => user.id === userId ? { ...user, [field]: value } : user ) ); }; const handlePasswordChange = (username: string) => { setChangeUsr(username); setChangePWform(true); }; useEffect(() => { const fetchUsers = async () => { setIsLoading(true); try { const data = await fetchUserData(); console.log("user api response", data); if (Array.isArray(data)) { setUsers(data); } else { setError( "error", "Failed to load users", "Invalid data format received" ); } } catch (e) { console.error("Failed to fetch users", e); if (e instanceof Error) { setError( "error", "Failed to fetch users", e.message || "Unknown error" ); } else { setError("error", "Failed to fetch users", "Unknown error"); } } finally { setIsLoading(false); } }; fetchUsers(); }, [reload]); return ( <> {/* Action toolbar */} setReload(!reload)} > {/* End action toolbar */} Benutzer {changePWform && ( { setChangePWform(false); setReload(!reload); }} alert={setError} username={changeUsr} /> )} {isError && ( )} {addForm && ( { setAddForm(false); setReload(!reload); }} alert={setError} /> )} {isLoading && ( Loading... )} {!isLoading && ( # Benutzername Passwort ändern Rolle Eintrag erstellt am Aktionen {users.map((user) => ( {user.id} handleInputChange(user.id, "username", e.target.value) } value={user.username} /> handleInputChange(user.id, "role", e.target.value) } value={user.role} /> {formatDateTime(user.entry_created_at)} ))} )} ); }; export default UserTable;