import { Button, Flex, Heading, Stack, Text, CloseButton, Dialog, Portal, HStack, IconButton, Menu, Box, Avatar, Card, Grid, } from "@chakra-ui/react"; import { PasswordInput } from "@/components/ui/password-input"; import Cookies from "js-cookie"; import { useAtom } from "jotai"; import { setIsLoggedInAtom, triggerLogoutAtom } from "@/states/Atoms"; import { useNavigate } from "react-router-dom"; import { CircleUserRound, RotateCcwKey, Code, LifeBuoy, LogOut, CalendarPlus, MoreVertical, Languages, Table, } from "lucide-react"; import { useUserContext } from "@/states/Context"; import { useState } from "react"; import MyAlert from "./myChakra/MyAlert"; import { useTranslation } from "react-i18next"; import { API_BASE } from "@/config/api.config"; export const Header = () => { const navigate = useNavigate(); const userData = useUserContext(); console.log(userData); const { t } = useTranslation(); // Error handling states const [isMsg, setIsMsg] = useState(false); const [msgStatus, setMsgStatus] = useState<"error" | "success">("error"); const [msgTitle, setMsgTitle] = useState(""); const [msgDescription, setMsgDescription] = useState(""); const [oldPassword, setOldPassword] = useState(""); const [newPassword, setNewPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [, setTriggerLogout] = useAtom(triggerLogoutAtom); const [, setIsLoggedIn] = useAtom(setIsLoggedInAtom); // Dialog control const [isPwOpen, setPwOpen] = useState(false); const [userDialog, setUserDialog] = useState(false); const changePassword = async () => { if (newPassword !== confirmPassword) { setMsgTitle(t("err_pw_change")); setMsgDescription(t("pw_mismatch")); setMsgStatus("error"); setIsMsg(true); return; } const response = await fetch(`${API_BASE}/api/users/change-password`, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${Cookies.get("token")}`, }, body: JSON.stringify({ oldPassword, newPassword }), }); if (!response.ok) { setMsgTitle(t("err_pw_change")); setMsgDescription(t("pw_mismatch")); setMsgStatus("error"); setIsMsg(true); return; } setMsgTitle(t("pw_success")); setMsgDescription(t("pw_success_desc")); setMsgStatus("success"); setIsMsg(true); setOldPassword(""); setNewPassword(""); setConfirmPassword(""); }; const username = userData.first_name ? userData.first_name : "N/A"; const fullname = userData.first_name + " " + userData.last_name; const randomColor = [ "gray", "red", "orange", "yellow", "green", "teal", "blue", "cyan", "purple", "pink", ]; const logout = () => { Cookies.remove("token"); setIsLoggedIn(false); setTriggerLogout(true); navigate("/login", { replace: true }); }; return ( {/* Mobile: Drei-Punkte-Button, vertikal zentriert im Header */} navigate("/", { replace: true })} children={ {t("create-loan")} } /> navigate("/my-loans", { replace: true })} children={ {t("my-loans")} } /> navigate("/landingpage", { replace: true })} children={ {t("landingpage")} } /> { const currentLang = Cookies.get("language") || "en"; const newLang = currentLang === "en" ? "de" : "en"; Cookies.set("language", newLang); window.location.reload(); }} children={ {t("change-language")} } /> window.open( "https://git.the1s.de/Matthias-Claudius-Schule/borrow-system/wiki", "_blank", "noopener,noreferrer" ) } children={ {t("help")} } /> window.open( "https://git.the1s.de/Matthias-Claudius-Schule/borrow-system", "_blank", "noopener,noreferrer" ) } children={ {t("source-code")} } /> {t("logout")} } /> {/* Left: Title + user info */} {/* Titelzeile ohne Mobile-Menu (wurde nach oben verlegt) */} {t("app-title")} {t("greeting")} {username}! {/* Avatar: visible on mobile, hidden on desktop (desktop version is in the actions bar) */} {/* Right: Actions */} {/* Desktop actions */} {/* Desktop avatar, aligned with action buttons */}
{t("landingpage")} {/* User Info Dialoge */} {userDialog && ( {t("user-info-desc")} {t("first-name")}: {userData.first_name} {t("last-name")}: {userData.last_name} {t("username")}: {userData.username} {t("role")}: {userData.role} {t("admin-status")}: {userData.is_admin ? t("yes") : t("no")} )} {/* Passwort-Dialog (kontrolliert) */} setPwOpen(e.open)}> {t("change-password")}
{ e.preventDefault(); changePassword(); }} > setOldPassword(e.target.value)} placeholder={t("old-password")} /> setNewPassword(e.target.value)} placeholder={t("new-password")} /> setConfirmPassword(e.target.value)} placeholder={t("confirm-password")} /> {isMsg && ( )}
); };