import React, { useCallback, useMemo, useState } from 'react'; import { Box, Flex, useTheme, Input, IconButton, Tooltip } from '@chakra-ui/react'; import { AddIcon } from '@chakra-ui/icons'; import { useRouter } from 'next/router'; import MyIcon from '@/components/Icon'; import { postCreateModel } from '@/api/model'; import { useLoading } from '@/hooks/useLoading'; import { useToast } from '@/hooks/useToast'; import { useQuery } from '@tanstack/react-query'; import { useUserStore } from '@/store/user'; import Avatar from '@/components/Avatar'; const ModelList = ({ modelId }: { modelId: string }) => { const theme = useTheme(); const router = useRouter(); const { toast } = useToast(); const { Loading, setIsLoading } = useLoading(); const { myModels, myCollectionModels, loadMyModels, refreshModel } = useUserStore(); const [searchText, setSearchText] = useState(''); /* 加载模型 */ const { isFetching } = useQuery(['loadModels'], () => loadMyModels(false)); const onclickCreateModel = useCallback(async () => { setIsLoading(true); try { const id = await postCreateModel({ name: `AI应用${myModels.length + 1}` }); toast({ title: '创建成功', status: 'success' }); refreshModel.freshMyModels(); router.push(`/model?modelId=${id}`); } catch (err: any) { toast({ title: typeof err === 'string' ? err : err.message || '出现了意外', status: 'error' }); } setIsLoading(false); }, [myModels.length, refreshModel, router, setIsLoading, toast]); const models = useMemo( () => [ { label: '我的', list: myModels.filter((item) => new RegExp(searchText, 'ig').test(item.name + item.systemPrompt) ) }, { label: '收藏', list: myCollectionModels.filter((item) => new RegExp(searchText, 'ig').test(item.name + item.systemPrompt) ) } ].filter((item) => item.list.length > 0), [myCollectionModels, myModels, searchText] ); const totalModels = useMemo( () => models.reduce((sum, item) => sum + item.list.length, 0), [models] ); return ( setSearchText(e.target.value)} /> {searchText && ( setSearchText('')} /> )} } aria-label={''} variant={'outline'} onClick={onclickCreateModel} /> {models.map((item) => ( {item.label} {item.list.map((item) => ( { if (item._id === modelId) return; router.push(`/model?modelId=${item._id}`); }} > {item.name} {item.systemPrompt || '这个 应用 没有设置提示词~'} ))} ))} {!isFetching && totalModels === 0 && ( 还没有 AI 应用~ )} ); }; export default ModelList;