xref: /MusicFree/src/components/mediaItem/musicItem.tsx (revision 5589cdf32b2bb0f641e5ac7bf1f6152cd6b9b70e)
1*5589cdf3S猫头猫import React from 'react';
21119c2eaS猫头猫import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native';
3a3b33415S猫头猫import rpx from '@/utils/rpx';
41119c2eaS猫头猫import ListItem from '../base/listItem';
5c15039e2S猫头猫
60e4173cdS猫头猫import LocalMusicSheet from '@/core/localMusicSheet';
7c15039e2S猫头猫import {showPanel} from '../panels/usePanel';
81119c2eaS猫头猫import TitleAndTag from './titleAndTag';
91119c2eaS猫头猫import ThemeText from '../base/themeText';
105500cea7S猫头猫import TrackPlayer from '@/core/trackPlayer';
11*5589cdf3S猫头猫import Icon from '@/components/base/icon.tsx';
12a3b33415S猫头猫
13a3b33415S猫头猫interface IMusicItemProps {
14a3b33415S猫头猫    index?: string | number;
151119c2eaS猫头猫    showMoreIcon?: boolean;
16a3b33415S猫头猫    musicItem: IMusic.IMusicItem;
17a3b33415S猫头猫    musicSheet?: IMusic.IMusicSheetItem;
18a3b33415S猫头猫    onItemPress?: (musicItem: IMusic.IMusicItem) => void;
1994824d29S猫头猫    onItemLongPress?: () => void;
2017c7a0a6S猫头猫    itemPaddingRight?: number;
21*5589cdf3S猫头猫    left?: () => JSX.Element;
221119c2eaS猫头猫    containerStyle?: StyleProp<ViewStyle>;
23a3b33415S猫头猫}
24a3b33415S猫头猫export default function MusicItem(props: IMusicItemProps) {
2594824d29S猫头猫    const {
2694824d29S猫头猫        musicItem,
2794824d29S猫头猫        index,
2894824d29S猫头猫        onItemPress,
2994824d29S猫头猫        onItemLongPress,
3094824d29S猫头猫        musicSheet,
3117c7a0a6S猫头猫        itemPaddingRight,
321119c2eaS猫头猫        showMoreIcon = true,
331119c2eaS猫头猫        left: Left,
341119c2eaS猫头猫        containerStyle,
3594824d29S猫头猫    } = props;
36a3b33415S猫头猫
37a3b33415S猫头猫    return (
38a3b33415S猫头猫        <ListItem
391119c2eaS猫头猫            heightType="big"
401119c2eaS猫头猫            style={containerStyle}
41*5589cdf3S猫头猫            withHorizontalPadding
421119c2eaS猫头猫            leftPadding={index !== undefined ? 0 : undefined}
431119c2eaS猫头猫            rightPadding={itemPaddingRight}
4494824d29S猫头猫            onLongPress={onItemLongPress}
45a3b33415S猫头猫            onPress={() => {
46a3b33415S猫头猫                if (onItemPress) {
47a3b33415S猫头猫                    onItemPress(musicItem);
48a3b33415S猫头猫                } else {
495500cea7S猫头猫                    TrackPlayer.play(musicItem);
50a3b33415S猫头猫                }
511119c2eaS猫头猫            }}>
521119c2eaS猫头猫            {Left ? <Left /> : null}
531119c2eaS猫头猫            {index !== undefined ? (
541119c2eaS猫头猫                <ListItem.ListItemText
551119c2eaS猫头猫                    width={rpx(82)}
561119c2eaS猫头猫                    position="none"
571119c2eaS猫头猫                    fixedWidth
581119c2eaS猫头猫                    contentStyle={styles.indexText}>
591119c2eaS猫头猫                    {index}
601119c2eaS猫头猫                </ListItem.ListItemText>
611119c2eaS猫头猫            ) : null}
621119c2eaS猫头猫            <ListItem.Content
631119c2eaS猫头猫                title={
641119c2eaS猫头猫                    <TitleAndTag
651119c2eaS猫头猫                        title={musicItem.title}
661119c2eaS猫头猫                        tag={musicItem.platform}
671119c2eaS猫头猫                    />
681119c2eaS猫头猫                }
691119c2eaS猫头猫                description={
701119c2eaS猫头猫                    <View style={styles.descContainer}>
711119c2eaS猫头猫                        {LocalMusicSheet.isLocalMusic(musicItem) && (
721119c2eaS猫头猫                            <Icon
731119c2eaS猫头猫                                style={styles.icon}
741119c2eaS猫头猫                                color="#11659a"
751119c2eaS猫头猫                                name="check-circle"
761119c2eaS猫头猫                                size={rpx(22)}
771119c2eaS猫头猫                            />
781119c2eaS猫头猫                        )}
791119c2eaS猫头猫                        <ThemeText
801119c2eaS猫头猫                            numberOfLines={1}
811119c2eaS猫头猫                            fontSize="description"
82277c5280S猫头猫                            fontColor="textSecondary">
831119c2eaS猫头猫                            {musicItem.artist}
841119c2eaS猫头猫                            {musicItem.album ? ` - ${musicItem.album}` : ''}
851119c2eaS猫头猫                        </ThemeText>
861119c2eaS猫头猫                    </View>
871119c2eaS猫头猫                }
881119c2eaS猫头猫            />
891119c2eaS猫头猫            {showMoreIcon ? (
901119c2eaS猫头猫                <ListItem.ListItemIcon
911119c2eaS猫头猫                    width={rpx(48)}
921119c2eaS猫头猫                    position="none"
93*5589cdf3S猫头猫                    icon="ellipsis-vertical"
94a3b33415S猫头猫                    onPress={() => {
9594824d29S猫头猫                        showPanel('MusicItemOptions', {
9694824d29S猫头猫                            musicItem,
9794824d29S猫头猫                            musicSheet,
9894824d29S猫头猫                        });
994060c00aS猫头猫                    }}
1004060c00aS猫头猫                />
1011119c2eaS猫头猫            ) : null}
1021119c2eaS猫头猫        </ListItem>
103a3b33415S猫头猫    );
104a3b33415S猫头猫}
1051119c2eaS猫头猫
1061119c2eaS猫头猫const styles = StyleSheet.create({
1071119c2eaS猫头猫    icon: {
1081119c2eaS猫头猫        marginRight: rpx(6),
1091119c2eaS猫头猫    },
1101119c2eaS猫头猫    descContainer: {
1111119c2eaS猫头猫        flexDirection: 'row',
1121119c2eaS猫头猫        marginTop: rpx(16),
1131119c2eaS猫头猫    },
1141119c2eaS猫头猫
1151119c2eaS猫头猫    indexText: {
1161119c2eaS猫头猫        fontStyle: 'italic',
1171119c2eaS猫头猫        textAlign: 'center',
1181119c2eaS猫头猫    },
1191119c2eaS猫头猫});
120