import { useCallback, useState } from 'react' import Image from 'next/image' import { ScrollArea, Button, Select } from '@janhq/joi' import { useAtomValue, useSetAtom } from 'jotai' import { UploadIcon } from 'lucide-react' import BlankState from '@/containers/BlankState' import CenterPanelContainer from '@/containers/CenterPanelContainer' import ModelSearch from '@/containers/ModelSearch' import { setImportModelStageAtom } from '@/hooks/useImportModel' import ModelList from '@/screens/Hub/ModelList' import { configuredModelsAtom, downloadedModelsAtom, } from '@/helpers/atoms/Model.atom' const sortMenus = [ { name: 'All Models', value: 'all-models', }, { name: 'Featured', value: 'featured', }, { name: 'Downloaded', value: 'downloaded', }, ] const HubScreen = () => { const configuredModels = useAtomValue(configuredModelsAtom) const downloadedModels = useAtomValue(downloadedModelsAtom) const [searchValue, setsearchValue] = useState('') const [sortSelected, setSortSelected] = useState('all-models') const setImportModelStage = useSetAtom(setImportModelStageAtom) const filteredModels = configuredModels.filter((x) => { if (sortSelected === 'downloaded') { return ( x.name.toLowerCase().includes(searchValue.toLowerCase()) && downloadedModels.some((y) => y.id === x.id) ) } else if (sortSelected === 'featured') { return ( x.name.toLowerCase().includes(searchValue.toLowerCase()) && x.metadata.tags.includes('Featured') ) } else { return x.name.toLowerCase().includes(searchValue.toLowerCase()) } }) const onImportModelClick = useCallback(() => { setImportModelStage('SELECTING_MODEL') }, [setImportModelStage]) const onSearchUpdate = useCallback((input: string) => { setsearchValue(input) }, []) return (
Hub Banner
{!filteredModels.length ? ( ) : (