"use client"; import { useState } from "react"; import { Bot, UserMinus } from "lucide-react"; import type { IssueAssigneeType, UpdateIssueRequest } from "@multica/types"; import { useWorkspaceStore, useActorName } from "@/features/workspace"; import { PropertyPicker, PickerItem, PickerSection, PickerEmpty, } from "./property-picker"; export function AssigneePicker({ assigneeType, assigneeId, onUpdate, }: { assigneeType: IssueAssigneeType | null; assigneeId: string | null; onUpdate: (updates: Partial) => void; }) { const [open, setOpen] = useState(false); const [filter, setFilter] = useState(""); const members = useWorkspaceStore((s) => s.members); const agents = useWorkspaceStore((s) => s.agents); const { getActorName, getActorInitials } = useActorName(); const query = filter.toLowerCase(); const filteredMembers = members.filter((m) => m.name.toLowerCase().includes(query), ); const filteredAgents = agents.filter((a) => a.name.toLowerCase().includes(query), ); const isSelected = (type: string, id: string) => assigneeType === type && assigneeId === id; const triggerLabel = assigneeType && assigneeId ? getActorName(assigneeType, assigneeId) : "Unassigned"; return ( { setOpen(v); if (!v) setFilter(""); }} width="w-52" searchable searchPlaceholder="Assign to..." onSearchChange={setFilter} trigger={ assigneeType && assigneeId ? ( <>
{assigneeType === "agent" ? ( ) : ( getActorInitials(assigneeType, assigneeId) )}
{triggerLabel} ) : ( Unassigned ) } > {/* Unassigned option */} { onUpdate({ assignee_type: null, assignee_id: null }); setOpen(false); }} > Unassigned {/* Members */} {filteredMembers.length > 0 && ( {filteredMembers.map((m) => ( { onUpdate({ assignee_type: "member", assignee_id: m.user_id, }); setOpen(false); }} >
{getActorInitials("member", m.user_id)}
{m.name}
))}
)} {/* Agents */} {filteredAgents.length > 0 && ( {filteredAgents.map((a) => ( { onUpdate({ assignee_type: "agent", assignee_id: a.id, }); setOpen(false); }} >
{a.name}
))}
)} {filteredMembers.length === 0 && filteredAgents.length === 0 && filter && }
); }