This commit is contained in:
DDD1542
2026-04-09 12:42:56 +09:00
parent c79dcf6b6d
commit d1272bcdf0
-103
View File
@@ -261,8 +261,6 @@ function AppLayoutInner({ children }: AppLayoutProps) {
}
return false;
});
const [collapsedHover, setCollapsedHover] = useState(false);
const collapsedHoverTimer = useRef<NodeJS.Timeout | null>(null);
const [hasPopMenus, setHasPopMenus] = useState(false);
const toggleSidebarCollapse = () => {
@@ -271,18 +269,6 @@ function AppLayoutInner({ children }: AppLayoutProps) {
localStorage.setItem("sidebarCollapsed", String(next));
return next;
});
setCollapsedHover(false);
};
const handleCollapsedMouseEnter = () => {
if (!sidebarCollapsed || isMobile) return;
if (collapsedHoverTimer.current) clearTimeout(collapsedHoverTimer.current);
collapsedHoverTimer.current = setTimeout(() => setCollapsedHover(true), 200);
};
const handleCollapsedMouseLeave = () => {
if (collapsedHoverTimer.current) clearTimeout(collapsedHoverTimer.current);
setCollapsedHover(false);
};
// URL 직접 접근 시 탭 자동 열기
@@ -781,96 +767,7 @@ function AppLayoutInner({ children }: AppLayoutProps) {
} border-sidebar-border bg-sidebar flex flex-col border-r transition-all duration-300 flex-shrink-0 overflow-hidden ${
!isMobile && sidebarCollapsed ? "w-16" : "w-[260px] sm:w-[220px] lg:w-[240px]"
}`}
onMouseEnter={handleCollapsedMouseEnter}
onMouseLeave={handleCollapsedMouseLeave}
>
{/* 축소 hover 오버레이: 마우스 올리면 전체 메뉴 표시 */}
{!isMobile && sidebarCollapsed && collapsedHover && (
<>
<div
className="fixed inset-0 z-30"
onMouseEnter={handleCollapsedMouseLeave}
/>
<div
className="border-sidebar-border bg-sidebar fixed left-16 top-0 z-40 flex h-screen w-[240px] flex-col border-r shadow-xl animate-in slide-in-from-left-2 duration-200"
onMouseEnter={() => { if (collapsedHoverTimer.current) clearTimeout(collapsedHoverTimer.current); setCollapsedHover(true); }}
onMouseLeave={handleCollapsedMouseLeave}
>
<div className="border-border flex h-14 items-center justify-between border-b px-4">
<Logo />
<button
onClick={toggleSidebarCollapse}
className="flex h-8 w-8 shrink-0 items-center justify-center rounded-lg border border-border/50 transition-colors hover:bg-accent"
title="사이드바 펼치기"
>
<PanelLeftOpen className="h-[18px] w-[18px] text-muted-foreground" />
</button>
</div>
{/* 관리 회사 + 모드 전환 + 회사 선택 */}
{(user as ExtendedUserInfo)?.userType === "SUPER_ADMIN" && (
<div className="border-border bg-muted/50 mx-3 mt-3 rounded-md border p-3">
<div className="flex items-center gap-2">
<Building2 className="text-primary h-4 w-4 shrink-0" />
<div className="min-w-0 flex-1">
<p className="text-muted-foreground text-[10px]"> </p>
<p className="truncate text-sm font-semibold" title={currentCompanyName || "로딩 중..."}>
{currentCompanyName || "로딩 중..."}
</p>
</div>
</div>
</div>
)}
{((user as ExtendedUserInfo)?.userType === "SUPER_ADMIN" ||
(user as ExtendedUserInfo)?.userType === "COMPANY_ADMIN" ||
(user as ExtendedUserInfo)?.userType === "admin") && (
<div className="border-border space-y-2 border-b p-3">
<Button
onClick={handleModeSwitch}
className={`flex w-full items-center justify-center gap-2 rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 hover:cursor-pointer ${
isAdminMode
? "border border-amber-200 bg-amber-50 text-amber-700 hover:bg-amber-100 dark:border-amber-800 dark:bg-amber-950 dark:text-amber-400"
: "border-primary/20 bg-primary/5 text-primary hover:bg-primary/10 border"
}`}
>
{isAdminMode ? (
<>
<UserCheck className="h-4 w-4" />
</>
) : (
<>
<Shield className="h-4 w-4" />
</>
)}
</Button>
{(user as ExtendedUserInfo)?.userType === "SUPER_ADMIN" && (
<Button
onClick={() => setShowCompanySwitcher(true)}
className="border-primary/20 bg-primary/5 text-primary hover:bg-primary/10 flex w-full items-center justify-center gap-2 rounded-md border px-3 py-2 text-sm font-medium transition-colors duration-150 hover:cursor-pointer"
>
<Building2 className="h-4 w-4" />
</Button>
)}
</div>
)}
<div className="flex-1 overflow-y-auto py-4">
<nav className="space-y-0.5 px-3">
{uiMenus.map((menu) => renderMenu(menu))}
</nav>
</div>
{/* 테마 토글 */}
<div className="border-border border-t px-3 py-1">
<ThemeToggle />
</div>
</div>
</>
)}
{/* 헤더: 로고 + 토글 버튼 */}
{!isMobile && (
<div className={`border-border flex h-14 items-center border-b overflow-hidden ${sidebarCollapsed ? "justify-center px-2" : "justify-between px-4"}`}>