xref: /MusicFree/src/pages/searchMusicList/index.tsx (revision b4c389f44ac4dad056e7314478fadd2eca82a4b1)
103f1f70cS猫头猫import React, {useState} from 'react';
24060c00aS猫头猫import {StyleSheet} from 'react-native';
303f1f70cS猫头猫import rpx from '@/utils/rpx';
403f1f70cS猫头猫import MusicBar from '@/components/musicBar';
503f1f70cS猫头猫import SearchResult from './searchResult';
603f1f70cS猫头猫import StatusBar from '@/components/base/statusBar';
703f1f70cS猫头猫import useColors from '@/hooks/useColors';
803f1f70cS猫头猫import {fontSizeConst} from '@/constants/uiConst';
9*b4c389f4Smaotoumaoimport {useParams} from '@/core/router';
103b155a65S猫头猫import globalStyle from '@/constants/globalStyle';
113b155a65S猫头猫import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView';
12e650bfb3S猫头猫import Input from '@/components/base/input';
13e650bfb3S猫头猫import AppBar from '@/components/base/appBar';
1403f1f70cS猫头猫
1503f1f70cS猫头猫function filterMusic(query: string, musicList: IMusic.IMusicItem[]) {
1603f1f70cS猫头猫    if (query?.length === 0) {
170224b881S猫头猫        return musicList;
1803f1f70cS猫头猫    }
1903f1f70cS猫头猫    return musicList.filter(_ =>
207cf7a728S猫头猫        `${_.title} ${_.artist} ${_.album} ${_.platform}`
217cf7a728S猫头猫            .toLowerCase()
227cf7a728S猫头猫            .includes(query.toLowerCase()),
2303f1f70cS猫头猫    );
2403f1f70cS猫头猫}
2503f1f70cS猫头猫
264060c00aS猫头猫export default function SearchMusicList() {
277ce5c26cS猫头猫    const {musicList, musicSheet} = useParams<'search-music-list'>();
28e7fa3837S猫头猫    const [result, setResult] = useState<IMusic.IMusicItem[]>(musicList ?? []);
2903f1f70cS猫头猫    const [query, setQuery] = useState('');
3003f1f70cS猫头猫
3103f1f70cS猫头猫    const colors = useColors();
3203f1f70cS猫头猫
3303f1f70cS猫头猫    const onChangeSearch = (_: string) => {
3403f1f70cS猫头猫        setQuery(_);
357cf7a728S猫头猫        // useTransition做优化
368f77047eS猫头猫        setResult(filterMusic(_.trim(), musicList ?? []));
3703f1f70cS猫头猫    };
3803f1f70cS猫头猫
3903f1f70cS猫头猫    return (
403b155a65S猫头猫        <VerticalSafeAreaView style={globalStyle.fwflex1}>
414060c00aS猫头猫            <StatusBar />
42e650bfb3S猫头猫            <AppBar>
43e650bfb3S猫头猫                <Input
4403f1f70cS猫头猫                    style={style.searchBar}
45277c5280S猫头猫                    fontColor={colors.appBarText}
4603f1f70cS猫头猫                    placeholder="在列表中搜索歌曲"
473b870a26S猫头猫                    accessible
487fb90110S猫头猫                    autoFocus
493b870a26S猫头猫                    accessibilityLabel="搜索框"
503b870a26S猫头猫                    accessibilityHint={'在列表中搜索歌曲'}
5103f1f70cS猫头猫                    value={query}
524060c00aS猫头猫                    onChangeText={onChangeSearch}
534060c00aS猫头猫                />
54e650bfb3S猫头猫            </AppBar>
557ce5c26cS猫头猫            <SearchResult result={result} musicSheet={musicSheet} />
564060c00aS猫头猫            <MusicBar />
573b155a65S猫头猫        </VerticalSafeAreaView>
5803f1f70cS猫头猫    );
5903f1f70cS猫头猫}
6003f1f70cS猫头猫
6103f1f70cS猫头猫const style = StyleSheet.create({
6203f1f70cS猫头猫    appbar: {
6303f1f70cS猫头猫        shadowColor: 'transparent',
6403f1f70cS猫头猫        backgroundColor: '#2b333eaa',
6503f1f70cS猫头猫    },
6603f1f70cS猫头猫    searchBar: {
6703f1f70cS猫头猫        minWidth: rpx(375),
6803f1f70cS猫头猫        flex: 1,
6903f1f70cS猫头猫        borderRadius: rpx(64),
7003f1f70cS猫头猫        height: rpx(64),
71e650bfb3S猫头猫        fontSize: rpx(32),
7203f1f70cS猫头猫    },
7303f1f70cS猫头猫    input: {
7403f1f70cS猫头猫        padding: 0,
7503f1f70cS猫头猫        color: '#666666',
7603f1f70cS猫头猫        height: rpx(64),
7703f1f70cS猫头猫        fontSize: fontSizeConst.subTitle,
7803f1f70cS猫头猫        textAlignVertical: 'center',
7903f1f70cS猫头猫        includeFontPadding: false,
8003f1f70cS猫头猫    },
8103f1f70cS猫头猫});
82