1a4ae8da5S猫头猫import React, {memo, useEffect, useState} from 'react'; 2bf6e62f2S猫头猫import {useAtomValue} from 'jotai'; 34060c00aS猫头猫import {ISearchResult, queryAtom} 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'; 820e2869eS猫头猫import {RequestStateCode} from '@/constants/commonConst'; 921f1ca13S猫头猫import ListLoading from '@/components/base/listLoading'; 1021f1ca13S猫头猫import Empty from '@/components/base/empty'; 1121f1ca13S猫头猫import ListReachEnd from '@/components/base/listReachEnd'; 12bf6e62f2S猫头猫 13a4ae8da5S猫头猫interface IResultWrapperProps< 14a4ae8da5S猫头猫 T extends ICommon.SupportMediaType = ICommon.SupportMediaType, 15a4ae8da5S猫头猫> { 16a4ae8da5S猫头猫 tab: T; 179d40a3faS猫头猫 pluginHash: string; 183a76c6afS猫头猫 pluginName: string; 19a4ae8da5S猫头猫 searchResult: ISearchResult<T>; 20*22de5a24S猫头猫 pluginSearchResultRef: React.MutableRefObject<ISearchResult<T>>; 21bf6e62f2S猫头猫} 22a4ae8da5S猫头猫function ResultWrapper(props: IResultWrapperProps) { 23*22de5a24S猫头猫 const {tab, pluginHash, searchResult, pluginSearchResultRef} = 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*22de5a24S猫头猫 <ResultComponent 45*22de5a24S猫头猫 item={item} 46*22de5a24S猫头猫 index={index} 47*22de5a24S猫头猫 pluginHash={pluginHash} 48*22de5a24S猫头猫 pluginSearchResultRef={pluginSearchResultRef} 49*22de5a24S猫头猫 /> 50be474dd8S猫头猫 ); 51be474dd8S猫头猫 5220e2869eS猫头猫 return searchState === RequestStateCode.PENDING_FP ? ( 534060c00aS猫头猫 <Loading /> 543a76c6afS猫头猫 ) : ( 553a76c6afS猫头猫 <FlatList 564f2deeb0S猫头猫 extraData={searchState} 574f2deeb0S猫头猫 style={style.list} 584060c00aS猫头猫 ListEmptyComponent={() => <Empty />} 5921f1ca13S猫头猫 ListFooterComponent={() => 6021f1ca13S猫头猫 searchState === RequestStateCode.PENDING ? ( 614060c00aS猫头猫 <ListLoading /> 6221f1ca13S猫头猫 ) : searchState === RequestStateCode.FINISHED ? ( 634060c00aS猫头猫 <ListReachEnd /> 6421f1ca13S猫头猫 ) : ( 6521f1ca13S猫头猫 <></> 6621f1ca13S猫头猫 ) 6721f1ca13S猫头猫 } 680b940038S猫头猫 data={data} 69a4ae8da5S猫头猫 refreshing={false} 70a4ae8da5S猫头猫 onRefresh={() => { 71a4ae8da5S猫头猫 search(query, 1, tab, pluginHash); 72a4ae8da5S猫头猫 }} 733a76c6afS猫头猫 onEndReached={() => { 7420e2869eS猫头猫 (searchState === RequestStateCode.PARTLY_DONE || 7520e2869eS猫头猫 searchState === RequestStateCode.IDLE) && 760b940038S猫头猫 search(undefined, undefined, tab, pluginHash); 773a76c6afS猫头猫 }} 784060c00aS猫头猫 renderItem={renderItem} 794060c00aS猫头猫 /> 8092a7e801S猫头猫 ); 81bf6e62f2S猫头猫} 824f2deeb0S猫头猫const style = StyleSheet.create({ 834f2deeb0S猫头猫 list: { 84a4ae8da5S猫头猫 flex: 1, 854f2deeb0S猫头猫 }, 864f2deeb0S猫头猫}); 87a4ae8da5S猫头猫 88a4ae8da5S猫头猫export default memo(ResultWrapper); 89