/* eslint-disable react-hooks/exhaustive-deps */ import { useCallback, useMemo } from 'react' import { Model } from '@janhq/core' import { Badge, Button } from '@janhq/uikit' import { atom, useAtomValue } from 'jotai' import { ChevronDownIcon } from 'lucide-react' import { twMerge } from 'tailwind-merge' import ModalCancelDownload from '@/containers/ModalCancelDownload' import { MainViewState } from '@/constants/screens' // import { ModelPerformance, TagType } from '@/constants/tagType' import { useActiveModel } from '@/hooks/useActiveModel' import useDownloadModel from '@/hooks/useDownloadModel' import { useDownloadState } from '@/hooks/useDownloadState' import { useGetDownloadedModels } from '@/hooks/useGetDownloadedModels' import { useMainViewState } from '@/hooks/useMainViewState' import { toGigabytes } from '@/utils/converter' type Props = { model: Model onClick: () => void open: string } const ExploreModelItemHeader: React.FC = ({ model, onClick, open }) => { const { downloadModel } = useDownloadModel() const { downloadedModels } = useGetDownloadedModels() const { modelDownloadStateAtom, downloadStates } = useDownloadState() const { startModel } = useActiveModel() // const [title, setTitle] = useState('Recommended') // const [performanceTag, setPerformanceTag] = useState( // ModelPerformance.PerformancePositive // ) const downloadAtom = useMemo( () => atom((get) => get(modelDownloadStateAtom)[model.id]), [model.id] ) const downloadState = useAtomValue(downloadAtom) const { setMainViewState } = useMainViewState() const onDownloadClick = useCallback(() => { downloadModel(model) // eslint-disable-next-line react-hooks/exhaustive-deps }, [model]) const isDownloaded = downloadedModels.find((md) => md.id === model.id) != null let downloadButton = ( ) if (isDownloaded) { downloadButton = ( ) } if (downloadState != null && downloadStates.length > 0) { downloadButton = } // const renderBadge = (performance: TagType) => { // switch (performance) { // case ModelPerformance.PerformancePositive: // return {title} // case ModelPerformance.PerformanceNeutral: // return {title} // case ModelPerformance.PerformanceNegative: // return {title} // default: // break // } // } return (
{model.name} {model.metadata.tags[0]}
{toGigabytes(model.metadata.size)} {downloadButton}
) } export default ExploreModelItemHeader