xref: /MusicFree/src/components/base/playAllBar.tsx (revision b4c389f44ac4dad056e7314478fadd2eca82a4b1)
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';
5*b4c389f4Smaotoumaoimport {ROUTE_PATH, useNavigate} from '@/core/router';
69801b15cS猫头猫import ThemeText from './themeText';
79801b15cS猫头猫import useColors from '@/hooks/useColors';
8c15039e2S猫头猫import {showPanel} from '../panels/usePanel';
9e650bfb3S猫头猫import IconButton from './iconButton';
104c222b69S猫头猫import TrackPlayer, {MusicRepeatMode} from '@/core/trackPlayer';
11bef6dda8S猫头猫import Toast from '@/utils/toast';
125589cdf3S猫头猫import Icon from '@/components/base/icon.tsx';
13740e3947S猫头猫import MusicSheet from '@/core/musicSheet';
149801b15cS猫头猫
159801b15cS猫头猫interface IProps {
169801b15cS猫头猫    musicList: IMusic.IMusicItem[] | null;
17bef6dda8S猫头猫    canStar?: boolean;
18bef6dda8S猫头猫    musicSheet?: IMusic.IMusicSheetItem | null;
199801b15cS猫头猫}
209801b15cS猫头猫export default function (props: IProps) {
21bef6dda8S猫头猫    const {musicList, canStar, musicSheet} = props;
22bef6dda8S猫头猫
23bef6dda8S猫头猫    const sheetName = musicSheet?.title;
24bef6dda8S猫头猫    const sheetId = musicSheet?.id;
25bef6dda8S猫头猫
269801b15cS猫头猫    const colors = useColors();
279801b15cS猫头猫    const navigate = useNavigate();
289801b15cS猫头猫
29740e3947S猫头猫    const starred = MusicSheet.useSheetIsStarred(musicSheet);
30bef6dda8S猫头猫
319801b15cS猫头猫    return (
32277c5280S猫头猫        <View style={style.topWrapper}>
339801b15cS猫头猫            <Pressable
349801b15cS猫头猫                style={style.playAll}
359801b15cS猫头猫                onPress={() => {
369801b15cS猫头猫                    if (musicList) {
374c222b69S猫头猫                        let defaultPlayMusic = musicList[0];
384c222b69S猫头猫                        if (
394c222b69S猫头猫                            TrackPlayer.getRepeatMode() ===
404c222b69S猫头猫                            MusicRepeatMode.SHUFFLE
414c222b69S猫头猫                        ) {
424c222b69S猫头猫                            defaultPlayMusic =
434c222b69S猫头猫                                musicList[
444c222b69S猫头猫                                    Math.floor(Math.random() * musicList.length)
454c222b69S猫头猫                                ];
464c222b69S猫头猫                        }
475500cea7S猫头猫                        TrackPlayer.playWithReplacePlayList(
484c222b69S猫头猫                            defaultPlayMusic,
499801b15cS猫头猫                            musicList,
509801b15cS猫头猫                        );
519801b15cS猫头猫                    }
529801b15cS猫头猫                }}>
539801b15cS猫头猫                <Icon
545589cdf3S猫头猫                    name="play-circle"
559801b15cS猫头猫                    style={style.playAllIcon}
569801b15cS猫头猫                    size={iconSizeConst.normal}
579801b15cS猫头猫                    color={colors.text}
589801b15cS猫头猫                />
599801b15cS猫头猫                <ThemeText fontWeight="bold">播放全部</ThemeText>
609801b15cS猫头猫            </Pressable>
61bef6dda8S猫头猫            {canStar && musicSheet ? (
62bef6dda8S猫头猫                <IconButton
63bef6dda8S猫头猫                    name={starred ? 'heart' : 'heart-outline'}
64bef6dda8S猫头猫                    sizeType={'normal'}
65bef6dda8S猫头猫                    color={starred ? '#e31639' : undefined}
66bef6dda8S猫头猫                    style={style.optionButton}
67bef6dda8S猫头猫                    onPress={async () => {
68bef6dda8S猫头猫                        if (!starred) {
69bef6dda8S猫头猫                            MusicSheet.starMusicSheet(musicSheet);
70bef6dda8S猫头猫                            Toast.success('收藏歌单成功');
71bef6dda8S猫头猫                        } else {
72bef6dda8S猫头猫                            MusicSheet.unstarMusicSheet(musicSheet);
73bef6dda8S猫头猫                            Toast.success('已取消收藏歌单');
74bef6dda8S猫头猫                        }
75bef6dda8S猫头猫                    }}
76bef6dda8S猫头猫                />
77bef6dda8S猫头猫            ) : null}
789801b15cS猫头猫            <IconButton
795589cdf3S猫头猫                name="folder-plus"
80e650bfb3S猫头猫                sizeType={'normal'}
81e650bfb3S猫头猫                style={style.optionButton}
829801b15cS猫头猫                onPress={async () => {
839801b15cS猫头猫                    showPanel('AddToMusicSheet', {
849801b15cS猫头猫                        musicItem: musicList ?? [],
859801b15cS猫头猫                        newSheetDefaultName: sheetName,
869801b15cS猫头猫                    });
879801b15cS猫头猫                }}
889801b15cS猫头猫            />
899801b15cS猫头猫            <IconButton
905589cdf3S猫头猫                name="pencil-square"
91e650bfb3S猫头猫                sizeType={'normal'}
92e650bfb3S猫头猫                style={style.optionButton}
939801b15cS猫头猫                onPress={async () => {
949801b15cS猫头猫                    navigate(ROUTE_PATH.MUSIC_LIST_EDITOR, {
959801b15cS猫头猫                        musicList: musicList,
969801b15cS猫头猫                        musicSheet: {
979801b15cS猫头猫                            title: sheetName,
9832c3c781S猫头猫                            id: sheetId,
999801b15cS猫头猫                        },
1009801b15cS猫头猫                    });
1019801b15cS猫头猫                }}
1029801b15cS猫头猫            />
1039801b15cS猫头猫        </View>
1049801b15cS猫头猫    );
1059801b15cS猫头猫}
1069801b15cS猫头猫
1079801b15cS猫头猫const style = StyleSheet.create({
1089801b15cS猫头猫    /** playall */
1099801b15cS猫头猫    topWrapper: {
110e650bfb3S猫头猫        height: rpx(84),
1119801b15cS猫头猫        paddingHorizontal: rpx(24),
1129801b15cS猫头猫        flexDirection: 'row',
1139801b15cS猫头猫        alignItems: 'center',
1149801b15cS猫头猫    },
1159801b15cS猫头猫    playAll: {
1169801b15cS猫头猫        flex: 1,
1179801b15cS猫头猫        flexDirection: 'row',
1189801b15cS猫头猫        alignItems: 'center',
1199801b15cS猫头猫    },
1209801b15cS猫头猫    playAllIcon: {
1219801b15cS猫头猫        marginRight: rpx(12),
1229801b15cS猫头猫    },
123e650bfb3S猫头猫    optionButton: {
124e650bfb3S猫头猫        marginLeft: rpx(36),
125e650bfb3S猫头猫    },
1269801b15cS猫头猫});
127