fix: [sidebar] 메뉴 검색 닫기 시 스크롤 위치가 초기화되는 문제 수정
- 검색 닫기 시 매칭된 메뉴 위치로 스크롤 유지 - 부모 그룹 자동 펼침으로 해당 메뉴 바로 확인 가능
This commit is contained in:
@@ -1071,6 +1071,13 @@ function closeMenuSearch() {
|
|||||||
|
|
||||||
if (!container || !input) return;
|
if (!container || !input) return;
|
||||||
|
|
||||||
|
// 검색 결과에서 매칭된 메뉴 링크의 href를 기억 (스크롤 위치 복원용)
|
||||||
|
const matchedLink = document.querySelector('.menu-search-match a[href]');
|
||||||
|
const activeLink = document.querySelector('.sidebar-nav a.bg-primary');
|
||||||
|
const scrollTargetHref = (activeLink && activeLink.closest('.menu-search-match'))
|
||||||
|
? activeLink.getAttribute('href')
|
||||||
|
: (matchedLink ? matchedLink.getAttribute('href') : null);
|
||||||
|
|
||||||
menuSearchActive = false;
|
menuSearchActive = false;
|
||||||
container.classList.add('hidden');
|
container.classList.add('hidden');
|
||||||
searchBtn.classList.remove('hidden');
|
searchBtn.classList.remove('hidden');
|
||||||
@@ -1083,6 +1090,27 @@ function closeMenuSearch() {
|
|||||||
|
|
||||||
// 원래 메뉴 상태 복원
|
// 원래 메뉴 상태 복원
|
||||||
restoreOriginalMenuState();
|
restoreOriginalMenuState();
|
||||||
|
|
||||||
|
// 검색 결과 메뉴 위치로 스크롤
|
||||||
|
if (scrollTargetHref) {
|
||||||
|
const targetLink = document.querySelector(`.sidebar-nav a[href="${scrollTargetHref}"]`);
|
||||||
|
if (targetLink) {
|
||||||
|
// 부모 그룹을 펼침
|
||||||
|
let parent = targetLink.closest('li');
|
||||||
|
while (parent) {
|
||||||
|
const groupUl = parent.querySelector(':scope > ul[id^="menu-group-"]');
|
||||||
|
if (groupUl) {
|
||||||
|
groupUl.style.display = 'block';
|
||||||
|
localStorage.setItem('menu-group-' + groupUl.id.replace('menu-group-', ''), 'visible');
|
||||||
|
}
|
||||||
|
parent = parent.parentElement?.closest('li');
|
||||||
|
}
|
||||||
|
// 스크롤
|
||||||
|
setTimeout(() => {
|
||||||
|
targetLink.scrollIntoView({ block: 'center', behavior: 'smooth' });
|
||||||
|
}, 50);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 원래 메뉴 상태 저장
|
// 원래 메뉴 상태 저장
|
||||||
|
|||||||
Reference in New Issue
Block a user