xref: /MusicFree/src/components/musicList/index.tsx (revision caaa811bab0af59db4f40881d4b11891d6c19470)
1378a6099S猫头猫import React from 'react';
2*caaa811bS猫头猫import {FlatListProps, StyleSheet} from 'react-native';
3378a6099S猫头猫import rpx from '@/utils/rpx';
4378a6099S猫头猫import MusicQueue from '@/common/musicQueue';
5378a6099S猫头猫import {FlatList} from 'react-native-gesture-handler';
6378a6099S猫头猫
7a3b33415S猫头猫import MusicItem from '../mediaItem/musicItem';
8378a6099S猫头猫
9378a6099S猫头猫interface IMusicListProps {
10378a6099S猫头猫  /** 顶部 */
11378a6099S猫头猫  Header?: FlatListProps<IMusic.IMusicItem>['ListHeaderComponent'];
12378a6099S猫头猫  /** 音乐列表 */
13378a6099S猫头猫  musicList?: IMusic.IMusicItem[];
14378a6099S猫头猫  /** 所在歌单 */
15378a6099S猫头猫  musicSheet?: IMusic.IMusicSheetItem;
16378a6099S猫头猫  /** 是否展示序号 */
17378a6099S猫头猫  showIndex?: boolean;
189e24e067S猫头猫  /** 点击 */
199e24e067S猫头猫  onItemPress?: (musicItem: IMusic.IMusicItem) => void;
20378a6099S猫头猫}
2145510a04S猫头猫const ITEM_HEIGHT = rpx(120);
22378a6099S猫头猫export default function MusicList(props: IMusicListProps) {
239e24e067S猫头猫  const {Header, musicList, musicSheet, showIndex, onItemPress} = props;
24378a6099S猫头猫
25378a6099S猫头猫  return (
26378a6099S猫头猫    <FlatList
27378a6099S猫头猫      style={style.wrapper}
28378a6099S猫头猫      ListHeaderComponent={Header}
29378a6099S猫头猫      data={musicList ?? []}
30378a6099S猫头猫      keyExtractor={musicItem => `ml-${musicItem.id}${musicItem.platform}`}
3145510a04S猫头猫      getItemLayout={(_, index) => ({
3245510a04S猫头猫        length: ITEM_HEIGHT,
3345510a04S猫头猫        offset: ITEM_HEIGHT * index,
3445510a04S猫头猫        index,
3545510a04S猫头猫      })}
36378a6099S猫头猫      renderItem={({index, item: musicItem}) => {
37378a6099S猫头猫        return (
383a76c6afS猫头猫          <MusicItem
393a76c6afS猫头猫            musicItem={musicItem}
403a76c6afS猫头猫            index={showIndex ? index + 1 : undefined}
413a76c6afS猫头猫            onItemPress={() => {
429e24e067S猫头猫              if (onItemPress) {
439e24e067S猫头猫                onItemPress(musicItem);
449e24e067S猫头猫              } else {
459e24e067S猫头猫                MusicQueue.playWithReplaceQueue(musicItem, musicList ?? []);
46378a6099S猫头猫              }
479e24e067S猫头猫            }}
483a76c6afS猫头猫            musicSheet={musicSheet}></MusicItem>
49378a6099S猫头猫        );
50378a6099S猫头猫      }}></FlatList>
51378a6099S猫头猫  );
52378a6099S猫头猫}
53378a6099S猫头猫
54378a6099S猫头猫const style = StyleSheet.create({
55378a6099S猫头猫  wrapper: {
56378a6099S猫头猫    width: rpx(750),
57378a6099S猫头猫  },
58378a6099S猫头猫});
59