xref: /MusicFree/src/pages/searchPage/components/navBar.tsx (revision dc1c1f5ad5c874bdbb3fda9be33d8f536cc67fd6)
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}
54bf6e62f2S猫头猫                onFocus={() => {
55bf6e62f2S猫头猫                    setPageStatus(PageStatus.EDITING);
56bf6e62f2S猫头猫                }}
57bf6e62f2S猫头猫                placeholder="输入要搜索的歌曲"
58bf6e62f2S猫头猫                onSubmitEditing={onSearchSubmit}
59dec7a5f8S猫头猫                onChangeText={_ => {
60dec7a5f8S猫头猫                    if (_ === '') {
61dec7a5f8S猫头猫                        setPageStatus(PageStatus.EDITING);
62dec7a5f8S猫头猫                    }
63dec7a5f8S猫头猫                    setQuery(_);
64dec7a5f8S猫头猫                }}
654060c00aS猫头猫                value={query}
664060c00aS猫头猫            />
67bf6e62f2S猫头猫            <Button color={textColor} onPress={onSearchSubmit}>
68bf6e62f2S猫头猫                搜索
69bf6e62f2S猫头猫            </Button>
70bf6e62f2S猫头猫        </Appbar>
71bf6e62f2S猫头猫    );
72bf6e62f2S猫头猫}
73bf6e62f2S猫头猫
74bf6e62f2S猫头猫const style = StyleSheet.create({
75bf6e62f2S猫头猫    appbar: {
76bf6e62f2S猫头猫        shadowColor: 'transparent',
77bf6e62f2S猫头猫    },
78bf6e62f2S猫头猫    searchBar: {
79bf6e62f2S猫头猫        minWidth: rpx(375),
80bf6e62f2S猫头猫        flex: 1,
81bf6e62f2S猫头猫        borderRadius: rpx(64),
82c4466882S猫头猫        height: '72%',
83ec26b768S猫头猫        color: '#666666',
84*dc1c1f5aS猫头猫        alignItems: 'center',
85bf6e62f2S猫头猫    },
86bf6e62f2S猫头猫    input: {
87bf6e62f2S猫头猫        padding: 0,
88bf6e62f2S猫头猫        color: '#666666',
89ec26b768S猫头猫        fontSize: fontSizeConst.subTitle,
90bf6e62f2S猫头猫        textAlignVertical: 'center',
91bf6e62f2S猫头猫        includeFontPadding: false,
92ec26b768S猫头猫    },
93bf6e62f2S猫头猫});
94