1a4ae8da5S猫头猫import React, {memo, useEffect, useState} from 'react'; 2bf6e62f2S猫头猫import {useAtomValue} from 'jotai'; 3a4ae8da5S猫头猫import { 4a4ae8da5S猫头猫 ISearchResult, 5a4ae8da5S猫头猫 queryAtom, 6a4ae8da5S猫头猫 searchResultsAtom, 7a4ae8da5S猫头猫} from '../../store/atoms'; 8bf6e62f2S猫头猫import {renderMap} from './results'; 93a76c6afS猫头猫import useSearch from '../../hooks/useSearch'; 103a76c6afS猫头猫import Loading from '@/components/base/loading'; 114f2deeb0S猫头猫import {FlatList, StyleSheet} from 'react-native'; 124f2deeb0S猫头猫import ThemeText from '@/components/base/themeText'; 13*20e2869eS猫头猫import { RequestStateCode } from '@/constants/commonConst'; 14bf6e62f2S猫头猫 15a4ae8da5S猫头猫interface IResultWrapperProps< 16a4ae8da5S猫头猫 T extends ICommon.SupportMediaType = ICommon.SupportMediaType, 17a4ae8da5S猫头猫> { 18a4ae8da5S猫头猫 tab: T; 199d40a3faS猫头猫 pluginHash: string; 203a76c6afS猫头猫 pluginName: string; 21a4ae8da5S猫头猫 searchResult: ISearchResult<T>; 22bf6e62f2S猫头猫} 23a4ae8da5S猫头猫function ResultWrapper(props: IResultWrapperProps) { 24a4ae8da5S猫头猫 const {tab, pluginHash, searchResult, pluginName} = props; 253a76c6afS猫头猫 const search = useSearch(); 26*20e2869eS猫头猫 const [searchState, setSearchState] = useState<RequestStateCode>( 27*20e2869eS猫头猫 searchResult?.state ?? RequestStateCode.IDLE, 28be474dd8S猫头猫 ); 290b940038S猫头猫 const query = useAtomValue(queryAtom); 30a4ae8da5S猫头猫 31a4ae8da5S猫头猫 const ResultComponent = renderMap[tab]!; 32a4ae8da5S猫头猫 const data: any = searchResult?.data ?? []; 3392a7e801S猫头猫 3492a7e801S猫头猫 useEffect(() => { 35*20e2869eS猫头猫 if (searchState === RequestStateCode.IDLE) { 36a4ae8da5S猫头猫 search(query, 1, tab, pluginHash); 37a4ae8da5S猫头猫 } 38a4ae8da5S猫头猫 }, []); 393a76c6afS猫头猫 40a4ae8da5S猫头猫 useEffect(() => { 41*20e2869eS猫头猫 setSearchState(searchResult?.state ?? RequestStateCode.IDLE); 42a4ae8da5S猫头猫 }, [searchResult]); 430b940038S猫头猫 44be474dd8S猫头猫 const renderItem = ({item, index}: any) => ( 45*20e2869eS猫头猫 <ResultComponent item={item} index={index} pluginHash={pluginHash}></ResultComponent> 46be474dd8S猫头猫 ); 47be474dd8S猫头猫 48*20e2869eS猫头猫 return searchState === RequestStateCode.PENDING_FP ? ( 493a76c6afS猫头猫 <Loading></Loading> 503a76c6afS猫头猫 ) : ( 513a76c6afS猫头猫 <FlatList 524f2deeb0S猫头猫 extraData={searchState} 534f2deeb0S猫头猫 style={style.list} 54a4ae8da5S猫头猫 ListEmptyComponent={() => <ThemeText>什么都没有</ThemeText>} 550b940038S猫头猫 ListFooterComponent={() => ( 560b940038S猫头猫 <ThemeText> 57*20e2869eS猫头猫 {searchState === RequestStateCode.PENDING 580b940038S猫头猫 ? '加载中...' 59*20e2869eS猫头猫 : searchState === RequestStateCode.FINISHED 600b940038S猫头猫 ? '到底啦' 610b940038S猫头猫 : ''} 620b940038S猫头猫 </ThemeText> 630b940038S猫头猫 )} 640b940038S猫头猫 data={data} 65a4ae8da5S猫头猫 refreshing={false} 66a4ae8da5S猫头猫 onRefresh={() => { 67a4ae8da5S猫头猫 search(query, 1, tab, pluginHash); 68a4ae8da5S猫头猫 }} 693a76c6afS猫头猫 onEndReached={() => { 70*20e2869eS猫头猫 (searchState === RequestStateCode.PARTLY_DONE || 71*20e2869eS猫头猫 searchState === RequestStateCode.IDLE) && 720b940038S猫头猫 search(undefined, undefined, tab, pluginHash); 733a76c6afS猫头猫 }} 74be474dd8S猫头猫 renderItem={renderItem}></FlatList> 7592a7e801S猫头猫 ); 76bf6e62f2S猫头猫} 774f2deeb0S猫头猫const style = StyleSheet.create({ 784f2deeb0S猫头猫 list: { 79a4ae8da5S猫头猫 flex: 1, 804f2deeb0S猫头猫 }, 814f2deeb0S猫头猫}); 82a4ae8da5S猫头猫 83a4ae8da5S猫头猫export default memo(ResultWrapper); 84