2022-07-24 23:06:20 +00:00
|
|
|
<script setup lang="ts">
|
2022-07-24 20:51:13 +00:00
|
|
|
import type { QueueItemSource } from '~/types'
|
|
|
|
|
2022-08-30 20:23:17 +00:00
|
|
|
interface Events {
|
|
|
|
(e: 'play', index: number): void
|
|
|
|
(e: 'remove', index: number): void
|
|
|
|
}
|
|
|
|
|
2022-07-24 20:51:13 +00:00
|
|
|
interface Props {
|
|
|
|
source: QueueItemSource
|
|
|
|
index: number
|
|
|
|
}
|
|
|
|
|
2022-08-30 20:23:17 +00:00
|
|
|
defineEmits<Events>()
|
2022-07-24 20:51:13 +00:00
|
|
|
defineProps<Props>()
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
|
|
|
<div
|
|
|
|
class="queue-item"
|
|
|
|
tabindex="0"
|
|
|
|
>
|
|
|
|
<div class="handle">
|
|
|
|
<i class="grip lines icon" />
|
|
|
|
</div>
|
|
|
|
<div
|
|
|
|
class="image-cell"
|
|
|
|
@click="$emit('play', index)"
|
|
|
|
>
|
|
|
|
<img
|
|
|
|
class="ui mini image"
|
|
|
|
alt=""
|
|
|
|
:src="source.coverUrl"
|
|
|
|
>
|
|
|
|
</div>
|
|
|
|
<div @click="$emit('play', index)">
|
|
|
|
<button
|
|
|
|
class="title reset ellipsis"
|
|
|
|
:title="source.track.title"
|
|
|
|
:aria-label="source.labels.selectTrack"
|
|
|
|
>
|
|
|
|
<strong>{{ source.track.title }}</strong><br>
|
|
|
|
<span>
|
2022-08-31 16:39:24 +00:00
|
|
|
{{ source.track.artist?.name }}
|
2022-07-24 20:51:13 +00:00
|
|
|
</span>
|
|
|
|
</button>
|
|
|
|
</div>
|
|
|
|
<div class="duration-cell">
|
|
|
|
<template v-if="source.track.uploads.length > 0">
|
|
|
|
{{ source.duration }}
|
|
|
|
</template>
|
|
|
|
</div>
|
|
|
|
<div class="controls">
|
2022-07-24 21:54:01 +00:00
|
|
|
<button
|
|
|
|
:aria-label="source.labels.favorite"
|
|
|
|
:title="source.labels.favorite"
|
|
|
|
class="ui really basic circular icon button"
|
2022-07-24 21:36:33 +00:00
|
|
|
@click.stop="$store.dispatch('favorites/toggle', source.track.id)"
|
2022-07-24 21:54:01 +00:00
|
|
|
>
|
|
|
|
<i
|
|
|
|
:class="$store.getters['favorites/isFavorite'](source.track.id) ? 'pink' : ''"
|
|
|
|
class="heart icon"
|
|
|
|
/>
|
|
|
|
</button>
|
2022-07-24 20:51:13 +00:00
|
|
|
<button
|
|
|
|
:aria-label="source.labels.remove"
|
|
|
|
:title="source.labels.remove"
|
|
|
|
class="ui really tiny basic circular icon button"
|
|
|
|
@click.stop="$emit('remove', index)"
|
|
|
|
>
|
|
|
|
<i class="x icon" />
|
|
|
|
</button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|