xref: /MusicFree/src/components/musicList/index.tsx (revision 9e24e06783e27425b08e86f50cdf4d3ec6bcd1fe)
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