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'; 8*4f2deeb0S猫头猫import {FlatList, StyleSheet} from 'react-native'; 9*4f2deeb0S猫头猫import ThemeText from '@/components/base/themeText'; 10bf6e62f2S猫头猫 11bf6e62f2S猫头猫interface IResultWrapperProps { 12bf6e62f2S猫头猫 tab: ICommon.SupportMediaType; 139d40a3faS猫头猫 pluginHash: string; 143a76c6afS猫头猫 pluginName: string; 15bf6e62f2S猫头猫} 16bf6e62f2S猫头猫export default function ResultWrapper(props: IResultWrapperProps) { 179d40a3faS猫头猫 const {tab, pluginHash} = props; 183a76c6afS猫头猫 const search = useSearch(); 19bf6e62f2S猫头猫 const searchResults = useAtomValue(searchResultsAtom); 20be474dd8S猫头猫 const [searchState, setSearchState] = useState<SearchStateCode>( 21be474dd8S猫头猫 SearchStateCode.PENDING, 22be474dd8S猫头猫 ); 239d40a3faS猫头猫 const data = getMediaItems(searchResults, pluginHash, tab); 24bf6e62f2S猫头猫 const ResultComponent = renderMap[tab]!; 2592a7e801S猫头猫 2692a7e801S猫头猫 useEffect(() => { 27be474dd8S猫头猫 if (pluginHash === 'all') { 28ac0d843cS猫头猫 const allCode = Object.values(searchResults).map(_ => _.state); 29ac0d843cS猫头猫 30ac0d843cS猫头猫 const code = allCode.reduce((prev, curr) => prev & curr); 31ac0d843cS猫头猫 if ( 32ac0d843cS猫头猫 code === SearchStateCode.IDLE || 33ac0d843cS猫头猫 (!data?.length && allCode.includes(SearchStateCode.PENDING)) 34ac0d843cS猫头猫 ) { 35be474dd8S猫头猫 setSearchState(SearchStateCode.PENDING); 36ac0d843cS猫头猫 } else { 37ac0d843cS猫头猫 setSearchState(code); 38be474dd8S猫头猫 } 39be474dd8S猫头猫 } else { 40be474dd8S猫头猫 setSearchState( 41be474dd8S猫头猫 searchResults[pluginHash]?.state ?? SearchStateCode.PENDING, 42be474dd8S猫头猫 ); 43be474dd8S猫头猫 } 4492a7e801S猫头猫 }, [searchResults]); 453a76c6afS猫头猫 46be474dd8S猫头猫 const renderItem = ({item, index}: any) => ( 47be474dd8S猫头猫 <ResultComponent item={item} index={index}></ResultComponent> 48be474dd8S猫头猫 ); 49be474dd8S猫头猫 50be474dd8S猫头猫 return (!data || !data?.length) && searchState === SearchStateCode.PENDING ? ( 513a76c6afS猫头猫 <Loading></Loading> 523a76c6afS猫头猫 ) : ( 533a76c6afS猫头猫 <FlatList 54*4f2deeb0S猫头猫 extraData={searchState} 55*4f2deeb0S猫头猫 style={style.list} 56*4f2deeb0S猫头猫 ListFooterComponent={() => <ThemeText>{ searchState === SearchStateCode.PENDING ? '加载中...' : searchState === SearchStateCode.FINISHED ?'到底啦' :''}</ThemeText>} 573a76c6afS猫头猫 data={data ?? []} 583a76c6afS猫头猫 onEndReached={() => { 59be474dd8S猫头猫 // todo 修改 60be474dd8S猫头猫 data.length > 10 && 61be474dd8S猫头猫 searchState === SearchStateCode.PARTLY_DONE && 62be474dd8S猫头猫 search(undefined, pluginHash); 633a76c6afS猫头猫 }} 64be474dd8S猫头猫 renderItem={renderItem}></FlatList> 6592a7e801S猫头猫 ); 66bf6e62f2S猫头猫} 67*4f2deeb0S猫头猫const style = StyleSheet.create({ 68*4f2deeb0S猫头猫 list: { 69*4f2deeb0S猫头猫 flex: 1, 70*4f2deeb0S猫头猫 }, 71*4f2deeb0S猫头猫}); 72