From a2ff5cb75dbc23df0d75bdbbe5e57ece788436d9 Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Sun, 22 Mar 2026 02:44:46 +0100 Subject: [PATCH] feat: add skeleton loading state to member sidebar --- .../src/components/layout/MemberSidebar.tsx | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/web/src/components/layout/MemberSidebar.tsx b/packages/web/src/components/layout/MemberSidebar.tsx index 1f506fd7..cdf77f22 100644 --- a/packages/web/src/components/layout/MemberSidebar.tsx +++ b/packages/web/src/components/layout/MemberSidebar.tsx @@ -48,6 +48,7 @@ export function MemberSidebar() { const members = useSpaceStore((s) => s.members); const spaces = useSpaceStore((s) => s.spaces); const currentSpaceId = useSpaceStore((s) => s.currentSpaceId); + const loadingSpaceId = useSpaceStore((s) => s.loadingSpaceId); const memberListOpen = useUIStore((s) => s.memberListOpen); const openUserProfile = useUIStore((s) => s.openUserProfile); const userActivities = useActivityStore((s) => s.userActivities); @@ -79,6 +80,8 @@ export function MemberSidebar() { if (!memberListOpen) return null; + const isLoadingSpace = !!loadingSpaceId && loadingSpaceId === currentSpaceId; + const getMemberColor = (member: MemberWithUser): React.CSSProperties | undefined => { if (member.roles && member.roles.length > 0) { const sorted = [...member.roles].sort((a, b) => b.position - a.position); @@ -148,6 +151,26 @@ export function MemberSidebar() { return (
+ {isLoadingSpace ? ( +
+ {/* Role group 1 */} +
+ {Array.from({ length: 2 }, (_, i) => ( +
+
+
+
+ ))} + {/* Role group 2 */} +
+ {Array.from({ length: 5 }, (_, i) => ( +
+
+
+
+ ))} +
+ ) : (
{/* Role-based groups */} {roleGroups.map(([key, group]) => ( @@ -169,6 +192,7 @@ export function MemberSidebar() {
)}
+ )}
); }