From ddaf6fee68c80ea17ee999cb52e63638463c50a6 Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Sun, 22 Mar 2026 02:41:32 +0100 Subject: [PATCH] feat: add loadingSpaceId flag to spaceStore for skeleton loading guards --- packages/web/src/stores/spaceStore.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/web/src/stores/spaceStore.ts b/packages/web/src/stores/spaceStore.ts index 886ac846..c08165bb 100644 --- a/packages/web/src/stores/spaceStore.ts +++ b/packages/web/src/stores/spaceStore.ts @@ -40,6 +40,7 @@ interface SpaceState { channelOriginMap: Map; // channelId → instance origin ('' = home) voiceChannelIds: Set; // channelIds that are voice channels (excluded from unread) categoryOriginMap: Map; // categoryId → instance origin ('' = home) + loadingSpaceId: string | null; // non-null while loadSpaceDetail is fetching _layoutUpdatedAt: number; setSpaces: (spaces: TaggedSpace[]) => void; setCurrentSpace: (spaceId: string | null) => void; @@ -130,6 +131,7 @@ export const useSpaceStore = create((set, get) => ({ channelOriginMap: new Map(), voiceChannelIds: new Set(), categoryOriginMap: new Map(), + loadingSpaceId: null, _layoutUpdatedAt: 0, reset: () => { @@ -151,6 +153,7 @@ export const useSpaceStore = create((set, get) => ({ channelOriginMap: new Map(), voiceChannelIds: new Set(), categoryOriginMap: new Map(), + loadingSpaceId: null, _layoutUpdatedAt: 0, }); }, @@ -232,6 +235,7 @@ export const useSpaceStore = create((set, get) => ({ // Resolve the correct API client based on the server's instance origin const space =get().spaces.find(s => s.id === spaceId); if (!space) return; // Not populated yet — remote WS ready will trigger reload + set({ loadingSpaceId: spaceId }); const origin = space._instanceOrigin ?? ''; const client = getApiForOrigin(origin); @@ -257,6 +261,7 @@ export const useSpaceStore = create((set, get) => ({ } set({ + loadingSpaceId: null, currentSpaceId: spaceId, channels: detail.channels.sort((a, b) => a.position - b.position), categories: (detail.categories || []).sort((a, b) => a.position - b.position), @@ -266,7 +271,7 @@ export const useSpaceStore = create((set, get) => ({ channelPermissions, }); } catch { - // Handle error silently + set({ loadingSpaceId: null }); } },