import { twMerge } from "tailwind-merge"; import { HelpCircleIcon, SendIcon, ChevronRightIcon, ConstructionIcon, PlusIcon, MinusIcon, ReceiptTextIcon, Grid2X2Icon, NotebookPenIcon, MessageCircleIcon, SquareKanban, Kanban, } from "lucide-react"; import { Link as RouterLink, useLocation } from "react-router-dom"; import { Separator } from "react-aria-components"; import { Link } from "@ui/ui-library/link"; import { Icon } from "@ui/ui-library/icon"; import { Avatar, AvatarBadge } from "@ui/ui-library/avatar"; import { Dialog } from "@ui/ui-library/dialog"; import { Button } from "@ui/ui-library/button"; import { DisclosurePanel, DisclosureControl, Disclosure, } from "@ui/ui-library/disclosure"; import { LinkProps } from "react-aria-components"; import { Popover } from "@ui/ui-library/popover"; import { AvailableIcon } from "@ui/ui-library/icons"; import { useState, useRef } from "react"; import logo from "../assets/icon.jpg"; import { ThemeSwitcher } from "./ThemeSwitcher"; import { Text } from "@ui/ui-library/text"; import { SignOutButton } from "./SignOutButton"; import { useUser } from "@ui/providers/UserStoreProvider"; type NavLinkItem = { isActive?: boolean; } & LinkProps; type NavLinkProps = NavLinkItem | { title: string; items: NavLinkItem[] }; function NavLink(props: NavLinkProps) { if ("items" in props) { return ( {props.title}{" "} ); } const { isActive, ...rest } = props; return ( [data-ui=icon]:not([class*=size-])]:size-4.5", "[&>[data-ui=notification-badge]]:bg-navbar-darker", "[&>[data-ui=notification-badge]]:rounded-md", "[&>[data-ui=notification-badge]]:top-1/2", "[&>[data-ui=notification-badge]]:right-1", "[&>[data-ui=notification-badge]]:-translate-y-1/2", "[&>[data-ui=notification-badge]]:bg-navbar-darker", "[&>[data-ui=notification-badge]]:p-3", "[&>[data-ui=nxotification-badge]]:text-xs/6", "[&>[data-ui=notification-badge]]:font-semibold", isActive ? "bg-navbar-darker font-semibold text-white [&>[data-ui=notification-badge]]:bg-transparent" : [ "font-medium", "text-gray-300/90 [&:not(:hover)>[data-ui=icon]]:bg-navbar-darker", ] )} > {props.children} ); } export function UserMenuPopover({ isCollapsed }: { isCollapsed: boolean }) { const user = useUser(); const [isPopoverOpen, setIsPopoverOpen] = useState(false); const ref = useRef(null); return ( <>
} />
{user.name}
); } export const SideNavigation = ({ isMobileMenuOpen, }: { isMobileMenuOpen: boolean; }) => { const isCollapsable = !isMobileMenuOpen; const [isCollapsed, setIsCollapsed] = useState(isCollapsable ? false : true); return ( ); }; export function MainNavigation({ isCollapsed }: { isCollapsed: boolean }) { const location = useLocation(); const navItems: { path: string; label: string; icon: React.ReactNode; isDisabled?: boolean; }[] = [ { path: "/", label: "Tableaux", icon: , }, { path: "/devis", label: "Devis", icon: , isDisabled: true, }, { path: "/factures", label: "Factures", icon: , isDisabled: true, }, { path: "/planning", label: "Planning", icon: , }, { path: "/kanban", label: "Kanban", icon: , isDisabled: true, }, { path: "/chantiers", label: "Chantiers", icon: , isDisabled: true, }, { path: "/chat", label: "Discussions", icon: , }, ]; return ( ); }