import React, { useState, useRef, useCallback, useMemo } from 'react'; import { Box, Flex, Card, Grid, Input } from '@chakra-ui/react'; import { useLoading } from '@/hooks/useLoading'; import { getShareModelList, triggerModelCollection, getCollectionModels } from '@/api/model'; import { usePagination } from '@/hooks/usePagination'; import type { ShareModelItem } from '@/types/model'; import { useUserStore } from '@/store/user'; import ShareModelList from './components/list'; import { useQuery } from '@tanstack/react-query'; const modelList = () => { const { Loading } = useLoading(); const lastSearch = useRef(''); const [searchText, setSearchText] = useState(''); const { refreshModel } = useUserStore(); /* 加载模型 */ const { data, isLoading, Pagination, getData, pageNum } = usePagination({ api: getShareModelList, pageSize: 20, params: { searchText } }); const { data: collectionModels = [], refetch: refetchCollection } = useQuery( ['getCollectionModels'], getCollectionModels ); const models = useMemo(() => { if (!collectionModels) return []; return data.map((model) => ({ ...model, isCollection: !!collectionModels.find((item) => item._id === model._id) })); }, [collectionModels, data]); const onclickCollection = useCallback( async (modelId: string) => { try { await triggerModelCollection(modelId); getData(pageNum); refetchCollection(); refreshModel.removeModelDetail(modelId); } catch (error) { console.log(error); } }, [getData, pageNum, refetchCollection, refreshModel] ); return ( 我收藏的AI助手 {collectionModels.length == 0 && ( 还没有收藏AI助手~ )} AI助手市场 (Beta) setSearchText(e.target.value)} onBlur={() => { if (searchText === lastSearch.current) return; getData(1); lastSearch.current = searchText; }} onKeyDown={(e) => { if (searchText === lastSearch.current) return; if (e.key === 'Enter') { getData(1); lastSearch.current = searchText; } }} /> ); }; export default modelList;