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