Presupuestador_web/client/src/components/Layout/LayoutHeader.tsx

99 lines
3.1 KiB
TypeScript
Raw Normal View History

2024-08-09 14:50:25 +00:00
import { Button, Sheet, SheetContent, SheetTrigger } from "@/ui";
2024-06-09 20:04:46 +00:00
2024-10-01 10:21:08 +00:00
import SupportModal from "@/app/support/components/SupportModal";
2024-08-25 20:20:38 +00:00
import { cn } from "@/lib/utils";
2024-08-09 14:50:25 +00:00
import { MenuIcon, Package2Icon } from "lucide-react";
2024-08-25 20:20:38 +00:00
import { useCallback } from "react";
2024-06-09 20:04:46 +00:00
import { Trans } from "react-i18next";
2024-08-25 20:20:38 +00:00
import { Link, useLocation } from "react-router-dom";
2024-06-09 20:04:46 +00:00
import { UeckoLogo } from "../UeckoLogo";
2024-08-09 14:50:25 +00:00
import { UserButton } from "./components";
2024-06-09 20:04:46 +00:00
2024-10-01 12:07:28 +00:00
const mainMenu = [
{
label: "main_menu.quotes",
to: "/quotes",
},
{
label: "main_menu.catalog",
to: "/catalog",
},
{
label: "main_menu.settings",
to: "/settings",
},
];
2024-06-09 20:04:46 +00:00
export const LayoutHeader = () => {
2024-08-25 20:20:38 +00:00
const location = useLocation();
const isActiveLink = useCallback(
(path: string) => location.pathname === path,
[location.pathname]
);
2024-06-09 20:04:46 +00:00
return (
2024-08-27 18:58:35 +00:00
<header className='sticky top-0 z-20 flex items-center h-16 gap-6 px-4 border-b shadow bg-accent md:px-6'>
<nav className='flex-col hidden gap-6 text-lg font-medium md:flex md:flex-row md:items-center md:text-sm'>
<Link to='/' className='flex items-center mr-6 font-semibold'>
2024-06-09 20:04:46 +00:00
<UeckoLogo className='w-24' />
<span className='sr-only'>Uecko</span>
</Link>
2024-10-01 12:07:28 +00:00
{mainMenu.map((menuItem) => (
<Link
to={menuItem.to}
className={cn(
"transition-colors text-muted-foreground hover:text-foreground",
isActiveLink(menuItem.to)
? "text-foreground font-bold"
: "text-muted-foreground font-semibold"
)}
>
<Trans i18nKey={menuItem.label} />
</Link>
))}
2024-06-09 20:04:46 +00:00
</nav>
<Sheet>
<SheetTrigger asChild>
<Button variant='outline' size='icon' className='shrink-0 md:hidden'>
<MenuIcon className='w-5 h-5' />
<span className='sr-only'>Toggle navigation menu</span>
</Button>
</SheetTrigger>
<SheetContent side='left'>
<nav className='grid gap-6 text-lg font-medium'>
<Link to='/' className='flex items-center gap-2 text-lg font-semibold'>
<Package2Icon className='w-6 h-6' />
<span className='sr-only'>Uecko</span>
</Link>
2024-10-01 12:07:28 +00:00
{mainMenu.map((menuItem) => (
<Link
key={menuItem.to}
to={menuItem.to}
className={cn(
"flex items-center gap-4 px-4 py-3 rounded-lg transition-colors",
"hover:bg-primary-light hover:text-primary text-muted-foreground"
)}
>
<Trans i18nKey={menuItem.label} />
</Link>
))}
2024-06-09 20:04:46 +00:00
</nav>
</SheetContent>
</Sheet>
2024-10-01 12:07:28 +00:00
2024-08-27 18:58:35 +00:00
<Link to='/' className='flex items-center font-semibold shrink-0 md:hidden'>
<UeckoLogo className='w-24' />
<span className='sr-only'>Uecko</span>
</Link>
2024-10-01 12:07:28 +00:00
2024-08-09 14:50:25 +00:00
<div className='flex items-center justify-end w-full gap-4 md:ml-auto md:gap-2 lg:gap-4'>
2024-06-09 20:04:46 +00:00
<UserButton />
2024-10-01 10:21:08 +00:00
<SupportModal />
2024-06-09 20:04:46 +00:00
</div>
</header>
);
};
LayoutHeader.displayName = "LayoutHeader";