xref: /MusicFree/src/components/musicList/index.tsx (revision be5395496ee12378d5a54b12cb47acc6c7c60bb8)
1378a6099S猫头猫import React from 'react';
2caaa811bS猫头猫import {FlatListProps, StyleSheet} from 'react-native';
3378a6099S猫头猫import rpx from '@/utils/rpx';
4242960d3S猫头猫import MusicQueue from '@/core/musicQueue';
5378a6099S猫头猫import {FlatList} from 'react-native-gesture-handler';
6378a6099S猫头猫
7a3b33415S猫头猫import MusicItem from '../mediaItem/musicItem';
87d7e864fS猫头猫import Empty from '../base/empty';
9378a6099S猫头猫
10378a6099S猫头猫interface IMusicListProps {
11378a6099S猫头猫    /** 顶部 */
12378a6099S猫头猫    Header?: FlatListProps<IMusic.IMusicItem>['ListHeaderComponent'];
13378a6099S猫头猫    /** 音乐列表 */
14378a6099S猫头猫    musicList?: IMusic.IMusicItem[];
15378a6099S猫头猫    /** 所在歌单 */
16378a6099S猫头猫    musicSheet?: IMusic.IMusicSheetItem;
17378a6099S猫头猫    /** 是否展示序号 */
18378a6099S猫头猫    showIndex?: boolean;
199e24e067S猫头猫    /** 点击 */
20cbb92902S猫头猫    onItemPress?: (
21cbb92902S猫头猫        musicItem: IMusic.IMusicItem,
22cbb92902S猫头猫        musicList?: IMusic.IMusicItem[],
23cbb92902S猫头猫    ) => void;
24378a6099S猫头猫}
2545510a04S猫头猫const ITEM_HEIGHT = rpx(120);
26*be539549S猫头猫
27*be539549S猫头猫/** 音乐列表 */
28378a6099S猫头猫export default function MusicList(props: IMusicListProps) {
299e24e067S猫头猫    const {Header, musicList, musicSheet, showIndex, onItemPress} = props;
30378a6099S猫头猫
31378a6099S猫头猫    return (
32378a6099S猫头猫        <FlatList
33378a6099S猫头猫            style={style.wrapper}
34378a6099S猫头猫            ListHeaderComponent={Header}
357d7e864fS猫头猫            ListEmptyComponent={Empty}
36378a6099S猫头猫            data={musicList ?? []}
374060c00aS猫头猫            keyExtractor={musicItem =>
384060c00aS猫头猫                `ml-${musicItem.id}${musicItem.platform}`
394060c00aS猫头猫            }
4045510a04S猫头猫            getItemLayout={(_, index) => ({
4145510a04S猫头猫                length: ITEM_HEIGHT,
4245510a04S猫头猫                offset: ITEM_HEIGHT * index,
4345510a04S猫头猫                index,
4445510a04S猫头猫            })}
45378a6099S猫头猫            renderItem={({index, item: musicItem}) => {
46378a6099S猫头猫                return (
473a76c6afS猫头猫                    <MusicItem
483a76c6afS猫头猫                        musicItem={musicItem}
493a76c6afS猫头猫                        index={showIndex ? index + 1 : undefined}
503a76c6afS猫头猫                        onItemPress={() => {
519e24e067S猫头猫                            if (onItemPress) {
52cbb92902S猫头猫                                onItemPress(musicItem, musicList);
539e24e067S猫头猫                            } else {
544060c00aS猫头猫                                MusicQueue.playWithReplaceQueue(
554060c00aS猫头猫                                    musicItem,
564060c00aS猫头猫                                    musicList ?? [],
574060c00aS猫头猫                                );
58378a6099S猫头猫                            }
599e24e067S猫头猫                        }}
604060c00aS猫头猫                        musicSheet={musicSheet}
614060c00aS猫头猫                    />
62378a6099S猫头猫                );
634060c00aS猫头猫            }}
644060c00aS猫头猫        />
65378a6099S猫头猫    );
66378a6099S猫头猫}
67378a6099S猫头猫
68378a6099S猫头猫const style = StyleSheet.create({
69378a6099S猫头猫    wrapper: {
70378a6099S猫头猫        width: rpx(750),
71378a6099S猫头猫    },
72378a6099S猫头猫});
73