|
|
|
|
@ -9,6 +9,9 @@ import filter from 'lodash/filter' |
|
|
|
|
import isEmpty from 'lodash/isEmpty' |
|
|
|
|
|
|
|
|
|
import { useAuthStore } from 'features/AuthStore' |
|
|
|
|
import { Tabs } from 'features/MatchSidePlaylists/config' |
|
|
|
|
import { initialCircleAnimation } from 'features/CircleAnimationBar' |
|
|
|
|
import type { TCircleAnimation } from 'features/CircleAnimationBar' |
|
|
|
|
|
|
|
|
|
import { PAGES } from 'config/pages' |
|
|
|
|
|
|
|
|
|
@ -17,8 +20,7 @@ import { getMatchInfo } from 'requests/getMatchInfo' |
|
|
|
|
import { getViewMatchDuration } from 'requests/getViewMatchDuration' |
|
|
|
|
import { getLandingStatus } from 'requests/getLandingStatus' |
|
|
|
|
|
|
|
|
|
import { usePageParams } from 'hooks/usePageParams' |
|
|
|
|
import { useToggle } from 'hooks/useToggle' |
|
|
|
|
import { usePageParams, useToggle } from 'hooks' |
|
|
|
|
|
|
|
|
|
import { redirectToUrl } from 'helpers/redirectToUrl' |
|
|
|
|
import { parseDate } from 'helpers/parseDate' |
|
|
|
|
@ -27,6 +29,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 |
|
|
|
|
|
|
|
|
|
@ -34,6 +61,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() |
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
@ -59,6 +95,7 @@ export const useMatchPage = () => { |
|
|
|
|
matchPlaylists, |
|
|
|
|
selectedPlaylist, |
|
|
|
|
setFullMatchPlaylistDuration, |
|
|
|
|
setSelectedPlaylist, |
|
|
|
|
} = useMatchData(matchProfile) |
|
|
|
|
|
|
|
|
|
const profile = matchProfile |
|
|
|
|
@ -75,9 +112,9 @@ export const useMatchPage = () => { |
|
|
|
|
filters, |
|
|
|
|
isAllActionsChecked, |
|
|
|
|
isEmptyFilters, |
|
|
|
|
isFirstTeamPlayersChecked, |
|
|
|
|
isOpen: isOpenFiltersPopup, |
|
|
|
|
resetEvents, |
|
|
|
|
resetPlayers, |
|
|
|
|
isSecondTeamPlayersChecked, |
|
|
|
|
toggle: togglePopup, |
|
|
|
|
toggleActiveEvents, |
|
|
|
|
toggleActivePlayers, |
|
|
|
|
@ -147,24 +184,56 @@ export const useMatchPage = () => { |
|
|
|
|
userInfo, |
|
|
|
|
]) |
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
@ -187,9 +256,6 @@ export const useMatchPage = () => { |
|
|
|
|
} |
|
|
|
|
}, [events, filters]) |
|
|
|
|
|
|
|
|
|
const [plaingOrder, setPlaingOrder] = useState(0) |
|
|
|
|
const [isPlayFilterEpisodes, setIsPlayinFiltersEpisodes] = useState(false) |
|
|
|
|
|
|
|
|
|
const { |
|
|
|
|
activeStatus, |
|
|
|
|
episodesToPlay, |
|
|
|
|
@ -201,16 +267,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 |
|
|
|
|
} |
|
|
|
|
@ -218,11 +280,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({ |
|
|
|
|
@ -235,10 +302,6 @@ export const useMatchPage = () => { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const disablePlayingEpisodes = () => { |
|
|
|
|
setIsPlayinFiltersEpisodes(false) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return { |
|
|
|
|
access, |
|
|
|
|
activeEvents, |
|
|
|
|
@ -248,41 +311,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, |
|
|
|
|
@ -293,6 +368,6 @@ export const useMatchPage = () => { |
|
|
|
|
tournamentData, |
|
|
|
|
uniqEvents, |
|
|
|
|
user, |
|
|
|
|
watchAllEpisodesTimer, |
|
|
|
|
watchAllEpisodesTimer: isStatsTab ? statsWatchAllEpisodesTimer : watchAllEpisodesTimer, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|