xref: /MusicFree/src/pages/searchPage/components/historyPanel.tsx (revision 4060c00a75883036bbd315fb25c90065209312b3)
1bf6e62f2S猫头猫import React, {useEffect, useState} from 'react';
2*4060c00aS猫头猫import {ScrollView, StyleSheet, View} from 'react-native';
3bf6e62f2S猫头猫import rpx from '@/utils/rpx';
419dc08ecS猫头猫import Loading from '@/components/base/loading';
5*4060c00aS猫头猫import {Chip} 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猫头猫
18*4060c00aS猫头猫export default function () {
19bf6e62f2S猫头猫    const [history, setHistory] = useState<string[] | null>(null);
20bf6e62f2S猫头猫    const search = useSearch();
21bf6e62f2S猫头猫
22bf6e62f2S猫头猫    const setQuery = useSetAtom(queryAtom);
23bf6e62f2S猫头猫    const setPageStatus = useSetAtom(pageStatusAtom);
24bf6e62f2S猫头猫    const setSearchResultsState = useSetAtom(searchResultsAtom);
25bf6e62f2S猫头猫
26bf6e62f2S猫头猫    useEffect(() => {
2719c8eb6fS猫头猫        getHistory().then(setHistory);
28bf6e62f2S猫头猫    }, []);
29bf6e62f2S猫头猫
30bf6e62f2S猫头猫    return (
31bf6e62f2S猫头猫        <View style={style.wrapper}>
32bf6e62f2S猫头猫            {history === null ? (
33*4060c00aS猫头猫                <Loading />
34bf6e62f2S猫头猫            ) : (
35bf6e62f2S猫头猫                <>
36*4060c00aS猫头猫                    <ThemeText
37*4060c00aS猫头猫                        fontSize="title"
38*4060c00aS猫头猫                        fontWeight="semibold"
39*4060c00aS猫头猫                        style={style.title}>
402fac4245S猫头猫                        历史记录
412fac4245S猫头猫                    </ThemeText>
422fac4245S猫头猫                    <ScrollView
432fac4245S猫头猫                        style={style.historyContent}
442fac4245S猫头猫                        contentContainerStyle={style.historyContentConainer}>
45bf6e62f2S猫头猫                        {history.map(_ => (
46bf6e62f2S猫头猫                            <Chip
47bf6e62f2S猫头猫                                key={`search-history-${_}`}
48bf6e62f2S猫头猫                                style={style.chip}
49bf6e62f2S猫头猫                                onClose={async () => {
50bf6e62f2S猫头猫                                    await removeHistory(_);
51bf6e62f2S猫头猫                                    getHistory().then(setHistory);
52bf6e62f2S猫头猫                                }}
53bf6e62f2S猫头猫                                onPress={() => {
54a4ae8da5S猫头猫                                    setSearchResultsState(initSearchResults);
550b940038S猫头猫                                    search(_, 1);
56bf6e62f2S猫头猫                                    addHistory(_);
57bf6e62f2S猫头猫                                    setPageStatus(PageStatus.SEARCHING);
58bf6e62f2S猫头猫                                    setQuery(_);
59bf6e62f2S猫头猫                                }}>
60bf6e62f2S猫头猫                                {_}
61bf6e62f2S猫头猫                            </Chip>
62bf6e62f2S猫头猫                        ))}
632fac4245S猫头猫                    </ScrollView>
64bf6e62f2S猫头猫                </>
65bf6e62f2S猫头猫            )}
66bf6e62f2S猫头猫        </View>
67bf6e62f2S猫头猫    );
68bf6e62f2S猫头猫}
69bf6e62f2S猫头猫
70bf6e62f2S猫头猫const style = StyleSheet.create({
71bf6e62f2S猫头猫    wrapper: {
72bf6e62f2S猫头猫        width: rpx(750),
73bf6e62f2S猫头猫        maxWidth: rpx(750),
742fac4245S猫头猫        flexDirection: 'column',
75bf6e62f2S猫头猫        padding: rpx(24),
762fac4245S猫头猫        flex: 1,
77bf6e62f2S猫头猫    },
78bf6e62f2S猫头猫    title: {
79bf6e62f2S猫头猫        width: '100%',
80ec26b768S猫头猫        marginVertical: rpx(28),
81bf6e62f2S猫头猫    },
822fac4245S猫头猫    historyContent: {
832fac4245S猫头猫        width: rpx(750),
842fac4245S猫头猫        flex: 1,
852fac4245S猫头猫    },
862fac4245S猫头猫    historyContentConainer: {
872fac4245S猫头猫        flexDirection: 'row',
882fac4245S猫头猫        flexWrap: 'wrap',
892fac4245S猫头猫    },
90bf6e62f2S猫头猫    chip: {
91bf6e62f2S猫头猫        flexGrow: 0,
92bf6e62f2S猫头猫        marginRight: rpx(24),
93bf6e62f2S猫头猫        marginBottom: rpx(24),
94bf6e62f2S猫头猫    },
95bf6e62f2S猫头猫});
96