xref: /MusicFree/src/pages/searchPage/components/resultPanel/resultWrapper.tsx (revision be474dd8e880db89ced5358f5bce5ca4b79a3466)
192a7e801S猫头猫import React, {useEffect, useState} from 'react';
2bf6e62f2S猫头猫import {useAtomValue} from 'jotai';
3*be474dd8S猫头猫import {searchResultsAtom, SearchStateCode} from '../../store/atoms';
4bf6e62f2S猫头猫import getMediaItems from '../../common/getMediaItems';
5bf6e62f2S猫头猫import {renderMap} from './results';
63a76c6afS猫头猫import useSearch from '../../hooks/useSearch';
73a76c6afS猫头猫import Loading from '@/components/base/loading';
83a76c6afS猫头猫import {FlatList} from 'react-native';
9bf6e62f2S猫头猫
10bf6e62f2S猫头猫interface IResultWrapperProps {
11bf6e62f2S猫头猫  tab: ICommon.SupportMediaType;
129d40a3faS猫头猫  pluginHash: string;
133a76c6afS猫头猫  pluginName: string;
14bf6e62f2S猫头猫}
15bf6e62f2S猫头猫export default function ResultWrapper(props: IResultWrapperProps) {
169d40a3faS猫头猫  const {tab, pluginHash} = props;
173a76c6afS猫头猫  const search = useSearch();
18bf6e62f2S猫头猫  const searchResults = useAtomValue(searchResultsAtom);
19*be474dd8S猫头猫  const [searchState, setSearchState] = useState<SearchStateCode>(
20*be474dd8S猫头猫    SearchStateCode.PENDING,
21*be474dd8S猫头猫  );
229d40a3faS猫头猫  const data = getMediaItems(searchResults, pluginHash, tab);
23bf6e62f2S猫头猫  const ResultComponent = renderMap[tab]!;
2492a7e801S猫头猫
2592a7e801S猫头猫  useEffect(() => {
26*be474dd8S猫头猫    if (pluginHash === 'all') {
27*be474dd8S猫头猫      const code = Object.values(searchResults).reduce(
28*be474dd8S猫头猫        (prev, curr) => prev & curr.state,
29*be474dd8S猫头猫        7,
3092a7e801S猫头猫      );
31*be474dd8S猫头猫      if (code === SearchStateCode.IDLE) {
32*be474dd8S猫头猫        setSearchState(SearchStateCode.PENDING);
33*be474dd8S猫头猫      }
34*be474dd8S猫头猫    } else {
35*be474dd8S猫头猫      setSearchState(
36*be474dd8S猫头猫        searchResults[pluginHash]?.state ?? SearchStateCode.PENDING,
37*be474dd8S猫头猫      );
38*be474dd8S猫头猫    }
3992a7e801S猫头猫  }, [searchResults]);
403a76c6afS猫头猫
41*be474dd8S猫头猫  const renderItem = ({item, index}: any) => (
42*be474dd8S猫头猫    <ResultComponent item={item} index={index}></ResultComponent>
43*be474dd8S猫头猫  );
44*be474dd8S猫头猫
45*be474dd8S猫头猫  return (!data || !data?.length) && searchState === SearchStateCode.PENDING ? (
463a76c6afS猫头猫    <Loading></Loading>
473a76c6afS猫头猫  ) : (
483a76c6afS猫头猫    <FlatList
493a76c6afS猫头猫      data={data ?? []}
503a76c6afS猫头猫      onEndReached={() => {
51*be474dd8S猫头猫        // todo 修改
52*be474dd8S猫头猫        data.length > 10 &&
53*be474dd8S猫头猫          searchState === SearchStateCode.PARTLY_DONE &&
54*be474dd8S猫头猫          search(undefined, pluginHash);
553a76c6afS猫头猫      }}
56*be474dd8S猫头猫      renderItem={renderItem}></FlatList>
5792a7e801S猫头猫  );
58bf6e62f2S猫头猫}
59