From bbf834fb6e97fe1b23160498c49cd247945209c0 Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Sun, 14 Dec 2025 21:33:13 +0100 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F(frontend)=20isConnected=20wh?= =?UTF-8?q?en=20authenticated?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WebSocketStatus.Connected does not mean we are totally connected because authentication can still be in progress and failed. So we will use the event onAuthenticated to assert that we are fully connected. --- .../docs/doc-editor/components/DocEditor.tsx | 2 +- .../stores/useProviderStore.tsx | 20 +++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/frontend/apps/impress/src/features/docs/doc-editor/components/DocEditor.tsx b/src/frontend/apps/impress/src/features/docs/doc-editor/components/DocEditor.tsx index d8070664e..ad49ebfa3 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-editor/components/DocEditor.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-editor/components/DocEditor.tsx @@ -90,7 +90,7 @@ export const DocEditor = ({ doc }: DocEditorProps) => { } }, [isProviderReady, setIsSkeletonVisible]); - if (!isProviderReady) { + if (!isProviderReady || provider?.configuration.name !== doc.id) { return ; } diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/stores/useProviderStore.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/stores/useProviderStore.tsx index 33eb3d6ab..f1c8d5118 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-management/stores/useProviderStore.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-management/stores/useProviderStore.tsx @@ -52,13 +52,29 @@ export const useProviderStore = create((set, get) => ({ } }, onAuthenticationFailed() { - set({ isReady: true }); + set({ isReady: true, isConnected: false }); + }, + onAuthenticated() { + set({ isReady: true, isConnected: true }); }, onStatus: ({ status }) => { set((state) => { const nextConnected = status === WebSocketStatus.Connected; + + /** + * status === WebSocketStatus.Connected does not mean we are totally connected + * because authentication can still be in progress and failed + * So we only update isConnected when we loose the connection + */ + const connected = + status !== WebSocketStatus.Connected + ? { + isConnected: false, + } + : undefined; + return { - isConnected: nextConnected, + ...connected, isReady: state.isReady || status === WebSocketStatus.Disconnected, hasLostConnection: state.isConnected && !nextConnected