Files
lixiyu-net/components/utils/NavBar.tsx

115 lines
4.0 KiB
TypeScript
Raw Normal View History

2023-12-25 17:21:39 +08:00
import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet";
import { Config } from "@/data/config";
import { nanoid } from "nanoid";
import { useTheme } from "next-themes";
import Link from "next/link";
import { useState } from "react";
2024-01-06 11:47:18 +08:00
import { MdMenu, MdOutlineDarkMode, MdOutlineLightMode, MdSearch } from "react-icons/md";
2023-12-25 17:21:39 +08:00
const MenuItems = [
{
title: "HOME",
href: "/",
},
{
title: "POSTS",
href: "/posts",
},
{
title: "ABOUT",
href: "/about",
},
];
export const NavBar = () => {
const [isSideNavOpen, setIsSideNavOpen] = useState(false);
const { theme, setTheme } = useTheme();
const handleSwitchTheme = () => {
theme === "light" ? setTheme("dark") : setTheme("light");
setIsSideNavOpen(false);
};
return (
2024-04-03 22:08:27 +08:00
<Sheet onOpenChange={(open) => setIsSideNavOpen(open)} open={isSideNavOpen}>
<div className="sticky top-0 z-50 border-black-200 dark:border-gray-700 border-b bg-white dark:bg-gray-950 flex flex-wrap justify-between py-3 px-5 md:px-10 lg:px-20 xl:px-32 2xl:px-52">
<Link className="cursor-pointer my-auto text-2xl font-bold" href="/">
<h1 className={`font-fang-zheng-xiao-biao-song my-auto`} title="Click to jump to home page.">
{Config.SiteTitle}
</h1>
2023-12-25 17:21:39 +08:00
</Link>
<div className="my-auto hidden sm:flex">
{MenuItems.map((menuItem) => (
<Link
2024-04-03 22:08:27 +08:00
className="font-bold hover:text-sky-700 dark:hover:text-sky-500 mx-2 my-auto px-2"
href={menuItem.href}
key={nanoid()}
onClick={() => setIsSideNavOpen(false)}
>
2023-12-25 17:21:39 +08:00
{menuItem.title}
</Link>
))}
2024-01-06 11:47:18 +08:00
<Link
className="cursor-pointer mx-2 rounded-full p-1 text-3xl text-black hover:bg-gray-200 dark:text-gray-50 dark:hover:bg-gray-800"
2024-04-03 22:08:27 +08:00
href={"/search"}
title="Search posts by keywords"
2024-01-06 11:47:18 +08:00
>
<MdSearch />
</Link>
2023-12-25 17:21:39 +08:00
<div
2024-01-06 11:47:18 +08:00
className="cursor-pointer mx-1 rounded-full p-1 text-3xl text-black hover:bg-gray-200 dark:text-gray-50 dark:hover:bg-gray-800"
2023-12-25 17:21:39 +08:00
onClick={handleSwitchTheme}
2024-04-03 22:08:27 +08:00
title={theme === "light" ? "Switch to dark mode" : "Switch to light mode"}
2023-12-25 17:21:39 +08:00
>
{theme === "light" ? <MdOutlineDarkMode /> : <MdOutlineLightMode />}
</div>
</div>
<div className="text-3xl sm:hidden my-auto">
<SheetTrigger
className="text-black rounded-full p-1 hover:bg-gray-200 dark:text-gray-50 dark:hover:bg-gray-800"
2024-04-03 22:08:27 +08:00
title="Spread the navigation menu"
>
<MdMenu
onClick={() => {
setIsSideNavOpen(!isSideNavOpen);
}}
/>
</SheetTrigger>
</div>
</div>
<SheetContent className="bg:white border-none py-16 shadow-md dark:bg-black flex flex-col text-end">
2024-01-08 20:09:40 +08:00
{MenuItems.map((menuItem) => (
2024-01-08 18:18:21 +08:00
<Link
2024-04-03 22:08:27 +08:00
className="border-b border-dashed p-3 text-xl hover:text-sky-500"
2024-01-08 20:09:40 +08:00
href={menuItem.href}
key={nanoid()}
onClick={() => setIsSideNavOpen(false)}
2024-01-08 18:18:21 +08:00
>
2024-01-08 20:09:40 +08:00
{menuItem.title}
2024-01-08 18:18:21 +08:00
</Link>
2024-01-08 20:09:40 +08:00
))}
<Link
className="border-b border-dashed p-3 text-xl hover:text-sky-500"
href="/search"
onClick={() => setIsSideNavOpen(false)}
2024-04-03 22:08:27 +08:00
title="Search the posts"
2024-01-08 20:09:40 +08:00
>
{"SEARCH"}
</Link>
<div
className="flex text-xl p-3 cursor-pointer border-b border-dashed justify-end hover:text-sky-500"
onClick={handleSwitchTheme}
>
2024-01-08 18:18:21 +08:00
<div
2024-01-08 20:09:40 +08:00
className="cursor-pointer mx-1 my-auto rounded-full text-2xl"
2024-04-03 22:08:27 +08:00
title={theme === "light" ? "Switch to dark mode" : "Switch to light mode"}
2024-01-08 18:18:21 +08:00
>
{theme === "light" ? <MdOutlineDarkMode /> : <MdOutlineLightMode />}
</div>
2024-01-08 20:16:33 +08:00
<div className="my-auto">{theme === "light" ? "DARK" : "LIGHT"}</div>
2024-01-08 18:18:21 +08:00
</div>
</SheetContent>
2023-12-25 17:21:39 +08:00
</Sheet>
);
};