60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import { useQuery, useSuspenseQuery } from "@tanstack/react-query";
|
|
import {
|
|
Sidebar,
|
|
SidebarContent,
|
|
SidebarHeader,
|
|
SidebarMenu,
|
|
SidebarMenuItem,
|
|
} from "@/components/ui/sidebar";
|
|
import { useSession } from "@/lib/auth-client";
|
|
import { getSettings } from "../../lib/queries/getSettings";
|
|
import { permissionQuery } from "../../lib/queries/permsCheck";
|
|
import AdminSidebar from "./AdminBar";
|
|
import DocBar from "./DocBar";
|
|
import MobileBar from "./MobileBar";
|
|
import TransportationBar from "./TransportationBar";
|
|
|
|
export function AppSidebar() {
|
|
const { data: session } = useSession();
|
|
const { data: settings, isLoading } = useSuspenseQuery(getSettings());
|
|
const { data: canRead = false } = useQuery(
|
|
permissionQuery({
|
|
openDock: ["read"],
|
|
}),
|
|
);
|
|
|
|
return (
|
|
<Sidebar
|
|
variant="sidebar"
|
|
collapsible="offcanvas"
|
|
className="top-(--header-height) h-[calc(100svh-var(--header-height))]!"
|
|
>
|
|
<SidebarHeader>
|
|
<SidebarMenu>
|
|
<SidebarMenuItem>
|
|
<SidebarContent>
|
|
<DocBar />
|
|
{!isLoading &&
|
|
settings.filter((n: any) => n.name === "mobile")[0].active && (
|
|
<MobileBar />
|
|
)}
|
|
|
|
{!isLoading &&
|
|
settings.filter((n: any) => n.name === "opendock_sync")[0]
|
|
?.active &&
|
|
canRead && <TransportationBar />}
|
|
|
|
{session &&
|
|
(session.user.role === "admin" ||
|
|
session.user.role === "systemAdmin" ||
|
|
session.user.role === "manager") && (
|
|
<AdminSidebar session={session} />
|
|
)}
|
|
</SidebarContent>
|
|
</SidebarMenuItem>
|
|
</SidebarMenu>
|
|
</SidebarHeader>
|
|
</Sidebar>
|
|
);
|
|
}
|