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>
|
|
|
|
|
);
|
|
|
|
|
};
|