xref: /MusicFree/src/pages/searchPage/components/resultPanel/resultWrapper.tsx (revision ac0d843c1c47e49cc693769492b6e1663ea3d639)
192a7e801S猫头猫import React, {useEffect, useState} from 'react';
2bf6e62f2S猫头猫import {useAtomValue} from 'jotai';
3be474dd8S猫头猫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);
19be474dd8S猫头猫  const [searchState, setSearchState] = useState<SearchStateCode>(
20be474dd8S猫头猫    SearchStateCode.PENDING,
21be474dd8S猫头猫  );
229d40a3faS猫头猫  const data = getMediaItems(searchResults, pluginHash, tab);
23bf6e62f2S猫头猫  const ResultComponent = renderMap[tab]!;
2492a7e801S猫头猫
2592a7e801S猫头猫  useEffect(() => {
26be474dd8S猫头猫    if (pluginHash === 'all') {
27*ac0d843cS猫头猫      const allCode = Object.values(searchResults).map(_ => _.state);
28*ac0d843cS猫头猫
29*ac0d843cS猫头猫      const code = allCode.reduce((prev, curr) => prev & curr);
30*ac0d843cS猫头猫      if (
31*ac0d843cS猫头猫        code === SearchStateCode.IDLE ||
32*ac0d843cS猫头猫        (!data?.length && allCode.includes(SearchStateCode.PENDING))
33*ac0d843cS猫头猫      ) {
34be474dd8S猫头猫        setSearchState(SearchStateCode.PENDING);
35*ac0d843cS猫头猫      } else {
36*ac0d843cS猫头猫        setSearchState(code);
37be474dd8S猫头猫      }
38be474dd8S猫头猫    } else {
39be474dd8S猫头猫      setSearchState(
40be474dd8S猫头猫        searchResults[pluginHash]?.state ?? SearchStateCode.PENDING,
41be474dd8S猫头猫      );
42be474dd8S猫头猫    }
4392a7e801S猫头猫  }, [searchResults]);
443a76c6afS猫头猫
45be474dd8S猫头猫  const renderItem = ({item, index}: any) => (
46be474dd8S猫头猫    <ResultComponent item={item} index={index}></ResultComponent>
47be474dd8S猫头猫  );
48be474dd8S猫头猫
49be474dd8S猫头猫  return (!data || !data?.length) && searchState === SearchStateCode.PENDING ? (
503a76c6afS猫头猫    <Loading></Loading>
513a76c6afS猫头猫  ) : (
523a76c6afS猫头猫    <FlatList
533a76c6afS猫头猫      data={data ?? []}
543a76c6afS猫头猫      onEndReached={() => {
55be474dd8S猫头猫        // todo 修改
56be474dd8S猫头猫        data.length > 10 &&
57be474dd8S猫头猫          searchState === SearchStateCode.PARTLY_DONE &&
58be474dd8S猫头猫          search(undefined, pluginHash);
593a76c6afS猫头猫      }}
60be474dd8S猫头猫      renderItem={renderItem}></FlatList>
6192a7e801S猫头猫  );
62bf6e62f2S猫头猫}
63