diff --git a/src/routes/Detail/VideosList/SeasonsBar/SeasonsBar.js b/src/routes/Detail/VideosList/SeasonsBar/SeasonsBar.js index 705e23988..26160461a 100644 --- a/src/routes/Detail/VideosList/SeasonsBar/SeasonsBar.js +++ b/src/routes/Detail/VideosList/SeasonsBar/SeasonsBar.js @@ -2,77 +2,72 @@ const React = require('react'); const PropTypes = require('prop-types'); const classnames = require('classnames'); const Icon = require('stremio-icons/dom'); -const { Button, Popup, useBinaryState } = require('stremio/common'); +const { Button, Multiselect } = require('stremio/common'); const styles = require('./styles'); -const SeasonsBar = ({ className, season, seasons, onSeasonChange }) => { - const [menuOpen, openMenu, closeMenu, toggleMenu] = useBinaryState(false); - const setPrevSeason = React.useCallback(() => { - if (Array.isArray(seasons) && typeof onSeasonChange === 'function') { +const SeasonsBar = ({ className, season, seasons, onSelect }) => { + const options = React.useMemo(() => { + return Array.isArray(seasons) ? + seasons.map((season) => ({ + value: String(season), + label: `Season ${season}` + })) + : + []; + }, [seasons]); + const selected = React.useMemo(() => { + return [String(season)]; + }, [season]); + const renderMultiselectLabelText = React.useMemo(() => { + return () => `Season ${season}`; + }, [season]); + const prevNextButtonOnClick = React.useCallback((event) => { + if (Array.isArray(seasons) && typeof onSelect === 'function') { const seasonIndex = seasons.indexOf(season); - if (seasonIndex > 0) { - onSeasonChange(seasons[seasonIndex - 1]); - } + const valueIndex = event.currentTarget.dataset.action === 'next' ? + seasonIndex + 1 + : + seasonIndex - 1; + const value = valueIndex >= 0 && valueIndex < seasons.length ? + seasons[valueIndex] + : + seasons[0]; + onSelect({ + type: 'select', + value: value, + reactEvent: event, + nativeEvent: event.nativeEvent + }); } - }, [season, seasons, onSeasonChange]); - const setNextSeason = React.useCallback(() => { - if (Array.isArray(seasons) && typeof onSeasonChange === 'function') { - const seasonIndex = seasons.indexOf(season); - if (seasonIndex < seasons.length - 1) { - onSeasonChange(seasons[seasonIndex + 1]); - } + }, [season, seasons, onSelect]); + const seasonOnSelect = React.useCallback((event) => { + const value = parseInt(event.value); + if (!isNaN(value) && typeof onSelect === 'function') { + onSelect({ + type: 'select', + value: value, + reactEvent: event.reactEvent, + nativeEvent: event.nativeEvent + }); } - }, [season, seasons, onSeasonChange]); - const seasonOnClick = React.useCallback((event) => { - closeMenu(); - const season = parseInt(event.currentTarget.dataset.season); - if (!isNaN(season) && typeof onSeasonChange === 'function') { - onSeasonChange(season); - } - }, [onSeasonChange]); + }, [onSelect]); return (