"use client";
import { useState, useEffect, useCallback, memo, Fragment } from "react";
import Logo from "../Logo";
import HamburgerButton from "../HamburgerButton";
import Button from "@/components/button/Button";
import { NavItem } from "@/types/navigation";
import { cls } from "@/lib/utils";
import { getButtonProps } from "@/lib/buttonUtils";
import { useButtonClick } from "@/components/button/useButtonClick";
import { useTheme } from "@/providers/themeProvider/ThemeProvider";
import type { ButtonConfig } from "@/types/button";
import "./NavbarStyleCentered.css";
import { ArrowUpRight } from "lucide-react";
interface NavLinkProps {
item: NavItem;
index: number;
onClose: () => void;
}
const NavLink = memo(function NavLink({ item, index, onClose }: NavLinkProps) {
const handleClick = useButtonClick(item.id, onClose);
return (
);
});
interface NavbarStyleCenteredProps {
navItems: NavItem[];
button: ButtonConfig;
logoSrc?: string;
logoAlt?: string;
brandName?: string;
className?: string;
}
const NavbarStyleCentered = memo(function NavbarStyleCentered({
navItems,
button,
logoSrc,
logoAlt = "",
brandName = "Webild",
className = "",
}: NavbarStyleCenteredProps) {
const [isActive, setIsActive] = useState(false);
const theme = useTheme();
const getButtonConfigProps = () => {
if (theme.defaultButtonVariant === "hover-bubble") {
return { bgClassName: "w-full" };
}
if (theme.defaultButtonVariant === "icon-arrow") {
return { className: "justify-between" };
}
return {};
};
const handleToggle = useCallback(() => {
setIsActive((prev) => !prev);
}, []);
const handleClose = useCallback(() => {
setIsActive(false);
}, []);
useEffect(() => {
const handleKeyDown = (e: KeyboardEvent) => {
if (e.key === "Escape" && isActive) {
setIsActive(false);
}
};
document.addEventListener("keydown", handleKeyDown);
return () => document.removeEventListener("keydown", handleKeyDown);
}, [isActive]);
return (
);
});
NavbarStyleCentered.displayName = "NavbarStyleCentered";
export default NavbarStyleCentered;