Spaces:
Runtime error
Runtime error
import Image from "next/image"; | |
import { useRouter } from "next/router"; | |
import { useTranslation } from "next-i18next"; | |
import { FaBars } from "react-icons/fa"; | |
import { DrawerItemButton, DrawerItemButtonLoader } from "./DrawerItemButton"; | |
import type { DisplayProps } from "./Sidebar"; | |
import Sidebar from "./Sidebar"; | |
import { useAuth } from "../../hooks/useAuth"; | |
import { api } from "../../utils/api"; | |
import AuthItem from "../sidebar/AuthItem"; | |
import LinkIconItem from "../sidebar/LinkIconItem"; | |
import LinkItem from "../sidebar/LinkItem"; | |
import { PAGE_LINKS, SOCIAL_LINKS } from "../sidebar/links"; | |
const LeftSidebar = ({ show, setShow, onReload }: DisplayProps & { onReload?: () => void }) => { | |
const router = useRouter(); | |
const { session, signIn, signOut, status } = useAuth(); | |
const [t] = useTranslation("drawer"); | |
const { isLoading, data } = api.agent.getAll.useQuery(undefined, { | |
enabled: status === "authenticated", | |
}); | |
const userAgents = data ?? []; | |
const navigateToPage = (href: string) => { | |
if (router.pathname === href) { | |
onReload?.(); | |
return; | |
} | |
void router.push(href); | |
}; | |
return ( | |
<Sidebar show={show} setShow={setShow} side="left" className="border-slate-6s border-r"> | |
<div className="flex flex-row items-center pb-6"> | |
<div className="rounded-xl bg-slate-1 p-1 shadow-depth-1"> | |
<a | |
href="https://reworkd.ai" | |
className="flex cursor-pointer gap-2 rounded-lg border-t bg-white bg-gradient-to-b from-slate-4 to-transparent px-2.5 py-1.5 duration-1000 hover:from-slate-6" | |
> | |
<Image src="/logos/light-default-solid.svg" width="20" height="20" alt="Reworkd AI" /> | |
<h1 className="text-sm font-medium">Reworkd</h1> | |
</a> | |
</div> | |
<button | |
className="ml-auto rounded-md border-none transition-all hover:bg-slate-5" | |
onClick={() => setShow(!show)} | |
> | |
<FaBars size="12" className="z-20 m-2 text-slate-11" /> | |
</button> | |
</div> | |
<button | |
className="mb-4 rounded-md bg-slate-1 p-1 shadow-depth-1 hover:bg-slate-2" | |
onClick={() => navigateToPage("/")} | |
> | |
New Agent | |
</button> | |
<div className="mb-2 mr-2 flex-1 overflow-y-auto overflow-x-hidden overflow-ellipsis"> | |
{status === "unauthenticated" && ( | |
<div className="p-1 text-sm text-slate-12"> | |
<a className="link" onClick={() => void signIn()}> | |
{t("SIGN_IN")} | |
</a>{" "} | |
{t("SIGN_IN_NOTICE")} | |
</div> | |
)} | |
{status === "authenticated" && !isLoading && userAgents.length === 0 && ( | |
<div className="p-1 text-sm text-slate-12"> | |
{t("NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST")} | |
</div> | |
)} | |
{(status === "loading" || (status === "authenticated" && isLoading)) && ( | |
<div className="flex flex-col gap-2 overflow-hidden"> | |
{Array(13) | |
.fill(0) | |
.map((_, index) => ( | |
<DrawerItemButtonLoader key={index} /> | |
))} | |
</div> | |
)} | |
{userAgents.map((agent, index) => ( | |
<DrawerItemButton | |
key={`${index}-${agent.name}`} | |
className="flex w-full rounded-md p-2 text-sm font-semibold" | |
text={agent.name} | |
onClick={() => void router.push(`/agent?id=${agent.id}`)} | |
/> | |
))} | |
</div> | |
<ul role="list" className="flex flex-col"> | |
<ul className="mb-2"> | |
<div className="mb-2 ml-2 text-xs font-semibold text-slate-10">Pages</div> | |
{PAGE_LINKS.map((link, i) => ( | |
<LinkItem | |
key={i} | |
title={link.name} | |
href={link.href} | |
onClick={() => navigateToPage(link.href)} | |
> | |
<link.icon className={link.className} /> | |
</LinkItem> | |
))} | |
</ul> | |
<li className="mb-2"> | |
<div className="mx-2 flex items-center justify-center gap-3"> | |
{SOCIAL_LINKS.map((link) => ( | |
<LinkIconItem | |
key={link.name} | |
href={link.href} | |
onClick={() => { | |
void router.push(link.href); | |
}} | |
> | |
<link.icon | |
size={20} | |
className="transition-all group-hover:rotate-3 group-hover:scale-125" | |
/> | |
</LinkIconItem> | |
))} | |
</div> | |
</li> | |
<li> | |
<div className="mb-2 ml-2 text-xs font-semibold text-slate-10"></div> | |
</li> | |
<li> | |
<AuthItem session={session} signOut={signOut} signIn={signIn} /> | |
</li> | |
</ul> | |
</Sidebar> | |
); | |
}; | |
export default LeftSidebar; | |