/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable react/jsx-key */ import React, { Fragment, useEffect, useState } from "react"; import Image from "next/image"; import { useRouter } from "next/router"; import { faGithub, faSlack } from "@fortawesome/free-brands-svg-icons"; import { faCircleQuestion } from "@fortawesome/free-regular-svg-icons"; import { faAngleDown, faBook, faCoins, faEnvelope, faGear, faPlus, faRightFromBracket, } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Menu, Transition } from "@headlessui/react"; import logout from "~/pages/api/auth/Logout"; import getOrganization from "~/pages/api/organization/GetOrg"; import getOrganizations from "~/pages/api/organization/getOrgs"; import getUser from "~/pages/api/user/getUser"; import guidGenerator from "../utilities/randomId"; const supportOptions = [ [ , "Join Slack Forum", "https://join.slack.com/t/infisical-users/shared_invite/zt-1kdbk07ro-RtoyEt_9E~fyzGo_xQYP6g", ], [ , "Read Docs", "https://infisical.com/docs/getting-started/introduction", ], [ , "Open a GitHub Issue", "https://github.com/Infisical/infisical-cli/issues", ], [ , "Send us an Email", "mailto:support@infisical.com", ], ]; export interface ICurrentOrg { name: string; } export interface IUser { firstName: string; lastName: string; email: string; } /** * This is the navigation bar in the main app. * It has two main components: support options and user menu (inlcudes billing, logout, org/user settings) * @returns NavBar */ export default function Navbar() { const router = useRouter(); const [user, setUser] = useState(); const [orgs, setOrgs] = useState([]); const [currentOrg, setCurrentOrg] = useState(); useEffect(() => { (async () => { const userData = await getUser(); setUser(userData); const orgsData = await getOrganizations(); setOrgs(orgsData); const currentOrg = await getOrganization({ orgId: String(localStorage.getItem("orgData.id")), }); setCurrentOrg(currentOrg); })(); }, []); const closeApp = async () => { console.log("Logging out..."); await logout(); router.push("/login"); }; return ( Infisical {supportOptions.map((option) => ( // eslint-disable-next-line react/jsx-no-target-blank {option[0]} {option[1]} ))} {user?.firstName} {user?.lastName} SIGNED IN AS router.push("/settings/personal/" + router.query.id) } className="flex flex-row items-center px-1 mx-1 my-1 hover:bg-white/5 cursor-pointer rounded-md" > {user?.firstName?.charAt(0)} {" "} {user?.firstName} {user?.lastName} {" "} {user?.email} CURRENT ORGANIZATION router.push("/settings/org/" + router.query.id) } className="flex flex-row items-center px-2 mt-2 py-1 hover:bg-white/5 cursor-pointer rounded-md" > {currentOrg?.name?.charAt(0)} {currentOrg?.name} router.push("/settings/billing/" + router.query.id) } className="mt-1 relative flex justify-start cursor-pointer select-none py-2 px-2 rounded-md text-gray-400 hover:bg-white/5 duration-200 hover:text-gray-200" > Usage & Billing router.push( "/settings/org/" + router.query.id + "?invite" ) } className="relative flex justify-start cursor-pointer select-none py-2 pl-10 pr-4 rounded-md text-gray-400 hover:bg-primary/100 duration-200 hover:text-black hover:font-semibold mt-1" > Invite Members {orgs?.length > 1 && ( OTHER ORGANIZATIONS {orgs .filter( (org : { _id: string }) => org._id != localStorage.getItem("orgData.id") ) .map((org : { _id: string; name: string; }) => ( { localStorage.setItem("orgData.id", org._id); router.reload(); }} className="flex flex-row justify-start items-center hover:bg-white/5 w-full p-1.5 cursor-pointer rounded-md" > {org.name.charAt(0)} {org.name} ))} )} {({ active }) => ( Log Out )} ); }
{" "} {user?.firstName} {user?.lastName}
{" "} {user?.email}
{currentOrg?.name}
{org.name}