xref: /MusicFree/src/pages/searchPage/components/resultPanel/resultWrapper.tsx (revision 3a76c6afd27eed7f26450535667a4fb0439f5713)
192a7e801S猫头猫import React, {useEffect, useState} from 'react';
2bf6e62f2S猫头猫import {useAtomValue} from 'jotai';
3bf6e62f2S猫头猫import {searchResultsAtom} from '../../store/atoms';
4bf6e62f2S猫头猫import getMediaItems from '../../common/getMediaItems';
5bf6e62f2S猫头猫import {renderMap} from './results';
6*3a76c6afS猫头猫import useSearch from '../../hooks/useSearch';
7*3a76c6afS猫头猫import Loading from '@/components/base/loading';
8*3a76c6afS猫头猫import {FlatList} from 'react-native';
9bf6e62f2S猫头猫
10bf6e62f2S猫头猫interface IResultWrapperProps {
11bf6e62f2S猫头猫  tab: ICommon.SupportMediaType;
129d40a3faS猫头猫  pluginHash: string;
13*3a76c6afS猫头猫  pluginName: string;
14bf6e62f2S猫头猫}
15bf6e62f2S猫头猫export default function ResultWrapper(props: IResultWrapperProps) {
169d40a3faS猫头猫  const {tab, pluginHash} = props;
17*3a76c6afS猫头猫  const search = useSearch();
18bf6e62f2S猫头猫  const searchResults = useAtomValue(searchResultsAtom);
1992a7e801S猫头猫  const [pendingState, setPendingState] = useState<string>('pending');
209d40a3faS猫头猫  const data = getMediaItems(searchResults, pluginHash, tab);
21bf6e62f2S猫头猫  const ResultComponent = renderMap[tab]!;
2292a7e801S猫头猫
2392a7e801S猫头猫  useEffect(() => {
2492a7e801S猫头猫    setPendingState(
259d40a3faS猫头猫      pluginHash === 'all'
2692a7e801S猫头猫        ? Object.values(searchResults).every(_ => _.state !== 'pending')
2792a7e801S猫头猫          ? 'resolved'
2892a7e801S猫头猫          : 'pending'
299d40a3faS猫头猫        : searchResults[pluginHash]?.state ?? 'pending',
3092a7e801S猫头猫    );
3192a7e801S猫头猫  }, [searchResults]);
32*3a76c6afS猫头猫
33*3a76c6afS猫头猫  return (!data || !data?.length) && pendingState === 'pending' ? (
34*3a76c6afS猫头猫    <Loading></Loading>
35*3a76c6afS猫头猫  ) : (
36*3a76c6afS猫头猫    <FlatList
37*3a76c6afS猫头猫      data={data ?? []}
38*3a76c6afS猫头猫      contentContainerStyle={{flex: 1}}
39*3a76c6afS猫头猫      onEndReached={() => {
40*3a76c6afS猫头猫        pendingState === 'resolved' && search(undefined, pluginHash);
41*3a76c6afS猫头猫      }}
42*3a76c6afS猫头猫      renderItem={({item, index}) => (
43*3a76c6afS猫头猫        <ResultComponent item={item} index={index}></ResultComponent>
44*3a76c6afS猫头猫      )}></FlatList>
4592a7e801S猫头猫  );
46bf6e62f2S猫头猫}
47