xref: /MusicFree/src/pages/searchPage/components/navBar.tsx (revision 3b870a26396b7f3708fe0318620cd68115230624)
1ec26b768S猫头猫import React from 'react';
2ec26b768S猫头猫import {Keyboard, StyleSheet} from 'react-native';
3bf6e62f2S猫头猫import rpx from '@/utils/rpx';
44060c00aS猫头猫import {useNavigation} from '@react-navigation/native';
5bf6e62f2S猫头猫import {useAtom, useSetAtom} from 'jotai';
6dec7a5f8S猫头猫import {
7dec7a5f8S猫头猫    pageStatusAtom,
8dec7a5f8S猫头猫    PageStatus,
9dec7a5f8S猫头猫    queryAtom,
10dec7a5f8S猫头猫    searchResultsAtom,
11dec7a5f8S猫头猫    initSearchResults,
12dec7a5f8S猫头猫} from '../store/atoms';
13bf6e62f2S猫头猫import useSearch from '../hooks/useSearch';
14bf6e62f2S猫头猫import {Appbar, Button, Searchbar} from 'react-native-paper';
15bf6e62f2S猫头猫import {addHistory} from '../common/historySearch';
16bf6e62f2S猫头猫import {fontSizeConst} from '@/constants/uiConst';
17bf6e62f2S猫头猫import useTextColor from '@/hooks/useTextColor';
18ec26b768S猫头猫import useColors from '@/hooks/useColors';
19bf6e62f2S猫头猫
204060c00aS猫头猫export default function NavBar() {
21bf6e62f2S猫头猫    const navigation = useNavigation();
22bf6e62f2S猫头猫    const search = useSearch();
23bf6e62f2S猫头猫    const [query, setQuery] = useAtom(queryAtom);
24bf6e62f2S猫头猫    const setPageStatus = useSetAtom(pageStatusAtom);
25bf6e62f2S猫头猫    const textColor = useTextColor();
26ec26b768S猫头猫    const colors = useColors();
27a4ae8da5S猫头猫    const setSearchResultsState = useSetAtom(searchResultsAtom);
28bf6e62f2S猫头猫
29bf6e62f2S猫头猫    const onSearchSubmit = async () => {
30bf6e62f2S猫头猫        if (query === '') {
31bf6e62f2S猫头猫            return;
32bf6e62f2S猫头猫        }
33a4ae8da5S猫头猫        setSearchResultsState(initSearchResults);
34bf6e62f2S猫头猫        setPageStatus(prev =>
35bf6e62f2S猫头猫            prev === PageStatus.EDITING ? PageStatus.SEARCHING : prev,
36bf6e62f2S猫头猫        );
370b940038S猫头猫        await search(query, 1);
38bf6e62f2S猫头猫        await addHistory(query);
39bf6e62f2S猫头猫    };
40bf6e62f2S猫头猫
41bf6e62f2S猫头猫    return (
42bf6e62f2S猫头猫        <Appbar style={[style.appbar, {backgroundColor: colors.primary}]}>
43bf6e62f2S猫头猫            <Appbar.BackAction
44bf6e62f2S猫头猫                onPress={() => {
45bf6e62f2S猫头猫                    // !!这个组件有bug,输入法拉起的时候返回会默认打开panel
46bf6e62f2S猫头猫                    Keyboard.dismiss();
47bf6e62f2S猫头猫                    navigation.goBack();
484060c00aS猫头猫                }}
494060c00aS猫头猫            />
50bf6e62f2S猫头猫            <Searchbar
51bf6e62f2S猫头猫                autoFocus
52bf6e62f2S猫头猫                inputStyle={style.input}
53bf6e62f2S猫头猫                style={style.searchBar}
54*3b870a26S猫头猫                accessible
55*3b870a26S猫头猫                accessibilityLabel="搜索框"
56*3b870a26S猫头猫                accessibilityHint={'输入要搜索的歌曲'}
57bf6e62f2S猫头猫                onFocus={() => {
58bf6e62f2S猫头猫                    setPageStatus(PageStatus.EDITING);
59bf6e62f2S猫头猫                }}
60bf6e62f2S猫头猫                placeholder="输入要搜索的歌曲"
61bf6e62f2S猫头猫                onSubmitEditing={onSearchSubmit}
62dec7a5f8S猫头猫                onChangeText={_ => {
63dec7a5f8S猫头猫                    if (_ === '') {
64dec7a5f8S猫头猫                        setPageStatus(PageStatus.EDITING);
65dec7a5f8S猫头猫                    }
66dec7a5f8S猫头猫                    setQuery(_);
67dec7a5f8S猫头猫                }}
684060c00aS猫头猫                value={query}
694060c00aS猫头猫            />
70bf6e62f2S猫头猫            <Button color={textColor} onPress={onSearchSubmit}>
71bf6e62f2S猫头猫                搜索
72bf6e62f2S猫头猫            </Button>
73bf6e62f2S猫头猫        </Appbar>
74bf6e62f2S猫头猫    );
75bf6e62f2S猫头猫}
76bf6e62f2S猫头猫
77bf6e62f2S猫头猫const style = StyleSheet.create({
78bf6e62f2S猫头猫    appbar: {
79bf6e62f2S猫头猫        shadowColor: 'transparent',
80bf6e62f2S猫头猫    },
81bf6e62f2S猫头猫    searchBar: {
82bf6e62f2S猫头猫        minWidth: rpx(375),
83bf6e62f2S猫头猫        flex: 1,
84bf6e62f2S猫头猫        borderRadius: rpx(64),
85c4466882S猫头猫        height: '72%',
86ec26b768S猫头猫        color: '#666666',
87dc1c1f5aS猫头猫        alignItems: 'center',
88bf6e62f2S猫头猫    },
89bf6e62f2S猫头猫    input: {
90bf6e62f2S猫头猫        padding: 0,
91bf6e62f2S猫头猫        color: '#666666',
92ec26b768S猫头猫        fontSize: fontSizeConst.subTitle,
93bf6e62f2S猫头猫        textAlignVertical: 'center',
94bf6e62f2S猫头猫        includeFontPadding: false,
95ec26b768S猫头猫    },
96bf6e62f2S猫头猫});
97