File name
Commit message
Commit date
08-14
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
'use client';
import { useSidebar } from '@/app/(protected)/(basic)/_hooks/use-sidebar';
import { AdminFooter } from './admin-footer';
import { AdminHeader } from './admin-header';
import { AdminSidebar } from './admin-sidebar';
interface AdminShellProps {
children: React.ReactNode;
}
/**
* Basic 레이아웃의 상호작용 경계 — 헤더·사이드바·풋터를 조립하고 사이드바 상태(useSidebar)를
* 소유한다. page 콘텐츠(children)는 상위 Server Component가 렌더한 결과를 props로 그대로
* 통과시켜 RSC를 유지한다 — 이 컴포넌트 자신은 children의 내용을 알거나 가공하지 않는다.
*/
export function AdminShell({ children }: AdminShellProps) {
const sidebar = useSidebar();
return (
<div className="flex min-h-screen flex-col">
<AdminHeader
onOpenSidebar={sidebar.openMobile}
onToggleSidebarCollapse={sidebar.toggleDesktopCollapse}
/>
<div className="flex flex-1">
<AdminSidebar
isMobileOpen={sidebar.isMobileOpen}
isDesktopCollapsed={sidebar.isDesktopCollapsed}
onCloseMobile={sidebar.closeMobile}
/>
<div className="flex flex-1 flex-col">
<main className="flex flex-1 flex-col">{children}</main>
<AdminFooter />
</div>
</div>
</div>
);
}