"use client"; import { useState } from "react"; import type { TeamMember, User } from "@mosaic/shared"; import { TeamMemberRole } from "@mosaic/shared"; import { Card, CardHeader, CardContent, Button, Select, Avatar } from "@mosaic/ui"; interface TeamMemberWithUser extends TeamMember { user: User; } interface TeamMemberListProps { members: TeamMemberWithUser[]; onAddMember: (userId: string, role?: TeamMemberRole) => Promise; onRemoveMember: (userId: string) => Promise; availableUsers?: User[]; } const roleOptions = [ { value: TeamMemberRole.MEMBER, label: "Member" }, { value: TeamMemberRole.ADMIN, label: "Admin" }, { value: TeamMemberRole.OWNER, label: "Owner" }, ]; export function TeamMemberList({ members, onAddMember, onRemoveMember, availableUsers = [], }: TeamMemberListProps): React.JSX.Element { const [isAdding, setIsAdding] = useState(false); const [selectedUserId, setSelectedUserId] = useState(""); const [selectedRole, setSelectedRole] = useState(TeamMemberRole.MEMBER); const [removingUserId, setRemovingUserId] = useState(null); const handleAddMember = async (): Promise => { if (!selectedUserId) return; setIsAdding(true); try { await onAddMember(selectedUserId, selectedRole); setSelectedUserId(""); setSelectedRole(TeamMemberRole.MEMBER); } catch (error) { console.error("Failed to add member:", error); alert("Failed to add member. Please try again."); } finally { setIsAdding(false); } }; const handleRemoveMember = async (userId: string): Promise => { setRemovingUserId(userId); try { await onRemoveMember(userId); } catch (error) { console.error("Failed to remove member:", error); alert("Failed to remove member. Please try again."); } finally { setRemovingUserId(null); } }; const memberUserIds = new Set(members.map((m) => m.userId)); const usersToAdd = availableUsers.filter((user) => !memberUserIds.has(user.id)); return (

Team Members

{members.length} member{members.length !== 1 ? "s" : ""}
{/* Member list */}
{members.length === 0 ? (

No members yet

) : ( members.map((member) => (

{member.user.name}

{member.user.email}

{member.role} {member.role !== TeamMemberRole.OWNER && ( )}
)) )}
{/* Add member form */} {usersToAdd.length > 0 && (

Add Member

) => { setSelectedRole(e.target.value as TeamMemberRole); }} fullWidth disabled={isAdding} />
)}
); }