import { ClockCircleOutlined, DesktopOutlined, GlobalOutlined, LogoutOutlined, MenuOutlined, MoonOutlined, PicCenterOutlined, SettingOutlined, SunOutlined, UserOutlined, } from "@ant-design/icons"; import { Drawer, Layout, Menu, MenuProps, Switch } from "antd"; import React, { useEffect, useState } from "react"; import AuthModal from "./AuthModal"; import "./styles.css"; import { StorePrototype, logOut, setLanguage, setTheme, store, } from "../config/store"; import { useSelector } from "react-redux"; import tr from "../config/translation"; import { Link, useNavigate } from "react-router-dom"; import logo from "../../static/android-chrome-192x192.png"; import { isMobile } from "react-device-detect"; const { Header } = Layout; type NullableUser = { name: string | null; username: string } | null; const HeaderComponent = () => { const navigate = useNavigate(); const [authModalOpen, setAuthModalOpen] = useState(false); const [drawerOpen, setDrawerOpen] = useState(false); // const [screenOrientation, setScreenOrientation] = useState( // window.screen.orientation.type // ); // window.addEventListener("orientationchange", () => // setScreenOrientation(window.screen.orientation.type) // ); const currentLanguage = useSelector( (state: StorePrototype) => state.settings.language ); const user: NullableUser = useSelector( (state: StorePrototype) => state.auth.user ); const currentTheme: string | undefined = useSelector( (state: StorePrototype) => state.settings.theme ); const [selectedKeys, setSelectedKeys] = useState([]); useEffect(() => { const keys = []; user && keys.push("login"); currentLanguage && keys.push(currentLanguage); setSelectedKeys(keys); }, [user, currentLanguage]); const languageSelectItems: MenuProps["items"] = [ { label: "English", key: "en", onClick: () => { store.dispatch(setLanguage("en")); window.location.reload(); }, }, { label: "Русский", key: "ru", onClick: () => { store.dispatch(setLanguage("ru")); window.location.reload(); }, }, ]; const userMenuItems: MenuProps["items"] = [ { label: {tr("Settings")}, key: "settings", icon: , }, { label: tr("Log out"), key: "logout", icon: , danger: true, onClick: () => store.dispatch(logOut()) && navigate("/"), }, ]; const items: MenuProps["items"] = [ { label: (
logo
), key: "logo", onClick: () => navigate("/"), }, { label: {tr("Dashboard")}, key: "dashboard", icon: , disabled: !user, }, { label: {tr("Current queues")}, key: "parting", icon: , }, { label: {tr("News")}, key: "news", icon: , }, { label: tr("Language"), key: "language", icon: , children: languageSelectItems, style: { background: "#001529" }, }, { label: ( store.dispatch(setTheme(v ? "light" : "dark")) } defaultChecked={currentTheme === "light"} /> ), key: "theme", icon: currentTheme === "dark" ? : , }, { label: user ? user.username : tr("Log in"), key: "login", icon: , onClick: () => !user && setAuthModalOpen(true), ...(user ? { children: userMenuItems } : {}), }, ]; const mobileItems: MenuProps["items"] = [ { label: (
logo
), key: "logo", onClick: () => navigate("/"), }, { icon: , key: "drawer", onClick: () => setDrawerOpen(true), }, ]; const drawerItems: MenuProps["items"] = [ { label: {tr("Dashboard")}, key: "dashboard", icon: , disabled: !user, onClick: () => setDrawerOpen(false), }, { label: {tr("Current queues")}, key: "parting", icon: , onClick: () => setDrawerOpen(false), }, { label: {tr("News")}, key: "news", icon: , onClick: () => setDrawerOpen(false), }, { label: tr("Language"), key: "language", icon: , children: languageSelectItems, style: { background: "#001529" }, }, { label: user ? user.username : tr("Log in"), key: "login", icon: , onClick: () => !user && setAuthModalOpen(true), ...(user ? { children: userMenuItems } : {}), }, { label: ( store.dispatch(setTheme(v ? "light" : "dark")) } defaultChecked={currentTheme === "light"} /> ), key: "theme", icon: currentTheme === "dark" ? : , }, ]; return ( <>
} />
setDrawerOpen(false)} style={{ marginLeft: "3rem", paddingRight: "3rem" }} > ); }; export default HeaderComponent;