import React from 'react'; import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'; import rpx from '@/utils/rpx'; import ListItem from '../base/listItem'; import LocalMusicSheet from '@/core/localMusicSheet'; import {showPanel} from '../panels/usePanel'; import TitleAndTag from './titleAndTag'; import ThemeText from '../base/themeText'; import TrackPlayer from '@/core/trackPlayer'; import Icon from '@/components/base/icon.tsx'; interface IMusicItemProps { index?: string | number; showMoreIcon?: boolean; musicItem: IMusic.IMusicItem; musicSheet?: IMusic.IMusicSheetItem; onItemPress?: (musicItem: IMusic.IMusicItem) => void; onItemLongPress?: () => void; itemPaddingRight?: number; left?: () => JSX.Element; containerStyle?: StyleProp; } export default function MusicItem(props: IMusicItemProps) { const { musicItem, index, onItemPress, onItemLongPress, musicSheet, itemPaddingRight, showMoreIcon = true, left: Left, containerStyle, } = props; return ( { if (onItemPress) { onItemPress(musicItem); } else { TrackPlayer.play(musicItem); } }}> {Left ? : null} {index !== undefined ? ( {index} ) : null} } description={ {LocalMusicSheet.isLocalMusic(musicItem) && ( )} {musicItem.artist} {musicItem.album ? ` - ${musicItem.album}` : ''} } /> {showMoreIcon ? ( { showPanel('MusicItemOptions', { musicItem, musicSheet, }); }} /> ) : null} ); } const styles = StyleSheet.create({ icon: { marginRight: rpx(6), }, descContainer: { flexDirection: 'row', marginTop: rpx(16), }, indexText: { fontStyle: 'italic', textAlign: 'center', }, });