@@ -218,6 +218,7 @@ export const MainApp: React.FC = () => {
218218 const [ confirmAction , setConfirmAction ] = useState < { title : string ; message : React . ReactNode ; onConfirm : ( ) => void ; } | null > ( null ) ;
219219 const [ clipboardNotice , setClipboardNotice ] = useState < { title : string ; message : React . ReactNode ; helpUrl ?: string } | null > ( null ) ;
220220 const [ searchTerm , setSearchTerm ] = useState ( '' ) ;
221+ const previousSearchTermRef = useRef ( '' ) ;
221222 const [ contextMenu , setContextMenu ] = useState < { isOpen : boolean ; position : { x : number , y : number } , items : MenuItem [ ] } > ( { isOpen : false , position : { x : 0 , y : 0 } , items : [ ] } ) ;
222223 const [ isDraggingFile , setIsDraggingFile ] = useState ( false ) ;
223224 const [ formatTrigger , setFormatTrigger ] = useState ( 0 ) ;
@@ -765,6 +766,23 @@ export const MainApp: React.FC = () => {
765766 return iterator . done ? null : iterator . value ;
766767 } , [ lastClickedId , selectedIds ] ) ;
767768
769+ useEffect ( ( ) => {
770+ const previousTrimmed = previousSearchTermRef . current . trim ( ) ;
771+ const currentTrimmed = searchTerm . trim ( ) ;
772+
773+ if ( previousTrimmed && ! currentTrimmed ) {
774+ const primaryId = getPrimarySelectionId ( ) ;
775+ if ( primaryId ) {
776+ const node = items . find ( item => item . id === primaryId ) ;
777+ if ( node ) {
778+ ensureNodeVisible ( node ) ;
779+ }
780+ }
781+ }
782+
783+ previousSearchTermRef . current = searchTerm ;
784+ } , [ searchTerm , getPrimarySelectionId , items , ensureNodeVisible ] ) ;
785+
768786 const handleDocumentTreeSelectAll = useCallback ( ( ) => {
769787 setSelectedIds ( new Set ( navigableItems . map ( item => item . id ) ) ) ;
770788 } , [ navigableItems , setSelectedIds ] ) ;
0 commit comments