192a7e801S猫头猫import React, {useEffect, useState} from 'react'; 2bf6e62f2S猫头猫import {useAtomValue} from 'jotai'; 3be474dd8S猫头猫import {searchResultsAtom, SearchStateCode} from '../../store/atoms'; 4bf6e62f2S猫头猫import getMediaItems from '../../common/getMediaItems'; 5bf6e62f2S猫头猫import {renderMap} from './results'; 63a76c6afS猫头猫import useSearch from '../../hooks/useSearch'; 73a76c6afS猫头猫import Loading from '@/components/base/loading'; 83a76c6afS猫头猫import {FlatList} from 'react-native'; 9bf6e62f2S猫头猫 10bf6e62f2S猫头猫interface IResultWrapperProps { 11bf6e62f2S猫头猫 tab: ICommon.SupportMediaType; 129d40a3faS猫头猫 pluginHash: string; 133a76c6afS猫头猫 pluginName: string; 14bf6e62f2S猫头猫} 15bf6e62f2S猫头猫export default function ResultWrapper(props: IResultWrapperProps) { 169d40a3faS猫头猫 const {tab, pluginHash} = props; 173a76c6afS猫头猫 const search = useSearch(); 18bf6e62f2S猫头猫 const searchResults = useAtomValue(searchResultsAtom); 19be474dd8S猫头猫 const [searchState, setSearchState] = useState<SearchStateCode>( 20be474dd8S猫头猫 SearchStateCode.PENDING, 21be474dd8S猫头猫 ); 229d40a3faS猫头猫 const data = getMediaItems(searchResults, pluginHash, tab); 23bf6e62f2S猫头猫 const ResultComponent = renderMap[tab]!; 2492a7e801S猫头猫 2592a7e801S猫头猫 useEffect(() => { 26be474dd8S猫头猫 if (pluginHash === 'all') { 27*ac0d843cS猫头猫 const allCode = Object.values(searchResults).map(_ => _.state); 28*ac0d843cS猫头猫 29*ac0d843cS猫头猫 const code = allCode.reduce((prev, curr) => prev & curr); 30*ac0d843cS猫头猫 if ( 31*ac0d843cS猫头猫 code === SearchStateCode.IDLE || 32*ac0d843cS猫头猫 (!data?.length && allCode.includes(SearchStateCode.PENDING)) 33*ac0d843cS猫头猫 ) { 34be474dd8S猫头猫 setSearchState(SearchStateCode.PENDING); 35*ac0d843cS猫头猫 } else { 36*ac0d843cS猫头猫 setSearchState(code); 37be474dd8S猫头猫 } 38be474dd8S猫头猫 } else { 39be474dd8S猫头猫 setSearchState( 40be474dd8S猫头猫 searchResults[pluginHash]?.state ?? SearchStateCode.PENDING, 41be474dd8S猫头猫 ); 42be474dd8S猫头猫 } 4392a7e801S猫头猫 }, [searchResults]); 443a76c6afS猫头猫 45be474dd8S猫头猫 const renderItem = ({item, index}: any) => ( 46be474dd8S猫头猫 <ResultComponent item={item} index={index}></ResultComponent> 47be474dd8S猫头猫 ); 48be474dd8S猫头猫 49be474dd8S猫头猫 return (!data || !data?.length) && searchState === SearchStateCode.PENDING ? ( 503a76c6afS猫头猫 <Loading></Loading> 513a76c6afS猫头猫 ) : ( 523a76c6afS猫头猫 <FlatList 533a76c6afS猫头猫 data={data ?? []} 543a76c6afS猫头猫 onEndReached={() => { 55be474dd8S猫头猫 // todo 修改 56be474dd8S猫头猫 data.length > 10 && 57be474dd8S猫头猫 searchState === SearchStateCode.PARTLY_DONE && 58be474dd8S猫头猫 search(undefined, pluginHash); 593a76c6afS猫头猫 }} 60be474dd8S猫头猫 renderItem={renderItem}></FlatList> 6192a7e801S猫头猫 ); 62bf6e62f2S猫头猫} 63