xref: /MusicFree/src/components/musicList/index.tsx (revision 45510a0416a05d1a615cd9fa7cd16bf31a4852ef)
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;
249e24e067S猫头猫  /** 点击 */
259e24e067S猫头猫  onItemPress?: (musicItem: IMusic.IMusicItem) => void;
26378a6099S猫头猫}
27*45510a04S猫头猫const ITEM_HEIGHT = rpx(120);
28378a6099S猫头猫export default function MusicList(props: IMusicListProps) {
299e24e067S猫头猫  const {Header, musicList, musicSheet, showIndex, onItemPress} = props;
30378a6099S猫头猫  const {showPanel} = usePanel();
31378a6099S猫头猫
32378a6099S猫头猫  return (
33378a6099S猫头猫    <FlatList
34378a6099S猫头猫      style={style.wrapper}
35378a6099S猫头猫      ListHeaderComponent={Header}
36378a6099S猫头猫      data={musicList ?? []}
37378a6099S猫头猫      keyExtractor={musicItem => `ml-${musicItem.id}${musicItem.platform}`}
38*45510a04S猫头猫      getItemLayout={(_, index) => ({
39*45510a04S猫头猫        length: ITEM_HEIGHT,
40*45510a04S猫头猫        offset: ITEM_HEIGHT * index,
41*45510a04S猫头猫        index,
42*45510a04S猫头猫      })}
43378a6099S猫头猫      renderItem={({index, item: musicItem}) => {
44378a6099S猫头猫        return (
45378a6099S猫头猫          <ListItem
46*45510a04S猫头猫            itemHeight={ITEM_HEIGHT}
47378a6099S猫头猫            left={showIndex ? {index: index + 1, width: rpx(56)} : undefined}
48378a6099S猫头猫            title={musicItem.title}
49378a6099S猫头猫            desc={
50378a6099S猫头猫              <>
51378a6099S猫头猫                {DownloadManager.isDownloaded(musicItem) && (
52378a6099S猫头猫                  <Icon
53378a6099S猫头猫                    color="#11659a"
54378a6099S猫头猫                    name="check-circle"
55378a6099S猫头猫                    size={rpx(22)}></Icon>
56378a6099S猫头猫                )}
57378a6099S猫头猫                <Text>
58378a6099S猫头猫                  {musicItem.artist} - {musicItem.album}
59378a6099S猫头猫                </Text>
60378a6099S猫头猫              </>
61378a6099S猫头猫            }
62378a6099S猫头猫            tag={musicItem.platform}
639e24e067S猫头猫            onPress={() => {
649e24e067S猫头猫              if (onItemPress) {
659e24e067S猫头猫                onItemPress(musicItem);
669e24e067S猫头猫              } else {
679e24e067S猫头猫                MusicQueue.playWithReplaceQueue(musicItem, musicList ?? []);
68378a6099S猫头猫              }
699e24e067S猫头猫            }}
70378a6099S猫头猫            right={() => (
71378a6099S猫头猫              <IconButton
72378a6099S猫头猫                name="dots-vertical"
73378a6099S猫头猫                size="normal"
74378a6099S猫头猫                fontColor="normal"
75378a6099S猫头猫                onPress={() => {
76378a6099S猫头猫                  showPanel('MusicItemOptions', {musicItem, musicSheet});
77378a6099S猫头猫                }}></IconButton>
78378a6099S猫头猫            )}></ListItem>
79378a6099S猫头猫        );
80378a6099S猫头猫      }}></FlatList>
81378a6099S猫头猫  );
82378a6099S猫头猫}
83378a6099S猫头猫
84378a6099S猫头猫const style = StyleSheet.create({
85378a6099S猫头猫  wrapper: {
86378a6099S猫头猫    width: rpx(750),
87378a6099S猫头猫  },
88378a6099S猫头猫});
89