xref: /MusicFree/src/pages/searchMusicList/index.tsx (revision b882a19d884fffa32f7c8cef31652b909dceaa0f)
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