"use client"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; interface Member { user_id: string; role: "admin" | "member"; joined_at: string; users: { display_name: string; avatar_color: string | null } | null; } interface MembersResponse { members: Member[]; currentUserRole: "admin" | "member"; } export function MemberList({ groupId, onTransferRequest, }: { groupId: string; onTransferRequest: (userId: string, displayName: string) => void; }) { const queryClient = useQueryClient(); const { data, isLoading, error } = useQuery({ queryKey: ["groups", groupId, "members"], queryFn: async () => { const res = await fetch(`/api/groups/${groupId}/members`); if (!res.ok) throw new Error("Failed to fetch members"); return res.json(); }, staleTime: 30_000, }); const removeMember = useMutation({ mutationFn: async (userId: string) => { const res = await fetch(`/api/groups/${groupId}/members`, { method: "DELETE", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ user_id: userId }), }); if (!res.ok) { const data = await res.json(); throw new Error(data.error || "Failed to remove member"); } return res.json(); }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["groups", groupId, "members"] }); }, }); if (isLoading) return

Loading members...

; if (error) return

Failed to load members

; if (!data) return null; const isAdmin = data.currentUserRole === "admin"; return (

Members ({data.members.length})

{removeMember.error && (

{removeMember.error.message}

)}
); }