feat(in-570): episodes playback changes

pull/195/head
Ruslan Khayrullin 3 years ago
parent 27b2449711
commit 0750331e6a
  1. 12
      src/features/CircleAnimationBar/index.tsx
  2. 3
      src/features/MatchPage/components/FinishedMatch/hooks/index.tsx
  3. 2
      src/features/MatchPage/components/FinishedMatch/hooks/useEpisodes.tsx
  4. 1
      src/features/MatchPage/components/FinishedMatch/index.tsx
  5. 11
      src/features/MatchPage/components/LiveMatch/hooks/index.tsx
  6. 68
      src/features/MatchPage/store/hooks/index.tsx
  7. 6
      src/features/MatchPage/store/hooks/useMatchData.tsx
  8. 5
      src/features/MatchPage/store/hooks/useMatchPlaylists.tsx
  9. 21
      src/features/MatchPage/store/hooks/useSelectedPlaylist.tsx
  10. 29
      src/features/MatchPage/store/hooks/useStatsTab.tsx
  11. 3
      src/features/MatchPage/types.tsx
  12. 160
      src/features/MatchSidePlaylists/components/EventsList/index.tsx
  13. 67
      src/features/MatchSidePlaylists/components/MatchPlaylists/index.tsx
  14. 13
      src/features/MatchSidePlaylists/components/PlayersPlaylists/index.tsx
  15. 6
      src/features/MatchSidePlaylists/components/PlayersTable/hooks/index.tsx
  16. 2
      src/features/MatchSidePlaylists/components/PlayersTable/hooks/useTable.tsx
  17. 6
      src/features/MatchSidePlaylists/components/TabEvents/index.tsx
  18. 2
      src/features/MatchSidePlaylists/components/TeamsStatsTable/Cell.tsx
  19. 6
      src/features/MatchSidePlaylists/components/TeamsStatsTable/hooks.tsx
  20. 28
      src/features/MultiSourcePlayer/hooks/index.tsx
  21. 8
      src/features/MultiSourcePlayer/index.tsx
  22. 25
      src/features/StreamPlayer/hooks/index.tsx
  23. 8
      src/features/StreamPlayer/index.tsx
  24. 4
      src/features/StreamPlayer/styled.tsx

@ -10,16 +10,16 @@ import { fullEpisodesDuration } from './helpers'
import { Svg, Circle } from './styled' import { Svg, Circle } from './styled'
export type TCircleAnimation = { export type TCircleAnimation = {
plaingOrder: number,
playedProgress: number, playedProgress: number,
playing: boolean, playing: boolean,
playingOrder: number,
ready: boolean, ready: boolean,
} }
export const initialCircleAnimation: TCircleAnimation = { export const initialCircleAnimation: TCircleAnimation = {
plaingOrder: 0,
playedProgress: 0, playedProgress: 0,
playing: false, playing: false,
playingOrder: 0,
ready: false, ready: false,
} }
@ -43,14 +43,14 @@ export const CircleAnimationBar = ({
} = useMatchPageStore() } = useMatchPageStore()
const { const {
plaingOrder,
playedProgress, playedProgress,
playing, playing,
playingOrder,
ready, ready,
} = circleAnimation } = circleAnimation
const timeOfAllEpisodes = fullEpisodesDuration(filteredEvents) const timeOfAllEpisodes = fullEpisodesDuration(filteredEvents)
const remainingEvents = filteredEvents.slice(plaingOrder && plaingOrder - 1) const remainingEvents = filteredEvents.slice(playingOrder && playingOrder - 1)
const fullTimeOfRemainingEpisodes = !isEmpty(remainingEvents) const fullTimeOfRemainingEpisodes = !isEmpty(remainingEvents)
? fullEpisodesDuration(remainingEvents) ? fullEpisodesDuration(remainingEvents)
: 0 : 0
@ -62,13 +62,13 @@ export const CircleAnimationBar = ({
const strokeDashOffset = svgSize * Math.PI const strokeDashOffset = svgSize * Math.PI
useEffect(() => { useEffect(() => {
if (currentEpisodesPercent >= 100 && (plaingOrder === size(filteredEvents))) { if (currentEpisodesPercent >= 100 && (playingOrder === size(filteredEvents))) {
setWatchAllEpisodesTimer(false) setWatchAllEpisodesTimer(false)
} }
}, [ }, [
currentEpisodesPercent, currentEpisodesPercent,
filteredEvents, filteredEvents,
plaingOrder, playingOrder,
setWatchAllEpisodesTimer, setWatchAllEpisodesTimer,
]) ])

@ -41,11 +41,12 @@ export const useFinishedMatch = () => {
setSettings(newSettings) setSettings(newSettings)
closeSettingsPopup() closeSettingsPopup()
} }
// @ts-expect-error
const onPlaylistSelect: typeof handlePlaylistClick = (playlist, e) => { const onPlaylistSelect: typeof handlePlaylistClick = (playlist, e) => {
if (selectedPlaylist) { if (selectedPlaylist) {
logPlaylistChange(selectedPlaylist) logPlaylistChange(selectedPlaylist)
} }
// @ts-expect-error
handlePlaylistClick(playlist, e) handlePlaylistClick(playlist, e)
} }
const { chapters } = useChapters({ episodes, selectedPlaylist }) const { chapters } = useChapters({ episodes, selectedPlaylist })

@ -49,7 +49,7 @@ export const useEpisodes = () => {
useEffect(() => { useEffect(() => {
if (!selectedPlaylist && playlists && !isEmpty(playlists.match)) { if (!selectedPlaylist && playlists && !isEmpty(playlists.match)) {
handlePlaylistClick(playlists.match[0]) // handlePlaylistClick(playlists.match[0])
} }
}, [ }, [
selectedPlaylist, selectedPlaylist,

@ -66,6 +66,7 @@ export const FinishedMatch = () => {
<MatchSidePlaylists <MatchSidePlaylists
selectedPlaylist={selectedPlaylist} selectedPlaylist={selectedPlaylist}
// @ts-expect-error
onSelect={onPlaylistSelect} onSelect={onPlaylistSelect}
/> />
</Fragment> </Fragment>

@ -1,3 +1,4 @@
import type { MouseEvent } from 'react'
import { useMemo } from 'react' import { useMemo } from 'react'
import { API_ROOT } from 'config' import { API_ROOT } from 'config'
@ -6,6 +7,7 @@ import { readToken } from 'helpers/token'
import { usePageParams } from 'hooks' import { usePageParams } from 'hooks'
import type { PlaylistOption } from 'features/MatchPage/types'
import { useMatchPageStore } from 'features/MatchPage/store' import { useMatchPageStore } from 'features/MatchPage/store'
import { MatchSecondType, usePlayerProgressReporter } from './usePlayerProgressReporter' import { MatchSecondType, usePlayerProgressReporter } from './usePlayerProgressReporter'
@ -18,6 +20,7 @@ export const useLiveMatch = () => {
handlePlaylistClick, handlePlaylistClick,
profile, profile,
selectedPlaylist, selectedPlaylist,
selectedTab,
setFullMatchPlaylistDuration, setFullMatchPlaylistDuration,
} = useMatchPageStore() } = useMatchPageStore()
const { profileId: matchId, sportType } = usePageParams() const { profileId: matchId, sportType } = usePageParams()
@ -59,11 +62,15 @@ export const useLiveMatch = () => {
notifyProgressLogger(playing) notifyProgressLogger(playing)
} }
const onPlaylistSelect: typeof handlePlaylistClick = (playlist, e) => { const onPlaylistSelect = (playlist: PlaylistOption, e?: MouseEvent) => {
if (selectedPlaylist) { if (selectedPlaylist) {
logPlaylistChange(selectedPlaylist) logPlaylistChange(selectedPlaylist)
} }
handlePlaylistClick(playlist, e) handlePlaylistClick({
e,
playlist,
tab: selectedTab,
})
} }
return { return {
chapters, chapters,

@ -17,6 +17,7 @@ import { initialCircleAnimation } from 'features/CircleAnimationBar'
import type { TCircleAnimation } from 'features/CircleAnimationBar' import type { TCircleAnimation } from 'features/CircleAnimationBar'
import { StatsType } from 'features/MatchSidePlaylists/components/TabStats/config' import { StatsType } from 'features/MatchSidePlaylists/components/TabStats/config'
import { PlaylistTypes } from 'features/MatchPage/types' import { PlaylistTypes } from 'features/MatchPage/types'
import { FULL_GAME_KEY } from 'features/MatchPage/helpers/buildPlaylists'
import type { MatchInfo } from 'requests/getMatchInfo' import type { MatchInfo } from 'requests/getMatchInfo'
import { getMatchInfo } from 'requests/getMatchInfo' import { getMatchInfo } from 'requests/getMatchInfo'
@ -48,9 +49,9 @@ type PlayingData = {
} }
type EpisodeInfo = { type EpisodeInfo = {
paramName: string, episodesCount?: number,
paramValue?: number, paramName?: string,
playerOrTeamName: string, playerOrTeamName?: string,
} }
const initPlayingData: PlayingData = { const initPlayingData: PlayingData = {
@ -72,18 +73,16 @@ export const useMatchPage = () => {
const [access, setAccess] = useState(true) const [access, setAccess] = useState(true)
const [playingProgress, setPlayingProgress] = useState(0) const [playingProgress, setPlayingProgress] = useState(0)
const [playingData, setPlayingData] = useState<PlayingData>(initPlayingData) const [playingData, setPlayingData] = useState<PlayingData>(initPlayingData)
const [plaingOrder, setPlaingOrder] = useState(0) const [playingOrder, setPlaingOrder] = useState(0)
const [isPlayFilterEpisodes, setIsPlayingFiltersEpisodes] = useState(false) const [isPlayFilterEpisodes, setIsPlayingFiltersEpisodes] = useState(false)
const [selectedTab, setSelectedTab] = useState<Tabs>(Tabs.WATCH) const [selectedTab, setSelectedTab] = useState<Tabs>(Tabs.WATCH)
const [circleAnimation, setCircleAnimation] = useState<TCircleAnimation>(initialCircleAnimation) const [circleAnimation, setCircleAnimation] = useState<TCircleAnimation>(initialCircleAnimation)
const [episodeInfo, setEpisodeInfo] = useState<EpisodeInfo>({ const [episodeInfo, setEpisodeInfo] = useState<EpisodeInfo>({
episodesCount: 0,
paramName: '', paramName: '',
paramValue: 0,
playerOrTeamName: '', playerOrTeamName: '',
}) })
const isStatsTab = selectedTab === Tabs.STATS
const { profileId: matchId, sportType } = usePageParams() const { profileId: matchId, sportType } = usePageParams()
useEffect(() => { useEffect(() => {
@ -112,13 +111,13 @@ export const useMatchPage = () => {
matchPlaylists, matchPlaylists,
selectedPlaylist, selectedPlaylist,
setFullMatchPlaylistDuration, setFullMatchPlaylistDuration,
} = useMatchData({ matchProfile, selectedTab }) } = useMatchData({ matchProfile })
const profile = matchProfile const profile = matchProfile
const isPlayingEpisode = selectedPlaylist.type === PlaylistTypes.EVENT const isPlayingEpisode = selectedPlaylist.id !== FULL_GAME_KEY
&& selectedPlaylist.tab === Tabs.STATS
&& selectedTab === Tabs.STATS const isStatsPlaylist = selectedPlaylist.tab === Tabs.STATS
const { const {
activeEvents, activeEvents,
@ -245,7 +244,7 @@ export const useMatchPage = () => {
} }
const disablePlayingEpisodes = () => { const disablePlayingEpisodes = () => {
isStatsTab ? disablePlayingStatsEpisodes() : disablePlayingPlaysEpisodes() isStatsPlaylist ? disablePlayingStatsEpisodes() : disablePlayingPlaysEpisodes()
} }
useEffect(() => { useEffect(() => {
@ -253,7 +252,7 @@ export const useMatchPage = () => {
disablePlayingStatsEpisodes() disablePlayingStatsEpisodes()
disablePlayingPlaysEpisodes() disablePlayingPlaysEpisodes()
} else { } else {
selectedTab === Tabs.EVENTS ? disablePlayingStatsEpisodes() : disablePlayingPlaysEpisodes() !isStatsPlaylist ? disablePlayingStatsEpisodes() : disablePlayingPlaysEpisodes()
} }
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [selectedPlaylist]) }, [selectedPlaylist])
@ -265,8 +264,8 @@ export const useMatchPage = () => {
isPlayersStatsFetching, isPlayersStatsFetching,
isPlayFilterEpisodes: isStatsPlayFilterEpisodes, isPlayFilterEpisodes: isStatsPlayFilterEpisodes,
isTeamsStatsFetching, isTeamsStatsFetching,
plaingOrder: statsPlaingOrder,
playEpisodes: playStatsEpisodes, playEpisodes: playStatsEpisodes,
playingOrder: statsPlaingOrder,
playNextEpisode: playStatsNextEpisode, playNextEpisode: playStatsNextEpisode,
reduceTable, reduceTable,
selectedStatsTable, selectedStatsTable,
@ -357,16 +356,19 @@ export const useMatchPage = () => {
} = useTabEvents({ events: filteredEvents, profile }) } = useTabEvents({ events: filteredEvents, profile })
const playNextEpisode = (order?: number) => { const playNextEpisode = (order?: number) => {
const isLastEpisode = plaingOrder === episodesToPlay.length const isLastEpisode = playingOrder === episodesToPlay.length
const currentOrder = order === 0 ? order : plaingOrder const currentOrder = order === 0 ? order : playingOrder
if (isLastEpisode) { if (isLastEpisode) {
setIsPlayingFiltersEpisodes(false) setIsPlayingFiltersEpisodes(false)
setPlaingOrder(0) setPlaingOrder(0)
return return
} }
handlePlaylistClick(episodesToPlay[currentOrder]) handlePlaylistClick({
playlist: episodesToPlay[currentOrder],
tab: Tabs.EVENTS,
})
setPlaingOrder(currentOrder + 1) setPlaingOrder(currentOrder + 1)
} }
const playEpisodes = () => { const playEpisodes = () => {
@ -383,9 +385,12 @@ export const useMatchPage = () => {
if (matchProfile?.live) { if (matchProfile?.live) {
handlePlaylistClick({ handlePlaylistClick({
episodes: episodesToPlay.map((el) => el.episodes[0]), playlist: {
id: 1, episodes: episodesToPlay.map((el) => el.episodes[0]),
type: episodesToPlay[0].type, id: 1,
type: episodesToPlay[0].type,
},
tab: Tabs.EVENTS,
}) })
} else { } else {
playNextEpisode(0) playNextEpisode(0)
@ -402,13 +407,13 @@ export const useMatchPage = () => {
allPlayersToggle, allPlayersToggle,
applyFilters, applyFilters,
beforeCloseTourCallback, beforeCloseTourCallback,
circleAnimation: isStatsTab ? statsCircleAnimation : circleAnimation, circleAnimation: isStatsPlaylist ? statsCircleAnimation : circleAnimation,
closePopup, closePopup,
countOfFilters, countOfFilters,
disablePlayingEpisodes, disablePlayingEpisodes,
episodeInfo, episodeInfo,
events, events,
filteredEvents: isStatsTab ? statsFilteredEvents : filteredEvents, filteredEvents: isStatsPlaylist ? statsFilteredEvents : filteredEvents,
getFirstClickableParam, getFirstClickableParam,
getParams, getParams,
handlePlaylistClick, handlePlaylistClick,
@ -421,7 +426,7 @@ export const useMatchPage = () => {
isFirstTeamPlayersChecked, isFirstTeamPlayersChecked,
isLiveMatch, isLiveMatch,
isOpenFiltersPopup, isOpenFiltersPopup,
isPlayFilterEpisodes: isStatsTab ? isStatsPlayFilterEpisodes : isPlayFilterEpisodes, isPlayFilterEpisodes: isStatsPlaylist ? isStatsPlayFilterEpisodes : isPlayFilterEpisodes,
isPlayersStatsFetching, isPlayersStatsFetching,
isPlayingEpisode, isPlayingEpisode,
isSecondTeamPlayersChecked, isSecondTeamPlayersChecked,
@ -430,13 +435,13 @@ export const useMatchPage = () => {
likeImage, likeImage,
likeToggle, likeToggle,
matchPlaylists, matchPlaylists,
plaingOrder: isStatsTab ? statsPlaingOrder : plaingOrder,
playEpisodes, playEpisodes,
playNextEpisode: isStatsTab ? playStatsNextEpisode : playNextEpisode, playNextEpisode: isStatsPlaylist ? playStatsNextEpisode : playNextEpisode,
playStatsEpisodes, playStatsEpisodes,
playersData, playersData,
playersStats, playersStats,
playingData, playingData,
playingOrder: isStatsPlaylist ? statsPlaingOrder : playingOrder,
playingProgress, playingProgress,
profile, profile,
profileCardShown, profileCardShown,
@ -445,13 +450,13 @@ export const useMatchPage = () => {
selectedPlaylist, selectedPlaylist,
selectedStatsTable, selectedStatsTable,
selectedTab, selectedTab,
setCircleAnimation: isStatsTab ? setStatsCircleAnimation : setCircleAnimation, setCircleAnimation: isStatsPlaylist ? setStatsCircleAnimation : setCircleAnimation,
setEpisodeInfo, setEpisodeInfo,
setFullMatchPlaylistDuration, setFullMatchPlaylistDuration,
setIsPlayingFiltersEpisodes: isStatsTab setIsPlayingFiltersEpisodes: isStatsPlaylist
? setStatsIsPlayinFiltersEpisodes ? setStatsIsPlayinFiltersEpisodes
: setIsPlayersStatsFetching, : setIsPlayersStatsFetching,
setPlaingOrder: isStatsTab ? setStatsPlaingOrder : setPlaingOrder, setPlaingOrder: isStatsPlaylist ? setStatsPlaingOrder : setPlaingOrder,
setPlayingData, setPlayingData,
setPlayingProgress, setPlayingProgress,
setReversed, setReversed,
@ -459,9 +464,10 @@ export const useMatchPage = () => {
setSelectedTab, setSelectedTab,
setStatsType, setStatsType,
setUnreversed, setUnreversed,
setWatchAllEpisodesTimer: isStatsTab ? setStatsWatchAllEpisodesTimer : setWatchAllEpisodesTimer, setWatchAllEpisodesTimer: isStatsPlaylist
? setStatsWatchAllEpisodesTimer
: setWatchAllEpisodesTimer,
showProfileCard, showProfileCard,
statsPlaingOrder,
statsType, statsType,
teamsStats, teamsStats,
toggleActiveEvents, toggleActiveEvents,
@ -472,6 +478,6 @@ export const useMatchPage = () => {
tournamentData, tournamentData,
uniqEvents, uniqEvents,
user, user,
watchAllEpisodesTimer: isStatsTab ? statsWatchAllEpisodesTimer : watchAllEpisodesTimer, watchAllEpisodesTimer: isStatsPlaylist ? statsWatchAllEpisodesTimer : watchAllEpisodesTimer,
} }
} }

@ -11,7 +11,6 @@ import { usePageParams, useInterval } from 'hooks'
import { FULL_GAME_KEY } from 'features/MatchPage/helpers/buildPlaylists' import { FULL_GAME_KEY } from 'features/MatchPage/helpers/buildPlaylists'
import { useDuration } from 'features/MultiSourcePlayer/hooks/useDuration' import { useDuration } from 'features/MultiSourcePlayer/hooks/useDuration'
import { useMatchPopupStore } from 'features/MatchPopup' import { useMatchPopupStore } from 'features/MatchPopup'
import { Tabs } from 'features/MatchSidePlaylists/config'
import { useMatchPlaylists } from './useMatchPlaylists' import { useMatchPlaylists } from './useMatchPlaylists'
import { useEvents } from './useEvents' import { useEvents } from './useEvents'
@ -21,10 +20,9 @@ const MATCH_DATA_POLL_INTERVAL = 5000
type UseMatchDataArgs = { type UseMatchDataArgs = {
matchProfile: MatchInfo, matchProfile: MatchInfo,
selectedTab: Tabs,
} }
export const useMatchData = ({ matchProfile: profile, selectedTab }: UseMatchDataArgs) => { export const useMatchData = ({ matchProfile: profile }: UseMatchDataArgs) => {
const { profileId: matchId, sportType } = usePageParams() const { profileId: matchId, sportType } = usePageParams()
const { chapters } = useMatchPopupStore() const { chapters } = useMatchPopupStore()
const [matchDuration, setMatchDuration] = useState(0) const [matchDuration, setMatchDuration] = useState(0)
@ -35,7 +33,7 @@ export const useMatchData = ({ matchProfile: profile, selectedTab }: UseMatchDat
selectedPlaylist, selectedPlaylist,
setFullMatchPlaylistDuration, setFullMatchPlaylistDuration,
setSelectedPlaylist, setSelectedPlaylist,
} = useMatchPlaylists({ matchProfile: profile, selectedTab }) } = useMatchPlaylists({ matchProfile: profile })
const { events, fetchMatchEvents } = useEvents() const { events, fetchMatchEvents } = useEvents()

@ -13,7 +13,6 @@ import { usePageParams } from 'hooks/usePageParams'
import type { Playlists } from 'features/MatchPage/types' import type { Playlists } from 'features/MatchPage/types'
import { buildPlaylists, FULL_GAME_KEY } from 'features/MatchPage/helpers/buildPlaylists' import { buildPlaylists, FULL_GAME_KEY } from 'features/MatchPage/helpers/buildPlaylists'
import { Tabs } from 'features/MatchSidePlaylists/config'
import { usePlaylistLexics } from './usePlaylistLexics' import { usePlaylistLexics } from './usePlaylistLexics'
import { initialPlaylist, useSelectedPlaylist } from './useSelectedPlaylist' import { initialPlaylist, useSelectedPlaylist } from './useSelectedPlaylist'
@ -26,14 +25,12 @@ type ArgsFetchMatchPlaylists = {
type UseMatchPlaylistsArgs = { type UseMatchPlaylistsArgs = {
matchProfile: MatchInfo, matchProfile: MatchInfo,
selectedTab: Tabs,
} }
const initialPlaylists = buildPlaylists(null) const initialPlaylists = buildPlaylists(null)
export const useMatchPlaylists = ({ export const useMatchPlaylists = ({
matchProfile: profile, matchProfile: profile,
selectedTab,
}: UseMatchPlaylistsArgs) => { }: UseMatchPlaylistsArgs) => {
const [matchPlaylists, setMatchPlaylists] = useState<Playlists>(initialPlaylists) const [matchPlaylists, setMatchPlaylists] = useState<Playlists>(initialPlaylists)
@ -43,7 +40,7 @@ export const useMatchPlaylists = ({
handlePlaylistClick, handlePlaylistClick,
selectedPlaylist, selectedPlaylist,
setSelectedPlaylist, setSelectedPlaylist,
} = useSelectedPlaylist({ selectedTab }) } = useSelectedPlaylist()
const setInitialSeletedPlaylist = useCallback((playlists: Playlists) => { const setInitialSeletedPlaylist = useCallback((playlists: Playlists) => {
setSelectedPlaylist((playlist) => { setSelectedPlaylist((playlist) => {

@ -21,14 +21,17 @@ export const initialPlaylist = {
episodes: [], episodes: [],
id: FULL_GAME_KEY, id: FULL_GAME_KEY,
lexic: indexLexics.full_game, lexic: indexLexics.full_game,
tab: Tabs.WATCH,
type: 0, type: 0,
} }
type UseSelectedPlaylistArgs = { type HandlePlaylistClickArgs = {
selectedTab: Tabs, e?: MouseEvent,
playlist: PlaylistOption,
tab: Tabs,
} }
export const useSelectedPlaylist = ({ selectedTab }: UseSelectedPlaylistArgs) => { export const useSelectedPlaylist = () => {
const { profileId: matchId, sportType } = usePageParams() const { profileId: matchId, sportType } = usePageParams()
const [selectedPlaylist, setSelectedPlaylist] = useState<PlaylistOption>(initialPlaylist) const [selectedPlaylist, setSelectedPlaylist] = useState<PlaylistOption>(initialPlaylist)
@ -41,7 +44,11 @@ export const useSelectedPlaylist = ({ selectedTab }: UseSelectedPlaylistArgs) =>
}) })
), [matchId, sportType]) ), [matchId, sportType])
const handlePlaylistClick = useCallback((playlist: PlaylistOption, e?: MouseEvent) => { const handlePlaylistClick = useCallback(({
e,
playlist,
tab,
}: HandlePlaylistClickArgs) => {
e?.stopPropagation() e?.stopPropagation()
if (playlist === selectedPlaylist) return if (playlist === selectedPlaylist) return
@ -50,16 +57,16 @@ export const useSelectedPlaylist = ({ selectedTab }: UseSelectedPlaylistArgs) =>
setSelectedPlaylist({ setSelectedPlaylist({
...playlist, ...playlist,
episodes, episodes,
tab,
}) })
}) })
} else { } else {
setSelectedPlaylist({ setSelectedPlaylist({
...playlist, ...playlist,
// @ts-expect-error tab,
tab: selectedTab,
}) })
} }
}, [fetchPlayerEpisodes, selectedPlaylist, selectedTab]) }, [fetchPlayerEpisodes, selectedPlaylist])
return { return {
handlePlaylistClick, handlePlaylistClick,

@ -14,12 +14,19 @@ import type { EventPlaylistOption, PlaylistOption } from 'features/MatchPage/typ
import type { TCircleAnimation } from 'features/CircleAnimationBar' import type { TCircleAnimation } from 'features/CircleAnimationBar'
import { initialCircleAnimation } from 'features/CircleAnimationBar' import { initialCircleAnimation } from 'features/CircleAnimationBar'
import { PlaylistTypes } from 'features/MatchPage/types' import { PlaylistTypes } from 'features/MatchPage/types'
import { StatsType, Tabs } from 'features/MatchSidePlaylists/components/TabStats/config' import { StatsType, Tabs as StatsTabs } from 'features/MatchSidePlaylists/components/TabStats/config'
import { Tabs } from 'features/MatchSidePlaylists/config'
import { useToggle } from 'hooks' import { useToggle } from 'hooks'
type HandlePlaylistClickArgs = {
playlist: PlaylistOption,
tab: Tabs,
}
type UseStatsTabArgs = { type UseStatsTabArgs = {
disablePlayingEpisodes: () => void, disablePlayingEpisodes: () => void,
handlePlaylistClick: (playlist: PlaylistOption) => void, handlePlaylistClick: (args: HandlePlaylistClickArgs) => void,
matchProfile: MatchInfo, matchProfile: MatchInfo,
selectedPlaylist?: PlaylistOption, selectedPlaylist?: PlaylistOption,
} }
@ -52,11 +59,11 @@ export const useStatsTab = ({
const [isTeamsStatsFetching, setIsTeamsStatsFetching] = useState(false) const [isTeamsStatsFetching, setIsTeamsStatsFetching] = useState(false)
const [stateEpisodesToPlay, setEpisodesToPlay] = useState<Array<EventPlaylistOption>>([]) const [stateEpisodesToPlay, setEpisodesToPlay] = useState<Array<EventPlaylistOption>>([])
const [filteredEvents, setFilteredEvents] = useState<Events>([]) const [filteredEvents, setFilteredEvents] = useState<Events>([])
const [plaingOrder, setPlaingOrder] = useState(0) const [playingOrder, setPlaingOrder] = useState(0)
const [isPlayFilterEpisodes, setIsPlayingFiltersEpisodes] = useState(false) const [isPlayFilterEpisodes, setIsPlayingFiltersEpisodes] = useState(false)
const [watchAllEpisodesTimer, setWatchAllEpisodesTimer] = useState(false) const [watchAllEpisodesTimer, setWatchAllEpisodesTimer] = useState(false)
const [circleAnimation, setCircleAnimation] = useState<TCircleAnimation>(initialCircleAnimation) const [circleAnimation, setCircleAnimation] = useState<TCircleAnimation>(initialCircleAnimation)
const [selectedStatsTable, setSelectedStatsTable] = useState<Tabs>(Tabs.TEAMS) const [selectedStatsTable, setSelectedStatsTable] = useState<StatsTabs>(StatsTabs.TEAMS)
const { const {
close: reduceTable, close: reduceTable,
@ -92,7 +99,7 @@ export const useStatsTab = ({
episodesToPlay = stateEpisodesToPlay, episodesToPlay = stateEpisodesToPlay,
order, order,
}: PlayNextEpisodeArgs = {}) => { }: PlayNextEpisodeArgs = {}) => {
const currentOrder = order === 0 ? order : plaingOrder const currentOrder = order === 0 ? order : playingOrder
const isLastEpisode = currentOrder === episodesToPlay.length const isLastEpisode = currentOrder === episodesToPlay.length
if (isLastEpisode) { if (isLastEpisode) {
@ -103,7 +110,10 @@ export const useStatsTab = ({
} }
if (currentOrder !== 0) { if (currentOrder !== 0) {
handlePlaylistClick(episodesToPlay[currentOrder]) handlePlaylistClick({
playlist: episodesToPlay[currentOrder],
tab: Tabs.STATS,
})
} }
setPlaingOrder(currentOrder + 1) setPlaingOrder(currentOrder + 1)
@ -120,7 +130,10 @@ export const useStatsTab = ({
setWatchAllEpisodesTimer(true) setWatchAllEpisodesTimer(true)
setIsPlayingFiltersEpisodes(true) setIsPlayingFiltersEpisodes(true)
handlePlaylistClick(episodesToPlay[0]) handlePlaylistClick({
playlist: episodesToPlay[0],
tab: Tabs.STATS,
})
playNextEpisode({ episodesToPlay, order: 0 }) playNextEpisode({ episodesToPlay, order: 0 })
} }
@ -137,9 +150,9 @@ export const useStatsTab = ({
isPlayFilterEpisodes, isPlayFilterEpisodes,
isPlayersStatsFetching, isPlayersStatsFetching,
isTeamsStatsFetching, isTeamsStatsFetching,
plaingOrder,
playEpisodes, playEpisodes,
playNextEpisode, playNextEpisode,
playingOrder,
reduceTable, reduceTable,
selectedStatsTable, selectedStatsTable,
setCircleAnimation, setCircleAnimation,

@ -17,6 +17,7 @@ export type MatchPlaylistOption = {
episodes: Episodes, episodes: Episodes,
id: MatchPlaylistIds, id: MatchPlaylistIds,
lexic: number | string, lexic: number | string,
tab?: Tabs,
type: PlaylistTypes.MATCH, type: PlaylistTypes.MATCH,
} }
@ -29,6 +30,7 @@ export type PlayerPlaylistOption = {
name_rus: string, name_rus: string,
num: string, num: string,
start?: boolean, start?: boolean,
tab?: Tabs,
type: PlaylistTypes.PLAYER, type: PlaylistTypes.PLAYER,
} }
@ -37,6 +39,7 @@ export type InterviewPlaylistOption = {
id: number, id: number,
name_eng: string, name_eng: string,
name_rus: string, name_rus: string,
tab?: Tabs,
type: PlaylistTypes.INTERVIEW, type: PlaylistTypes.INTERVIEW,
} }

@ -1,5 +1,7 @@
import { useEffect } from 'react'
import map from 'lodash/map' import map from 'lodash/map'
// import find from 'lodash/find' import find from 'lodash/find'
import type { Events, MatchInfo } from 'requests' import type { Events, MatchInfo } from 'requests'
@ -12,9 +14,9 @@ import type {
} from 'features/MatchPage/types' } from 'features/MatchPage/types'
import { PlaylistTypes } from 'features/MatchPage/types' import { PlaylistTypes } from 'features/MatchPage/types'
// import { useMatchPageStore } from 'features/MatchPage/store' import { useMatchPageStore } from 'features/MatchPage/store'
// import { useLexicsStore } from 'features/LexicsStore' import { useLexicsStore } from 'features/LexicsStore'
// import { Tabs } from 'features/MatchSidePlaylists/config' import { Tabs } from 'features/MatchSidePlaylists/config'
import { isEqual } from '../../helpers' import { isEqual } from '../../helpers'
import { EventButton } from '../EventButton' import { EventButton } from '../EventButton'
@ -41,68 +43,100 @@ export const EventsList = ({
profile, profile,
selectedPlaylist, selectedPlaylist,
setWatchAllEpisodesTimer, setWatchAllEpisodesTimer,
}: Props) => ( }: Props) => {
<List> const {
{map(events, (event) => { filteredEvents,
if (!event.t && !event.pl) { isPlayingEpisode,
return ( selectedTab,
<TextEvent key={event.n}> setEpisodeInfo,
<BlockTitle> } = useMatchPageStore()
<T9n t={event.l} /> const { suffix, translate } = useLexicsStore()
</BlockTitle>
</TextEvent> useEffect(() => {
) if (selectedPlaylist?.tab === Tabs.EVENTS && isPlayingEpisode) {
const {
e,
h,
s,
} = selectedPlaylist.episodes[0]
const event = find(events, {
e,
h,
s,
})
if (event) {
const playerName = event.pl?.[`name_${suffix}`]
const teamName = event.t === profile?.team1.id
? profile?.team1[`name_${suffix}`]
: profile?.team2[`name_${suffix}`]
setEpisodeInfo({
episodesCount: filteredEvents.length,
paramName: translate(event.l),
playerOrTeamName: playerName || teamName || '',
})
} }
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [isPlayingEpisode, selectedPlaylist, suffix])
const repeatedEpisodes = event.rep || [] return (
const eventPlaylist = { <List>
episodes: [{ {map(events, (event) => {
e: event.e, if (!event.t && !event.pl) {
h: event.h, return (
s: event.s, <TextEvent key={event.n}>
}, <BlockTitle>
...repeatedEpisodes, <T9n t={event.l} />
], </BlockTitle>
id: event.n, </TextEvent>
type: PlaylistTypes.EVENT, )
} as EventPlaylistOption
const isHomeTeam = event.t === profile?.team1.id
const team = isHomeTeam
? profile?.team1
: profile?.team2
const eventWithoutClick = isLffClient && profile?.live
const eventClick = () => {
setWatchAllEpisodesTimer(false)
!eventWithoutClick && onSelect(eventPlaylist)
if (disablePlayingEpisodes) {
disablePlayingEpisodes()
} }
// const playerName = event.pl?.[`name_${suffix}`] const repeatedEpisodes = event.rep || []
// const teamName = event.t === profile?.team1.id const eventPlaylist = {
// ? profile?.team1[`name_${suffix}`] episodes: [{
// : profile?.team2[`name_${suffix}`] e: event.e,
h: event.h,
s: event.s,
},
...repeatedEpisodes,
],
id: event.n,
type: PlaylistTypes.EVENT,
} as EventPlaylistOption
// setEpisodeInfo({ const isHomeTeam = event.t === profile?.team1.id
// paramName: translate(event.l), const team = isHomeTeam
// paramValue: filteredEvents.length, ? profile?.team1
// playerOrTeamName: playerName || teamName || '', : profile?.team2
// }) const eventWithoutClick = isLffClient && profile?.live
}
const eventClick = () => {
setWatchAllEpisodesTimer(false)
!eventWithoutClick && onSelect(eventPlaylist)
if (disablePlayingEpisodes) {
disablePlayingEpisodes()
}
}
const active = isEqual(eventPlaylist, selectedPlaylist)
&& selectedPlaylist?.tab === selectedTab
return ( return (
<Event key={event.n}> <Event key={event.n}>
<EventButton <EventButton
active={isEqual(eventPlaylist, selectedPlaylist)} active={active}
event={event} event={event}
isHomeTeam={isHomeTeam} isHomeTeam={isHomeTeam}
onClick={eventClick} onClick={eventClick}
team={team} team={team}
/> />
</Event> </Event>
) )
})} })}
</List> </List>
) )
}

@ -6,12 +6,18 @@ import styled, { css } from 'styled-components/macro'
import isEmpty from 'lodash/isEmpty' import isEmpty from 'lodash/isEmpty'
import map from 'lodash/map' import map from 'lodash/map'
import { isMobileDevice } from 'config/userAgent' import { isMobileDevice } from 'config'
import type { MatchPlaylistOptions, PlaylistOption } from 'features/MatchPage/types' import type {
MatchPlaylistOption,
MatchPlaylistOptions,
PlaylistOption,
} from 'features/MatchPage/types'
import { FULL_GAME_KEY } from 'features/MatchPage/helpers/buildPlaylists' import { FULL_GAME_KEY } from 'features/MatchPage/helpers/buildPlaylists'
import { isEqual } from 'features/MatchSidePlaylists/helpers' import { isEqual } from 'features/MatchSidePlaylists/helpers'
import { T9n } from 'features/T9n' import { T9n } from 'features/T9n'
import { useMatchPageStore } from 'features/MatchPage/store'
import { useLexicsStore } from 'features/LexicsStore'
import { PlayButton } from '../PlayButton' import { PlayButton } from '../PlayButton'
@ -54,26 +60,41 @@ export const MatchPlaylists = forwardRef(
selectedMathPlaylist, selectedMathPlaylist,
}: Props, }: Props,
ref: ForwardedRef<HTMLUListElement>, ref: ForwardedRef<HTMLUListElement>,
) => ( ) => {
<List ref={ref}> const { setEpisodeInfo } = useMatchPageStore()
{ const { translate } = useLexicsStore()
map(playlists, (playlist) => (
<Item const handleButtonClick = (playlist: MatchPlaylistOption) => {
key={playlist.id} onSelect?.(playlist)
id={`match_watch_${playlist.id}${live ? '_live' : ''}`}
> if (playlist.id === FULL_GAME_KEY) return
<PlayButton
duration={playlist.duration} setEpisodeInfo({
active={isEqual(playlist, selectedMathPlaylist)} paramName: translate(playlist.lexic),
live={live} })
disabled={playlist.id !== FULL_GAME_KEY && isEmpty(playlist.episodes)} }
onClick={() => onSelect?.(playlist)}
return (
<List ref={ref}>
{
map(playlists, (playlist) => (
<Item
key={playlist.id}
id={`match_watch_${playlist.id}${live ? '_live' : ''}`}
> >
<T9n t={playlist.lexic} /> <PlayButton
</PlayButton> duration={playlist.duration}
</Item> active={isEqual(playlist, selectedMathPlaylist)}
)) live={live}
} disabled={playlist.id !== FULL_GAME_KEY && isEmpty(playlist.episodes)}
</List> onClick={() => handleButtonClick(playlist)}
), >
<T9n t={playlist.lexic} />
</PlayButton>
</Item>
))
}
</List>
)
},
) )

@ -15,6 +15,8 @@ import type {
} from 'features/MatchPage/types' } from 'features/MatchPage/types'
import { Name } from 'features/Name' import { Name } from 'features/Name'
import { useMatchPageStore } from 'features/MatchPage/store'
import { useLexicsStore } from 'features/LexicsStore'
import { isEqual } from '../../helpers' import { isEqual } from '../../helpers'
@ -52,6 +54,15 @@ export const PlayersPlaylists = ({
}: Props) => { }: Props) => {
const { sportType } = usePageParams() const { sportType } = usePageParams()
const [selectedTeam, setSelectedTeam] = useState(Teams.TEAM1) const [selectedTeam, setSelectedTeam] = useState(Teams.TEAM1)
const { setEpisodeInfo } = useMatchPageStore()
const { suffix } = useLexicsStore()
const handleButtonClick = (player: PlayerPlaylistOption) => {
onSelect(player)
setEpisodeInfo({
playerOrTeamName: player[`name_${suffix}`],
})
}
if (!profile) return null if (!profile) return null
@ -80,7 +91,7 @@ export const PlayersPlaylists = ({
<PlayButton <PlayButton
active={isEqual(player, selectedMathPlaylist)} active={isEqual(player, selectedMathPlaylist)}
duration={player.dur} duration={player.dur}
onClick={() => onSelect(player)} onClick={() => handleButtonClick(player)}
leftContent={( leftContent={(
<PlayerAvatar <PlayerAvatar
id={player.id} id={player.id}

@ -13,7 +13,7 @@ export const usePlayersTable = ({ teamId }: PlayersTableProps) => {
paramId: null, paramId: null,
}) })
const { plaingOrder, setCircleAnimation } = useMatchPageStore() const { playingOrder, setCircleAnimation } = useMatchPageStore()
const { const {
getPlayerName, getPlayerName,
@ -47,9 +47,9 @@ export const usePlayersTable = ({ teamId }: PlayersTableProps) => {
useEffect(() => { useEffect(() => {
setCircleAnimation((state) => ({ setCircleAnimation((state) => ({
...state, ...state,
plaingOrder, playingOrder,
})) }))
}, [setCircleAnimation, plaingOrder]) }, [setCircleAnimation, playingOrder])
return { return {
containerRef, containerRef,

@ -197,8 +197,8 @@ export const useTable = ({
playStatsEpisodes(events) playStatsEpisodes(events)
setEpisodeInfo({ setEpisodeInfo({
episodesCount: param.val!,
paramName: translate(param.lexic), paramName: translate(param.lexic),
paramValue: param.val!,
playerOrTeamName: getPlayerName(player), playerOrTeamName: getPlayerName(player),
}) })
// eslint-disable-next-line no-empty // eslint-disable-next-line no-empty

@ -47,8 +47,8 @@ export const TabEvents = ({
isLiveMatch, isLiveMatch,
likeImage, likeImage,
likeToggle, likeToggle,
plaingOrder,
playEpisodes, playEpisodes,
playingOrder,
reversedGroupEvents, reversedGroupEvents,
setCircleAnimation, setCircleAnimation,
setReversed, setReversed,
@ -61,9 +61,9 @@ export const TabEvents = ({
useEffect(() => { useEffect(() => {
setCircleAnimation((state) => ({ setCircleAnimation((state) => ({
...state, ...state,
plaingOrder, playingOrder,
})) }))
}, [setCircleAnimation, plaingOrder]) }, [setCircleAnimation, playingOrder])
if (!profile) return null if (!profile) return null

@ -102,8 +102,8 @@ export const Cell = ({
playStatsEpisodes(events) playStatsEpisodes(events)
setEpisodeInfo({ setEpisodeInfo({
episodesCount: param.val!,
paramName, paramName,
paramValue: param.val!,
playerOrTeamName: teamId === profile?.team1.id playerOrTeamName: teamId === profile?.team1.id
? profile.team1[`name_${suffix}`] ? profile.team1[`name_${suffix}`]
: profile?.team2[`name_${suffix}`] || '', : profile?.team2[`name_${suffix}`] || '',

@ -7,7 +7,7 @@ import { useMatchPageStore } from 'features/MatchPage/store'
export const useTeamsStatsTable = () => { export const useTeamsStatsTable = () => {
const { const {
getFirstClickableParam, getFirstClickableParam,
plaingOrder, playingOrder,
profile, profile,
setCircleAnimation, setCircleAnimation,
teamsStats, teamsStats,
@ -22,9 +22,9 @@ export const useTeamsStatsTable = () => {
useEffect(() => { useEffect(() => {
setCircleAnimation((state) => ({ setCircleAnimation((state) => ({
...state, ...state,
plaingOrder, playingOrder,
})) }))
}, [setCircleAnimation, plaingOrder]) }, [setCircleAnimation, playingOrder])
return { return {
firstClickableParam: getFirstClickableParam(teamsStats), firstClickableParam: getFirstClickableParam(teamsStats),

@ -91,7 +91,7 @@ export const useMultiSourcePlayer = ({
isPlayFilterEpisodes, isPlayFilterEpisodes,
isPlayingEpisode, isPlayingEpisode,
matchPlaylists, matchPlaylists,
plaingOrder, playingOrder,
playingProgress, playingProgress,
playNextEpisode, playNextEpisode,
selectedPlaylist, selectedPlaylist,
@ -245,6 +245,7 @@ export const useMultiSourcePlayer = ({
const backToPausedTime = useCallback(() => { const backToPausedTime = useCallback(() => {
if (selectedPlaylist?.id !== FULL_GAME_KEY) { if (selectedPlaylist?.id !== FULL_GAME_KEY) {
// @ts-expect-error
handlePlaylistClick(matchPlaylists.match[0]) handlePlaylistClick(matchPlaylists.match[0])
} }
@ -273,9 +274,24 @@ export const useMultiSourcePlayer = ({
setPlayerState({ playing: false }) setPlayerState({ playing: false })
} }
const restartVideo = () => {
// @ts-expect-error
handlePlaylistClick(matchPlaylists.match[0])
}
const stopPlayingEpisodes = () => { const stopPlayingEpisodes = () => {
disablePlayingEpisodes() disablePlayingEpisodes()
backToPausedTime() restartVideo()
setTimeout(() => {
setPlayerState((state) => ({
activeChapterIndex: pausedData.activeChapterIndex,
playedProgress: pausedData.playedProgress,
seek: {
...state.seek,
[pausedData.activePlayer]: pausedData.playedProgress / 1000,
},
}))
}, 1000)
} }
useEffect(() => { useEffect(() => {
@ -414,18 +430,18 @@ export const useMultiSourcePlayer = ({
elem[1] + 1, elem[1] + 1,
)) ))
if (index !== -1 && ordersObj.current[plaingOrder] !== index) { if (index !== -1 && ordersObj.current[playingOrder] !== index) {
ordersObj.current = { ordersObj.current = {
...ordersObj.current, ...ordersObj.current,
[plaingOrder]: index, [playingOrder]: index,
} }
} }
return plaingOrder + sum(values(ordersObj.current)) return playingOrder + sum(values(ordersObj.current))
} }
setCurrentPlayingOrder(getCurrentPlayingOrder()) setCurrentPlayingOrder(getCurrentPlayingOrder())
}, [getActiveChapter, isPlayingEpisode, plaingOrder, playingProgress]) }, [getActiveChapter, isPlayingEpisode, playingOrder, playingProgress])
useEffect(() => { useEffect(() => {
if (!isPlayingEpisode) { if (!isPlayingEpisode) {

@ -117,16 +117,18 @@ export const MultiSourcePlayer = (props: Props) => {
{isMobileDevice {isMobileDevice
? ( ? (
<Fragment> <Fragment>
{episodeInfo.playerOrTeamName} <br /> {episodeInfo.paramName} {episodeInfo.playerOrTeamName}
{episodeInfo.playerOrTeamName && <br />}
{episodeInfo.paramName}
</Fragment> </Fragment>
) )
: `${episodeInfo.playerOrTeamName}${episodeInfo.playerOrTeamName ? ' - ' : ''}${episodeInfo.paramName}`} : `${episodeInfo.playerOrTeamName || ''}${episodeInfo.paramName && episodeInfo.playerOrTeamName ? ' - ' : ''}${episodeInfo.paramName || ''}`}
</EpisodeInfoName> </EpisodeInfoName>
{currentPlayingOrder > 0 && ( {currentPlayingOrder > 0 && (
<EpisodeInfoOrder> <EpisodeInfoOrder>
{currentPlayingOrder} {currentPlayingOrder}
<EpisodeInfoDivider>/</EpisodeInfoDivider> <EpisodeInfoDivider>/</EpisodeInfoDivider>
{episodeInfo.paramValue} {episodeInfo.episodesCount}
</EpisodeInfoOrder> </EpisodeInfoOrder>
)} )}
<CloseButton onClick={stopPlayingEpisodes} /> <CloseButton onClick={stopPlayingEpisodes} />

@ -109,12 +109,12 @@ export const useVideoPlayer = ({
isPlayFilterEpisodes, isPlayFilterEpisodes,
isPlayingEpisode, isPlayingEpisode,
matchPlaylists, matchPlaylists,
playingOrder,
playingProgress, playingProgress,
playNextEpisode, playNextEpisode,
selectedPlaylist, selectedPlaylist,
setCircleAnimation, setCircleAnimation,
setPlayingProgress, setPlayingProgress,
statsPlaingOrder,
} = useMatchPageStore() } = useMatchPageStore()
const { isOpen } = useTour() const { isOpen } = useTour()
@ -142,7 +142,7 @@ export const useVideoPlayer = ({
// временно закоментил, если ничего не сломается, удалю // временно закоментил, если ничего не сломается, удалю
// const [isLivePlaying, setIsLivePlaying] = useState(false) // const [isLivePlaying, setIsLivePlaying] = useState(false)
const [isPausedTime, setIsPausedTime] = useState(false) const [isPausedTime, setIsPausedTime] = useState(false)
const [pausedProgress, setPausedProgress] = useState(0) const pausedProgress = useRef(0)
const getActiveChapter = useCallback( const getActiveChapter = useCallback(
(index: number = activeChapterIndex) => chapters[index], (index: number = activeChapterIndex) => chapters[index],
@ -173,18 +173,18 @@ export const useVideoPlayer = ({
elem[1] + 1, elem[1] + 1,
)) ))
if (index !== -1 && ordersObj.current[statsPlaingOrder] !== index) { if (index !== -1 && ordersObj.current[playingOrder] !== index) {
ordersObj.current = { ordersObj.current = {
...ordersObj.current, ...ordersObj.current,
[statsPlaingOrder]: index, [playingOrder]: index,
} }
} }
return statsPlaingOrder + sum(values(ordersObj.current)) return playingOrder + sum(values(ordersObj.current))
} }
setCurrentPlayingOrder(getCurrentPlayingOrder()) setCurrentPlayingOrder(getCurrentPlayingOrder())
}, [getActiveChapter, isPlayingEpisode, statsPlaingOrder, playingProgress]) }, [getActiveChapter, isPlayingEpisode, playingOrder, playingProgress])
useEffect(() => { useEffect(() => {
if (!isPlayingEpisode) { if (!isPlayingEpisode) {
@ -342,7 +342,8 @@ export const useVideoPlayer = ({
} }
const liveProgressMs = Math.max(duration - BUFFERING_TIME, 0) const liveProgressMs = Math.max(duration - BUFFERING_TIME, 0)
setPlayerState({ playedProgress: pausedProgress, seek: pausedProgress / 1000 })
setPlayerState({ playedProgress: pausedProgress.current, seek: pausedProgress.current / 1000 })
if (liveProgressMs > 0) setIsPausedTime(false) if (liveProgressMs > 0) setIsPausedTime(false)
// eslint-disable-next-line // eslint-disable-next-line
}, [ }, [
@ -355,12 +356,18 @@ export const useVideoPlayer = ({
const stopPlayingEpisodes = () => { const stopPlayingEpisodes = () => {
disablePlayingEpisodes() disablePlayingEpisodes()
backToPausedTime() restartVideo()
setTimeout(() => {
setPlayerState({
playedProgress: pausedProgress.current,
seek: pausedProgress.current / 1000,
})
}, 100)
} }
useEffect(() => { useEffect(() => {
if (chapters[0]?.isFullMatchChapter) { if (chapters[0]?.isFullMatchChapter) {
setPausedProgress(playedProgress + chapters[0].startOffsetMs) pausedProgress.current = playedProgress + chapters[0].startOffsetMs
} }
// eslint-disable-next-line // eslint-disable-next-line
}, [selectedPlaylist]) }, [selectedPlaylist])

@ -126,16 +126,18 @@ export const StreamPlayer = (props: Props) => {
{isMobileDevice {isMobileDevice
? ( ? (
<Fragment> <Fragment>
{episodeInfo.playerOrTeamName} <br /> {episodeInfo.paramName} {episodeInfo.playerOrTeamName}
{episodeInfo.playerOrTeamName && <br />}
{episodeInfo.paramName}
</Fragment> </Fragment>
) )
: `${episodeInfo.playerOrTeamName}${episodeInfo.playerOrTeamName ? ' - ' : ''}${episodeInfo.paramName}`} : `${episodeInfo.playerOrTeamName || ''}${episodeInfo.paramName && episodeInfo.playerOrTeamName ? ' - ' : ''}${episodeInfo.paramName || ''}`}
</EpisodeInfoName> </EpisodeInfoName>
{currentPlayingOrder > 0 && ( {currentPlayingOrder > 0 && (
<EpisodeInfoOrder> <EpisodeInfoOrder>
{currentPlayingOrder} {currentPlayingOrder}
<EpisodeInfoDivider /> <EpisodeInfoDivider />
{episodeInfo.paramValue} {episodeInfo.episodesCount}
</EpisodeInfoOrder> </EpisodeInfoOrder>
)} )}
<CloseButton onClick={stopPlayingEpisodes} /> <CloseButton onClick={stopPlayingEpisodes} />

@ -406,7 +406,7 @@ export const Next = styled(Prev)`
export const TeamsDetailsWrapper = styled.div` export const TeamsDetailsWrapper = styled.div`
position: absolute; position: absolute;
top: 20px; top: 40px;
left: 15px; left: 15px;
font-size: 16px; font-size: 16px;
color: #FFFFFF; color: #FFFFFF;
@ -434,8 +434,10 @@ export const EpisodeInfo = styled.div`
display: flex; display: flex;
align-items: center; align-items: center;
gap: max(0.755rem, 12px); gap: max(0.755rem, 12px);
padding: 2px;
font-weight: 600; font-weight: 600;
color: ${({ theme }) => theme.colors.white}; color: ${({ theme }) => theme.colors.white};
background-color: rgba(0, 0, 0, 0.3);
z-index: 1; z-index: 1;
` `

Loading…
Cancel
Save