MCPcopy
hub / github.com/kagent-dev/kagent / ProviderCombobox

Function ProviderCombobox

ui/src/components/ProviderCombobox.tsx:45–160  ·  view source on GitHub ↗
({
  providers,
  value,
  onChange,
  disabled = false,
  loading = false,
}: ProviderComboboxProps)

Source from the content-addressed store, hash-verified

43}
44
45export function ProviderCombobox({
46 providers,
47 value,
48 onChange,
49 disabled = false,
50 loading = false,
51}: ProviderComboboxProps) {
52 const [open, setOpen] = useState(false);
53
54 const groupedProviders = useMemo(() => {
55 const stock = providers.filter(p => p.source === 'stock' || !p.source).sort((a, b) => a.name.localeCompare(b.name));
56 const configured = providers.filter(p => p.source === 'configured').sort((a, b) => a.name.localeCompare(b.name));
57 return { stock, configured };
58 }, [providers]);
59
60 const hasProviders = groupedProviders.stock.length > 0 || groupedProviders.configured.length > 0;
61
62 const triggerContent = useMemo(() => {
63 if (loading) return "Loading providers...";
64 if (value) {
65 return (
66 <>
67 {getProviderIcon(value.type)}
68 {value.name}
69 </>
70 );
71 }
72 if (!hasProviders) return "No providers available";
73 return "Select provider...";
74 }, [loading, value, hasProviders]);
75
76 return (
77 <Popover open={open} onOpenChange={setOpen}>
78 <PopoverTrigger asChild>
79 <Button
80 variant="outline"
81 role="combobox"
82 aria-expanded={open}
83 className={cn(
84 "w-full justify-between",
85 !value && !loading && "text-muted-foreground"
86 )}
87 disabled={disabled || loading || !hasProviders}
88 >
89 <span className="flex items-center truncate">
90 {triggerContent}
91 </span>
92 <ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
93 </Button>
94 </PopoverTrigger>
95 <PopoverContent className="w-[--radix-popover-trigger-width] p-0">
96 <Command>
97 <CommandInput placeholder="Search providers..." />
98 <CommandList>
99 <CommandEmpty>No provider found.</CommandEmpty>
100
101 {/* Configured Providers (shown first) */}
102 {groupedProviders.configured.length > 0 && (

Callers

nothing calls this directly

Calls 3

cnFunction · 0.90
getProviderIconFunction · 0.85
onChangeFunction · 0.85

Tested by

no test coverage detected