Skip to content

Commit 85e05f2

Browse files
committed
fix: prevent TOC from closing on scroll or click in public notes
1 parent cced093 commit 85e05f2

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

src/pages/PublicNotePage.tsx

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,7 @@ export default function PublicNotePage() {
608608
const [theme, setTheme] = useState<Theme>(getSystemTheme);
609609
const [showScrollTop, setShowScrollTop] = useState(false);
610610
const [processedContent, setProcessedContent] = useState<string>('');
611+
const [tocExpanded, setTocExpanded] = useState(false);
611612
const contentRef = useRef<HTMLDivElement>(null);
612613

613614
// Get slug from URL
@@ -873,19 +874,29 @@ export default function PublicNotePage() {
873874
if (toggleBtn) {
874875
e.preventDefault();
875876
e.stopPropagation();
876-
877-
const tocContainer = toggleBtn.closest('.toc-container');
878-
879-
if (tocContainer) {
880-
tocContainer.classList.toggle('toc-collapsed');
881-
}
877+
setTocExpanded(prev => !prev);
882878
}
883879
};
884880

885881
container.addEventListener('click', handleClick);
886882
return () => container.removeEventListener('click', handleClick);
887883
}, [processedContent]);
888884

885+
// Apply TOC expanded/collapsed state to DOM
886+
useEffect(() => {
887+
const container = contentRef.current;
888+
if (!container) return;
889+
890+
const tocContainer = container.querySelector('.toc-container');
891+
if (tocContainer) {
892+
tocContainer.classList.toggle('toc-collapsed', !tocExpanded);
893+
const toggleBtn = tocContainer.querySelector('.toc-toggle');
894+
if (toggleBtn) {
895+
toggleBtn.setAttribute('aria-expanded', String(tocExpanded));
896+
}
897+
}
898+
}, [tocExpanded, processedContent]);
899+
889900
const toggleTheme = () => {
890901
setTheme((current) => current === 'light' ? 'dark' : 'light');
891902
};

0 commit comments

Comments
 (0)