|
|
|
|
@ -10,13 +10,15 @@ import isEmpty from 'lodash/isEmpty' |
|
|
|
|
|
|
|
|
|
import { FULL_GAME_KEY } from 'features/MatchPage/helpers/buildPlaylists' |
|
|
|
|
import { useAuthStore } from 'features/AuthStore' |
|
|
|
|
import { Tabs } from 'features/MatchSidePlaylists/config' |
|
|
|
|
import { initialCircleAnimation } from 'features/CircleAnimationBar' |
|
|
|
|
import type { TCircleAnimation } from 'features/CircleAnimationBar' |
|
|
|
|
|
|
|
|
|
import type { MatchInfo } from 'requests/getMatchInfo' |
|
|
|
|
import { getMatchInfo } from 'requests/getMatchInfo' |
|
|
|
|
import { getViewMatchDuration } from 'requests/getViewMatchDuration' |
|
|
|
|
|
|
|
|
|
import { usePageParams } from 'hooks/usePageParams' |
|
|
|
|
import { useToggle } from 'hooks/useToggle' |
|
|
|
|
import { usePageParams, useToggle } from 'hooks' |
|
|
|
|
|
|
|
|
|
import { parseDate } from 'helpers/parseDate' |
|
|
|
|
|
|
|
|
|
@ -24,6 +26,31 @@ import { useTournamentData } from './useTournamentData' |
|
|
|
|
import { useMatchData } from './useMatchData' |
|
|
|
|
import { useFiltersPopup } from './useFitersPopup' |
|
|
|
|
import { useTabEvents } from './useTabEvents' |
|
|
|
|
import { useTeamsStats } from './useTeamsStats' |
|
|
|
|
import { useStatsTab } from './useStatsTab' |
|
|
|
|
import { usePlayersStats } from './usePlayersStats' |
|
|
|
|
|
|
|
|
|
type PlayingData = { |
|
|
|
|
player: { |
|
|
|
|
id: number | null, |
|
|
|
|
paramId: number | null, |
|
|
|
|
}, |
|
|
|
|
team: { |
|
|
|
|
id: number | null, |
|
|
|
|
paramId: number | null, |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const initPlayingData: PlayingData = { |
|
|
|
|
player: { |
|
|
|
|
id: null, |
|
|
|
|
paramId: null, |
|
|
|
|
}, |
|
|
|
|
team: { |
|
|
|
|
id: null, |
|
|
|
|
paramId: null, |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const ACCESS_TIME = 60 |
|
|
|
|
|
|
|
|
|
@ -31,6 +58,15 @@ export const useMatchPage = () => { |
|
|
|
|
const [matchProfile, setMatchProfile] = useState<MatchInfo>(null) |
|
|
|
|
const [watchAllEpisodesTimer, setWatchAllEpisodesTimer] = useState(false) |
|
|
|
|
const [access, setAccess] = useState(true) |
|
|
|
|
const [playingProgress, setPlayingProgress] = useState(0) |
|
|
|
|
const [playingData, setPlayingData] = useState<PlayingData>(initPlayingData) |
|
|
|
|
const [plaingOrder, setPlaingOrder] = useState(0) |
|
|
|
|
const [isPlayFilterEpisodes, setIsPlayingFiltersEpisodes] = useState(false) |
|
|
|
|
const [selectedTab, setSelectedTab] = useState<Tabs>(Tabs.WATCH) |
|
|
|
|
const [circleAnimation, setCircleAnimation] = useState<TCircleAnimation>(initialCircleAnimation) |
|
|
|
|
|
|
|
|
|
const isStatsTab = selectedTab === Tabs.STATS |
|
|
|
|
|
|
|
|
|
const { profileId: matchId, sportType } = usePageParams() |
|
|
|
|
|
|
|
|
|
const { user, userInfo } = useAuthStore() |
|
|
|
|
@ -47,6 +83,7 @@ export const useMatchPage = () => { |
|
|
|
|
matchPlaylists, |
|
|
|
|
selectedPlaylist, |
|
|
|
|
setFullMatchPlaylistDuration, |
|
|
|
|
setSelectedPlaylist, |
|
|
|
|
} = useMatchData(matchProfile) |
|
|
|
|
|
|
|
|
|
const profile = matchProfile |
|
|
|
|
@ -63,9 +100,9 @@ export const useMatchPage = () => { |
|
|
|
|
filters, |
|
|
|
|
isAllActionsChecked, |
|
|
|
|
isEmptyFilters, |
|
|
|
|
isFirstTeamPlayersChecked, |
|
|
|
|
isOpen: isOpenFiltersPopup, |
|
|
|
|
resetEvents, |
|
|
|
|
resetPlayers, |
|
|
|
|
isSecondTeamPlayersChecked, |
|
|
|
|
toggle: togglePopup, |
|
|
|
|
toggleActiveEvents, |
|
|
|
|
toggleActivePlayers, |
|
|
|
|
@ -131,24 +168,56 @@ export const useMatchPage = () => { |
|
|
|
|
return () => clearInterval(getIntervalMatch) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
const disablePlayingEpisodes = () => { |
|
|
|
|
setIsPlayingFiltersEpisodes(false) |
|
|
|
|
setWatchAllEpisodesTimer(false) |
|
|
|
|
setCircleAnimation(initialCircleAnimation) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const { |
|
|
|
|
events, |
|
|
|
|
handlePlaylistClick, |
|
|
|
|
isEmptyPlayersStats, |
|
|
|
|
circleAnimation: statsCircleAnimation, |
|
|
|
|
filteredEvents: statsFilteredEvents, |
|
|
|
|
isPlayersStatsFetching, |
|
|
|
|
isPlayFilterEpisodes: isStatsPlayFilterEpisodes, |
|
|
|
|
isTeamsStatsFetching, |
|
|
|
|
matchPlaylists, |
|
|
|
|
plaingOrder: statsPlaingOrder, |
|
|
|
|
playEpisodes: playStatsEpisodes, |
|
|
|
|
playNextEpisode: playStatsNextEpisode, |
|
|
|
|
setCircleAnimation: setStatsCircleAnimation, |
|
|
|
|
setIsPlayersStatsFetching, |
|
|
|
|
setIsPlayingFiltersEpisodes: setStatsIsPlayinFiltersEpisodes, |
|
|
|
|
setIsTeamsStatsFetching, |
|
|
|
|
setPlaingOrder: setStatsPlaingOrder, |
|
|
|
|
setWatchAllEpisodesTimer: setStatsWatchAllEpisodesTimer, |
|
|
|
|
statsType, |
|
|
|
|
toggleStatsType, |
|
|
|
|
watchAllEpisodesTimer: statsWatchAllEpisodesTimer, |
|
|
|
|
} = useStatsTab({ |
|
|
|
|
disablePlayingEpisodes, |
|
|
|
|
handlePlaylistClick, |
|
|
|
|
selectedPlaylist, |
|
|
|
|
setSelectedPlaylist, |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
const { teamsStats } = useTeamsStats({ |
|
|
|
|
matchProfile, |
|
|
|
|
playingProgress, |
|
|
|
|
selectedPlaylist, |
|
|
|
|
setIsTeamsStatsFetching, |
|
|
|
|
statsType, |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
const { |
|
|
|
|
isEmptyPlayersStats, |
|
|
|
|
playersData, |
|
|
|
|
playersStats, |
|
|
|
|
} = usePlayersStats({ |
|
|
|
|
matchProfile, |
|
|
|
|
playingProgress, |
|
|
|
|
selectedPlaylist, |
|
|
|
|
setFullMatchPlaylistDuration, |
|
|
|
|
setPlayingProgress, |
|
|
|
|
setIsPlayersStatsFetching, |
|
|
|
|
statsType, |
|
|
|
|
teamsStats, |
|
|
|
|
toggleStatsType, |
|
|
|
|
} = useMatchData(matchProfile) |
|
|
|
|
|
|
|
|
|
const profile = matchProfile |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
const isStarted = useMemo(() => ( |
|
|
|
|
profile?.date |
|
|
|
|
@ -171,9 +240,6 @@ export const useMatchPage = () => { |
|
|
|
|
} |
|
|
|
|
}, [events, filters]) |
|
|
|
|
|
|
|
|
|
const [plaingOrder, setPlaingOrder] = useState(0) |
|
|
|
|
const [isPlayFilterEpisodes, setIsPlayinFiltersEpisodes] = useState(false) |
|
|
|
|
|
|
|
|
|
const { |
|
|
|
|
activeStatus, |
|
|
|
|
episodesToPlay, |
|
|
|
|
@ -185,16 +251,12 @@ export const useMatchPage = () => { |
|
|
|
|
setUnreversed, |
|
|
|
|
} = useTabEvents({ events: filteredEvents, profile }) |
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
if (plaingOrder > episodesToPlay.length) setPlaingOrder(0) |
|
|
|
|
}, [plaingOrder, episodesToPlay]) |
|
|
|
|
|
|
|
|
|
const playNextEpisode = (order?: number) => { |
|
|
|
|
const isLastEpisode = plaingOrder === episodesToPlay.length |
|
|
|
|
|
|
|
|
|
const currentOrder = order === 0 ? order : plaingOrder |
|
|
|
|
if (isLastEpisode) { |
|
|
|
|
setIsPlayinFiltersEpisodes(false) |
|
|
|
|
setIsPlayingFiltersEpisodes(false) |
|
|
|
|
|
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
@ -202,11 +264,16 @@ export const useMatchPage = () => { |
|
|
|
|
setPlaingOrder(currentOrder + 1) |
|
|
|
|
} |
|
|
|
|
const playEpisodes = () => { |
|
|
|
|
setPlayingData(initPlayingData) |
|
|
|
|
setStatsWatchAllEpisodesTimer(true) |
|
|
|
|
setStatsIsPlayinFiltersEpisodes(false) |
|
|
|
|
setStatsCircleAnimation(initialCircleAnimation) |
|
|
|
|
|
|
|
|
|
if (!watchAllEpisodesTimer) { |
|
|
|
|
setWatchAllEpisodesTimer(true) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
setIsPlayinFiltersEpisodes(true) |
|
|
|
|
setIsPlayingFiltersEpisodes(true) |
|
|
|
|
|
|
|
|
|
if (matchProfile?.live) { |
|
|
|
|
handlePlaylistClick({ |
|
|
|
|
@ -219,10 +286,6 @@ export const useMatchPage = () => { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const disablePlayingEpisodes = () => { |
|
|
|
|
setIsPlayinFiltersEpisodes(false) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return { |
|
|
|
|
access, |
|
|
|
|
activeEvents, |
|
|
|
|
@ -232,41 +295,53 @@ export const useMatchPage = () => { |
|
|
|
|
allActionsToggle, |
|
|
|
|
allPlayersToggle, |
|
|
|
|
applyFilters, |
|
|
|
|
circleAnimation: isStatsTab ? statsCircleAnimation : circleAnimation, |
|
|
|
|
closePopup, |
|
|
|
|
countOfFilters, |
|
|
|
|
disablePlayingEpisodes, |
|
|
|
|
events, |
|
|
|
|
filteredEvents, |
|
|
|
|
filteredEvents: isStatsTab ? statsFilteredEvents : filteredEvents, |
|
|
|
|
handlePlaylistClick, |
|
|
|
|
hideProfileCard, |
|
|
|
|
isAllActionsChecked, |
|
|
|
|
isEmptyFilters, |
|
|
|
|
isEmptyPlayersStats, |
|
|
|
|
isFirstTeamPlayersChecked, |
|
|
|
|
isLiveMatch, |
|
|
|
|
isOpenFiltersPopup, |
|
|
|
|
isPlayFilterEpisodes, |
|
|
|
|
isPlayFilterEpisodes: isStatsTab ? isStatsPlayFilterEpisodes : isPlayFilterEpisodes, |
|
|
|
|
isPlayersStatsFetching, |
|
|
|
|
isSecondTeamPlayersChecked, |
|
|
|
|
isStarted, |
|
|
|
|
isTeamsStatsFetching, |
|
|
|
|
likeImage, |
|
|
|
|
likeToggle, |
|
|
|
|
matchPlaylists, |
|
|
|
|
plaingOrder, |
|
|
|
|
plaingOrder: isStatsTab ? statsPlaingOrder : plaingOrder, |
|
|
|
|
playEpisodes, |
|
|
|
|
playNextEpisode, |
|
|
|
|
playNextEpisode: isStatsTab ? playStatsNextEpisode : playNextEpisode, |
|
|
|
|
playStatsEpisodes, |
|
|
|
|
playersData, |
|
|
|
|
playersStats, |
|
|
|
|
playingData, |
|
|
|
|
playingProgress, |
|
|
|
|
profile, |
|
|
|
|
profileCardShown, |
|
|
|
|
reversedGroupEvents, |
|
|
|
|
selectedPlaylist, |
|
|
|
|
selectedTab, |
|
|
|
|
setCircleAnimation: isStatsTab ? setStatsCircleAnimation : setCircleAnimation, |
|
|
|
|
setFullMatchPlaylistDuration, |
|
|
|
|
setIsPlayinFiltersEpisodes, |
|
|
|
|
setPlaingOrder, |
|
|
|
|
setIsPlayingFiltersEpisodes: isStatsTab |
|
|
|
|
? setStatsIsPlayinFiltersEpisodes |
|
|
|
|
: setIsPlayersStatsFetching, |
|
|
|
|
setPlaingOrder: isStatsTab ? setStatsPlaingOrder : setPlaingOrder, |
|
|
|
|
setPlayingData, |
|
|
|
|
setPlayingProgress, |
|
|
|
|
setReversed, |
|
|
|
|
setSelectedTab, |
|
|
|
|
setUnreversed, |
|
|
|
|
setWatchAllEpisodesTimer, |
|
|
|
|
setWatchAllEpisodesTimer: isStatsTab ? setStatsWatchAllEpisodesTimer : setWatchAllEpisodesTimer, |
|
|
|
|
showProfileCard, |
|
|
|
|
statsType, |
|
|
|
|
teamsStats, |
|
|
|
|
@ -277,6 +352,6 @@ export const useMatchPage = () => { |
|
|
|
|
tournamentData, |
|
|
|
|
uniqEvents, |
|
|
|
|
user, |
|
|
|
|
watchAllEpisodesTimer, |
|
|
|
|
watchAllEpisodesTimer: isStatsTab ? statsWatchAllEpisodesTimer : watchAllEpisodesTimer, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|