1378a6099S猫头猫import React from 'react'; 2378a6099S猫头猫import {FlatListProps, StyleSheet, Text} from 'react-native'; 3378a6099S猫头猫import rpx from '@/utils/rpx'; 4378a6099S猫头猫import {useRoute} from '@react-navigation/native'; 5378a6099S猫头猫import MusicSheet from '@/common/musicSheetManager'; 6378a6099S猫头猫import MusicQueue from '@/common/musicQueue'; 7378a6099S猫头猫import usePanel from '@/components/panels/usePanel'; 8378a6099S猫头猫import {FlatList} from 'react-native-gesture-handler'; 9378a6099S猫头猫 10378a6099S猫头猫import ListItem from '@/components/base/listItem'; 11378a6099S猫头猫import IconButton from '@/components/base/iconButton'; 12378a6099S猫头猫import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; 13378a6099S猫头猫import DownloadManager from '@/common/downloadManager'; 14378a6099S猫头猫 15378a6099S猫头猫interface IMusicListProps { 16378a6099S猫头猫 /** 顶部 */ 17378a6099S猫头猫 Header?: FlatListProps<IMusic.IMusicItem>['ListHeaderComponent']; 18378a6099S猫头猫 /** 音乐列表 */ 19378a6099S猫头猫 musicList?: IMusic.IMusicItem[]; 20378a6099S猫头猫 /** 所在歌单 */ 21378a6099S猫头猫 musicSheet?: IMusic.IMusicSheetItem; 22378a6099S猫头猫 /** 是否展示序号 */ 23378a6099S猫头猫 showIndex?: boolean; 24*9e24e067S猫头猫 /** 点击 */ 25*9e24e067S猫头猫 onItemPress?: (musicItem: IMusic.IMusicItem) => void; 26378a6099S猫头猫} 27378a6099S猫头猫export default function MusicList(props: IMusicListProps) { 28*9e24e067S猫头猫 const {Header, musicList, musicSheet, showIndex, onItemPress} = props; 29378a6099S猫头猫 const {showPanel} = usePanel(); 30378a6099S猫头猫 31378a6099S猫头猫 return ( 32378a6099S猫头猫 <FlatList 33378a6099S猫头猫 style={style.wrapper} 34378a6099S猫头猫 ListHeaderComponent={Header} 35378a6099S猫头猫 data={musicList ?? []} 36378a6099S猫头猫 keyExtractor={musicItem => `ml-${musicItem.id}${musicItem.platform}`} 37378a6099S猫头猫 renderItem={({index, item: musicItem}) => { 38378a6099S猫头猫 return ( 39378a6099S猫头猫 <ListItem 40378a6099S猫头猫 left={showIndex ? {index: index + 1, width: rpx(56)} : undefined} 41378a6099S猫头猫 title={musicItem.title} 42378a6099S猫头猫 desc={ 43378a6099S猫头猫 <> 44378a6099S猫头猫 {DownloadManager.isDownloaded(musicItem) && ( 45378a6099S猫头猫 <Icon 46378a6099S猫头猫 color="#11659a" 47378a6099S猫头猫 name="check-circle" 48378a6099S猫头猫 size={rpx(22)}></Icon> 49378a6099S猫头猫 )} 50378a6099S猫头猫 <Text> 51378a6099S猫头猫 {musicItem.artist} - {musicItem.album} 52378a6099S猫头猫 </Text> 53378a6099S猫头猫 </> 54378a6099S猫头猫 } 55378a6099S猫头猫 tag={musicItem.platform} 56*9e24e067S猫头猫 onPress={() => { 57*9e24e067S猫头猫 if (onItemPress) { 58*9e24e067S猫头猫 onItemPress(musicItem); 59*9e24e067S猫头猫 } else { 60*9e24e067S猫头猫 MusicQueue.playWithReplaceQueue(musicItem, musicList ?? []); 61378a6099S猫头猫 } 62*9e24e067S猫头猫 }} 63378a6099S猫头猫 right={() => ( 64378a6099S猫头猫 <IconButton 65378a6099S猫头猫 name="dots-vertical" 66378a6099S猫头猫 size="normal" 67378a6099S猫头猫 fontColor="normal" 68378a6099S猫头猫 onPress={() => { 69378a6099S猫头猫 showPanel('MusicItemOptions', {musicItem, musicSheet}); 70378a6099S猫头猫 }}></IconButton> 71378a6099S猫头猫 )}></ListItem> 72378a6099S猫头猫 ); 73378a6099S猫头猫 }}></FlatList> 74378a6099S猫头猫 ); 75378a6099S猫头猫} 76378a6099S猫头猫 77378a6099S猫头猫const style = StyleSheet.create({ 78378a6099S猫头猫 wrapper: { 79378a6099S猫头猫 width: rpx(750), 80378a6099S猫头猫 }, 81378a6099S猫头猫}); 82