1import React, {useState} from 'react'; 2import {StyleSheet} from 'react-native'; 3import rpx from '@/utils/rpx'; 4import {useNavigation, useRoute} from '@react-navigation/native'; 5import MusicBar from '@/components/musicBar'; 6import SearchResult from './searchResult'; 7import StatusBar from '@/components/base/statusBar'; 8import {Appbar, Searchbar} from 'react-native-paper'; 9import useColors from '@/hooks/useColors'; 10import {SafeAreaView} from 'react-native-safe-area-context'; 11import {fontSizeConst} from '@/constants/uiConst'; 12 13function filterMusic(query: string, musicList: IMusic.IMusicItem[]) { 14 if (query?.length === 0) { 15 return []; 16 } 17 return musicList.filter(_ => 18 `${_.title} ${_.artist} ${_.album} ${_.platform}`.includes( 19 query.trim(), 20 ), 21 ); 22} 23 24export default function SearchMusicList() { 25 const route = useRoute<any>(); 26 const navigation = useNavigation(); 27 const musicList: IMusic.IMusicItem[] = route.params?.musicList ?? []; 28 const [result, setResult] = useState<IMusic.IMusicItem[]>([]); 29 const [query, setQuery] = useState(''); 30 31 console.log(musicList); 32 33 const colors = useColors(); 34 35 const onChangeSearch = (_: string) => { 36 _ = _.trim(); 37 setQuery(_); 38 setResult(filterMusic(_, musicList)); 39 }; 40 41 return ( 42 <SafeAreaView style={style.wrapper}> 43 <StatusBar /> 44 <Appbar.Header 45 style={[style.appbar, {backgroundColor: colors.primary}]}> 46 <Appbar.BackAction 47 onPress={() => { 48 navigation.goBack(); 49 }} 50 /> 51 <Searchbar 52 style={style.searchBar} 53 inputStyle={style.input} 54 placeholder="在列表中搜索歌曲" 55 value={query} 56 onChangeText={onChangeSearch} 57 /> 58 </Appbar.Header> 59 <SearchResult result={result} /> 60 <MusicBar /> 61 </SafeAreaView> 62 ); 63} 64 65const style = StyleSheet.create({ 66 wrapper: { 67 width: rpx(750), 68 flex: 1, 69 }, 70 appbar: { 71 shadowColor: 'transparent', 72 backgroundColor: '#2b333eaa', 73 }, 74 searchBar: { 75 minWidth: rpx(375), 76 flex: 1, 77 borderRadius: rpx(64), 78 height: rpx(64), 79 color: '#666666', 80 }, 81 input: { 82 padding: 0, 83 color: '#666666', 84 height: rpx(64), 85 fontSize: fontSizeConst.subTitle, 86 textAlignVertical: 'center', 87 includeFontPadding: false, 88 }, 89}); 90