dash-registratori/src/components/model-picker.tsx

79 lines
2.1 KiB
TypeScript

import { Check, ChevronsUpDown } from "lucide-react";
import { cn } from "@/lib/utils";
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 { Dispatch, SetStateAction } from "react";
const ModelPicker = ({
open,
setOpen,
value,
setValue,
modelli,
}: {
open: boolean;
setOpen: Dispatch<SetStateAction<boolean>>;
value: any;
setValue: Dispatch<SetStateAction<any>>;
modelli: Array<any>;
}) => {
return (
<Popover open={open} onOpenChange={setOpen}>
<PopoverTrigger asChild>
<Button
variant="outline"
role="combobox"
aria-expanded={open}
className="w-full justify-between"
>
{value
? modelli.find((modello) => modello.value === value)?.label
: "Select framework..."}
<ChevronsUpDown className="opacity-50" />
</Button>
</PopoverTrigger>
<PopoverContent className="w-full p-0">
<Command>
<CommandInput placeholder="Search framework..." className="h-9" />
<CommandList>
<CommandEmpty>No framework found.</CommandEmpty>
<CommandGroup>
{modelli.map((modello) => (
<CommandItem
key={modello.value}
value={modello.value}
onSelect={(currentValue) => {
setValue(currentValue === value ? "" : currentValue);
setOpen(false);
}}
>
{modello.label}
<Check
className={cn(
"ml-auto",
value === modello.value ? "opacity-100" : "opacity-0",
)}
/>
</CommandItem>
))}
</CommandGroup>
</CommandList>
</Command>
</PopoverContent>
</Popover>
);
};
export default ModelPicker;