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