fix: resolve duplicate voice user in federated channel sidebar
Use origin-aware user ID resolution for optimistic voice add/remove instead of always using the home instance ID. Adds getMyUserIdForOrigin resolver (same pattern as getApiForOrigin) so joinVoiceChannel and leaveVoice use the correct federated user ID. Also fixes WS reconnect voice re-registration, invite URL for remote servers, and chatStore early-load guard for unmapped channels.
This commit is contained in:
@@ -2,7 +2,7 @@ import { create } from 'zustand';
|
||||
import type { User, InstanceInfoResponse, ReplicatedInstance, AuthResponse } from '@backspace/shared';
|
||||
import { BackspaceApiClient, createApiClient, api } from '../api/client';
|
||||
import { useAuthStore } from './authStore';
|
||||
import { setApiForOriginResolver, useServerStore } from './serverStore';
|
||||
import { setApiForOriginResolver, setUserIdForOriginResolver, useServerStore } from './serverStore';
|
||||
import { connectInstance, disconnectInstance, disconnectAllRemote } from '../hooks/useWebSocket';
|
||||
|
||||
// ─── Types ───────────────────────────────────────────────────────────────────
|
||||
@@ -505,3 +505,12 @@ setApiForOriginResolver((origin: string): BackspaceApiClient => {
|
||||
if (!instance) return api;
|
||||
return instance.api;
|
||||
});
|
||||
|
||||
// ─── User ID resolution (federation) ──────────────────────────────────────────
|
||||
// Maps an origin to the local user's ID on that remote instance.
|
||||
// Used by voice join/leave to optimistically add/remove the correct user ID.
|
||||
|
||||
setUserIdForOriginResolver((origin: string): string | undefined => {
|
||||
const instance = useInstanceStore.getState().instances.find(i => i.origin === origin);
|
||||
return instance?.user.id;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user