import Icon from "@mdi/react"; import { BookPlus, Calendar, ChevronsUpDown, Home, Inbox, ListTodo, LogOut, Monitor, Moon, Palette, PanelLeft, Plus, Search, Sun, Waypoints } from "lucide-react"; import { Button } from "~/components/ui/button"; import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, useSidebar } from "~/components/ui/sidebar"; import { type ColorName, colors } from "~/lib/color"; import { type IconName, icons } from "~/lib/icon"; import { NewNoteDialog } from "~/components/note/new_note_dialog"; import { NewCollectionDialog } from "~/components/collection/new_collection_dialog"; import { cn } from "~/lib/utils"; import { useCollectionNotesMetadata, useCollections } from "~/hooks/use-metadata"; import { useIsMobile } from "~/hooks/use-mobile"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "~/components/ui/dropdown-menu"; import { UserAvatar } from "~/components/user/user_avatar"; import { Link } from "@tanstack/react-router"; import { useTheme } from "~/hooks/use-theme"; import { ToggleGroup, ToggleGroupItem } from "./ui/toggle-group"; export function AppSidebar() { const collections = useCollections(); return ( } /> } /> } /> } /> } /> Collections {collections.map((collection) => ())} ); } type NavButtonProps = { href: string; label: string; icon?: React.ReactNode; children?: React.ReactNode; } function NavButton(props: NavButtonProps) { const { setOpenMobile } = useSidebar(); return ( setOpenMobile(false)}> {props.icon} {props.label} {props.children} ); } function HeaderButtons(props: { children: React.ReactNode }) { return (
{props.children}
); } type CollectionButtonProps = { id: string; name: string; icon: IconName | ""; color: ColorName | ""; } function CollectionButton(props: CollectionButtonProps) { const icon = props.icon && icons[props.icon]; const color = props.color ? colors[props.color] : colors.white; return (
{icon && }
{props.name}
); } function SidebarToggle() { const isMobile = useIsMobile(); const { toggleSidebar } = useSidebar() if (isMobile) { return null; } return ( ); } function InboxButton() { const notes = useCollectionNotesMetadata(""); const count = notes.length; return ( }> {count} ); } function NavUser() { const isMobile = useIsMobile(); const [theme, setTheme] = useTheme(); // const { data: session } = useSession(); // const user = session?.user; const user = { name: "Kalle Struik", email: "kalle@kallestruik.nl" }; const email = user?.email ?? undefined; const name = user?.name ?? undefined function handleSignOut() { // // End the session // signOut(); // // Clear all locally stored data // localStorage.clear(); // indexedDB.databases().then((dbs) => { // dbs.forEach((db) => { // db.name && indexedDB.deleteDatabase(db.name); // }); // }); } return (
{name} {email}
{name} {email}
Theme
setTheme("system")}> setTheme("light")}> setTheme("dark")}>
Log out
); }