refactor: LNB 동작 수정

This commit is contained in:
2025-06-23 16:29:34 +09:00
parent 4ec76f9fda
commit 33bd0fdd2a
@@ -40,8 +40,7 @@ export function LNB({
enabled: !viewOnly,
});
const [openMenuIds, setOpenMenuIds] = useState<number[]>([]);
const userClosedMenusRef = useRef(new Set());
const [defaultOpenMenuIds, setDefaultOpenMenuIds] = useState<number[]>([]);
const prevPathRef = useRef(currentPath);
function isPathMatched(path: string) {
@@ -70,14 +69,13 @@ export function LNB({
findMatchedMenus(menuList);
if (matchedMenuIds.length > 0) {
const filteredIds = matchedMenuIds.filter(
(id) => !userClosedMenusRef.current.has(id),
);
setOpenMenuIds((prev) => [...new Set([...prev, ...filteredIds])]);
setDefaultOpenMenuIds((prev) => [
...new Set([...prev, ...matchedMenuIds]),
]);
}
if (prevPathRef.current !== currentPath) {
setOpenMenuIds(matchedMenuIds);
setDefaultOpenMenuIds(matchedMenuIds);
prevPathRef.current = currentPath;
}
}, [menuList, currentPath]);
@@ -133,29 +131,11 @@ export function LNB({
}
function MenuGroup({ item }: { item: MenuItem }) {
const { open: isSidebarOpen, setOpen } = useSidebar();
const isOpen = openMenuIds.includes(item.menuCd);
const handleOpenChange = (open: boolean) => {
if (!isSidebarOpen) setOpen(true);
if (open) {
// 열 때는 부모들도 함께 열기
if (!openMenuIds.includes(item.menuCd)) {
const parentIds = getParentIds(item.menuCd)(menuList ?? []);
setOpenMenuIds((prev) => [...prev, ...parentIds, item.menuCd]);
}
userClosedMenusRef.current.delete(item.menuCd);
} else {
// 닫을 때는 현재 메뉴만 닫기
setOpenMenuIds((prev) => prev.filter((id) => id !== item.menuCd));
userClosedMenusRef.current.add(item.menuCd);
}
};
const { open: isSidebarOpen } = useSidebar();
return (
<Collapsible
open={isOpen}
onOpenChange={handleOpenChange}
defaultOpen={defaultOpenMenuIds.includes(item.menuCd)}
className="group/collapsible"
>
<SidebarMenuItem>