feat: server members API + member list in sidebar + fix chat input

Backend:
- Add GET /api/v1/servers/{serverID}/members endpoint
- Wire MemberHandler routes in main.go

Frontend:
- Create member store (fetchMembers by server ID)
- MemberList now fetches members from API instead of empty props
- ChatArea: show channel name instead of ID, add error display,
  add flex-1 + min-w-0 to input for proper sizing, error handling
  on sendMessage
This commit is contained in:
root
2026-06-29 17:51:32 +00:00
parent bb67a7652e
commit 23902de912
5 changed files with 240 additions and 80 deletions
+37
View File
@@ -0,0 +1,37 @@
import { create } from "zustand";
import { api } from "../lib/api.ts";
export interface Member {
id: string;
username: string;
display_name: string;
avatar: string;
status: "online" | "idle" | "dnd" | "offline";
status_text: string;
}
interface MemberState {
membersByServer: Record<string, Member[]>;
isLoading: boolean;
fetchMembers: (serverId: string) => Promise<void>;
}
export const useMemberStore = create<MemberState>((set) => ({
membersByServer: {},
isLoading: false,
fetchMembers: async (serverId) => {
set({ isLoading: true });
try {
const members = await api.get<Member[]>(
`/servers/${serverId}/members`,
);
set((state) => ({
membersByServer: { ...state.membersByServer, [serverId]: members },
isLoading: false,
}));
} catch {
set({ isLoading: false });
}
},
}));