el.xwx.moe/layouts/MainLayout.tsx

72 lines
1.9 KiB
TypeScript
Raw Normal View History

2023-02-08 17:58:55 -06:00
import Navbar from "@/components/Navbar";
2023-11-07 12:06:42 -06:00
import AnnouncementBar from "@/components/AnnouncementBar";
2023-02-08 17:58:55 -06:00
import Sidebar from "@/components/Sidebar";
2023-11-07 12:06:42 -06:00
import { ReactNode, useEffect, useState } from "react";
2023-06-12 23:46:32 -05:00
import ModalManagement from "@/components/ModalManagement";
2023-07-16 10:51:24 -05:00
import useModalStore from "@/store/modals";
2023-11-07 12:06:42 -06:00
import getLatestVersion from "@/lib/client/getLatestVersion";
2023-02-08 17:58:55 -06:00
interface Props {
2023-02-08 17:58:55 -06:00
children: ReactNode;
}
export default function MainLayout({ children }: Props) {
2023-07-16 10:51:24 -05:00
const { modal } = useModalStore();
useEffect(() => {
modal
? (document.body.style.overflow = "hidden")
: (document.body.style.overflow = "auto");
}, [modal]);
2023-11-07 12:06:42 -06:00
const showAnnouncementBar = localStorage.getItem("showAnnouncementBar");
const [showAnnouncement, setShowAnnouncement] = useState(
showAnnouncementBar ? showAnnouncementBar === "true" : true
);
useEffect(() => {
getLatestVersion(setShowAnnouncement);
}, []);
useEffect(() => {
if (showAnnouncement) {
localStorage.setItem("showAnnouncementBar", "true");
setShowAnnouncement(true);
} else if (!showAnnouncement) {
localStorage.setItem("showAnnouncementBar", "false");
setShowAnnouncement(false);
}
}, [showAnnouncement]);
const toggleAnnouncementBar = () => {
setShowAnnouncement(!showAnnouncement);
};
return (
<>
<ModalManagement />
2023-06-12 23:46:32 -05:00
2023-11-07 12:06:42 -06:00
{showAnnouncement ? (
<AnnouncementBar toggleAnnouncementBar={toggleAnnouncementBar} />
) : undefined}
<div className="flex">
<div className="hidden lg:block">
2023-11-07 12:06:42 -06:00
<Sidebar
className={`fixed ${showAnnouncement ? "top-10" : "top-0"}`}
/>
</div>
2023-04-30 15:54:40 -05:00
2023-11-07 12:06:42 -06:00
<div
className={`w-full flex flex-col min-h-screen lg:ml-64 xl:ml-80 ${
showAnnouncement ? "mt-10" : ""
}`}
>
<Navbar />
{children}
2023-02-08 17:58:55 -06:00
</div>
</div>
</>
);
2023-02-08 17:58:55 -06:00
}