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