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