xref: /MusicFree/src/pages/searchPage/components/historyPanel.tsx (revision 756bc302d40f6f21e72cdfca8580b52a8341d658)
1bf6e62f2S猫头猫import React, {useEffect, useState} from 'react';
24060c00aS猫头猫import {ScrollView, StyleSheet, View} from 'react-native';
3bf6e62f2S猫头猫import rpx from '@/utils/rpx';
419dc08ecS猫头猫import Loading from '@/components/base/loading';
5fe32deaaS猫头猫import Chip from '@/components/base/chip';
6bf6e62f2S猫头猫import useSearch from '../hooks/useSearch';
74f168b1fS猫头猫import {
84f168b1fS猫头猫    addHistory,
94f168b1fS猫头猫    getHistory,
104f168b1fS猫头猫    removeAllHistory,
114f168b1fS猫头猫    removeHistory,
124f168b1fS猫头猫} from '../common/historySearch';
13bf6e62f2S猫头猫import {useSetAtom} from 'jotai';
14bf6e62f2S猫头猫import {
15a4ae8da5S猫头猫    initSearchResults,
16bf6e62f2S猫头猫    PageStatus,
17bf6e62f2S猫头猫    pageStatusAtom,
18bf6e62f2S猫头猫    queryAtom,
19bf6e62f2S猫头猫    searchResultsAtom,
20bf6e62f2S猫头猫} from '../store/atoms';
2119dc08ecS猫头猫import ThemeText from '@/components/base/themeText';
22*756bc302S猫头猫import Button from '@/components/base/textButton.tsx';
23b4a87dd6S猫头猫import Empty from '@/components/base/empty';
24bf6e62f2S猫头猫
254060c00aS猫头猫export default function () {
26bf6e62f2S猫头猫    const [history, setHistory] = useState<string[] | null>(null);
27bf6e62f2S猫头猫    const search = useSearch();
28bf6e62f2S猫头猫
29bf6e62f2S猫头猫    const setQuery = useSetAtom(queryAtom);
30bf6e62f2S猫头猫    const setPageStatus = useSetAtom(pageStatusAtom);
31bf6e62f2S猫头猫    const setSearchResultsState = useSetAtom(searchResultsAtom);
32bf6e62f2S猫头猫
33bf6e62f2S猫头猫    useEffect(() => {
3419c8eb6fS猫头猫        getHistory().then(setHistory);
35bf6e62f2S猫头猫    }, []);
36bf6e62f2S猫头猫
37bf6e62f2S猫头猫    return (
38bf6e62f2S猫头猫        <View style={style.wrapper}>
39bf6e62f2S猫头猫            {history === null ? (
404060c00aS猫头猫                <Loading />
41bf6e62f2S猫头猫            ) : (
42bf6e62f2S猫头猫                <>
434f168b1fS猫头猫                    <View style={style.header}>
444f168b1fS猫头猫                        <ThemeText fontSize="title" fontWeight="semibold">
452fac4245S猫头猫                            历史记录
462fac4245S猫头猫                        </ThemeText>
474f168b1fS猫头猫                        <Button
48277c5280S猫头猫                            fontColor="textSecondary"
494f168b1fS猫头猫                            onPress={async () => {
504f168b1fS猫头猫                                await removeAllHistory();
514f168b1fS猫头猫                                getHistory().then(setHistory);
524f168b1fS猫头猫                            }}>
534f168b1fS猫头猫                            清空
544f168b1fS猫头猫                        </Button>
554f168b1fS猫头猫                    </View>
562fac4245S猫头猫                    <ScrollView
572fac4245S猫头猫                        style={style.historyContent}
582fac4245S猫头猫                        contentContainerStyle={style.historyContentConainer}>
59b4a87dd6S猫头猫                        {history.length ? (
60b4a87dd6S猫头猫                            history.map(_ => (
61bf6e62f2S猫头猫                                <Chip
62bf6e62f2S猫头猫                                    key={`search-history-${_}`}
63fe32deaaS猫头猫                                    containerStyle={style.chip}
64bf6e62f2S猫头猫                                    onClose={async () => {
65bf6e62f2S猫头猫                                        await removeHistory(_);
66bf6e62f2S猫头猫                                        getHistory().then(setHistory);
67bf6e62f2S猫头猫                                    }}
68bf6e62f2S猫头猫                                    onPress={() => {
69b4a87dd6S猫头猫                                        setSearchResultsState(
70b4a87dd6S猫头猫                                            initSearchResults,
71b4a87dd6S猫头猫                                        );
72c30d30e1S猫头猫                                        setPageStatus(PageStatus.SEARCHING);
730b940038S猫头猫                                        search(_, 1);
74bf6e62f2S猫头猫                                        addHistory(_);
75bf6e62f2S猫头猫                                        setQuery(_);
76bf6e62f2S猫头猫                                    }}>
77bf6e62f2S猫头猫                                    {_}
78bf6e62f2S猫头猫                                </Chip>
79b4a87dd6S猫头猫                            ))
80b4a87dd6S猫头猫                        ) : (
81b4a87dd6S猫头猫                            <Empty />
82b4a87dd6S猫头猫                        )}
832fac4245S猫头猫                    </ScrollView>
84bf6e62f2S猫头猫                </>
85bf6e62f2S猫头猫            )}
86bf6e62f2S猫头猫        </View>
87bf6e62f2S猫头猫    );
88bf6e62f2S猫头猫}
89bf6e62f2S猫头猫
90bf6e62f2S猫头猫const style = StyleSheet.create({
91bf6e62f2S猫头猫    wrapper: {
92c446f2b8S猫头猫        width: '100%',
93c446f2b8S猫头猫        maxWidth: '100%',
942fac4245S猫头猫        flexDirection: 'column',
95bf6e62f2S猫头猫        padding: rpx(24),
962fac4245S猫头猫        flex: 1,
97bf6e62f2S猫头猫    },
984f168b1fS猫头猫    header: {
99bf6e62f2S猫头猫        width: '100%',
1004f168b1fS猫头猫        flexDirection: 'row',
1014f168b1fS猫头猫        paddingVertical: rpx(28),
1024f168b1fS猫头猫        justifyContent: 'space-between',
1034f168b1fS猫头猫        alignItems: 'center',
104bf6e62f2S猫头猫    },
1052fac4245S猫头猫    historyContent: {
106c446f2b8S猫头猫        width: '100%',
1072fac4245S猫头猫        flex: 1,
1082fac4245S猫头猫    },
1092fac4245S猫头猫    historyContentConainer: {
1102fac4245S猫头猫        flexDirection: 'row',
1112fac4245S猫头猫        flexWrap: 'wrap',
1122fac4245S猫头猫    },
113bf6e62f2S猫头猫    chip: {
114bf6e62f2S猫头猫        flexGrow: 0,
115bf6e62f2S猫头猫        marginRight: rpx(24),
116bf6e62f2S猫头猫        marginBottom: rpx(24),
117bf6e62f2S猫头猫    },
118bf6e62f2S猫头猫});
119