xref: /MusicFree/src/components/musicList/index.tsx (revision 7d7e864fecde492bbfcc1515aaded5744251b2c0)
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';
8*7d7e864fS猫头猫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);
26378a6099S猫头猫export default function MusicList(props: IMusicListProps) {
279e24e067S猫头猫    const {Header, musicList, musicSheet, showIndex, onItemPress} = props;
28378a6099S猫头猫
29378a6099S猫头猫    return (
30378a6099S猫头猫        <FlatList
31378a6099S猫头猫            style={style.wrapper}
32378a6099S猫头猫            ListHeaderComponent={Header}
33*7d7e864fS猫头猫            ListEmptyComponent={Empty}
34378a6099S猫头猫            data={musicList ?? []}
354060c00aS猫头猫            keyExtractor={musicItem =>
364060c00aS猫头猫                `ml-${musicItem.id}${musicItem.platform}`
374060c00aS猫头猫            }
3845510a04S猫头猫            getItemLayout={(_, index) => ({
3945510a04S猫头猫                length: ITEM_HEIGHT,
4045510a04S猫头猫                offset: ITEM_HEIGHT * index,
4145510a04S猫头猫                index,
4245510a04S猫头猫            })}
43378a6099S猫头猫            renderItem={({index, item: musicItem}) => {
44378a6099S猫头猫                return (
453a76c6afS猫头猫                    <MusicItem
463a76c6afS猫头猫                        musicItem={musicItem}
473a76c6afS猫头猫                        index={showIndex ? index + 1 : undefined}
483a76c6afS猫头猫                        onItemPress={() => {
499e24e067S猫头猫                            if (onItemPress) {
50cbb92902S猫头猫                                onItemPress(musicItem, musicList);
519e24e067S猫头猫                            } else {
524060c00aS猫头猫                                MusicQueue.playWithReplaceQueue(
534060c00aS猫头猫                                    musicItem,
544060c00aS猫头猫                                    musicList ?? [],
554060c00aS猫头猫                                );
56378a6099S猫头猫                            }
579e24e067S猫头猫                        }}
584060c00aS猫头猫                        musicSheet={musicSheet}
594060c00aS猫头猫                    />
60378a6099S猫头猫                );
614060c00aS猫头猫            }}
624060c00aS猫头猫        />
63378a6099S猫头猫    );
64378a6099S猫头猫}
65378a6099S猫头猫
66378a6099S猫头猫const style = StyleSheet.create({
67378a6099S猫头猫    wrapper: {
68378a6099S猫头猫        width: rpx(750),
69378a6099S猫头猫    },
70378a6099S猫头猫});
71