From 6e8f6b90faa20b531c6e3241d9be4e7e16a2dce1 Mon Sep 17 00:00:00 2001 From: Jun Murakami <126404131+Jun-Murakami@users.noreply.github.com> Date: Mon, 6 May 2024 02:35:05 +0900 Subject: [PATCH] =?UTF-8?q?useObserve=E3=83=95=E3=83=83=E3=82=AF=E3=81=AE?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=82=92=E8=BF=BD=E5=8A=A0***?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit このコミットでは、useObserveフックに以下の変更が追加されました: - サーバータイムスタンプが現在のローカルタイムスタンプよりも大きい場合、現在のツリーのデータをロードする処理が追加されました。 - ツリーデータが更新された場合、現在のツリーのデータをリセットし、新しいデータをロードする処理が追加されました。 - データベースの同期が行われた場合、現在のツリーのデータをリセットし、新しいデータをロードする処理が追加されました。 --- src/hooks/useObserve.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/hooks/useObserve.ts b/src/hooks/useObserve.ts index 5b08f65..d77da69 100644 --- a/src/hooks/useObserve.ts +++ b/src/hooks/useObserve.ts @@ -89,6 +89,7 @@ export const useObserve = () => { const serverTimestamp = snapshot.val(); const currentLocalTimestamp = useAppStateStore.getState().localTimestamp; if (serverTimestamp && serverTimestamp > currentLocalTimestamp) { + const currentTree = useTreeStateStore.getState().currentTree; setLocalTimestamp(serverTimestamp); const newTreesList = await loadTreesListFromDb(uid); setTreesList(newTreesList); @@ -105,6 +106,11 @@ export const useObserve = () => { if (data.timestamp > currentLocalTimestamp) { await copyTreeDataToIdbFromDb(treeId); treeUpdateCount++; + if (currentTree && treeId === currentTree) { + setPrevCurrentTree(null); + setPrevItems([]); + await loadCurrentTreeData(currentTree); + } } } }); @@ -116,16 +122,15 @@ export const useObserve = () => { const data = snapshot.val(); if (data !== serverTimestamp) { await syncDb(); + if (currentTree) { + setPrevCurrentTree(null); + setPrevItems([]); + await loadCurrentTreeData(currentTree); + } } } }); } - const currentTree = useTreeStateStore.getState().currentTree; - if (currentTree) { - setPrevCurrentTree(null); - setPrevItems([]); - await loadCurrentTreeData(currentTree); - } } setIsLoading(false);