- add Login, LoginCompany, Profile, RegisterCompany pages - add Zustand for handling current user state and token - add components - add company, user models
112 lines
5.3 KiB
TypeScript
112 lines
5.3 KiB
TypeScript
import { Link, useLocation } from "react-router-dom";
|
||
import { Sidebar,
|
||
SidebarContent,
|
||
SidebarFooter,
|
||
SidebarGroup,
|
||
SidebarGroupContent,
|
||
SidebarGroupLabel,
|
||
SidebarHeader,
|
||
SidebarMenu,
|
||
SidebarMenuButton,
|
||
SidebarMenuItem,
|
||
SidebarRail } from "@renderer/components/ui/sidebar";
|
||
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@renderer/components/ui/collapsible";
|
||
import { ChevronRight } from "lucide-react";
|
||
import { useUserStore } from "@renderer/hooks/userStore";
|
||
|
||
import NavUser from "./NavUser";
|
||
|
||
const AppSidebar = ({ ...props }: React.ComponentProps<typeof Sidebar>) => {
|
||
const loc = useLocation();
|
||
const userData = useUserStore((s) => s.userData);
|
||
if (userData === null)
|
||
return null;
|
||
return (
|
||
<Sidebar {...props}>
|
||
<SidebarHeader>
|
||
<SidebarMenu>
|
||
<SidebarMenuItem>
|
||
<SidebarMenuButton size="lg" asChild>
|
||
<Link to="/">
|
||
<div className="flex flex-col gap-0.5 leading-none">
|
||
<span className="text-2xl font-semibold">Мой Управдом</span>
|
||
</div>
|
||
</Link>
|
||
</SidebarMenuButton>
|
||
</SidebarMenuItem>
|
||
</SidebarMenu>
|
||
</SidebarHeader>
|
||
<SidebarContent>
|
||
<Collapsible defaultOpen className="group/collapsible">
|
||
<SidebarGroup>
|
||
<SidebarGroupLabel
|
||
asChild
|
||
className="group/label text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground text-sm"
|
||
>
|
||
<CollapsibleTrigger>
|
||
Главное
|
||
<ChevronRight className="ml-auto transition-transform group-data-[state=open]/collapsible:rotate-90" />
|
||
</CollapsibleTrigger>
|
||
</SidebarGroupLabel>
|
||
<CollapsibleContent>
|
||
<SidebarGroupContent>
|
||
<SidebarMenu>
|
||
<SidebarMenuItem>
|
||
<SidebarMenuButton asChild isActive={loc.pathname === "/addresses"}>
|
||
<Link to="/addresses">Адреса</Link>
|
||
</SidebarMenuButton>
|
||
</SidebarMenuItem>
|
||
</SidebarMenu>
|
||
<SidebarMenu>
|
||
<SidebarMenuItem>
|
||
<SidebarMenuButton asChild isActive={loc.pathname === "/chats"}>
|
||
<Link to="/chats">Чаты</Link>
|
||
</SidebarMenuButton>
|
||
</SidebarMenuItem>
|
||
</SidebarMenu>
|
||
<SidebarMenu>
|
||
<SidebarMenuItem>
|
||
<SidebarMenuButton asChild isActive={loc.pathname === "/notifications"}>
|
||
<Link to="/notifications">Уведомления</Link>
|
||
</SidebarMenuButton>
|
||
</SidebarMenuItem>
|
||
</SidebarMenu>
|
||
</SidebarGroupContent>
|
||
</CollapsibleContent>
|
||
</SidebarGroup>
|
||
</Collapsible>
|
||
<Collapsible defaultOpen className="group/collapsible">
|
||
<SidebarGroup>
|
||
<SidebarGroupLabel
|
||
asChild
|
||
className="group/label text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground text-sm"
|
||
>
|
||
<CollapsibleTrigger>
|
||
Работа с пользователями
|
||
<ChevronRight className="ml-auto transition-transform group-data-[state=open]/collapsible:rotate-90" />
|
||
</CollapsibleTrigger>
|
||
</SidebarGroupLabel>
|
||
<CollapsibleContent>
|
||
<SidebarGroupContent>
|
||
<SidebarMenu>
|
||
<SidebarMenuItem>
|
||
<SidebarMenuButton asChild isActive={loc.pathname === "/requests"}>
|
||
<Link to="/requests">Заявки на присоединения</Link>
|
||
</SidebarMenuButton>
|
||
</SidebarMenuItem>
|
||
</SidebarMenu>
|
||
</SidebarGroupContent>
|
||
</CollapsibleContent>
|
||
</SidebarGroup>
|
||
</Collapsible>
|
||
</SidebarContent>
|
||
<SidebarFooter>
|
||
<NavUser user={userData}/>
|
||
</SidebarFooter>
|
||
<SidebarRail />
|
||
</Sidebar>
|
||
)
|
||
};
|
||
|
||
export default AppSidebar;
|