https://dev.kronoz.win/r/marzneshin.git
| 1 |
88bdde2 |
Mrdn |
2y ago |
import { Link } from "@tanstack/react-router"; |
| 2 |
88bdde2 |
Mrdn |
2y ago |
import type { FC } from "react"; |
| 3 |
88bdde2 |
Mrdn |
2y ago |
import type { SidebarItem as SidebarItemType } from "./types"; |
| 4 |
d636f3f |
Dawsh |
2y ago |
import { cn } from "@marzneshin/common/utils"; |
| 5 |
88bdde2 |
Mrdn |
2y ago |
import { type VariantProps, cva } from "class-variance-authority"; |
| 6 |
88bdde2 |
Mrdn |
2y ago |
import { useSidebarContext } from "./sidebar-provider"; |
| 7 |
1eb203e |
Mrdn |
2y ago |
|
| 8 |
1eb203e |
Mrdn |
2y ago |
const sidebarItemVariants = cva("w-full rounded-lg border p-2", { |
| 9 |
1eb203e |
Mrdn |
2y ago |
variants: { |
| 10 |
1eb203e |
Mrdn |
2y ago |
variant: { |
| 11 |
1eb203e |
Mrdn |
2y ago |
default: "bg-primary-foreground text-primary hover:bg-accent", |
| 12 |
88bdde2 |
Mrdn |
2y ago |
active: "bg-primary text-primary-foreground", |
| 13 |
1eb203e |
Mrdn |
2y ago |
}, |
| 14 |
1eb203e |
Mrdn |
2y ago |
size: { |
| 15 |
1eb203e |
Mrdn |
2y ago |
default: "", |
| 16 |
88bdde2 |
Mrdn |
2y ago |
collapsed: "", |
| 17 |
88bdde2 |
Mrdn |
2y ago |
}, |
| 18 |
88bdde2 |
Mrdn |
2y ago |
}, |
| 19 |
1eb203e |
Mrdn |
2y ago |
}); |
| 20 |
1eb203e |
Mrdn |
2y ago |
|
| 21 |
88bdde2 |
Mrdn |
2y ago |
export interface SidebarItemProps |
| 22 |
88bdde2 |
Mrdn |
2y ago |
extends React.HTMLAttributes<HTMLLinkElement>, |
| 23 |
1eb203e |
Mrdn |
2y ago |
VariantProps<typeof sidebarItemVariants> { |
| 24 |
1eb203e |
Mrdn |
2y ago |
item: SidebarItemType; |
| 25 |
1eb203e |
Mrdn |
2y ago |
} |
| 26 |
1eb203e |
Mrdn |
2y ago |
|
| 27 |
88bdde2 |
Mrdn |
2y ago |
export const SidebarItem: FC<SidebarItemProps> = ({ |
| 28 |
88bdde2 |
Mrdn |
2y ago |
item, |
| 29 |
88bdde2 |
Mrdn |
2y ago |
className, |
| 30 |
88bdde2 |
Mrdn |
2y ago |
variant, |
| 31 |
88bdde2 |
Mrdn |
2y ago |
}) => { |
| 32 |
88bdde2 |
Mrdn |
2y ago |
const { collapsed, setOpen } = useSidebarContext(); |
| 33 |
1eb203e |
Mrdn |
2y ago |
return ( |
| 34 |
88bdde2 |
Mrdn |
2y ago |
<li |
| 35 |
88bdde2 |
Mrdn |
2y ago |
key={item.title} |
| 36 |
88bdde2 |
Mrdn |
2y ago |
className={cn(sidebarItemVariants({ variant, className }))} |
| 37 |
88bdde2 |
Mrdn |
2y ago |
> |
| 38 |
88bdde2 |
Mrdn |
2y ago |
<Link |
| 39 |
88bdde2 |
Mrdn |
2y ago |
to={item.to} |
| 40 |
88bdde2 |
Mrdn |
2y ago |
onClick={() => setOpen?.(false)} |
| 41 |
88bdde2 |
Mrdn |
2y ago |
className={cn("flex flex-row items-center justify-center", { |
| 42 |
88bdde2 |
Mrdn |
2y ago |
"-justify-center gap-2": !collapsed, |
| 43 |
88bdde2 |
Mrdn |
2y ago |
})} |
| 44 |
88bdde2 |
Mrdn |
2y ago |
> |
| 45 |
88bdde2 |
Mrdn |
2y ago |
{item.icon} |
| 46 |
88bdde2 |
Mrdn |
2y ago |
{!collapsed && item.title} |
| 47 |
1eb203e |
Mrdn |
2y ago |
</Link> |
| 48 |
1eb203e |
Mrdn |
2y ago |
</li> |
| 49 |
88bdde2 |
Mrdn |
2y ago |
); |
| 50 |
88bdde2 |
Mrdn |
2y ago |
}; |