74 lines
1.8 KiB
TypeScript
74 lines
1.8 KiB
TypeScript
import { redirect } from "next/navigation";
|
|
import SidebarItem from "@/components/shared/sidebar/SidebarItem";
|
|
import { Separator } from "@/components/ui/separator";
|
|
import { api } from "@/server/api/client";
|
|
import { getServerAuthSession } from "@/server/auth";
|
|
import { Archive, Calendar, Home, Search, Tag } from "lucide-react";
|
|
import serverConfig from "@lifetracker/shared/config";
|
|
|
|
import AllLists from "./AllLists";
|
|
import TimezoneDisplay from "./TimezoneDisplay";
|
|
|
|
export default async function Sidebar() {
|
|
|
|
|
|
const session = await getServerAuthSession();
|
|
if (!session) {
|
|
redirect("/");
|
|
}
|
|
|
|
const searchItem = serverConfig.meilisearch
|
|
? [
|
|
{
|
|
name: "Search",
|
|
icon: <Search size={18} />,
|
|
path: "/dashboard/search",
|
|
},
|
|
]
|
|
: [];
|
|
|
|
const menu: {
|
|
name: string;
|
|
icon: JSX.Element;
|
|
path: string;
|
|
}[] = [
|
|
{
|
|
name: "Day View",
|
|
icon: <Home size={18} />,
|
|
path: "/dashboard/day/today",
|
|
},
|
|
{
|
|
name: "Month View",
|
|
icon: <Calendar size={18} />,
|
|
path: "/dashboard/timeline/month",
|
|
},
|
|
...searchItem,
|
|
{
|
|
name: "Categories",
|
|
icon: <Tag size={18} />,
|
|
path: "/dashboard/categories",
|
|
},
|
|
];
|
|
|
|
return (
|
|
<aside className="flex h-[calc(100vh-64px)] w-60 flex-col gap-5 border-r p-4 ">
|
|
<div>
|
|
<ul className="space-y-2 text-sm font-medium">
|
|
{menu.map((item) => (
|
|
<SidebarItem
|
|
key={item.name}
|
|
logo={item.icon}
|
|
name={item.name}
|
|
path={item.path}
|
|
/>
|
|
))}
|
|
</ul>
|
|
</div>
|
|
<Separator />
|
|
<div className="mt-auto flex items-center border-t pt-2 text-sm text-gray-400">
|
|
<TimezoneDisplay />
|
|
</div>
|
|
</aside>
|
|
);
|
|
}
|