diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 6c1320e5..67fe943d 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -1,219 +1,163 @@ -import { User } from "@/interfaces/user"; +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 {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 {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 {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 {Module} from "@/interfaces"; import Badge from "./Low/Badge"; -import { - BsArrowRepeat, - BsBook, - BsCheck, - BsCheckCircle, - BsClipboard, - BsHeadphones, - BsMegaphone, - BsPen, - BsXCircle, -} from "react-icons/bs"; +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; + 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); +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 router = useRouter(); - const disableNavigation = preventNavigation(navDisabled, focusMode); + const disableNavigation = preventNavigation(navDisabled, focusMode); - const expirationDateColor = (date: Date) => { - const momentDate = moment(date); - const today = moment(new Date()); + 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"; - }; + 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 showExpirationDate = () => { + if (!user.subscriptionExpirationDate) return false; - const momentDate = moment(user.subscriptionExpirationDate); - const today = moment(new Date()); + const momentDate = moment(user.subscriptionExpirationDate); + const today = moment(new Date()); - return today.add(7, "days").isAfter(momentDate); - }; + 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]); + 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 >= user.desiredLevels.reading, - }, + const badges = [ + { + module: "reading", + icon: () => , + achieved: user.levels.reading >= user.desiredLevels.reading, + }, - { - module: "listening", - icon: () => , - achieved: user.levels.listening >= user.desiredLevels.listening, - }, - { - module: "writing", - icon: () => , - achieved: user.levels.writing >= user.desiredLevels.writing, - }, - { - module: "speaking", - icon: () => , - achieved: user.levels.speaking >= user.desiredLevels.speaking, - }, - { - module: "level", - icon: () => , - achieved: user.levels.level >= user.desiredLevels.level, - }, - ]; + { + module: "listening", + icon: () => , + achieved: user.levels.listening >= user.desiredLevels.listening, + }, + { + module: "writing", + icon: () => , + achieved: user.levels.writing >= user.desiredLevels.writing, + }, + { + module: "speaking", + icon: () => , + achieved: user.levels.speaking >= user.desiredLevels.speaking, + }, + { + module: "level", + icon: () => , + achieved: user.levels.level >= user.desiredLevels.level, + }, + ]; - return ( - <> - setIsTicketOpen(false)} - title="Submit a ticket" - > - setIsTicketOpen(false)} - /> - + 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 */} - + {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.corporateInformation?.companyInformation.name} |` - : ""}{" "} - {user.name} | {USER_TYPE_LABELS[user.type]} - - -
setIsMenuOpen(true)} - > - -
-
- {focusMode && ( - - )} -
- - ); + {showExpirationDate() && ( + + {!user.subscriptionExpirationDate && "Unlimited"} + {user.subscriptionExpirationDate && moment(user.subscriptionExpirationDate).format("DD/MM/YYYY")} + + )} + + {user.name} + + {user.type === "corporate" ? `${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 && } +
+ + ); }