53 lines
1.5 KiB
Svelte
53 lines
1.5 KiB
Svelte
<script>
|
|
import CurrentMusicStore from '../../stores/currentMusic';
|
|
import musicStore from '../../stores/musicStore';
|
|
|
|
export let show = false;
|
|
|
|
/**
|
|
* @type {{ musicTitle: string; musicUrl: string; musicArtist: string; }[]}
|
|
*/
|
|
let musicSelection = $musicStore;
|
|
const sleep = (/** @type {number | undefined} */ ms) => new Promise((r) => setTimeout(r, ms));
|
|
/**
|
|
* @param {{ musicTitle: string; musicUrl: string; musicArtist: string; }} v
|
|
*/
|
|
async function setSong(v) {
|
|
$CurrentMusicStore.musicArtist = v.musicArtist;
|
|
$CurrentMusicStore.musicTitle = v.musicTitle;
|
|
$CurrentMusicStore.musicUrl = v.musicUrl;
|
|
// THIS IS SUCH A DUMB WORKAROUND!!!!
|
|
// WITHOUT THIS, THE VALUE OF FALSE IS NEVER REASSIGNED AND THE MUSIC WILL NEVER START PLAYING!!!
|
|
$CurrentMusicStore.paused = true;
|
|
await sleep(10);
|
|
$CurrentMusicStore.paused = false;
|
|
}
|
|
</script>
|
|
|
|
{#if show}
|
|
<div
|
|
on:click={() => {
|
|
show = !show;
|
|
}}
|
|
class="h-screen w-screen bg-opacity-60 bg-black fixed top-0 left-0 z-10 py-20 "
|
|
>
|
|
<div class="h-full w-3/4 bg-red-100 mx-auto rounded-xl overflow-auto pb-3">
|
|
<div class="w-full bg-indigo-200 rounded-t-xl p-3">
|
|
<span>Music Selection</span>
|
|
</div>
|
|
<div class="grid grid-cols-1 lg:grid-cols-2">
|
|
{#each musicSelection as v}
|
|
<ul
|
|
on:click={() => {
|
|
setSong(v);
|
|
}}
|
|
class="ml-3 mt-3 hover:cursor-pointer underline shadow-lg hover:shadow-xl w-max bg-indigo-100 p-2 rounded-md"
|
|
>
|
|
{v.musicArtist} - {v.musicTitle}
|
|
</ul>
|
|
{/each}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{/if}
|