xref: /MusicFree/src/pages/searchPage/components/historyPanel.tsx (revision 2fac424572108f2e404113cf990a986c650d1c5f)
1bf6e62f2S猫头猫import React, {useEffect, useState} from 'react';
2*2fac4245S猫头猫import {ScrollView, 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 {
10a4ae8da5S猫头猫  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猫头猫        <>
37*2fac4245S猫头猫          <ThemeText fontSize="title" fontWeight="semibold" style={style.title}>
38*2fac4245S猫头猫            历史记录
39*2fac4245S猫头猫          </ThemeText>
40*2fac4245S猫头猫          <ScrollView
41*2fac4245S猫头猫            style={style.historyContent}
42*2fac4245S猫头猫            contentContainerStyle={style.historyContentConainer}>
43bf6e62f2S猫头猫            {history.map(_ => (
44bf6e62f2S猫头猫              <Chip
45bf6e62f2S猫头猫                key={`search-history-${_}`}
46bf6e62f2S猫头猫                style={style.chip}
47bf6e62f2S猫头猫                onClose={async () => {
48bf6e62f2S猫头猫                  await removeHistory(_);
49bf6e62f2S猫头猫                  getHistory().then(setHistory);
50bf6e62f2S猫头猫                }}
51bf6e62f2S猫头猫                onPress={() => {
52a4ae8da5S猫头猫                  setSearchResultsState(initSearchResults);
530b940038S猫头猫                  search(_, 1);
54bf6e62f2S猫头猫                  addHistory(_);
55bf6e62f2S猫头猫                  setPageStatus(PageStatus.SEARCHING);
56bf6e62f2S猫头猫                  setQuery(_);
57bf6e62f2S猫头猫                }}>
58bf6e62f2S猫头猫                {_}
59bf6e62f2S猫头猫              </Chip>
60bf6e62f2S猫头猫            ))}
61*2fac4245S猫头猫          </ScrollView>
62bf6e62f2S猫头猫        </>
63bf6e62f2S猫头猫      )}
64bf6e62f2S猫头猫    </View>
65bf6e62f2S猫头猫  );
66bf6e62f2S猫头猫}
67bf6e62f2S猫头猫
68bf6e62f2S猫头猫const style = StyleSheet.create({
69bf6e62f2S猫头猫  wrapper: {
70bf6e62f2S猫头猫    width: rpx(750),
71bf6e62f2S猫头猫    maxWidth: rpx(750),
72*2fac4245S猫头猫    flexDirection: 'column',
73bf6e62f2S猫头猫    padding: rpx(24),
74*2fac4245S猫头猫    flex: 1,
75bf6e62f2S猫头猫  },
76bf6e62f2S猫头猫  title: {
77bf6e62f2S猫头猫    width: '100%',
78ec26b768S猫头猫    marginVertical: rpx(28),
79bf6e62f2S猫头猫  },
80*2fac4245S猫头猫  historyContent: {
81*2fac4245S猫头猫    width: rpx(750),
82*2fac4245S猫头猫    flex: 1,
83*2fac4245S猫头猫  },
84*2fac4245S猫头猫  historyContentConainer: {
85*2fac4245S猫头猫    flexDirection: 'row',
86*2fac4245S猫头猫    flexWrap: 'wrap',
87*2fac4245S猫头猫  },
88bf6e62f2S猫头猫  chip: {
89bf6e62f2S猫头猫    flexGrow: 0,
90bf6e62f2S猫头猫    marginRight: rpx(24),
91bf6e62f2S猫头猫    marginBottom: rpx(24),
92bf6e62f2S猫头猫  },
93bf6e62f2S猫头猫});
94