Refactor parts of SeasonList into SeasonListItem, add on-hover episode preloading

This commit is contained in:
Xevion
2022-05-19 19:43:12 -05:00
parent 1a86f2f4bb
commit c83a68cd15
2 changed files with 56 additions and 9 deletions

View File

@@ -15,13 +15,12 @@
<b-list-group>
<template v-for="(episode, index) in seasons[season.season_id - 1].episodes">
<template v-if="isPreloaded">
<b-list-group-item
:id="`s-${season.season_id}-ep-${episode.episode_id}`" :key="`rl-${episode.episode_id}`"
class="no-link episode-item"
:to="{name: 'Episode', params: { season: season.season_id, episode: episode.episode_id }, }"
>
Episode {{ episode.episode_id }} - "{{ episode.title }}"
</b-list-group-item>
<SeasonListItem
:key="`rl-${episode.episodeNumber}`"
:episode-number="episode.episodeNumber"
:season-number="episode.seasonNumber"
:title="episode.title"
/>
<b-popover
:key="`bpop-${episode.episode_id}`" triggers="hover"
placement="right" delay="25"
@@ -45,13 +44,15 @@
</template>
<script>
import Skeleton from './Skeleton.vue';
import Skeleton from '@/components/Skeleton';
import SeasonListItem from "@/components/SeasonListItem";
import {types} from "@/mutation_types";
export default {
name: "SeasonList",
components: {
Skeleton
Skeleton,
SeasonListItem
},
computed: {
seasons() {

View File

@@ -0,0 +1,46 @@
<template>
<b-list-group-item
:id="`s-${seasonNumber}-ep-${episodeNumber}`"
:to="{name: 'Episode', params: { season: seasonNumber, episode: episodeNumber }, }"
class="no-link episode-item"
@mouseover="hoverOn" @mouseleave="hoverOff"
>
Episode {{ episodeNumber }} - "{{ title }}"
</b-list-group-item>
</template>
<script>
import {types} from "@/mutation_types";
export default {
name: "SeasonListItem",
props: {
episodeNumber: {type: Number, default: null, required: true},
seasonNumber: {type: Number, default: null, required: true},
title: {type: String, default: null, required: true}
},
data() {
return {
timeoutID: null
}
},
methods: {
hoverFetch() {
this.$store.dispatch(types.FETCH_EPISODE, {season: this.seasonNumber, episode: this.episodeNumber})
},
hoverOn() {
this.timeoutID = setTimeout(this.hoverFetch, 800);
},
hoverOff() {
if (this.timeoutID !== null) {
clearTimeout(this.timeoutID)
this.timeoutID = null;
}
}
}
}
</script>
<style scoped>
</style>