15500cea7S猫头猫import React, {memo, useCallback, 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'; 720e2869eS猫头猫import {RequestStateCode} from '@/constants/commonConst'; 821f1ca13S猫头猫import ListLoading from '@/components/base/listLoading'; 921f1ca13S猫头猫import Empty from '@/components/base/empty'; 1021f1ca13S猫头猫import ListReachEnd from '@/components/base/listReachEnd'; 11771839b6S猫头猫import useOrientation from '@/hooks/useOrientation'; 12771839b6S猫头猫import {FlashList} from '@shopify/flash-list'; 13771839b6S猫头猫import rpx from '@/utils/rpx'; 14c1df0edfSTheoimport {StyleSheet, View} from 'react-native'; 15bf6e62f2S猫头猫 16a4ae8da5S猫头猫interface IResultWrapperProps< 17a4ae8da5S猫头猫 T extends ICommon.SupportMediaType = ICommon.SupportMediaType, 18a4ae8da5S猫头猫> { 19a4ae8da5S猫头猫 tab: T; 209d40a3faS猫头猫 pluginHash: string; 213a76c6afS猫头猫 pluginName: string; 22a4ae8da5S猫头猫 searchResult: ISearchResult<T>; 2322de5a24S猫头猫 pluginSearchResultRef: React.MutableRefObject<ISearchResult<T>>; 24bf6e62f2S猫头猫} 25a4ae8da5S猫头猫function ResultWrapper(props: IResultWrapperProps) { 2622de5a24S猫头猫 const {tab, pluginHash, searchResult, pluginSearchResultRef} = props; 273a76c6afS猫头猫 const search = useSearch(); 2820e2869eS猫头猫 const [searchState, setSearchState] = useState<RequestStateCode>( 2920e2869eS猫头猫 searchResult?.state ?? RequestStateCode.IDLE, 30be474dd8S猫头猫 ); 31771839b6S猫头猫 const orientation = useOrientation(); 320b940038S猫头猫 const query = useAtomValue(queryAtom); 33a4ae8da5S猫头猫 34a4ae8da5S猫头猫 const ResultComponent = renderMap[tab]!; 35a4ae8da5S猫头猫 const data: any = searchResult?.data ?? []; 3692a7e801S猫头猫 375500cea7S猫头猫 const keyExtractor = useCallback( 385500cea7S猫头猫 (item: any, i: number) => `${i}-${item.platform}-${item.id}`, 395500cea7S猫头猫 [], 405500cea7S猫头猫 ); 415500cea7S猫头猫 4292a7e801S猫头猫 useEffect(() => { 4320e2869eS猫头猫 if (searchState === RequestStateCode.IDLE) { 44a4ae8da5S猫头猫 search(query, 1, tab, pluginHash); 45a4ae8da5S猫头猫 } 46a4ae8da5S猫头猫 }, []); 473a76c6afS猫头猫 48a4ae8da5S猫头猫 useEffect(() => { 4920e2869eS猫头猫 setSearchState(searchResult?.state ?? RequestStateCode.IDLE); 50a4ae8da5S猫头猫 }, [searchResult]); 510b940038S猫头猫 52be474dd8S猫头猫 const renderItem = ({item, index}: any) => ( 5322de5a24S猫头猫 <ResultComponent 5422de5a24S猫头猫 item={item} 5522de5a24S猫头猫 index={index} 5622de5a24S猫头猫 pluginHash={pluginHash} 5722de5a24S猫头猫 pluginSearchResultRef={pluginSearchResultRef} 5822de5a24S猫头猫 /> 59be474dd8S猫头猫 ); 60be474dd8S猫头猫 61956ee1b7S猫头猫 return searchState === RequestStateCode.PENDING_FIRST_PAGE ? ( 624060c00aS猫头猫 <Loading /> 633a76c6afS猫头猫 ) : ( 64771839b6S猫头猫 <FlashList 654f2deeb0S猫头猫 extraData={searchState} 66*bcc58947S猫头猫 ListEmptyComponent={() => 67*bcc58947S猫头猫 searchState & RequestStateCode.LOADING ? null : <Empty /> 68*bcc58947S猫头猫 } 69c1df0edfSTheo ListFooterComponent={() => ( 70c1df0edfSTheo <View style={style.wrapper}> 71956ee1b7S猫头猫 {searchState === RequestStateCode.PENDING_REST_PAGE ? ( 724060c00aS猫头猫 <ListLoading /> 7321f1ca13S猫头猫 ) : searchState === RequestStateCode.FINISHED ? ( 744060c00aS猫头猫 <ListReachEnd /> 7521f1ca13S猫头猫 ) : ( 7621f1ca13S猫头猫 <></> 77c1df0edfSTheo )} 78c1df0edfSTheo </View> 79c1df0edfSTheo )} 800b940038S猫头猫 data={data} 81a4ae8da5S猫头猫 refreshing={false} 82a4ae8da5S猫头猫 onRefresh={() => { 83a4ae8da5S猫头猫 search(query, 1, tab, pluginHash); 84a4ae8da5S猫头猫 }} 853a76c6afS猫头猫 onEndReached={() => { 8620e2869eS猫头猫 (searchState === RequestStateCode.PARTLY_DONE || 8720e2869eS猫头猫 searchState === RequestStateCode.IDLE) && 880b940038S猫头猫 search(undefined, undefined, tab, pluginHash); 893a76c6afS猫头猫 }} 90771839b6S猫头猫 estimatedItemSize={tab === 'sheet' ? rpx(306) : rpx(120)} 91771839b6S猫头猫 numColumns={ 92771839b6S猫头猫 tab === 'sheet' ? (orientation === 'vertical' ? 3 : 4) : 1 93771839b6S猫头猫 } 944060c00aS猫头猫 renderItem={renderItem} 955500cea7S猫头猫 keyExtractor={keyExtractor} 964060c00aS猫头猫 /> 9792a7e801S猫头猫 ); 98bf6e62f2S猫头猫} 99a4ae8da5S猫头猫 100a4ae8da5S猫头猫export default memo(ResultWrapper); 101c1df0edfSTheoconst style = StyleSheet.create({ 102c1df0edfSTheo wrapper: { 103c1df0edfSTheo width: '100%', 104c1df0edfSTheo height: rpx(140), 105c1df0edfSTheo justifyContent: 'center', 106c1df0edfSTheo alignItems: 'center', 107c1df0edfSTheo }, 108c1df0edfSTheo}); 109