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