import { useState } from 'react' import axios from 'axios' import { UserPlus, X, User } from 'lucide-react' import { ticketsApi } from '@/api/tickets' import { toast } from '@/lib/toast' import type { PSAResource } from '@/types/tickets' import type { PsaMemberResponse } from '@/types/integrations' import { cn } from '@/lib/utils' interface Props { ticketId: number resources: PSAResource[] allMembers: PsaMemberResponse[] onChanged: () => void } export function TicketResourceManager({ ticketId, resources, allMembers, onChanged }: Props) { const [adding, setAdding] = useState(false) const [selectedMemberId, setSelectedMemberId] = useState('') const [busy, setBusy] = useState(null) async function handleAdd() { if (!selectedMemberId) return setBusy(Number(selectedMemberId)) try { await ticketsApi.addResource(ticketId, Number(selectedMemberId)) toast.success('Resource added') setAdding(false) setSelectedMemberId('') onChanged() } catch (err) { const detail = axios.isAxiosError(err) ? (err.response?.data as { detail?: string })?.detail : undefined toast.error(detail || 'Failed to add resource') } finally { setBusy(null) } } async function handleRemove(memberId: number) { setBusy(memberId) try { await ticketsApi.removeResource(ticketId, memberId) toast.success('Resource removed') onChanged() } catch (err) { const detail = axios.isAxiosError(err) ? (err.response?.data as { detail?: string })?.detail : undefined toast.error(detail || 'Failed to remove resource') } finally { setBusy(null) } } const assignedIds = new Set(resources.map(r => r.member_id)) return (

Resources

{adding && (
)} {resources.length === 0 ? (

No resources assigned.

) : (
{resources.map(r => (
{r.member_name} {r.is_rf_user && ( RF )}
))}
)}
) }