feat(in-570): episodes playback changes #195

Merged
andrey.dekterev merged 1 commits from in-570 into develop 3 years ago
  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. 62
      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. 68
      src/features/MatchSidePlaylists/components/EventsList/index.tsx
  13. 31
      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({
playlist: {
episodes: episodesToPlay.map((el) => el.episodes[0]), episodes: episodesToPlay.map((el) => el.episodes[0]),
id: 1, id: 1,
type: episodesToPlay[0].type, 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,7 +43,46 @@ export const EventsList = ({
profile, profile,
selectedPlaylist, selectedPlaylist,
setWatchAllEpisodesTimer, setWatchAllEpisodesTimer,
}: Props) => ( }: Props) => {
const {
filteredEvents,
isPlayingEpisode,
selectedTab,
setEpisodeInfo,
} = useMatchPageStore()
const { suffix, translate } = useLexicsStore()
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])
return (
<List> <List>
{map(events, (event) => { {map(events, (event) => {
if (!event.t && !event.pl) { if (!event.t && !event.pl) {
@ -79,23 +120,15 @@ export const EventsList = ({
if (disablePlayingEpisodes) { if (disablePlayingEpisodes) {
disablePlayingEpisodes() disablePlayingEpisodes()
} }
// const playerName = event.pl?.[`name_${suffix}`]
// const teamName = event.t === profile?.team1.id
// ? profile?.team1[`name_${suffix}`]
// : profile?.team2[`name_${suffix}`]
// setEpisodeInfo({
// paramName: translate(event.l),
// paramValue: filteredEvents.length,
// playerOrTeamName: playerName || teamName || '',
// })
} }
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}
@ -106,3 +139,4 @@ export const EventsList = ({
})} })}
</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,7 +60,21 @@ export const MatchPlaylists = forwardRef(
selectedMathPlaylist, selectedMathPlaylist,
}: Props, }: Props,
ref: ForwardedRef<HTMLUListElement>, ref: ForwardedRef<HTMLUListElement>,
) => ( ) => {
const { setEpisodeInfo } = useMatchPageStore()
const { translate } = useLexicsStore()
const handleButtonClick = (playlist: MatchPlaylistOption) => {
onSelect?.(playlist)
if (playlist.id === FULL_GAME_KEY) return
setEpisodeInfo({
paramName: translate(playlist.lexic),
})
}
return (
<List ref={ref}> <List ref={ref}>
{ {
map(playlists, (playlist) => ( map(playlists, (playlist) => (
@ -67,7 +87,7 @@ export const MatchPlaylists = forwardRef(
active={isEqual(playlist, selectedMathPlaylist)} active={isEqual(playlist, selectedMathPlaylist)}
live={live} live={live}
disabled={playlist.id !== FULL_GAME_KEY && isEmpty(playlist.episodes)} disabled={playlist.id !== FULL_GAME_KEY && isEmpty(playlist.episodes)}
onClick={() => onSelect?.(playlist)} onClick={() => handleButtonClick(playlist)}
> >
<T9n t={playlist.lexic} /> <T9n t={playlist.lexic} />
</PlayButton> </PlayButton>
@ -75,5 +95,6 @@ export const MatchPlaylists = forwardRef(
)) ))
} }
</List> </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(() => {
andrey.dekterev marked this conversation as resolved

clearTimeout

clearTimeout

mp4 все равно будет удаляться, код был написан до того как обсуждали об его удалении

mp4 все равно будет удаляться, код был написан до того как обсуждали об его удалении
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(() => {
andrey.dekterev marked this conversation as resolved

clearTimeout

clearTimeout

это действие вызывается после клика пользователя, тут нет смысла делать clearTimeout, за 100 мс компонент не успеет размонтироваться

это действие вызывается после клика пользователя, тут нет смысла делать clearTimeout, за 100 мс компонент не успеет размонтироваться
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