import React, {useCallback} from 'react'; import {FlatListProps} from 'react-native'; import rpx from '@/utils/rpx'; import MusicItem from '../mediaItem/musicItem'; import Empty from '../base/empty'; import {FlashList} from '@shopify/flash-list'; import ListLoading from '../base/listLoading'; import ListReachEnd from '../base/listReachEnd'; import TrackPlayer from '@/core/trackPlayer'; interface IMusicListProps { /** 顶部 */ Header?: FlatListProps['ListHeaderComponent']; /** 音乐列表 */ musicList?: IMusic.IMusicItem[]; /** 所在歌单 */ musicSheet?: IMusic.IMusicSheetItem; /** 是否展示序号 */ showIndex?: boolean; /** 点击 */ onItemPress?: ( musicItem: IMusic.IMusicItem, musicList?: IMusic.IMusicItem[], ) => void; loadMore?: 'loading' | 'done' | 'idle'; onEndReached?: () => void; } const ITEM_HEIGHT = rpx(120); /** 音乐列表 */ export default function MusicList(props: IMusicListProps) { const { Header, musicList, musicSheet, showIndex, onItemPress, onEndReached, loadMore = 'idle', } = props; const keyExtractor = useCallback( (item: any, i: number) => `${i}-${item.platform}-${item.id}`, [], ); return ( { return ( { if (onItemPress) { onItemPress(musicItem, musicList); } else { TrackPlayer.playWithReplacePlayList( musicItem, musicList ?? [musicItem], ); } }} musicSheet={musicSheet} /> ); }} onEndReached={() => { if (loadMore !== 'loading') { onEndReached?.(); } }} onEndReachedThreshold={0.1} /> ); }