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