Change SeasonListItem to handle null episode data with Skeleton, change key to use index-based key

This commit is contained in:
Xevion
2022-05-20 12:53:57 -05:00
parent f0e97193c9
commit 6e27d13a11
2 changed files with 21 additions and 6 deletions

View File

@@ -16,7 +16,7 @@
<template v-for="(episode, index) in seasons[season.season_id - 1].episodes"> <template v-for="(episode, index) in seasons[season.season_id - 1].episodes">
<template v-if="isPreloaded"> <template v-if="isPreloaded">
<SeasonListItem <SeasonListItem
:key="`rl-${episode.episodeNumber}`" :key="`rl-${index}`"
:episode-number="episode.episodeNumber" :episode-number="episode.episodeNumber"
:season-number="episode.seasonNumber" :season-number="episode.seasonNumber"
:title="episode.title" :title="episode.title"

View File

@@ -1,29 +1,44 @@
<template> <template>
<b-list-group-item <b-list-group-item
v-if="dataAvailable"
:id="`s-${seasonNumber}-ep-${episodeNumber}`" :id="`s-${seasonNumber}-ep-${episodeNumber}`"
:to="{name: 'Episode', params: { season: seasonNumber, episode: episodeNumber }, }" :to="{name: 'Episode', params: { season: seasonNumber, episode: episodeNumber }, }"
class="no-link episode-item" class="no-link episode-item" @mouseover="hoverOn"
@mouseover="hoverOn" @mouseleave="hoverOff" @mouseleave="hoverOff"
> >
Episode {{ episodeNumber }} - "{{ title }}" Episode {{ episodeNumber }} - "{{ title }}"
</b-list-group-item> </b-list-group-item>
<b-list-group-item v-else>
<Skeleton style="width: 90%" />
</b-list-group-item>
</template> </template>
<script> <script>
import {types} from "@/mutation_types"; import {types} from "@/mutation_types";
import Skeleton from "@/components/Skeleton";
export default { export default {
name: "SeasonListItem", name: "SeasonListItem",
components: {
Skeleton
},
props: { props: {
episodeNumber: {type: Number, default: null, required: true}, episodeNumber: {type: Number, default: null, required: false},
seasonNumber: {type: Number, default: null, required: true}, seasonNumber: {type: Number, default: null, required: false},
title: {type: String, default: null, required: true} title: {type: String, default: null, required: false}
}, },
data() { data() {
return { return {
timeoutID: null timeoutID: null
} }
}, },
computed: {
dataAvailable() {
return this.episodeNumber !== null &&
this.seasonNumber !== null &&
this.title !== null;
}
},
methods: { methods: {
hoverFetch() { hoverFetch() {
this.$store.dispatch(types.FETCH_EPISODE, {season: this.seasonNumber, episode: this.episodeNumber}) this.$store.dispatch(types.FETCH_EPISODE, {season: this.seasonNumber, episode: this.episodeNumber})