import React, { useState, useContext } from "react"; import axios from "axios"; import styled from "styled-components"; import { stopRecording } from "../../api/recording"; import { useGlobalInfoStore } from "../../context/globalInfo"; import { IconButton, Menu, MenuItem, Typography, Chip } from "@mui/material"; import { AccountCircle, Logout, Clear, Language } from "@mui/icons-material"; import { useNavigate } from "react-router-dom"; import { AuthContext } from "../../context/auth"; import { SaveRecording } from "../molecules/SaveRecording"; import DiscordIcon from "../atoms/DiscordIcon"; import { apiUrl } from "../../apiConfig"; import MaxunLogo from "../../assets/maxunlogo.png"; import { useTranslation } from "react-i18next"; // Import useTranslation hook interface NavBarProps { recordingName: string; isRecording: boolean; } export const NavBar: React.FC = ({ recordingName, isRecording, }) => { const { notify, browserId, setBrowserId } = useGlobalInfoStore(); const { state, dispatch } = useContext(AuthContext); const { user } = state; const navigate = useNavigate(); const { t, i18n } = useTranslation(); // Get translation function and i18n methods const [anchorEl, setAnchorEl] = useState(null); const [langAnchorEl, setLangAnchorEl] = useState(null); const handleMenuOpen = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleLangMenuOpen = (event: React.MouseEvent) => { setLangAnchorEl(event.currentTarget); }; const handleMenuClose = () => { setAnchorEl(null); setLangAnchorEl(null); }; const logout = async () => { dispatch({ type: "LOGOUT" }); window.localStorage.removeItem("user"); const { data } = await axios.get(`${apiUrl}/auth/logout`); notify("success", data.message); navigate("/login"); }; const goToMainMenu = async () => { if (browserId) { await stopRecording(browserId); notify("warning", "Current Recording was terminated"); setBrowserId(null); } navigate("/"); }; const changeLanguage = (lang: string) => { i18n.changeLanguage(lang); // Change language dynamically localStorage.setItem("language", lang); // Persist language to localStorage }; return (
Maxun
{user ? (
{!isRecording ? ( <> {user.email} { handleMenuClose(); logout(); }} > {t("logout")} ) : ( <> {t("discard")} )} { changeLanguage("en"); handleMenuClose(); }} > English { changeLanguage("es"); handleMenuClose(); }} > Español { changeLanguage("ja"); handleMenuClose(); }} > 日本語 { changeLanguage("ar"); handleMenuClose(); }} > العربية { changeLanguage("zh"); handleMenuClose(); }} > 中文 { changeLanguage("de"); handleMenuClose(); }} > German
) : ( <> {t("language")} { changeLanguage("en"); handleMenuClose(); }} > English { changeLanguage("es"); handleMenuClose(); }} > Español { changeLanguage("ja"); handleMenuClose(); }} > 日本語 { changeLanguage("ar"); handleMenuClose(); }} > العربية { changeLanguage("zh"); handleMenuClose(); }} > 中文 )}
); }; const NavBarWrapper = styled.div` grid-area: navbar; background-color: white; padding: 5px; display: flex; justify-content: space-between; border-bottom: 1px solid #e0e0e0; `; const ProjectName = styled.b` color: #3f4853; font-size: 1.3em; `;