Skip to main content
Glama
MultiSelectTools.tsx2.3 kB
import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "@/components/ui/command"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { Plus } from "lucide-react"; export const MultiSelectTools = ({ disabled = false, onCreateNew, onSelectionChange, options, placeholder, selected, title, }: { disabled?: boolean; onCreateNew: () => void; onSelectionChange: (value: string) => void; options: { id: string; name: string }[]; placeholder?: string; selected: string[]; title: string; }) => { const selectedCount = selected?.length || 0; return ( <Popover> <PopoverTrigger asChild> <Button variant="secondary" className="w-full justify-start font-normal" disabled={disabled} > <span className="truncate"> {selectedCount > 0 ? `${selectedCount} selected` : (placeholder ?? `Select ${title}...`)} </span> </Button> </PopoverTrigger> <PopoverContent className="w-[--radix-popover-trigger-width] p-0" align="start" > <Command> <CommandInput placeholder={`Search ${title}...`} /> <CommandList> <CommandEmpty>No results found.</CommandEmpty> <CommandGroup> <CommandItem onSelect={onCreateNew} className="text-[var(--color-fg-success)] cursor-pointer" > <Plus className="w-4 h-4 mr-2" /> Create New Tool Group </CommandItem> {options.map((option) => ( <CommandItem key={option.id} onSelect={() => onSelectionChange(option.id)} > <Checkbox className="mr-2" checked={selected.includes(option.id)} /> <span>{option.name}</span> </CommandItem> ))} </CommandGroup> </CommandList> </Command> </PopoverContent> </Popover> ); };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TheLunarCompany/lunar'

If you have feedback or need assistance with the MCP directory API, please join our Discord server