Vorschlag umschaltbar, Wertungen einzeln löschbar
Wer einen Film aufs Rad gesetzt hat, kann ihn dort auch wieder runternehmen. Im Raster tragen alle Filme auf dem Rad jetzt eine Marke, nicht nur der eigene Vorschlag — so sieht man auf einen Blick, was schon vorgeschlagen ist. Die Karten hören dafür am Live-Kanal mit. Dazu: der Host löscht einzelne Wertungen, das Cover dockt oben an statt mittig, und die Suche heißt schlicht "Globale Suche". Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
<script setup>
|
||||
import { computed, onMounted, onUnmounted, ref, watch } from 'vue'
|
||||
import { abonnieren } from './live'
|
||||
import MovieCard from './components/MovieCard.vue'
|
||||
import FilterSidebar from './components/FilterSidebar.vue'
|
||||
import MovieDetail from './components/MovieDetail.vue'
|
||||
@@ -249,14 +250,19 @@ function tastatur(e) {
|
||||
// Wer schon vorgeschlagen hat, soll das in der Detailansicht sehen
|
||||
const meinVorschlag = ref(null)
|
||||
|
||||
// Alle Filme auf dem Rad, damit die Karten es zeigen können
|
||||
const aufDemRad = ref([])
|
||||
|
||||
async function ladeVorschlag() {
|
||||
try {
|
||||
const resp = await fetch('/api/suggestions')
|
||||
if (!resp.ok) return
|
||||
const daten = await resp.json()
|
||||
meinVorschlag.value = daten.items.find((i) => i.id === daten.mine) || null
|
||||
aufDemRad.value = daten.items.map((i) => i.movie_id)
|
||||
} catch {
|
||||
meinVorschlag.value = null
|
||||
aufDemRad.value = []
|
||||
}
|
||||
}
|
||||
|
||||
@@ -375,14 +381,23 @@ async function load() {
|
||||
}
|
||||
}
|
||||
|
||||
let abbestellen = null
|
||||
|
||||
onMounted(() => {
|
||||
load()
|
||||
ladeVorschlag()
|
||||
ladeGesehen()
|
||||
// Schlägt jemand anders etwas vor, sollen es auch die Karten zeigen
|
||||
abbestellen = abonnieren((nachricht) => {
|
||||
if (nachricht.type === 'suggestions' || nachricht.type === 'reset') ladeVorschlag()
|
||||
})
|
||||
window.addEventListener('keydown', tastatur)
|
||||
})
|
||||
|
||||
onUnmounted(() => window.removeEventListener('keydown', tastatur))
|
||||
onUnmounted(() => {
|
||||
window.removeEventListener('keydown', tastatur)
|
||||
abbestellen?.()
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -447,12 +462,14 @@ onUnmounted(() => window.removeEventListener('keydown', tastatur))
|
||||
<MovieCard
|
||||
v-if="entry.parts.length === 1"
|
||||
:movie="entry.parts[0]"
|
||||
:auf-dem-rad="aufDemRad.includes(entry.parts[0].id)"
|
||||
@open="selected = $event"
|
||||
/>
|
||||
<SeriesCard
|
||||
v-else
|
||||
:parts="entry.parts"
|
||||
:start="entry.best"
|
||||
:auf-dem-rad="aufDemRad"
|
||||
@open="selected = $event"
|
||||
/>
|
||||
</template>
|
||||
|
||||
Reference in New Issue
Block a user