diff --git a/frontend/src/app/AppLayout.jsx b/frontend/src/app/AppLayout.jsx index ec66ad5..9992867 100644 --- a/frontend/src/app/AppLayout.jsx +++ b/frontend/src/app/AppLayout.jsx @@ -496,12 +496,27 @@ const AppLayout = () => { const [detailPanelOpen, setDetailPanelOpen] = useState(() => selectedDocumentIds.length > 0); const [detailPanelDocIds, setDetailPanelDocIds] = useState([]); const [detailPanelDocs, setDetailPanelDocs] = useState([]); + const detailPanelAutoOpenRef = useRef(true); + const detailPanelSelectionTokenRef = useRef(selectedDocumentIds.join('|')); useEffect(() => { - if (selectedDocumentIds.length > 0 && !detailPanelOpen) { + const token = selectedDocumentIds.join('|'); + if (token !== detailPanelSelectionTokenRef.current) { + detailPanelSelectionTokenRef.current = token; + detailPanelAutoOpenRef.current = true; + } + + if (selectedDocumentIds.length === 0) { + if (detailPanelOpen) { + setDetailPanelOpen(false); + } + return; + } + + if (!detailPanelOpen && detailPanelAutoOpenRef.current && !previewDocumentId) { setDetailPanelOpen(true); } - }, [selectedDocumentIds, detailPanelOpen]); + }, [selectedDocumentIds, detailPanelOpen, previewDocumentId]); const resetWorkspaceState = useCallback(() => { const rootNode = createRootNode(); @@ -3382,6 +3397,8 @@ const AppLayout = () => { const openDocumentPreview = useCallback( (documentId, { replace = false } = {}) => { if (!documentId) return; + detailPanelAutoOpenRef.current = false; + setDetailPanelOpen(false); previewReturnPathRef.current = `${location.pathname}${location.search}`; navigate(`/documents/${documentId}`, { replace }); }, @@ -5134,6 +5151,7 @@ const AppLayout = () => { ); const handleDetailPanelClose = useCallback(() => { + detailPanelAutoOpenRef.current = false; setDetailPanelOpen(false); clearDocumentSelection(); setDetailPanelDocIds([]);