From edb386ec3caec9117df3c1d15b70e0a031d1a9e7 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Fri, 9 Jan 2026 18:50:14 +0100 Subject: [PATCH] fix: force React re-render after server sync merges data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added syncVersion state that increments when server data is merged, ensuring the UI updates to show the loaded board content. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/automerge/useAutomergeSyncRepo.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/automerge/useAutomergeSyncRepo.ts b/src/automerge/useAutomergeSyncRepo.ts index 1ce9e6c..781de22 100644 --- a/src/automerge/useAutomergeSyncRepo.ts +++ b/src/automerge/useAutomergeSyncRepo.ts @@ -135,6 +135,8 @@ export function useAutomergeSync(config: AutomergeSyncConfig): TLStoreWithStatus const [isLoading, setIsLoading] = useState(true) const [connectionState, setConnectionState] = useState('connecting') const [isNetworkOnline, setIsNetworkOnline] = useState(typeof navigator !== 'undefined' ? navigator.onLine : true) + // Sync version counter - increments when server data is merged, forces re-render + const [syncVersion, setSyncVersion] = useState(0) const handleRef = useRef(null) const storeRef = useRef(null) const adapterRef = useRef(null) @@ -537,6 +539,14 @@ export function useAutomergeSync(config: AutomergeSyncConfig): TLStoreWithStatus const finalDoc = handle.doc() const finalRecordCount = finalDoc?.store ? Object.keys(finalDoc.store).length : 0 + + // CRITICAL: Force React to re-render after merging server data + // The handle object reference doesn't change, so we increment syncVersion + if ((addedFromServer > 0 || replacedFromServer > 0) && mounted) { + console.log(`🔄 Forcing UI update after server sync (${addedFromServer + replacedFromServer} records merged)`) + // Increment sync version to trigger React re-render + setSyncVersion(v => v + 1) + } } else if (!loadedFromLocal) { // Server is empty and we didn't load from local - fresh start } @@ -704,6 +714,7 @@ export function useAutomergeSync(config: AutomergeSyncConfig): TLStoreWithStatus handle, presence, connectionState, - isNetworkOnline + isNetworkOnline, + syncVersion // Increments when server data is merged, forces re-render } }