1a4ae8da5S猫头猫import React, {memo, useEffect, useState} from 'react'; 2bf6e62f2S猫头猫import {useAtomValue} from 'jotai'; 3*21f1ca13S猫头猫import {ISearchResult, queryAtom, searchResultsAtom} 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'; 920e2869eS猫头猫import {RequestStateCode} from '@/constants/commonConst'; 10*21f1ca13S猫头猫import ListLoading from '@/components/base/listLoading'; 11*21f1ca13S猫头猫import Empty from '@/components/base/empty'; 12*21f1ca13S猫头猫import ListReachEnd from '@/components/base/listReachEnd'; 13bf6e62f2S猫头猫 14a4ae8da5S猫头猫interface IResultWrapperProps< 15a4ae8da5S猫头猫 T extends ICommon.SupportMediaType = ICommon.SupportMediaType, 16a4ae8da5S猫头猫> { 17a4ae8da5S猫头猫 tab: T; 189d40a3faS猫头猫 pluginHash: string; 193a76c6afS猫头猫 pluginName: string; 20a4ae8da5S猫头猫 searchResult: ISearchResult<T>; 21bf6e62f2S猫头猫} 22a4ae8da5S猫头猫function ResultWrapper(props: IResultWrapperProps) { 23a4ae8da5S猫头猫 const {tab, pluginHash, searchResult, pluginName} = props; 243a76c6afS猫头猫 const search = useSearch(); 2520e2869eS猫头猫 const [searchState, setSearchState] = useState<RequestStateCode>( 2620e2869eS猫头猫 searchResult?.state ?? RequestStateCode.IDLE, 27be474dd8S猫头猫 ); 280b940038S猫头猫 const query = useAtomValue(queryAtom); 29a4ae8da5S猫头猫 30a4ae8da5S猫头猫 const ResultComponent = renderMap[tab]!; 31a4ae8da5S猫头猫 const data: any = searchResult?.data ?? []; 3292a7e801S猫头猫 3392a7e801S猫头猫 useEffect(() => { 3420e2869eS猫头猫 if (searchState === RequestStateCode.IDLE) { 35a4ae8da5S猫头猫 search(query, 1, tab, pluginHash); 36a4ae8da5S猫头猫 } 37a4ae8da5S猫头猫 }, []); 383a76c6afS猫头猫 39a4ae8da5S猫头猫 useEffect(() => { 4020e2869eS猫头猫 setSearchState(searchResult?.state ?? RequestStateCode.IDLE); 41a4ae8da5S猫头猫 }, [searchResult]); 420b940038S猫头猫 43be474dd8S猫头猫 const renderItem = ({item, index}: any) => ( 44*21f1ca13S猫头猫 <ResultComponent 45*21f1ca13S猫头猫 item={item} 46*21f1ca13S猫头猫 index={index} 47*21f1ca13S猫头猫 pluginHash={pluginHash}></ResultComponent> 48be474dd8S猫头猫 ); 49be474dd8S猫头猫 5020e2869eS猫头猫 return searchState === RequestStateCode.PENDING_FP ? ( 513a76c6afS猫头猫 <Loading></Loading> 523a76c6afS猫头猫 ) : ( 533a76c6afS猫头猫 <FlatList 544f2deeb0S猫头猫 extraData={searchState} 554f2deeb0S猫头猫 style={style.list} 56*21f1ca13S猫头猫 ListEmptyComponent={() => <Empty></Empty>} 57*21f1ca13S猫头猫 ListFooterComponent={() => 58*21f1ca13S猫头猫 searchState === RequestStateCode.PENDING ? ( 59*21f1ca13S猫头猫 <ListLoading></ListLoading> 60*21f1ca13S猫头猫 ) : searchState === RequestStateCode.FINISHED ? ( 61*21f1ca13S猫头猫 <ListReachEnd></ListReachEnd> 62*21f1ca13S猫头猫 ) : ( 63*21f1ca13S猫头猫 <></> 64*21f1ca13S猫头猫 ) 65*21f1ca13S猫头猫 } 660b940038S猫头猫 data={data} 67a4ae8da5S猫头猫 refreshing={false} 68a4ae8da5S猫头猫 onRefresh={() => { 69a4ae8da5S猫头猫 search(query, 1, tab, pluginHash); 70a4ae8da5S猫头猫 }} 713a76c6afS猫头猫 onEndReached={() => { 7220e2869eS猫头猫 (searchState === RequestStateCode.PARTLY_DONE || 7320e2869eS猫头猫 searchState === RequestStateCode.IDLE) && 740b940038S猫头猫 search(undefined, undefined, tab, pluginHash); 753a76c6afS猫头猫 }} 76be474dd8S猫头猫 renderItem={renderItem}></FlatList> 7792a7e801S猫头猫 ); 78bf6e62f2S猫头猫} 794f2deeb0S猫头猫const style = StyleSheet.create({ 804f2deeb0S猫头猫 list: { 81a4ae8da5S猫头猫 flex: 1, 824f2deeb0S猫头猫 }, 834f2deeb0S猫头猫}); 84a4ae8da5S猫头猫 85a4ae8da5S猫头猫export default memo(ResultWrapper); 86