2021-07-15 00:09:42 +02:00
|
|
|
import React from 'react';
|
|
|
|
import { TypeSelector } from './TypeSelector';
|
|
|
|
import { NumberSelector } from './NumberSelector';
|
2021-10-25 21:16:10 +02:00
|
|
|
import { VideoProgressStore } from '../lib/storage/VideoProgress'
|
2021-10-26 14:16:35 +02:00
|
|
|
import { SelectBox } from '../components/SelectBox';
|
2021-07-15 00:09:42 +02:00
|
|
|
import './EpisodeSelector.css'
|
2021-10-26 14:16:35 +02:00
|
|
|
import { useWindowSize } from '../hooks/useWindowSize';
|
2021-07-15 00:09:42 +02:00
|
|
|
|
2021-08-06 18:57:58 +02:00
|
|
|
export function EpisodeSelector({ setSelectedSeason, selectedSeason, setEpisode, seasons, episodes, currentSeason, currentEpisode, streamData }) {
|
2021-08-02 15:08:55 +02:00
|
|
|
const choices = episodes ? episodes.map(v => {
|
2021-10-25 21:16:10 +02:00
|
|
|
const progressData = VideoProgressStore.get();
|
2021-07-15 21:04:47 +02:00
|
|
|
|
|
|
|
let currentlyAt = 0;
|
|
|
|
let totalDuration = 0;
|
|
|
|
|
2021-08-06 18:57:58 +02:00
|
|
|
const progress = progressData?.[streamData.source]?.[streamData.type]?.[streamData.slug]?.[`${selectedSeason}-${v}`]
|
|
|
|
|
2021-08-06 17:54:09 +02:00
|
|
|
if (progress) {
|
2021-07-15 21:04:47 +02:00
|
|
|
currentlyAt = progress.currentlyAt
|
|
|
|
totalDuration = progress.totalDuration
|
|
|
|
}
|
|
|
|
|
|
|
|
const percentage = Math.round((currentlyAt / totalDuration) * 100)
|
|
|
|
|
|
|
|
return {
|
|
|
|
value: v.toString(),
|
|
|
|
label: v,
|
|
|
|
percentage
|
|
|
|
}
|
2021-08-02 15:08:55 +02:00
|
|
|
}) : [];
|
2021-07-15 21:04:47 +02:00
|
|
|
|
2021-10-26 14:16:35 +02:00
|
|
|
const windowSize = useWindowSize()
|
|
|
|
|
2021-07-15 00:09:42 +02:00
|
|
|
return (
|
2021-07-15 18:28:00 +02:00
|
|
|
<div className="episodeSelector">
|
2021-10-26 14:16:35 +02:00
|
|
|
{
|
|
|
|
(seasons.length > 0 && (windowSize.width <= 768 || seasons.length > 4)) ?
|
|
|
|
(
|
|
|
|
<SelectBox setSelectedItem={(index) => setSelectedSeason(seasons[index])} selectedItem={seasons.findIndex(s => s === selectedSeason)} options={seasons.map(season => { return {id: season, name: `Season ${season}` }})}/>
|
|
|
|
)
|
|
|
|
:
|
|
|
|
(
|
|
|
|
<TypeSelector setType={setSelectedSeason} selected={selectedSeason} choices={seasons.map(v=>({ value: v.toString(), label: `Season ${v}`}))} />
|
|
|
|
)
|
|
|
|
}
|
|
|
|
<br></br>
|
2021-08-02 15:08:55 +02:00
|
|
|
<NumberSelector setType={(e) => setEpisode({episode: e, season: selectedSeason})} choices={choices} selected={(selectedSeason.toString() === currentSeason) ? currentEpisode : null} />
|
2021-07-15 00:09:42 +02:00
|
|
|
</div>
|
|
|
|
)
|
|
|
|
}
|