60 lines
2.1 KiB
JavaScript
60 lines
2.1 KiB
JavaScript
'use client';
|
|
|
|
import { useEffect, useState } from "react";
|
|
import Header from "@/components/layoutPanel/header";
|
|
import Sidebar from "@/components/layoutPanel/sidebar";
|
|
import Information from '@/data/information.json';
|
|
import UserDetail from "@/components/layoutPanel/userDetail";
|
|
import { usePathname } from "next/navigation";
|
|
import BgGray from "@/components/layoutPanel/sidebar/BgGray";
|
|
|
|
function LayoutPanel({ children }) {
|
|
|
|
const pathname = usePathname();
|
|
const [active, setActive] = useState(false);
|
|
const [open, setOpen] = useState(false);
|
|
const [loading, setLoading] = useState(true);
|
|
|
|
useEffect(() => {
|
|
setTimeout(() => {
|
|
setLoading(false);
|
|
}, 2000);
|
|
}, []);
|
|
|
|
|
|
return (
|
|
<div className="flex min-h-screen">
|
|
<Sidebar
|
|
open={open}
|
|
active={active}
|
|
setOpen={setOpen}
|
|
setActive={setActive}
|
|
/>
|
|
<BgGray isActive={active} setIsActive={setActive} />
|
|
<main className={`
|
|
w-full transition-all duration-500
|
|
${pathname.includes('dashboard') ?
|
|
(open ?
|
|
'md:min-w-[calc(100%_-_243px)] md:w-[calc(100%_-_243px)] xl:min-w-[calc(100%_-_243px_-_332px)] xl:w-[calc(100%_-_243px_-_332px)]' :
|
|
'md:min-w-[calc(100%_-_96px)] md:w-[calc(100%_-_96px)] xl:min-w-[calc(100%_-_96px_-_332px)] xl:w-[calc(100%_-_96px_-_332px)]'
|
|
) : (open ?
|
|
'md:w-[calc(100%-243px)]' :
|
|
'md:w-[calc(100%-96px)]')}
|
|
`}>
|
|
<Header
|
|
data={Information}
|
|
setActive={setActive}
|
|
disableProfile={pathname.includes('dashboard')}
|
|
/>
|
|
<section className="my-[24px] opacity-element mx-[16px] bg-[#FAFAFA]">
|
|
{children}
|
|
</section>
|
|
</main>
|
|
{pathname.includes('dashboard') && (
|
|
<UserDetail data={Information} loading={loading} />
|
|
)}
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default LayoutPanel |