import { AuthContext, tokenExpireError } from "@/authContext"; import { GlobalContext } from "@/globalContext"; import { ID_VERIFICATION_STATUSES, IMAGE_STATUS } from "@/utils/constants"; import { Menu, Transition } from "@headlessui/react"; import React, { Fragment, useEffect, useState } from "react"; import { useRef } from "react"; import { useContext } from "react"; import { Link, useNavigate } from "react-router-dom"; import Icon from "../Icons"; import LogoutModal from "./LogoutModal"; import MkdSDK from "@/utils/MkdSDK"; import { ChatBubbleBottomCenterIcon } from "@heroicons/react/24/outline"; import { useTour } from "@reactour/tour"; const sdk = new MkdSDK(); export default function NavMenu({ variant }) { const { state: globalState, dispatch: globalDispatch } = useContext(GlobalContext); const { state: authState, dispatch: authDispatch } = useContext(AuthContext); const [unreadCount, setUnreadCount] = useState(globalState.unreadMessages); const [height, setHeight] = useState(window.innerHeight); const navigate = useNavigate(); const menuRef = useRef(null); function switchToHost() { authDispatch({ type: "SWITCH_TO_HOST" }); globalDispatch({ type: "SHOW_CONFIRMATION", payload: { heading: "Success", message: `You are now signed in as a host`, btn: "Ok got it", }, }); navigate("/"); } function switchToAdmin() { authDispatch({ type: "SWITCH_TO_ADMIN" }); globalDispatch({ type: "SHOW_CONFIRMATION", payload: { heading: "Success", message: `You are now signed in as an admin`, btn: "Ok got it", }, }); navigate("/admin/dashboard"); } function switchToCustomer() { authDispatch({ type: "SWITCH_TO_CUSTOMER" }); globalDispatch({ type: "SHOW_CONFIRMATION", payload: { heading: "Success", message: `You are now signed in as a customer`, btn: "Ok got it", }, }); navigate("/"); } async function fetchUnreadMessagesCount() { try { const result = await sdk.getMyRoom(); if (Array.isArray(result.messages)) { globalDispatch({ type: "SET_UNREAD_MESSAGES_COUNT", payload: result.messages.filter((msg) => { const messageSenderId = JSON.parse(msg.chat).user_id; return Number(messageSenderId) != Number(authState.user); }).length, }); } setUnreadCount(result.messages.filter((msg) => { const messageSenderId = JSON.parse(msg.chat).user_id; return Number(messageSenderId) != Number(authState.user); }).length) } catch (err) { tokenExpireError(authDispatch, err.message); } } useEffect(() => { fetchUnreadMessagesCount(); }, []); useEffect(() => { const handleResize = () => { setHeight(window.innerHeight); }; window.addEventListener('resize', handleResize); // Cleanup event listener on component unmount return () => { window.removeEventListener('resize', handleResize); }; }, []); const [logoutModal, setLogoutModal] = useState(false); function getVerifiedColor(status) { switch (status) { case ID_VERIFICATION_STATUSES.PENDING: return ""; case ID_VERIFICATION_STATUSES.VERIFIED: return "text-green-600"; case ID_VERIFICATION_STATUSES.REJECTED: return "text-red-600"; default: return "text-red-600"; } } const { setIsOpen } = useTour() const verificationStatuses = ["Pending Verification", "Verified", "Not Verified"]; return ( <>
560) && "max-h-[500px]"} ${(height < 560) && "max-h-[400px]"} overflow-y-auto right-0 mt-2 w-80 max-w-screen-sm origin-top-right rounded-3xl border bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none`}>

{globalState.user.first_name} {globalState.user.last_name}

You are signed in as {authState.role}

{verificationStatuses[globalState.user.verificationStatus] ?? "Not verified"}
<>
Messages{" "} {globalState.unreadMessages > 0 && ( {globalState.unreadMessages} )}
<> My bookings Messages{" "} {globalState.unreadMessages > 0 && ( {globalState.unreadMessages} )} Reviews {authState.role == "host" && ( My Spaces )} Profile Payment Billing
FAQs Favorites {authState.role == "customer" ? ( <> {authState.originalRole != "customer" ? ( ) : ( Become a host )} ) : ( )} {["superadmin", "admin"].includes(authState.originalRole) && ( )}
setLogoutModal(false)} /> ); }