web-humas-fe/components/layout/sidebar/sidebar-collapse-sub-items.tsx

113 lines
3.1 KiB
TypeScript
Raw Normal View History

2024-04-19 13:26:27 +00:00
import React, { useEffect, useState } from "react";
2025-02-13 08:25:39 +00:00
import { Accordion, AccordionItem, Tooltip } from "@heroui/react";
2024-04-19 13:26:27 +00:00
import clsx from "clsx";
import Link from "next/link";
2024-11-05 06:15:40 +00:00
import { ChevronUpIcon } from "../../icons";
import { Submenu1Icon, Submenu2Icon } from "../../icons/sidebar-icon";
2024-04-19 13:26:27 +00:00
import { useSidebar } from "./sidebar-context";
interface SubSubItems {
title: string;
path: string;
isSubActive: boolean;
}
interface SubItems {
title: string;
path: string;
isActive: boolean;
isSubActive: boolean;
subItems?: SubSubItems[];
}
interface Props {
title: string;
icon?: any;
path: string;
isActive: boolean;
isParentActive: boolean;
}
export const SidebarCollapseSubItems = ({
title,
icon,
path,
isActive,
isParentActive,
}: Props) => {
const [open, setOpen] = useState(false);
let no = 0;
// useEffect(() => {
// console.log("Sidebar Collapse Sub Item :: ", title, path, isParentActive, isActive, icon);
// }, []);
const { isOpen, toggleSidebar } = useSidebar();
const renderIcon = () => {
switch (icon) {
2024-11-05 06:15:40 +00:00
case "submenu1":
2024-04-19 13:26:27 +00:00
return <Submenu1Icon size={16} />;
2024-11-05 06:15:40 +00:00
case "submenu2":
2024-04-19 13:26:27 +00:00
return <Submenu2Icon size={16} />;
default:
return null; // Tidak ada ikon yang sesuai
}
};
return (
<li key={`${title}-${(no += 1)}`}>
2024-11-05 06:15:40 +00:00
{isOpen ? (
<Link href={path}>
2024-04-19 13:26:27 +00:00
<div
className={`flex items-center min-h-[36px] rounded-md py-1 text-sm
${isOpen ? "px-3.5" : "px-0"}
2024-11-05 06:15:40 +00:00
${
isParentActive
? "text-zinc-300 dark:text-zinc-500 hover:text-zinc-200 dark:hover:text-zinc-600"
: "text-zinc-600 dark:text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-300"
}
${
isActive
? "font-bold hover:font-bold !text-zinc-100 dark:!text-zinc-600"
: "hover:font-semibold"
}`}
2024-04-19 13:26:27 +00:00
>
2024-11-05 06:15:40 +00:00
<span
className={`${isOpen ? "pl-3" : "pl-0"} pr-0 flex flex-row gap-2`}
>
{icon} {isOpen && title}
</span>
2024-04-19 13:26:27 +00:00
</div>
</Link>
2024-11-05 06:15:40 +00:00
) : (
2024-04-19 13:26:27 +00:00
<Tooltip content={title} delay={0} closeDelay={0} placement="right">
2024-11-05 06:15:40 +00:00
<Link href={path}>
2024-04-19 13:26:27 +00:00
<div
className={`flex justify-center min-h-[36px] rounded-md py-1 text-sm
${isOpen ? "px-3.5" : "px-0"}
2024-11-05 06:15:40 +00:00
${
isParentActive
? "text-zinc-300 dark:text-zinc-500 hover:text-zinc-200 dark:hover:text-zinc-600"
: "text-zinc-600 dark:text-zinc-400 hover:text-zinc-700 dark:hover:text-zinc-300"
}
${
isActive
? "font-bold hover:font-bold !text-zinc-100 dark:!text-zinc-600"
: "hover:font-semibold"
}`}
2024-04-19 13:26:27 +00:00
>
2024-11-05 06:15:40 +00:00
<span
className={`${
isOpen ? "pl-3" : `${isParentActive ? "pl-3" : "pl-0"}`
} pr-0 flex flex-row`}
>
{icon} {isOpen && title}
</span>
2024-04-19 13:26:27 +00:00
</div>
</Link>
</Tooltip>
2024-11-05 06:15:40 +00:00
)}
2024-04-19 13:26:27 +00:00
</li>
);
};