2023-10-16 12:10:52 -05:00
|
|
|
import SettingsSidebar from "@/components/SettingsSidebar";
|
|
|
|
import { ReactNode, useEffect, useState } from "react";
|
|
|
|
import ModalManagement from "@/components/ModalManagement";
|
|
|
|
import useModalStore from "@/store/modals";
|
|
|
|
import { useRouter } from "next/router";
|
|
|
|
import ClickAwayHandler from "@/components/ClickAwayHandler";
|
|
|
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
2023-10-17 15:02:07 -05:00
|
|
|
import { faBars, faChevronLeft } from "@fortawesome/free-solid-svg-icons";
|
|
|
|
import Link from "next/link";
|
2023-10-16 12:10:52 -05:00
|
|
|
|
|
|
|
interface Props {
|
|
|
|
children: ReactNode;
|
|
|
|
}
|
|
|
|
|
|
|
|
export default function SettingsLayout({ children }: Props) {
|
|
|
|
const { modal } = useModalStore();
|
|
|
|
|
|
|
|
const router = useRouter();
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
modal
|
|
|
|
? (document.body.style.overflow = "hidden")
|
|
|
|
: (document.body.style.overflow = "auto");
|
|
|
|
}, [modal]);
|
|
|
|
|
|
|
|
const [sidebar, setSidebar] = useState(false);
|
|
|
|
|
|
|
|
window.addEventListener("resize", () => setSidebar(false));
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
setSidebar(false);
|
|
|
|
}, [router]);
|
|
|
|
|
|
|
|
const toggleSidebar = () => {
|
|
|
|
setSidebar(!sidebar);
|
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<>
|
|
|
|
<ModalManagement />
|
|
|
|
|
2023-10-18 16:50:55 -05:00
|
|
|
<div className="flex max-w-screen-md mx-auto">
|
2023-10-16 12:10:52 -05:00
|
|
|
<div className="hidden lg:block">
|
2023-10-17 15:02:07 -05:00
|
|
|
<SettingsSidebar />
|
2023-10-16 12:10:52 -05:00
|
|
|
</div>
|
|
|
|
|
2023-10-17 15:02:07 -05:00
|
|
|
<div className="w-full flex flex-col h-screen p-5">
|
2023-10-16 12:10:52 -05:00
|
|
|
<div className="flex gap-3">
|
|
|
|
<div
|
|
|
|
onClick={toggleSidebar}
|
|
|
|
className="inline-flex lg:hidden gap-1 items-center select-none cursor-pointer p-2 text-gray-500 dark:text-gray-300 rounded-md duration-100 hover:bg-slate-200 dark:hover:bg-neutral-700"
|
|
|
|
>
|
|
|
|
<FontAwesomeIcon icon={faBars} className="w-5 h-5" />
|
|
|
|
</div>
|
|
|
|
|
2023-10-17 15:02:07 -05:00
|
|
|
<Link
|
|
|
|
href="/dashboard"
|
|
|
|
className="inline-flex gap-1 items-center select-none cursor-pointer p-2 text-gray-500 dark:text-gray-300 rounded-md duration-100 hover:bg-slate-200 dark:hover:bg-neutral-700"
|
|
|
|
>
|
|
|
|
<FontAwesomeIcon icon={faChevronLeft} className="w-5 h-5" />
|
|
|
|
</Link>
|
|
|
|
|
2023-10-18 16:50:55 -05:00
|
|
|
<p className="capitalize text-3xl font-thin">
|
2023-10-16 12:10:52 -05:00
|
|
|
{router.asPath.split("/").pop()} Settings
|
|
|
|
</p>
|
|
|
|
</div>
|
2023-10-18 16:50:55 -05:00
|
|
|
|
2023-10-17 15:02:07 -05:00
|
|
|
<hr className="my-3 border-1 border-sky-100 dark:border-neutral-700" />
|
2023-10-18 16:50:55 -05:00
|
|
|
|
2023-10-16 12:10:52 -05:00
|
|
|
{children}
|
|
|
|
|
|
|
|
{sidebar ? (
|
|
|
|
<div className="fixed top-0 bottom-0 right-0 left-0 bg-gray-500 bg-opacity-10 backdrop-blur-sm flex items-center fade-in z-30">
|
|
|
|
<ClickAwayHandler
|
|
|
|
className="h-full"
|
|
|
|
onClickOutside={toggleSidebar}
|
|
|
|
>
|
|
|
|
<div className="slide-right h-full shadow-lg">
|
|
|
|
<SettingsSidebar />
|
|
|
|
</div>
|
|
|
|
</ClickAwayHandler>
|
|
|
|
</div>
|
|
|
|
) : null}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</>
|
|
|
|
);
|
|
|
|
}
|