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 d8070664..ad49ebfa 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 33eb3d6a..f1c8d511 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