Skip to content

Commit e956101

Browse files
committed
feat: add "play next" to achievement details dialog
1 parent 968a079 commit e956101

File tree

5 files changed

+39
-4
lines changed

5 files changed

+39
-4
lines changed

components/ButtonStyled.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ const className = cva(
5252
<template>
5353
<button
5454
:class="className({ iconOnly: !slots.default, intent, size, disabled })"
55+
:disabled
5556
>
5657
<NuxtIcon
5758
v-if="loading"

components/ProjectBoxItem.vue

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<script lang="ts" setup>
2+
import { TrackApi } from "@bcc-code/bmm-sdk-fetch";
23
import type { AchievementModel, ProjectBoxV2 } from "@bcc-code/bmm-sdk-fetch";
34
45
defineProps<{
@@ -16,6 +17,23 @@ const showDialog = computed({
1617
}
1718
},
1819
});
20+
21+
const { $mediaPlayer } = useNuxtApp();
22+
async function playTrackWithId(trackId: number) {
23+
const track = await new TrackApi().trackIdGet({ id: trackId });
24+
$mediaPlayer.replaceCurrent(track);
25+
setTimeout(() => {
26+
$mediaPlayer.open.value = true;
27+
}, 100);
28+
}
29+
30+
const trackIsPlaying = computed(() => {
31+
if (!$mediaPlayer.currentTrack.value) return false;
32+
if (!selectedAchievement.value) return false;
33+
return (
34+
$mediaPlayer.currentTrack.value.id === selectedAchievement.value.trackId
35+
);
36+
});
1937
</script>
2038

2139
<template>
@@ -56,6 +74,20 @@ const showDialog = computed({
5674
</span>
5775
<p class="type-heading-2 my-2">{{ selectedAchievement.title }}</p>
5876
<p class="text-balance">{{ selectedAchievement.description }}</p>
77+
78+
<div
79+
v-if="selectedAchievement.trackId"
80+
class="mt-6 flex w-full flex-col gap-2"
81+
>
82+
<ButtonStyled
83+
:disabled="trackIsPlaying"
84+
size="large"
85+
:icon="trackIsPlaying ? 'icon.playing.animation' : 'icon.play'"
86+
@click="playTrackWithId(selectedAchievement.trackId)"
87+
>
88+
{{ $t("project.achievementPlayNext") }}
89+
</ButtonStyled>
90+
</div>
5991
</div>
6092
</DialogBase>
6193
</div>

components/media-player/MediaPlayer.vue

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
<script setup lang="ts">
22
import { MediaPlayerStatus } from "~/plugins/mediaPlayer/mediaPlayer";
33
4-
const open = ref(false);
5-
6-
const { status, play, pause, next, previous } = useNuxtApp().$mediaPlayer;
4+
const { status, play, pause, next, previous, open } = useNuxtApp().$mediaPlayer;
75
86
defineShortcuts({
97
" ": {

locales/en.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@
233233
},
234234
"project": {
235235
"achievement": "Achievement",
236-
"achievementUnlocked": "Unlocked"
236+
"achievementUnlocked": "Unlocked",
237+
"achievementPlayNext": "Play next"
237238
}
238239
}

plugins/mediaPlayer/mediaPlayer.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export interface MediaPlayer {
4949
addNext: (track: TrackModel, origin?: string) => void;
5050
replaceCurrent: (track: TrackModel) => void;
5151
repeatStatus: Ref<RepeatStatus>;
52+
open: Ref<boolean>;
5253
}
5354

5455
export const seekOffset = 15;
@@ -74,6 +75,7 @@ export const initMediaPlayer = (
7475

7576
const volume = ref(1);
7677
const playbackSpeed = ref(1);
78+
const open = ref(false);
7779

7880
function stop() {
7981
if (activeMedia.value) {
@@ -351,5 +353,6 @@ export const initMediaPlayer = (
351353
addNext,
352354
replaceCurrent,
353355
repeatStatus,
356+
open,
354357
};
355358
};

0 commit comments

Comments
 (0)