import { EntityWithRoles } from "@/interfaces/entity"; import { User } from "@/interfaces/user"; import clsx from "clsx"; import { useRouter } from "next/router"; import { ToastContainer } from "react-toastify"; import Navbar from "../Navbar"; import Sidebar from "../Sidebar"; import React, { useEffect, useState } from "react"; export const LayoutContext = React.createContext({ onFocusLayerMouseEnter: () => {}, setOnFocusLayerMouseEnter: (() => {}) as React.Dispatch< React.SetStateAction<() => void> >, navDisabled: false, setNavDisabled: (() => {}) as React.Dispatch>, focusMode: false, setFocusMode: (() => {}) as React.Dispatch>, hideSidebar: false, setHideSidebar: (() => {}) as React.Dispatch>, bgColor: "bg-white", setBgColor: (() => {}) as React.Dispatch>, className: "", setClassName: (() => {}) as React.Dispatch>, }); interface Props { user: User; entities?: EntityWithRoles[]; children: React.ReactNode; refreshPage?: boolean; } export default function Layout({ user, entities, children, refreshPage, }: Props) { const [onFocusLayerMouseEnter, setOnFocusLayerMouseEnter] = useState( () => () => {} ); const [navDisabled, setNavDisabled] = useState(false); const [focusMode, setFocusMode] = useState(false); const [hideSidebar, setHideSidebar] = useState(false); const [bgColor, setBgColor] = useState("bg-white"); const [className, setClassName] = useState(""); useEffect(() => { if (refreshPage) { setClassName(""); setBgColor("bg-white"); setFocusMode(false); setHideSidebar(false); setNavDisabled(false); setOnFocusLayerMouseEnter(() => () => {}); } }, [refreshPage]); const LayoutContextValue = React.useMemo( () => ({ onFocusLayerMouseEnter, setOnFocusLayerMouseEnter, navDisabled, setNavDisabled, focusMode, setFocusMode, hideSidebar, setHideSidebar, bgColor, setBgColor, className, setClassName, }), [ bgColor, className, focusMode, hideSidebar, navDisabled, onFocusLayerMouseEnter, ] ); const router = useRouter(); return (
{!hideSidebar && user && ( )}
{!hideSidebar && user && ( )}
{children}
); }