import { useCallback, useEffect, useState } from "react"; import type { AgentRecord, SkillRecord } from "@shared/types"; import { useAppStore } from "../../state/store"; type SkillAgentTogglesProps = | { mode: "skill"; companyId: string; skillId: string; agents: AgentRecord[] } | { mode: "agent"; companyId: string; agentId: string; skills: SkillRecord[] }; export function SkillAgentToggles(props: SkillAgentTogglesProps) { const { companyId, mode } = props; const addToast = useAppStore((s) => s.addToast); const [assignedIds, setAssignedIds] = useState>(new Set()); const [togglingId, setTogglingId] = useState(null); useEffect(() => { let cancelled = false; async function load() { if (mode === "skill") { const result = await window.agentCompany.listSkillAgents(companyId, props.skillId); if (!cancelled && result.ok) setAssignedIds(new Set(result.data)); } else { const result = await window.agentCompany.listAgentSkills(companyId, props.agentId); if (!cancelled && result.ok) setAssignedIds(new Set(result.data)); } } void load(); return () => { cancelled = true; }; }, [mode, companyId, mode === "skill" ? props.skillId : props.agentId]); const handleToggle = useCallback( async (targetId: string) => { setTogglingId(targetId); const isAssigned = assignedIds.has(targetId); const agentId = mode === "skill" ? targetId : props.agentId; const skillId = mode === "skill" ? props.skillId : targetId; const result = isAssigned ? await window.agentCompany.removeSkillFromAgent(companyId, agentId, skillId) : await window.agentCompany.assignSkillToAgent(companyId, agentId, skillId); if (result.ok) { setAssignedIds((prev) => { const next = new Set(prev); if (isAssigned) next.delete(targetId); else next.add(targetId); return next; }); } else { addToast(result.error.message, "danger"); } setTogglingId(null); }, [assignedIds, mode, companyId, addToast, mode === "skill" ? props.skillId : "", mode === "agent" ? props.agentId : ""], ); const items: Array<{ id: string; name: string; detail?: string }> = mode === "skill" ? props.agents.map((a) => ({ id: a.id, name: a.name, detail: a.role })) : props.skills.map((s) => ({ id: s.id, name: s.name, detail: s.description ?? undefined })); if (items.length === 0) { return (

{mode === "skill" ? "No agents in this company" : "No skills imported yet"}

); } return (
{items.map((item) => { const isAssigned = assignedIds.has(item.id); const isToggling = togglingId === item.id; return ( ); })}
); }