192a7e801S猫头猫import React, {useEffect, useState} from 'react'; 2bf6e62f2S猫头猫import {useAtomValue} from 'jotai'; 3*be474dd8S猫头猫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); 19*be474dd8S猫头猫 const [searchState, setSearchState] = useState<SearchStateCode>( 20*be474dd8S猫头猫 SearchStateCode.PENDING, 21*be474dd8S猫头猫 ); 229d40a3faS猫头猫 const data = getMediaItems(searchResults, pluginHash, tab); 23bf6e62f2S猫头猫 const ResultComponent = renderMap[tab]!; 2492a7e801S猫头猫 2592a7e801S猫头猫 useEffect(() => { 26*be474dd8S猫头猫 if (pluginHash === 'all') { 27*be474dd8S猫头猫 const code = Object.values(searchResults).reduce( 28*be474dd8S猫头猫 (prev, curr) => prev & curr.state, 29*be474dd8S猫头猫 7, 3092a7e801S猫头猫 ); 31*be474dd8S猫头猫 if (code === SearchStateCode.IDLE) { 32*be474dd8S猫头猫 setSearchState(SearchStateCode.PENDING); 33*be474dd8S猫头猫 } 34*be474dd8S猫头猫 } else { 35*be474dd8S猫头猫 setSearchState( 36*be474dd8S猫头猫 searchResults[pluginHash]?.state ?? SearchStateCode.PENDING, 37*be474dd8S猫头猫 ); 38*be474dd8S猫头猫 } 3992a7e801S猫头猫 }, [searchResults]); 403a76c6afS猫头猫 41*be474dd8S猫头猫 const renderItem = ({item, index}: any) => ( 42*be474dd8S猫头猫 <ResultComponent item={item} index={index}></ResultComponent> 43*be474dd8S猫头猫 ); 44*be474dd8S猫头猫 45*be474dd8S猫头猫 return (!data || !data?.length) && searchState === SearchStateCode.PENDING ? ( 463a76c6afS猫头猫 <Loading></Loading> 473a76c6afS猫头猫 ) : ( 483a76c6afS猫头猫 <FlatList 493a76c6afS猫头猫 data={data ?? []} 503a76c6afS猫头猫 onEndReached={() => { 51*be474dd8S猫头猫 // todo 修改 52*be474dd8S猫头猫 data.length > 10 && 53*be474dd8S猫头猫 searchState === SearchStateCode.PARTLY_DONE && 54*be474dd8S猫头猫 search(undefined, pluginHash); 553a76c6afS猫头猫 }} 56*be474dd8S猫头猫 renderItem={renderItem}></FlatList> 5792a7e801S猫头猫 ); 58bf6e62f2S猫头猫} 59