import { Button } from "@/src/components/ui/button"; import { InputCommand, InputCommandEmpty, InputCommandGroup, InputCommandInput, InputCommandItem, InputCommandList, InputCommandSeparator, } from "@/src/components/ui/input-command"; import { Popover, PopoverContent, PopoverTrigger, } from "@/src/components/ui/popover"; import { getAllModels } from "@/src/features/dashboard/components/hooks"; import { cn } from "@/src/utils/tailwind"; import { type FilterState } from "@langfuse/shared"; import { Check, ChevronsUpDown } from "lucide-react"; import { useEffect, useState } from "react"; export const ModelSelectorPopover = ({ allModels, selectedModels, setSelectedModels, buttonText, isAllSelected, handleSelectAll, }: { allModels: { model: string }[]; selectedModels: string[]; setSelectedModels: React.Dispatch>; buttonText: string; isAllSelected: boolean; handleSelectAll: () => void; }) => { const [open, setOpen] = useState(false); return ( No model found.

Select All

{allModels.map((model) => ( { setSelectedModels((prev) => prev.includes(model.model) ? prev.filter((m) => m !== model.model) : [...prev, model.model], ); }} > {!model.model || model.model === "" ? ( none ) : ( model.model )} ))}
); }; export const useModelSelection = ( projectId: string, globalFilterState: FilterState, fromTimestamp: Date, toTimestamp: Date, ) => { const allModels = getAllModels( projectId, globalFilterState, fromTimestamp, toTimestamp, ); const [selectedModels, setSelectedModels] = useState([]); const [firstAllModelUpdate, setFirstAllModelUpdate] = useState(true); const isAllSelected = selectedModels.length === allModels.length; const buttonText = isAllSelected ? "All models" : `${selectedModels.length} selected`; const handleSelectAll = () => { setSelectedModels(isAllSelected ? [] : [...allModels.map((m) => m.model)]); }; useEffect(() => { if (firstAllModelUpdate && allModels.length > 0) { setSelectedModels(allModels.slice(0, 10).map((model) => model.model)); setFirstAllModelUpdate(false); } }, [allModels, firstAllModelUpdate]); return { allModels, selectedModels, setSelectedModels, isAllSelected, buttonText, handleSelectAll, }; };