xref: /MusicFree/src/pages/searchPage/components/navBar.tsx (revision e650bfb34226e2a09d15cbf7832c4805a87cd60e)
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';
14*e650bfb3S猫头猫import {Appbar, Searchbar} from 'react-native-paper';
15bf6e62f2S猫头猫import {addHistory} from '../common/historySearch';
16bf6e62f2S猫头猫import {fontSizeConst} from '@/constants/uiConst';
17ec26b768S猫头猫import useColors from '@/hooks/useColors';
18*e650bfb3S猫头猫import Button from '@/components/base/button';
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);
25ec26b768S猫头猫    const colors = useColors();
26a4ae8da5S猫头猫    const setSearchResultsState = useSetAtom(searchResultsAtom);
27bf6e62f2S猫头猫
28bf6e62f2S猫头猫    const onSearchSubmit = async () => {
29bf6e62f2S猫头猫        if (query === '') {
30bf6e62f2S猫头猫            return;
31bf6e62f2S猫头猫        }
32a4ae8da5S猫头猫        setSearchResultsState(initSearchResults);
33bf6e62f2S猫头猫        setPageStatus(prev =>
34bf6e62f2S猫头猫            prev === PageStatus.EDITING ? PageStatus.SEARCHING : prev,
35bf6e62f2S猫头猫        );
360b940038S猫头猫        await search(query, 1);
37bf6e62f2S猫头猫        await addHistory(query);
38bf6e62f2S猫头猫    };
39bf6e62f2S猫头猫
40bf6e62f2S猫头猫    return (
41bf6e62f2S猫头猫        <Appbar style={[style.appbar, {backgroundColor: colors.primary}]}>
42bf6e62f2S猫头猫            <Appbar.BackAction
43bf6e62f2S猫头猫                onPress={() => {
44bf6e62f2S猫头猫                    // !!这个组件有bug,输入法拉起的时候返回会默认打开panel
45bf6e62f2S猫头猫                    Keyboard.dismiss();
46bf6e62f2S猫头猫                    navigation.goBack();
474060c00aS猫头猫                }}
484060c00aS猫头猫            />
49bf6e62f2S猫头猫            <Searchbar
50bf6e62f2S猫头猫                autoFocus
51bf6e62f2S猫头猫                inputStyle={style.input}
52bf6e62f2S猫头猫                style={style.searchBar}
533b870a26S猫头猫                accessible
543b870a26S猫头猫                accessibilityLabel="搜索框"
553b870a26S猫头猫                accessibilityHint={'输入要搜索的歌曲'}
56bf6e62f2S猫头猫                onFocus={() => {
57bf6e62f2S猫头猫                    setPageStatus(PageStatus.EDITING);
58bf6e62f2S猫头猫                }}
59bf6e62f2S猫头猫                placeholder="输入要搜索的歌曲"
60bf6e62f2S猫头猫                onSubmitEditing={onSearchSubmit}
61dec7a5f8S猫头猫                onChangeText={_ => {
62dec7a5f8S猫头猫                    if (_ === '') {
63dec7a5f8S猫头猫                        setPageStatus(PageStatus.EDITING);
64dec7a5f8S猫头猫                    }
65dec7a5f8S猫头猫                    setQuery(_);
66dec7a5f8S猫头猫                }}
674060c00aS猫头猫                value={query}
684060c00aS猫头猫            />
69*e650bfb3S猫头猫            <Button style={style.button} onPress={onSearchSubmit}>
70bf6e62f2S猫头猫                搜索
71bf6e62f2S猫头猫            </Button>
72bf6e62f2S猫头猫        </Appbar>
73bf6e62f2S猫头猫    );
74bf6e62f2S猫头猫}
75bf6e62f2S猫头猫
76bf6e62f2S猫头猫const style = StyleSheet.create({
77bf6e62f2S猫头猫    appbar: {
78bf6e62f2S猫头猫        shadowColor: 'transparent',
79bf6e62f2S猫头猫    },
80*e650bfb3S猫头猫    button: {
81*e650bfb3S猫头猫        paddingHorizontal: rpx(24),
82*e650bfb3S猫头猫    },
83bf6e62f2S猫头猫    searchBar: {
84bf6e62f2S猫头猫        minWidth: rpx(375),
85bf6e62f2S猫头猫        flex: 1,
86bf6e62f2S猫头猫        borderRadius: rpx(64),
87c4466882S猫头猫        height: '72%',
8898547244S猫头猫        maxHeight: rpx(64),
89ec26b768S猫头猫        color: '#666666',
90dc1c1f5aS猫头猫        alignItems: 'center',
91bf6e62f2S猫头猫    },
92bf6e62f2S猫头猫    input: {
93bf6e62f2S猫头猫        padding: 0,
9498547244S猫头猫        height: '100%',
95bf6e62f2S猫头猫        color: '#666666',
96ec26b768S猫头猫        fontSize: fontSizeConst.subTitle,
97bf6e62f2S猫头猫        textAlignVertical: 'center',
98bf6e62f2S猫头猫        includeFontPadding: false,
99ec26b768S猫头猫    },
100bf6e62f2S猫头猫});
101