xref: /MusicFree/src/components/base/playAllBar.tsx (revision bef6dda83b032c223c1d30d583f106aaa6f87796)
19801b15cS猫头猫import React from 'react';
29801b15cS猫头猫import {Pressable, StyleSheet, View} from 'react-native';
39801b15cS猫头猫import rpx from '@/utils/rpx';
49801b15cS猫头猫import {iconSizeConst} from '@/constants/uiConst';
59801b15cS猫头猫import {ROUTE_PATH, useNavigate} from '@/entry/router';
69801b15cS猫头猫import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
79801b15cS猫头猫import ThemeText from './themeText';
89801b15cS猫头猫import useColors from '@/hooks/useColors';
9c15039e2S猫头猫import {showPanel} from '../panels/usePanel';
10e650bfb3S猫头猫import IconButton from './iconButton';
115500cea7S猫头猫import TrackPlayer from '@/core/trackPlayer';
12*bef6dda8S猫头猫import MusicSheet from '@/core/musicSheet';
13*bef6dda8S猫头猫import Toast from '@/utils/toast';
149801b15cS猫头猫
159801b15cS猫头猫interface IProps {
169801b15cS猫头猫    musicList: IMusic.IMusicItem[] | null;
17*bef6dda8S猫头猫    canStar?: boolean;
18*bef6dda8S猫头猫    musicSheet?: IMusic.IMusicSheetItem | null;
199801b15cS猫头猫}
209801b15cS猫头猫export default function (props: IProps) {
21*bef6dda8S猫头猫    const {musicList, canStar, musicSheet} = props;
22*bef6dda8S猫头猫
23*bef6dda8S猫头猫    const sheetName = musicSheet?.title;
24*bef6dda8S猫头猫    const sheetId = musicSheet?.id;
25*bef6dda8S猫头猫
269801b15cS猫头猫    const colors = useColors();
279801b15cS猫头猫    const navigate = useNavigate();
289801b15cS猫头猫
29*bef6dda8S猫头猫    const starred = MusicSheet.useSheetStarred(musicSheet);
30*bef6dda8S猫头猫
319801b15cS猫头猫    return (
32277c5280S猫头猫        <View style={style.topWrapper}>
339801b15cS猫头猫            <Pressable
349801b15cS猫头猫                style={style.playAll}
359801b15cS猫头猫                onPress={() => {
369801b15cS猫头猫                    if (musicList) {
375500cea7S猫头猫                        TrackPlayer.playWithReplacePlayList(
389801b15cS猫头猫                            musicList[0],
399801b15cS猫头猫                            musicList,
409801b15cS猫头猫                        );
419801b15cS猫头猫                    }
429801b15cS猫头猫                }}>
439801b15cS猫头猫                <Icon
449801b15cS猫头猫                    name="play-circle-outline"
459801b15cS猫头猫                    style={style.playAllIcon}
469801b15cS猫头猫                    size={iconSizeConst.normal}
479801b15cS猫头猫                    color={colors.text}
489801b15cS猫头猫                />
499801b15cS猫头猫                <ThemeText fontWeight="bold">播放全部</ThemeText>
509801b15cS猫头猫            </Pressable>
51*bef6dda8S猫头猫            {canStar && musicSheet ? (
52*bef6dda8S猫头猫                <IconButton
53*bef6dda8S猫头猫                    name={starred ? 'heart' : 'heart-outline'}
54*bef6dda8S猫头猫                    sizeType={'normal'}
55*bef6dda8S猫头猫                    color={starred ? '#e31639' : undefined}
56*bef6dda8S猫头猫                    style={style.optionButton}
57*bef6dda8S猫头猫                    onPress={async () => {
58*bef6dda8S猫头猫                        if (!starred) {
59*bef6dda8S猫头猫                            MusicSheet.starMusicSheet(musicSheet);
60*bef6dda8S猫头猫                            Toast.success('收藏歌单成功');
61*bef6dda8S猫头猫                        } else {
62*bef6dda8S猫头猫                            MusicSheet.unstarMusicSheet(musicSheet);
63*bef6dda8S猫头猫                            Toast.success('已取消收藏歌单');
64*bef6dda8S猫头猫                        }
65*bef6dda8S猫头猫                    }}
66*bef6dda8S猫头猫                />
67*bef6dda8S猫头猫            ) : null}
689801b15cS猫头猫            <IconButton
69e650bfb3S猫头猫                name={'plus-box-multiple-outline'}
70e650bfb3S猫头猫                sizeType={'normal'}
71e650bfb3S猫头猫                style={style.optionButton}
729801b15cS猫头猫                onPress={async () => {
739801b15cS猫头猫                    showPanel('AddToMusicSheet', {
749801b15cS猫头猫                        musicItem: musicList ?? [],
759801b15cS猫头猫                        newSheetDefaultName: sheetName,
769801b15cS猫头猫                    });
779801b15cS猫头猫                }}
789801b15cS猫头猫            />
799801b15cS猫头猫            <IconButton
80e650bfb3S猫头猫                name="playlist-edit"
81e650bfb3S猫头猫                sizeType={'normal'}
82e650bfb3S猫头猫                style={style.optionButton}
839801b15cS猫头猫                onPress={async () => {
849801b15cS猫头猫                    navigate(ROUTE_PATH.MUSIC_LIST_EDITOR, {
859801b15cS猫头猫                        musicList: musicList,
869801b15cS猫头猫                        musicSheet: {
879801b15cS猫头猫                            title: sheetName,
8832c3c781S猫头猫                            id: sheetId,
899801b15cS猫头猫                        },
909801b15cS猫头猫                    });
919801b15cS猫头猫                }}
929801b15cS猫头猫            />
939801b15cS猫头猫        </View>
949801b15cS猫头猫    );
959801b15cS猫头猫}
969801b15cS猫头猫
979801b15cS猫头猫const style = StyleSheet.create({
989801b15cS猫头猫    /** playall */
999801b15cS猫头猫    topWrapper: {
100e650bfb3S猫头猫        height: rpx(84),
1019801b15cS猫头猫        paddingHorizontal: rpx(24),
1029801b15cS猫头猫        flexDirection: 'row',
1039801b15cS猫头猫        alignItems: 'center',
1049801b15cS猫头猫    },
1059801b15cS猫头猫    playAll: {
1069801b15cS猫头猫        flex: 1,
1079801b15cS猫头猫        flexDirection: 'row',
1089801b15cS猫头猫        alignItems: 'center',
1099801b15cS猫头猫    },
1109801b15cS猫头猫    playAllIcon: {
1119801b15cS猫头猫        marginRight: rpx(12),
1129801b15cS猫头猫    },
113e650bfb3S猫头猫    optionButton: {
114e650bfb3S猫头猫        marginLeft: rpx(36),
115e650bfb3S猫头猫    },
1169801b15cS猫头猫});
117