xref: /MusicFree/src/components/musicList/index.tsx (revision 95c9734f9f868f79b6dca8a3a08834211ca737dc)
1378a6099S猫头猫import React from 'react';
2*95c9734fS猫头猫import {FlatListProps} from 'react-native';
3378a6099S猫头猫import rpx from '@/utils/rpx';
4242960d3S猫头猫import MusicQueue from '@/core/musicQueue';
5378a6099S猫头猫
6a3b33415S猫头猫import MusicItem from '../mediaItem/musicItem';
77d7e864fS猫头猫import Empty from '../base/empty';
8*95c9734fS猫头猫import {FlashList} from '@shopify/flash-list';
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);
26be539549S猫头猫
27be539549S猫头猫/** 音乐列表 */
28378a6099S猫头猫export default function MusicList(props: IMusicListProps) {
299e24e067S猫头猫    const {Header, musicList, musicSheet, showIndex, onItemPress} = props;
30378a6099S猫头猫
31378a6099S猫头猫    return (
32*95c9734fS猫头猫        <FlashList
33378a6099S猫头猫            ListHeaderComponent={Header}
347d7e864fS猫头猫            ListEmptyComponent={Empty}
35378a6099S猫头猫            data={musicList ?? []}
364060c00aS猫头猫            keyExtractor={musicItem =>
374060c00aS猫头猫                `ml-${musicItem.id}${musicItem.platform}`
384060c00aS猫头猫            }
39*95c9734fS猫头猫            estimatedItemSize={ITEM_HEIGHT}
40378a6099S猫头猫            renderItem={({index, item: musicItem}) => {
41378a6099S猫头猫                return (
423a76c6afS猫头猫                    <MusicItem
433a76c6afS猫头猫                        musicItem={musicItem}
443a76c6afS猫头猫                        index={showIndex ? index + 1 : undefined}
453a76c6afS猫头猫                        onItemPress={() => {
469e24e067S猫头猫                            if (onItemPress) {
47cbb92902S猫头猫                                onItemPress(musicItem, musicList);
489e24e067S猫头猫                            } else {
494060c00aS猫头猫                                MusicQueue.playWithReplaceQueue(
504060c00aS猫头猫                                    musicItem,
514060c00aS猫头猫                                    musicList ?? [],
524060c00aS猫头猫                                );
53378a6099S猫头猫                            }
549e24e067S猫头猫                        }}
554060c00aS猫头猫                        musicSheet={musicSheet}
564060c00aS猫头猫                    />
57378a6099S猫头猫                );
584060c00aS猫头猫            }}
594060c00aS猫头猫        />
60378a6099S猫头猫    );
61378a6099S猫头猫}
62