xref: /MusicFree/src/pages/searchMusicList/index.tsx (revision 734113be9d256a2b4d36bb272d6d3565beaeb236)
1import React, {useState} from 'react';
2import {StyleSheet} from 'react-native';
3import rpx from '@/utils/rpx';
4import {useNavigation} 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 {fontSizeConst} from '@/constants/uiConst';
11import {useParams} from '@/entry/router';
12import globalStyle from '@/constants/globalStyle';
13import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView';
14
15function filterMusic(query: string, musicList: IMusic.IMusicItem[]) {
16    if (query?.length === 0) {
17        return musicList;
18    }
19    return musicList.filter(_ =>
20        `${_.title} ${_.artist} ${_.album} ${_.platform}`.includes(query),
21    );
22}
23
24export default function SearchMusicList() {
25    const {musicList} = useParams<'search-music-list'>();
26    const navigation = useNavigation();
27    const [result, setResult] = useState<IMusic.IMusicItem[]>(musicList ?? []);
28    const [query, setQuery] = useState('');
29
30    const colors = useColors();
31
32    const onChangeSearch = (_: string) => {
33        setQuery(_);
34        setResult(filterMusic(_.trim(), musicList ?? []));
35    };
36
37    return (
38        <VerticalSafeAreaView style={globalStyle.fwflex1}>
39            <StatusBar />
40            <Appbar.Header
41                style={[style.appbar, {backgroundColor: colors.primary}]}>
42                <Appbar.BackAction
43                    onPress={() => {
44                        navigation.goBack();
45                    }}
46                />
47                <Searchbar
48                    style={style.searchBar}
49                    inputStyle={style.input}
50                    placeholder="在列表中搜索歌曲"
51                    value={query}
52                    onChangeText={onChangeSearch}
53                />
54            </Appbar.Header>
55            <SearchResult result={result} />
56            <MusicBar />
57        </VerticalSafeAreaView>
58    );
59}
60
61const style = StyleSheet.create({
62    appbar: {
63        shadowColor: 'transparent',
64        backgroundColor: '#2b333eaa',
65    },
66    searchBar: {
67        minWidth: rpx(375),
68        flex: 1,
69        borderRadius: rpx(64),
70        height: rpx(64),
71        color: '#666666',
72    },
73    input: {
74        padding: 0,
75        color: '#666666',
76        height: rpx(64),
77        fontSize: fontSizeConst.subTitle,
78        textAlignVertical: 'center',
79        includeFontPadding: false,
80    },
81});
82