xref: /MusicFree/src/pages/searchPage/components/resultPanel/resultWrapper.tsx (revision 92a7e801f72a65b76b504a3522c1189ab5a67ed3)
1*92a7e801S猫头猫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';
6bf6e62f2S猫头猫
7bf6e62f2S猫头猫interface IResultWrapperProps {
8bf6e62f2S猫头猫  tab: ICommon.SupportMediaType;
9bf6e62f2S猫头猫  platform: string;
10bf6e62f2S猫头猫}
11bf6e62f2S猫头猫export default function ResultWrapper(props: IResultWrapperProps) {
12bf6e62f2S猫头猫  const {tab, platform} = props;
13bf6e62f2S猫头猫  const searchResults = useAtomValue(searchResultsAtom);
14*92a7e801S猫头猫  const [pendingState, setPendingState] = useState<string>('pending');
15*92a7e801S猫头猫  const data = getMediaItems(searchResults, platform, tab);
16bf6e62f2S猫头猫  const ResultComponent = renderMap[tab]!;
17*92a7e801S猫头猫
18*92a7e801S猫头猫  useEffect(() => {
19*92a7e801S猫头猫    setPendingState(
20*92a7e801S猫头猫      platform === 'all'
21*92a7e801S猫头猫        ? Object.values(searchResults).every(_ => _.state !== 'pending')
22*92a7e801S猫头猫          ? 'resolved'
23*92a7e801S猫头猫          : 'pending'
24*92a7e801S猫头猫        : searchResults[platform]?.state ?? 'pending',
25*92a7e801S猫头猫    );
26*92a7e801S猫头猫  }, [searchResults]);
27*92a7e801S猫头猫  return (
28*92a7e801S猫头猫    <ResultComponent
29*92a7e801S猫头猫      platform={platform}
30*92a7e801S猫头猫      data={data}
31*92a7e801S猫头猫      pendingState={pendingState}></ResultComponent>
32*92a7e801S猫头猫  );
33bf6e62f2S猫头猫}
34