'use client'; // File: components/review-team/TeamMemberManager.tsx // จัดการสมาชิกของ Review Team แยกตาม Discipline (FR-001) import { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Trash2, UserPlus } from 'lucide-react'; import { useAddTeamMember, useRemoveTeamMember } from '@/hooks/use-review-teams'; import { ReviewTeamMemberRole } from '@/types/review-team'; interface Member { publicId: string; role: ReviewTeamMemberRole; user?: { publicId: string; fullName?: string; email?: string }; discipline?: { publicId: string; disciplineCode: string; codeNameEn?: string }; } interface User { publicId: string; fullName?: string; email?: string; } interface Discipline { id?: number; disciplineCode: string; codeNameEn?: string; } interface TeamMemberManagerProps { teamPublicId: string; members: Member[]; availableUsers: User[]; availableDisciplines: Discipline[]; } const ROLE_LABELS: Record = { REVIEWER: 'Reviewer', LEAD: 'Lead', MANAGER: 'Manager', }; const ROLE_BADGE_VARIANT: Record = { LEAD: 'default', MANAGER: 'secondary', REVIEWER: 'outline', }; export function TeamMemberManager({ teamPublicId, members, availableUsers, availableDisciplines, }: TeamMemberManagerProps) { const [selectedUser, setSelectedUser] = useState(''); const [selectedDiscipline, setSelectedDiscipline] = useState(''); const [selectedRole, setSelectedRole] = useState('REVIEWER'); const addMember = useAddTeamMember(); const removeMember = useRemoveTeamMember(); const handleAdd = () => { const disciplineId = Number(selectedDiscipline); if (!selectedUser || Number.isNaN(disciplineId)) return; addMember.mutate( { teamPublicId, data: { userPublicId: selectedUser, disciplineId, role: selectedRole, }, }, { onSuccess: () => { setSelectedUser(''); setSelectedDiscipline(''); setSelectedRole('REVIEWER'); }, }, ); }; return (
{/* Member List */}
{members.length === 0 && (

No members assigned yet.

)} {members.map((member) => (

{member.user?.fullName ?? member.user?.email ?? '—'}

{member.discipline?.disciplineCode} — {member.discipline?.codeNameEn}

{ROLE_LABELS[member.role]}
))}
{/* Add Member Form */}
); }