@@ -34,12 +34,18 @@ export default function MainLayout() {
3434 const [ activeTabId , setActiveTabId ] = useState < string | null > ( null ) ;
3535
3636 // Sync responsive panel states with local states for desktop
37+ /* eslint-disable react-hooks/set-state-in-effect -- Sync external state to local state */
3738 useEffect ( ( ) => {
3839 if ( ! isMobile ) {
39- setFolderSidebarOpen ( responsiveFolderPanel . isOpen ) ;
40- setFilesPanelOpen ( responsiveNotesPanel . isOpen ) ;
40+ if ( folderSidebarOpen !== responsiveFolderPanel . isOpen ) {
41+ setFolderSidebarOpen ( responsiveFolderPanel . isOpen ) ;
42+ }
43+ if ( filesPanelOpen !== responsiveNotesPanel . isOpen ) {
44+ setFilesPanelOpen ( responsiveNotesPanel . isOpen ) ;
45+ }
4146 }
42- } , [ isMobile , responsiveFolderPanel . isOpen , responsiveNotesPanel . isOpen ] ) ;
47+ } , [ isMobile , responsiveFolderPanel . isOpen , responsiveNotesPanel . isOpen , folderSidebarOpen , filesPanelOpen ] ) ;
48+ /* eslint-enable react-hooks/set-state-in-effect */
4349
4450 const {
4551 notes,
@@ -280,17 +286,19 @@ export default function MainLayout() {
280286 } , [ selectedNote ] ) ;
281287
282288 // Update tab properties when note changes
289+ /* eslint-disable react-hooks/set-state-in-effect -- Sync note properties to tab state */
283290 useEffect ( ( ) => {
284- if ( ! selectedNote ?. id ) return ;
285-
286- setOpenTabs ( tabs =>
287- tabs . map ( tab =>
288- tab . noteId === selectedNote . id
289- ? { ...tab , title : selectedNote . title || 'Untitled' , type : selectedNote . type || 'note' , isPublished : selectedNote . isPublished }
290- : tab
291- )
292- ) ;
293- } , [ selectedNote ] ) ;
291+ if ( selectedNote ?. id ) {
292+ setOpenTabs ( tabs =>
293+ tabs . map ( tab =>
294+ tab . noteId === selectedNote . id
295+ ? { ...tab , title : selectedNote . title || 'Untitled' , type : selectedNote . type || 'note' , isPublished : selectedNote . isPublished }
296+ : tab
297+ )
298+ ) ;
299+ }
300+ } , [ selectedNote ?. id , selectedNote ?. title , selectedNote ?. type , selectedNote ?. isPublished ] ) ;
301+ /* eslint-enable react-hooks/set-state-in-effect */
294302
295303 const handlePasswordChange = useCallback ( ( ) => {
296304 setSelectedNote ( null ) ;
0 commit comments