xref: /MusicFree/src/components/musicList/index.tsx (revision 378a6099e3563e7a689fac0fd988de338a1d1de8)
1*378a6099S猫头猫import React from 'react';
2*378a6099S猫头猫import {FlatListProps, StyleSheet, Text} from 'react-native';
3*378a6099S猫头猫import rpx from '@/utils/rpx';
4*378a6099S猫头猫import {useRoute} from '@react-navigation/native';
5*378a6099S猫头猫import MusicSheet from '@/common/musicSheetManager';
6*378a6099S猫头猫import MusicQueue from '@/common/musicQueue';
7*378a6099S猫头猫import usePanel from '@/components/panels/usePanel';
8*378a6099S猫头猫import {FlatList} from 'react-native-gesture-handler';
9*378a6099S猫头猫
10*378a6099S猫头猫import ListItem from '@/components/base/listItem';
11*378a6099S猫头猫import IconButton from '@/components/base/iconButton';
12*378a6099S猫头猫import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
13*378a6099S猫头猫import DownloadManager from '@/common/downloadManager';
14*378a6099S猫头猫
15*378a6099S猫头猫interface IMusicListProps {
16*378a6099S猫头猫  /** 顶部 */
17*378a6099S猫头猫  Header?: FlatListProps<IMusic.IMusicItem>['ListHeaderComponent'];
18*378a6099S猫头猫  /** 音乐列表 */
19*378a6099S猫头猫  musicList?: IMusic.IMusicItem[];
20*378a6099S猫头猫  /** 所在歌单 */
21*378a6099S猫头猫  musicSheet?: IMusic.IMusicSheetItem;
22*378a6099S猫头猫  /** 是否展示序号 */
23*378a6099S猫头猫  showIndex?: boolean;
24*378a6099S猫头猫}
25*378a6099S猫头猫export default function MusicList(props: IMusicListProps) {
26*378a6099S猫头猫  const {Header, musicList, musicSheet, showIndex} = props;
27*378a6099S猫头猫  const {showPanel} = usePanel();
28*378a6099S猫头猫
29*378a6099S猫头猫  return (
30*378a6099S猫头猫    <FlatList
31*378a6099S猫头猫      style={style.wrapper}
32*378a6099S猫头猫      ListHeaderComponent={Header}
33*378a6099S猫头猫      data={musicList ?? []}
34*378a6099S猫头猫      keyExtractor={musicItem => `ml-${musicItem.id}${musicItem.platform}`}
35*378a6099S猫头猫      renderItem={({index, item: musicItem}) => {
36*378a6099S猫头猫        return (
37*378a6099S猫头猫          <ListItem
38*378a6099S猫头猫            left={showIndex ? {index: index + 1, width: rpx(56)} : undefined}
39*378a6099S猫头猫            title={musicItem.title}
40*378a6099S猫头猫            desc={
41*378a6099S猫头猫              <>
42*378a6099S猫头猫                {DownloadManager.isDownloaded(musicItem) && (
43*378a6099S猫头猫                  <Icon
44*378a6099S猫头猫                    color="#11659a"
45*378a6099S猫头猫                    name="check-circle"
46*378a6099S猫头猫                    size={rpx(22)}></Icon>
47*378a6099S猫头猫                )}
48*378a6099S猫头猫                <Text>
49*378a6099S猫头猫                  {musicItem.artist} - {musicItem.album}
50*378a6099S猫头猫                </Text>
51*378a6099S猫头猫              </>
52*378a6099S猫头猫            }
53*378a6099S猫头猫            tag={musicItem.platform}
54*378a6099S猫头猫            onPress={() =>
55*378a6099S猫头猫              MusicQueue.playWithReplaceQueue(musicItem, musicList ?? [])
56*378a6099S猫头猫            }
57*378a6099S猫头猫            right={() => (
58*378a6099S猫头猫              <IconButton
59*378a6099S猫头猫                name="dots-vertical"
60*378a6099S猫头猫                size="normal"
61*378a6099S猫头猫                fontColor="normal"
62*378a6099S猫头猫                onPress={() => {
63*378a6099S猫头猫                  showPanel('MusicItemOptions', {musicItem, musicSheet});
64*378a6099S猫头猫                }}></IconButton>
65*378a6099S猫头猫            )}></ListItem>
66*378a6099S猫头猫        );
67*378a6099S猫头猫      }}></FlatList>
68*378a6099S猫头猫  );
69*378a6099S猫头猫}
70*378a6099S猫头猫
71*378a6099S猫头猫const style = StyleSheet.create({
72*378a6099S猫头猫  wrapper: {
73*378a6099S猫头猫    width: rpx(750),
74*378a6099S猫头猫  },
75*378a6099S猫头猫});
76