xref: /MusicFree/src/components/musicList/index.tsx (revision 3a76c6afd27eed7f26450535667a4fb0439f5713)
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';
14*3a76c6afS猫头猫import MusicItem from './musicItem';
15378a6099S猫头猫
16378a6099S猫头猫interface IMusicListProps {
17378a6099S猫头猫  /** 顶部 */
18378a6099S猫头猫  Header?: FlatListProps<IMusic.IMusicItem>['ListHeaderComponent'];
19378a6099S猫头猫  /** 音乐列表 */
20378a6099S猫头猫  musicList?: IMusic.IMusicItem[];
21378a6099S猫头猫  /** 所在歌单 */
22378a6099S猫头猫  musicSheet?: IMusic.IMusicSheetItem;
23378a6099S猫头猫  /** 是否展示序号 */
24378a6099S猫头猫  showIndex?: boolean;
259e24e067S猫头猫  /** 点击 */
269e24e067S猫头猫  onItemPress?: (musicItem: IMusic.IMusicItem) => void;
27378a6099S猫头猫}
2845510a04S猫头猫const ITEM_HEIGHT = rpx(120);
29378a6099S猫头猫export default function MusicList(props: IMusicListProps) {
309e24e067S猫头猫  const {Header, musicList, musicSheet, showIndex, onItemPress} = props;
31378a6099S猫头猫
32378a6099S猫头猫  return (
33378a6099S猫头猫    <FlatList
34378a6099S猫头猫      style={style.wrapper}
35378a6099S猫头猫      ListHeaderComponent={Header}
36378a6099S猫头猫      data={musicList ?? []}
37378a6099S猫头猫      keyExtractor={musicItem => `ml-${musicItem.id}${musicItem.platform}`}
3845510a04S猫头猫      getItemLayout={(_, index) => ({
3945510a04S猫头猫        length: ITEM_HEIGHT,
4045510a04S猫头猫        offset: ITEM_HEIGHT * index,
4145510a04S猫头猫        index,
4245510a04S猫头猫      })}
43378a6099S猫头猫      renderItem={({index, item: musicItem}) => {
44378a6099S猫头猫        return (
45*3a76c6afS猫头猫          <MusicItem
46*3a76c6afS猫头猫            musicItem={musicItem}
47*3a76c6afS猫头猫            index={showIndex ? index + 1 : undefined}
48*3a76c6afS猫头猫            onItemPress={() => {
499e24e067S猫头猫              if (onItemPress) {
509e24e067S猫头猫                onItemPress(musicItem);
519e24e067S猫头猫              } else {
529e24e067S猫头猫                MusicQueue.playWithReplaceQueue(musicItem, musicList ?? []);
53378a6099S猫头猫              }
549e24e067S猫头猫            }}
55*3a76c6afS猫头猫            musicSheet={musicSheet}></MusicItem>
56378a6099S猫头猫        );
57378a6099S猫头猫      }}></FlatList>
58378a6099S猫头猫  );
59378a6099S猫头猫}
60378a6099S猫头猫
61378a6099S猫头猫const style = StyleSheet.create({
62378a6099S猫头猫  wrapper: {
63378a6099S猫头猫    width: rpx(750),
64378a6099S猫头猫  },
65378a6099S猫头猫});
66