xref: /MusicFree/src/pages/searchPage/components/navBar.tsx (revision ec26b76829169f3fa0606bb9b21624aad61d6594)
1import React from 'react';
2import {Keyboard, StyleSheet} from 'react-native';
3import rpx from '@/utils/rpx';
4import {useNavigation, useTheme} from '@react-navigation/native';
5import {useAtom, useSetAtom} from 'jotai';
6import {pageStatusAtom, PageStatus, queryAtom} from '../store/atoms';
7import useSearch from '../hooks/useSearch';
8import {Appbar, Button, Searchbar} from 'react-native-paper';
9import {addHistory} from '../common/historySearch';
10import {fontSizeConst} from '@/constants/uiConst';
11import useTextColor from '@/hooks/useTextColor';
12import useColors from '@/hooks/useColors';
13
14interface INavBarProps {}
15export default function NavBar(props: INavBarProps) {
16  const navigation = useNavigation();
17  const search = useSearch();
18  const [query, setQuery] = useAtom(queryAtom);
19  const setPageStatus = useSetAtom(pageStatusAtom);
20  const textColor = useTextColor();
21  const colors = useColors();
22
23  const onSearchSubmit = async () => {
24    if (query === '') {
25      return;
26    }
27    setPageStatus(prev =>
28      prev === PageStatus.EDITING ? PageStatus.SEARCHING : prev,
29    );
30    await search(query, 'all');
31    await addHistory(query);
32  };
33
34  return (
35    <Appbar style={[style.appbar, {backgroundColor: colors.primary}]}>
36      <Appbar.BackAction
37        onPress={() => {
38          // !!这个组件有bug,输入法拉起的时候返回会默认打开panel
39          Keyboard.dismiss();
40          navigation.goBack();
41        }}></Appbar.BackAction>
42      <Searchbar
43        autoFocus
44        inputStyle={style.input}
45        style={style.searchBar}
46        onFocus={() => {
47          setPageStatus(PageStatus.EDITING);
48        }}
49        placeholder="输入要搜索的歌曲"
50        onSubmitEditing={onSearchSubmit}
51        onChangeText={_ => setQuery(_)}
52        value={query}></Searchbar>
53      <Button color={textColor} onPress={onSearchSubmit}>
54        搜索
55      </Button>
56    </Appbar>
57  );
58}
59
60const style = StyleSheet.create({
61  appbar: {
62    shadowColor: 'transparent',
63  },
64  searchBar: {
65    minWidth: rpx(375),
66    flex: 1,
67    borderRadius: rpx(64),
68    height: rpx(64),
69    color: '#666666',
70  },
71  input: {
72    padding: 0,
73    color: '#666666',
74    height: rpx(64),
75    fontSize: fontSizeConst.subTitle,
76    textAlignVertical: 'center',
77    includeFontPadding: false,
78  },
79});
80