import { Fragment, useEffect, useState } from 'react' import { Listbox, Transition } from '@headlessui/react' import { CheckIcon, ChevronUpDownIcon } from '@heroicons/react/20/solid' import { Model } from '@janhq/core/lib/types' import { atom, useSetAtom } from 'jotai' import { twMerge } from 'tailwind-merge' import { getDownloadedModels } from '@/hooks/useGetDownloadedModels' export const selectedModelAtom = atom(undefined) export default function DropdownListSidebar() { const [downloadedModels, setDownloadedModels] = useState([]) const [selected, setSelected] = useState() const setSelectedModel = useSetAtom(selectedModelAtom) useEffect(() => { getDownloadedModels().then((downloadedModels) => { setDownloadedModels(downloadedModels) if (downloadedModels.length > 0) { setSelected(downloadedModels[0]) setSelectedModel(downloadedModels[0]) } }) }, []) if (!selected) return null return ( { setSelected(model) setSelectedModel(model) }} > {({ open }) => ( <>
{selected.name} {downloadedModels.map((model) => ( twMerge( active ? 'bg-indigo-600 text-white' : 'text-gray-900', 'relative cursor-default select-none py-2 pl-3 pr-9' ) } value={model} > {({ selected, active }) => ( <> {model.name} {selected ? ( ) : null} )} ))}
)}
) }