import {User} from "@/interfaces/user"; import Link from "next/link"; import FocusLayer from "@/components/FocusLayer"; import {preventNavigation} from "@/utils/navigation.disabled"; import {useRouter} from "next/router"; import {BsList, BsQuestionCircle, BsQuestionCircleFill} from "react-icons/bs"; import clsx from "clsx"; import moment from "moment"; import MobileMenu from "./MobileMenu"; import {useEffect, useState} from "react"; import {Type} from "@/interfaces/user"; import {USER_TYPE_LABELS} from "@/resources/user"; import useGroups from "@/hooks/useGroups"; import {isUserFromCorporate} from "@/utils/groups"; import Button from "./Low/Button"; import Modal from "./Modal"; import Input from "./Low/Input"; import TicketSubmission from "./High/TicketSubmission"; import {Module} from "@/interfaces"; import Badge from "./Low/Badge"; import {BsArrowRepeat, BsBook, BsCheck, BsCheckCircle, BsClipboard, BsHeadphones, BsMegaphone, BsPen, BsXCircle} from "react-icons/bs"; interface Props { user: User; navDisabled?: boolean; focusMode?: boolean; onFocusLayerMouseEnter?: () => void; path: string; } /* eslint-disable @next/next/no-img-element */ export default function Navbar({user, path, navDisabled = false, focusMode = false, onFocusLayerMouseEnter}: Props) { const [isMenuOpen, setIsMenuOpen] = useState(false); const [disablePaymentPage, setDisablePaymentPage] = useState(true); const [isTicketOpen, setIsTicketOpen] = useState(false); const router = useRouter(); const disableNavigation = preventNavigation(navDisabled, focusMode); const expirationDateColor = (date: Date) => { const momentDate = moment(date); const today = moment(new Date()); if (today.add(1, "days").isAfter(momentDate)) return "!bg-mti-red-ultralight border-mti-red-light"; if (today.add(3, "days").isAfter(momentDate)) return "!bg-mti-rose-ultralight border-mti-rose-light"; if (today.add(7, "days").isAfter(momentDate)) return "!bg-mti-orange-ultralight border-mti-orange-light"; }; const showExpirationDate = () => { if (!user.subscriptionExpirationDate) return false; const momentDate = moment(user.subscriptionExpirationDate); const today = moment(new Date()); return today.add(7, "days").isAfter(momentDate); }; useEffect(() => { if (user.type !== "student" && user.type !== "teacher") return setDisablePaymentPage(false); isUserFromCorporate(user.id).then((result) => setDisablePaymentPage(result)); }, [user]); const badges = [ { module: "reading", icon: () => , achieved: user.levels?.reading || 0 >= user.desiredLevels?.reading || 9, }, { module: "listening", icon: () => , achieved: user.levels?.listening || 0 >= user.desiredLevels?.listening || 9, }, { module: "writing", icon: () => , achieved: user.levels?.writing || 0 >= user.desiredLevels?.writing || 9, }, { module: "speaking", icon: () => , achieved: user.levels?.speaking || 0 >= user.desiredLevels?.speaking || 9, }, { module: "level", icon: () => , achieved: user.levels?.level || 0 >= user.desiredLevels?.level || 9, }, ]; return ( <> setIsTicketOpen(false)} title="Submit a ticket"> setIsTicketOpen(false)} /> {user && ( setIsMenuOpen(false)} user={user} /> )}
EnCoach's Logo

EnCoach

{user.type === "student" && badges.map((badge) => (
{badge.icon()}
))} {/* OPEN TICKET SYSTEM */} {showExpirationDate() && ( {!user.subscriptionExpirationDate && "Unlimited"} {user.subscriptionExpirationDate && moment(user.subscriptionExpirationDate).format("DD/MM/YYYY")} )} {user.name} {(user.type === "corporate" || user.type === "mastercorporate") && !!user.corporateInformation?.companyInformation?.name ? `${user.corporateInformation?.companyInformation.name} |` : ""}{" "} {user.name} | {USER_TYPE_LABELS[user.type]} {user.type === "corporate" && !!user.demographicInformation?.position && ` | ${user.demographicInformation?.position || "N/A"}`}
setIsMenuOpen(true)}>
{focusMode && }
); }