xref: /MusicFree/src/pages/searchPage/components/historyPanel.tsx (revision a4ae8da553c6798d1634b4da485abd00e53dbd67)
1bf6e62f2S猫头猫import React, {useEffect, useState} from 'react';
2bf6e62f2S猫头猫import {StyleSheet, Text, View} from 'react-native';
3bf6e62f2S猫头猫import rpx from '@/utils/rpx';
419dc08ecS猫头猫import Loading from '@/components/base/loading';
5bf6e62f2S猫头猫import {Chip, useTheme} from 'react-native-paper';
6bf6e62f2S猫头猫import useSearch from '../hooks/useSearch';
7bf6e62f2S猫头猫import {addHistory, getHistory, removeHistory} from '../common/historySearch';
8bf6e62f2S猫头猫import {useSetAtom} from 'jotai';
9bf6e62f2S猫头猫import {
10*a4ae8da5S猫头猫  initSearchResults,
11bf6e62f2S猫头猫  PageStatus,
12bf6e62f2S猫头猫  pageStatusAtom,
13bf6e62f2S猫头猫  queryAtom,
14bf6e62f2S猫头猫  searchResultsAtom,
15bf6e62f2S猫头猫} from '../store/atoms';
1619dc08ecS猫头猫import ThemeText from '@/components/base/themeText';
17bf6e62f2S猫头猫
18bf6e62f2S猫头猫interface IProps {}
19bf6e62f2S猫头猫export default function (props: IProps) {
20bf6e62f2S猫头猫  const [history, setHistory] = useState<string[] | null>(null);
21bf6e62f2S猫头猫  const search = useSearch();
22bf6e62f2S猫头猫
23bf6e62f2S猫头猫  const setQuery = useSetAtom(queryAtom);
24bf6e62f2S猫头猫  const setPageStatus = useSetAtom(pageStatusAtom);
25bf6e62f2S猫头猫  const setSearchResultsState = useSetAtom(searchResultsAtom);
26bf6e62f2S猫头猫
27bf6e62f2S猫头猫  useEffect(() => {
2819c8eb6fS猫头猫    getHistory().then(setHistory);
29bf6e62f2S猫头猫  }, []);
30bf6e62f2S猫头猫
31bf6e62f2S猫头猫  return (
32bf6e62f2S猫头猫    <View style={style.wrapper}>
33bf6e62f2S猫头猫      {history === null ? (
34bf6e62f2S猫头猫        <Loading></Loading>
35bf6e62f2S猫头猫      ) : (
36bf6e62f2S猫头猫        <>
37ec26b768S猫头猫          <ThemeText fontSize='title' fontWeight='semibold' style={style.title}>历史记录</ThemeText>
38bf6e62f2S猫头猫          {history.map(_ => (
39bf6e62f2S猫头猫            <Chip
40bf6e62f2S猫头猫              key={`search-history-${_}`}
41bf6e62f2S猫头猫              style={style.chip}
42bf6e62f2S猫头猫              onClose={async () => {
43bf6e62f2S猫头猫                await removeHistory(_);
44bf6e62f2S猫头猫                getHistory().then(setHistory);
45bf6e62f2S猫头猫              }}
46bf6e62f2S猫头猫              onPress={() => {
47*a4ae8da5S猫头猫                setSearchResultsState(initSearchResults);
480b940038S猫头猫                search(_, 1);
49bf6e62f2S猫头猫                addHistory(_);
50bf6e62f2S猫头猫                setPageStatus(PageStatus.SEARCHING);
51bf6e62f2S猫头猫                setQuery(_);
52bf6e62f2S猫头猫              }}>
53bf6e62f2S猫头猫              {_}
54bf6e62f2S猫头猫            </Chip>
55bf6e62f2S猫头猫          ))}
56bf6e62f2S猫头猫        </>
57bf6e62f2S猫头猫      )}
58bf6e62f2S猫头猫    </View>
59bf6e62f2S猫头猫  );
60bf6e62f2S猫头猫}
61bf6e62f2S猫头猫
62bf6e62f2S猫头猫const style = StyleSheet.create({
63bf6e62f2S猫头猫  wrapper: {
64bf6e62f2S猫头猫    width: rpx(750),
65bf6e62f2S猫头猫    maxWidth: rpx(750),
66bf6e62f2S猫头猫    flexDirection: 'row',
67bf6e62f2S猫头猫    flexWrap: 'wrap',
68bf6e62f2S猫头猫    padding: rpx(24),
69bf6e62f2S猫头猫  },
70bf6e62f2S猫头猫  title: {
71bf6e62f2S猫头猫    width: '100%',
72ec26b768S猫头猫    marginVertical: rpx(28),
73bf6e62f2S猫头猫  },
74bf6e62f2S猫头猫  chip: {
75bf6e62f2S猫头猫    flexGrow: 0,
76bf6e62f2S猫头猫    marginRight: rpx(24),
77bf6e62f2S猫头猫    marginBottom: rpx(24),
78bf6e62f2S猫头猫  },
79bf6e62f2S猫头猫});
80