1378a6099S猫头猫import React from 'react'; 295c9734fS猫头猫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'; 895c9734fS猫头猫import {FlashList} from '@shopify/flash-list'; 9*f9afcc0dS猫头猫import ListLoading from '../base/listLoading'; 10*f9afcc0dS猫头猫import ListReachEnd from '../base/listReachEnd'; 11378a6099S猫头猫 12378a6099S猫头猫interface IMusicListProps { 13378a6099S猫头猫 /** 顶部 */ 14378a6099S猫头猫 Header?: FlatListProps<IMusic.IMusicItem>['ListHeaderComponent']; 15378a6099S猫头猫 /** 音乐列表 */ 16378a6099S猫头猫 musicList?: IMusic.IMusicItem[]; 17378a6099S猫头猫 /** 所在歌单 */ 18378a6099S猫头猫 musicSheet?: IMusic.IMusicSheetItem; 19378a6099S猫头猫 /** 是否展示序号 */ 20378a6099S猫头猫 showIndex?: boolean; 219e24e067S猫头猫 /** 点击 */ 22cbb92902S猫头猫 onItemPress?: ( 23cbb92902S猫头猫 musicItem: IMusic.IMusicItem, 24cbb92902S猫头猫 musicList?: IMusic.IMusicItem[], 25cbb92902S猫头猫 ) => void; 26*f9afcc0dS猫头猫 loadMore?: 'loading' | 'done' | 'none'; 27*f9afcc0dS猫头猫 onEndReached?: () => void; 28378a6099S猫头猫} 2945510a04S猫头猫const ITEM_HEIGHT = rpx(120); 30be539549S猫头猫 31be539549S猫头猫/** 音乐列表 */ 32378a6099S猫头猫export default function MusicList(props: IMusicListProps) { 33*f9afcc0dS猫头猫 const { 34*f9afcc0dS猫头猫 Header, 35*f9afcc0dS猫头猫 musicList, 36*f9afcc0dS猫头猫 musicSheet, 37*f9afcc0dS猫头猫 showIndex, 38*f9afcc0dS猫头猫 onItemPress, 39*f9afcc0dS猫头猫 onEndReached, 40*f9afcc0dS猫头猫 loadMore = 'none', 41*f9afcc0dS猫头猫 } = props; 42378a6099S猫头猫 43378a6099S猫头猫 return ( 4495c9734fS猫头猫 <FlashList 45378a6099S猫头猫 ListHeaderComponent={Header} 467d7e864fS猫头猫 ListEmptyComponent={Empty} 47*f9afcc0dS猫头猫 ListFooterComponent={ 48*f9afcc0dS猫头猫 loadMore === 'done' 49*f9afcc0dS猫头猫 ? ListReachEnd 50*f9afcc0dS猫头猫 : loadMore === 'loading' 51*f9afcc0dS猫头猫 ? ListLoading 52*f9afcc0dS猫头猫 : null 53*f9afcc0dS猫头猫 } 54378a6099S猫头猫 data={musicList ?? []} 554060c00aS猫头猫 keyExtractor={musicItem => 564060c00aS猫头猫 `ml-${musicItem.id}${musicItem.platform}` 574060c00aS猫头猫 } 5895c9734fS猫头猫 estimatedItemSize={ITEM_HEIGHT} 59378a6099S猫头猫 renderItem={({index, item: musicItem}) => { 60378a6099S猫头猫 return ( 613a76c6afS猫头猫 <MusicItem 623a76c6afS猫头猫 musicItem={musicItem} 633a76c6afS猫头猫 index={showIndex ? index + 1 : undefined} 643a76c6afS猫头猫 onItemPress={() => { 659e24e067S猫头猫 if (onItemPress) { 66cbb92902S猫头猫 onItemPress(musicItem, musicList); 679e24e067S猫头猫 } else { 684060c00aS猫头猫 MusicQueue.playWithReplaceQueue( 694060c00aS猫头猫 musicItem, 704060c00aS猫头猫 musicList ?? [], 714060c00aS猫头猫 ); 72378a6099S猫头猫 } 739e24e067S猫头猫 }} 744060c00aS猫头猫 musicSheet={musicSheet} 754060c00aS猫头猫 /> 76378a6099S猫头猫 ); 774060c00aS猫头猫 }} 78*f9afcc0dS猫头猫 onEndReached={() => { 79*f9afcc0dS猫头猫 if (loadMore !== 'loading') { 80*f9afcc0dS猫头猫 onEndReached?.(); 81*f9afcc0dS猫头猫 } 82*f9afcc0dS猫头猫 }} 83*f9afcc0dS猫头猫 onEndReachedThreshold={0.1} 844060c00aS猫头猫 /> 85378a6099S猫头猫 ); 86378a6099S猫头猫} 87