"use client"; import * as React from "react"; import { Check, ChevronsUpDown, Plus } from "lucide-react"; import { Button } from "~/components/ui/button"; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "~/components/ui/command"; import { Popover, PopoverContent, PopoverTrigger } from "~/components/ui/popover"; import { cn } from "~/lib/utils"; export function Combobox({ options, value, setValue, placeholder, createNew, className, }: { options: { value: string; label: string; }[]; value: string; setValue: (value: string) => void; placeholder?: string; createNew?: { createAction: (query: string) => Promise; createLabel: string; }; className?: string; }) { const [open, setOpen] = React.useState(false); const [query, setQuery] = React.useState(""); const handleCreate = async () => { if (createNew) { await createNew.createAction(query); setOpen(false); setQuery(""); } }; const handleSelect = React.useCallback( (currentValue: string) => { setValue(currentValue === value ? "" : currentValue); setOpen(false); }, [value, setValue], ); return ( {createNew && ( {createNew.createLabel.replace("{query}", query)} )} {!createNew && "No items found."} {options.map((option) => ( {option.label} ))} ); }