192a7e801S猫头猫import React, {useEffect, useState} from 'react'; 2bf6e62f2S猫头猫import {useAtomValue} from 'jotai'; 3*0b940038S猫头猫import {queryAtom, searchResultsAtom, SearchStateCode} from '../../store/atoms'; 4bf6e62f2S猫头猫import {renderMap} from './results'; 53a76c6afS猫头猫import useSearch from '../../hooks/useSearch'; 63a76c6afS猫头猫import Loading from '@/components/base/loading'; 74f2deeb0S猫头猫import {FlatList, StyleSheet} from 'react-native'; 84f2deeb0S猫头猫import ThemeText from '@/components/base/themeText'; 9*0b940038S猫头猫import { useFocusEffect, useIsFocused } from '@react-navigation/native'; 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>( 21*0b940038S猫头猫 searchResults[tab][pluginHash]?.state ?? SearchStateCode.IDLE, 22be474dd8S猫头猫 ); 23bf6e62f2S猫头猫 const ResultComponent = renderMap[tab]!; 24*0b940038S猫头猫 const data: any = searchResults[tab][pluginHash]?.data ?? []; 25*0b940038S猫头猫 const query = useAtomValue(queryAtom); 26*0b940038S猫头猫 console.log('RERENDER', tab, pluginHash); 2792a7e801S猫头猫 2892a7e801S猫头猫 useEffect(() => { 29be474dd8S猫头猫 setSearchState( 30*0b940038S猫头猫 searchResults[tab][pluginHash]?.state ?? SearchStateCode.IDLE, 31be474dd8S猫头猫 ); 3292a7e801S猫头猫 }, [searchResults]); 333a76c6afS猫头猫 34*0b940038S猫头猫 35be474dd8S猫头猫 const renderItem = ({item, index}: any) => ( 36be474dd8S猫头猫 <ResultComponent item={item} index={index}></ResultComponent> 37be474dd8S猫头猫 ); 38be474dd8S猫头猫 39*0b940038S猫头猫 return searchState === SearchStateCode.PENDING_FP ? ( 403a76c6afS猫头猫 <Loading></Loading> 413a76c6afS猫头猫 ) : ( 423a76c6afS猫头猫 <FlatList 434f2deeb0S猫头猫 extraData={searchState} 444f2deeb0S猫头猫 style={style.list} 45*0b940038S猫头猫 ListFooterComponent={() => ( 46*0b940038S猫头猫 <ThemeText> 47*0b940038S猫头猫 {searchState === SearchStateCode.PENDING 48*0b940038S猫头猫 ? '加载中...' 49*0b940038S猫头猫 : searchState === SearchStateCode.FINISHED 50*0b940038S猫头猫 ? '到底啦' 51*0b940038S猫头猫 : ''} 52*0b940038S猫头猫 </ThemeText> 53*0b940038S猫头猫 )} 54*0b940038S猫头猫 data={data} 553a76c6afS猫头猫 onEndReached={() => { 56*0b940038S猫头猫 (searchState === SearchStateCode.PARTLY_DONE || 57*0b940038S猫头猫 searchState === SearchStateCode.IDLE) && 58*0b940038S猫头猫 search(undefined, undefined, tab, pluginHash); 593a76c6afS猫头猫 }} 60be474dd8S猫头猫 renderItem={renderItem}></FlatList> 6192a7e801S猫头猫 ); 62bf6e62f2S猫头猫} 634f2deeb0S猫头猫const style = StyleSheet.create({ 644f2deeb0S猫头猫 list: { 65*0b940038S猫头猫 flex: 1 664f2deeb0S猫头猫 }, 674f2deeb0S猫头猫}); 68