"use client"; import type { AutoFormInputComponentProps } from "../ui/auto-form/types"; import { LoadingIcon } from "@/components/LoadingIcon"; 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"; import { Check, ChevronsUpDown } from "lucide-react"; import * as React from "react"; import { useRef } from "react"; import { z } from "zod"; import { ModelListWrapper, Model, ModelList } from "./CivitalModelSchema"; export function ModelSelector({ field, modelList, label, onSearch, shouldFilter = true, isLoading, selectMultiple = true, }: Pick & { modelList?: z.infer; label: string; onSearch?: (search: string) => void; shouldFilter?: boolean; isLoading?: boolean; selectMultiple?: boolean; }) { const value = (field.value as z.infer) ?? []; const [open, setOpen] = React.useState(false); function toggleModel(model: z.infer) { const prevSelectedModels = value; if ( prevSelectedModels.some( (selectedModel) => selectedModel.url + selectedModel.name === model.url + model.name, ) ) { field.onChange( prevSelectedModels.filter( (selectedModel) => selectedModel.url + selectedModel.name !== model.url + model.name, ), ); } else { if (!selectMultiple) { field.onChange([model]); } else { field.onChange([...prevSelectedModels, model]); } } } const containerRef = useRef(null); return (
{isLoading && } No models found. {modelList?.models.map((model) => ( { toggleModel(model); }} > {model.name} selectedModel.url === model.url, ) ? "opacity-100" : "opacity-0", )} /> ))}
); }