mirror of
https://github.com/ForFarmTeam/ForFarm.git
synced 2025-12-19 05:54:08 +01:00
178 lines
3.4 KiB
TypeScript
178 lines
3.4 KiB
TypeScript
"use client";
|
|
|
|
import * as React from "react";
|
|
import {
|
|
AudioWaveform,
|
|
BookOpen,
|
|
Bot,
|
|
Command,
|
|
Frame,
|
|
GalleryVerticalEnd,
|
|
Map,
|
|
PieChart,
|
|
Settings2,
|
|
SquareTerminal,
|
|
} from "lucide-react";
|
|
|
|
import { NavMain } from "./nav-main";
|
|
import { NavProjects } from "./nav-projects";
|
|
import { NavUser } from "./nav-user";
|
|
import { TeamSwitcher } from "./team-switcher";
|
|
import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarRail } from "@/components/ui/sidebar";
|
|
import { useEffect } from "react";
|
|
import { fetchUserMe } from "@/api/user";
|
|
|
|
const data = {
|
|
user: {
|
|
name: "shadcn",
|
|
email: "m@example.com",
|
|
avatar: "/avatars/avatar.webp",
|
|
},
|
|
teams: [
|
|
{
|
|
name: "Farm 1",
|
|
logo: GalleryVerticalEnd,
|
|
plan: "Hatyai",
|
|
},
|
|
{
|
|
name: "Farm 2",
|
|
logo: AudioWaveform,
|
|
plan: "Songkla",
|
|
},
|
|
{
|
|
name: "Farm 3",
|
|
logo: Command,
|
|
plan: "Layong",
|
|
},
|
|
],
|
|
navMain: [
|
|
{
|
|
title: "Dashboard",
|
|
url: "#",
|
|
icon: SquareTerminal,
|
|
isActive: true,
|
|
items: [
|
|
{
|
|
title: "Analytic",
|
|
url: "#",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: "AI Chatbot",
|
|
url: "#",
|
|
icon: Bot,
|
|
items: [
|
|
{
|
|
title: "Main model",
|
|
url: "#",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: "Documentation",
|
|
url: "#",
|
|
icon: BookOpen,
|
|
items: [
|
|
{
|
|
title: "Introduction",
|
|
url: "#",
|
|
},
|
|
{
|
|
title: "Get Started",
|
|
url: "#",
|
|
},
|
|
{
|
|
title: "Tutorials",
|
|
url: "#",
|
|
},
|
|
{
|
|
title: "Changelog",
|
|
url: "#",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: "Settings",
|
|
url: "#",
|
|
icon: Settings2,
|
|
items: [
|
|
{
|
|
title: "General",
|
|
url: "#",
|
|
},
|
|
{
|
|
title: "Team",
|
|
url: "#",
|
|
},
|
|
{
|
|
title: "Billing",
|
|
url: "#",
|
|
},
|
|
{
|
|
title: "Limits",
|
|
url: "#",
|
|
},
|
|
],
|
|
},
|
|
],
|
|
projects: [
|
|
{
|
|
name: "Crops 1",
|
|
url: "#",
|
|
icon: Frame,
|
|
},
|
|
{
|
|
name: "Crops 2",
|
|
url: "#",
|
|
icon: PieChart,
|
|
},
|
|
{
|
|
name: "Crops 3",
|
|
url: "#",
|
|
icon: Map,
|
|
},
|
|
],
|
|
};
|
|
|
|
export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
|
|
const [user, setUser] = React.useState<{ name: string; email: string; avatar: string }>({
|
|
name: "",
|
|
email: "",
|
|
avatar: "/avatars/avatar.webp",
|
|
});
|
|
const [loading, setLoading] = React.useState(true);
|
|
const [error, setError] = React.useState("");
|
|
|
|
useEffect(() => {
|
|
async function getUser() {
|
|
try {
|
|
const data = await fetchUserMe();
|
|
let to_set = user;
|
|
to_set.name = data.user.UUID;
|
|
to_set.email = data.user.Email;
|
|
setUser(to_set);
|
|
} catch (err: any) {
|
|
setError(err.message);
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
}
|
|
getUser();
|
|
}, []);
|
|
|
|
return (
|
|
<Sidebar collapsible="icon" {...props}>
|
|
<SidebarHeader>
|
|
<TeamSwitcher teams={data.teams} />
|
|
</SidebarHeader>
|
|
<SidebarContent>
|
|
<NavMain items={data.navMain} />
|
|
<NavProjects projects={data.projects} />
|
|
</SidebarContent>
|
|
<SidebarFooter>{loading ? "Loading..." : error ? error : <NavUser user={user} />}</SidebarFooter>
|
|
<SidebarRail />
|
|
</Sidebar>
|
|
);
|
|
}
|