xref: /MusicFree/src/pages/searchPage/components/resultPanel/resultWrapper.tsx (revision 0b940038696677ddf4d2a91434ce49a8383fecf4)
192a7e801S猫头猫import React, {useEffect, useState} from 'react';
2bf6e62f2S猫头猫import {useAtomValue} from 'jotai';
3*0b940038S猫头猫import {queryAtom, searchResultsAtom, SearchStateCode} 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';
84f2deeb0S猫头猫import ThemeText from '@/components/base/themeText';
9*0b940038S猫头猫import { useFocusEffect, useIsFocused } from '@react-navigation/native';
10bf6e62f2S猫头猫
11bf6e62f2S猫头猫interface IResultWrapperProps {
12bf6e62f2S猫头猫  tab: ICommon.SupportMediaType;
139d40a3faS猫头猫  pluginHash: string;
143a76c6afS猫头猫  pluginName: string;
15bf6e62f2S猫头猫}
16bf6e62f2S猫头猫export default function ResultWrapper(props: IResultWrapperProps) {
179d40a3faS猫头猫  const {tab, pluginHash} = props;
183a76c6afS猫头猫  const search = useSearch();
19bf6e62f2S猫头猫  const searchResults = useAtomValue(searchResultsAtom);
20be474dd8S猫头猫  const [searchState, setSearchState] = useState<SearchStateCode>(
21*0b940038S猫头猫    searchResults[tab][pluginHash]?.state ?? SearchStateCode.IDLE,
22be474dd8S猫头猫  );
23bf6e62f2S猫头猫  const ResultComponent = renderMap[tab]!;
24*0b940038S猫头猫  const data: any = searchResults[tab][pluginHash]?.data ?? [];
25*0b940038S猫头猫  const query = useAtomValue(queryAtom);
26*0b940038S猫头猫  console.log('RERENDER', tab, pluginHash);
2792a7e801S猫头猫
2892a7e801S猫头猫  useEffect(() => {
29be474dd8S猫头猫    setSearchState(
30*0b940038S猫头猫      searchResults[tab][pluginHash]?.state ?? SearchStateCode.IDLE,
31be474dd8S猫头猫    );
3292a7e801S猫头猫  }, [searchResults]);
333a76c6afS猫头猫
34*0b940038S猫头猫
35be474dd8S猫头猫  const renderItem = ({item, index}: any) => (
36be474dd8S猫头猫    <ResultComponent item={item} index={index}></ResultComponent>
37be474dd8S猫头猫  );
38be474dd8S猫头猫
39*0b940038S猫头猫  return searchState === SearchStateCode.PENDING_FP ? (
403a76c6afS猫头猫    <Loading></Loading>
413a76c6afS猫头猫  ) : (
423a76c6afS猫头猫    <FlatList
434f2deeb0S猫头猫      extraData={searchState}
444f2deeb0S猫头猫      style={style.list}
45*0b940038S猫头猫      ListFooterComponent={() => (
46*0b940038S猫头猫        <ThemeText>
47*0b940038S猫头猫          {searchState === SearchStateCode.PENDING
48*0b940038S猫头猫            ? '加载中...'
49*0b940038S猫头猫            : searchState === SearchStateCode.FINISHED
50*0b940038S猫头猫            ? '到底啦'
51*0b940038S猫头猫            : ''}
52*0b940038S猫头猫        </ThemeText>
53*0b940038S猫头猫      )}
54*0b940038S猫头猫      data={data}
553a76c6afS猫头猫      onEndReached={() => {
56*0b940038S猫头猫        (searchState === SearchStateCode.PARTLY_DONE ||
57*0b940038S猫头猫          searchState === SearchStateCode.IDLE) &&
58*0b940038S猫头猫          search(undefined, undefined, tab, pluginHash);
593a76c6afS猫头猫      }}
60be474dd8S猫头猫      renderItem={renderItem}></FlatList>
6192a7e801S猫头猫  );
62bf6e62f2S猫头猫}
634f2deeb0S猫头猫const style = StyleSheet.create({
644f2deeb0S猫头猫  list: {
65*0b940038S猫头猫    flex: 1
664f2deeb0S猫头猫  },
674f2deeb0S猫头猫});
68