55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
|
"use client"
|
||
|
|
||
|
import Image from "next/image"
|
||
|
import { useParams, useRouter } from "next/navigation"
|
||
|
|
||
|
import { cn } from "@/lib/utils"
|
||
|
import { ActionTooltip } from "@/components/action-tooltip"
|
||
|
|
||
|
interface NavigationItemProps {
|
||
|
id: string;
|
||
|
imageUrl: string;
|
||
|
name: string;
|
||
|
};
|
||
|
|
||
|
export const NavigationItem = ({
|
||
|
id,
|
||
|
imageUrl,
|
||
|
name
|
||
|
}: NavigationItemProps) => {
|
||
|
const params = useParams();
|
||
|
const router = useRouter();
|
||
|
|
||
|
const onClick = () => {
|
||
|
router.push(`/servers/${id}`);
|
||
|
}
|
||
|
return (
|
||
|
<ActionTooltip
|
||
|
side="right"
|
||
|
align="center"
|
||
|
label={name}
|
||
|
>
|
||
|
<button
|
||
|
onClick={onClick}
|
||
|
className="group relative flex items-center"
|
||
|
>
|
||
|
<div className={cn(
|
||
|
"absolute left-0 bg-primary rounded-r-full transition-all w-[4px]",
|
||
|
params?.serverId === id && "group-hover:h-[20px]",
|
||
|
params?.serverId === id ? "h-[36px]" : "h-[8px]"
|
||
|
)}/>
|
||
|
<div className={cn(
|
||
|
"relative group flex mx-3 h-[48px] w-[48px] rounded-[24px] group-hover:rounded-[16px] transition-all overflow-hidden",
|
||
|
params?.serverId === id && "bg-primary/10 text-primary rounded-[16px]"
|
||
|
)}>
|
||
|
<Image
|
||
|
fill
|
||
|
src={imageUrl}
|
||
|
alt="Channel"
|
||
|
/>
|
||
|
</div>
|
||
|
</button>
|
||
|
</ActionTooltip>
|
||
|
)
|
||
|
}
|