You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.4 KiB
102 lines
2.4 KiB
import { useState, useEffect } from 'react'
|
|
|
|
import isEmpty from 'lodash/isEmpty'
|
|
|
|
import type { MatchPlaylists } from 'requests'
|
|
import { getMatchPlaylists } from 'requests'
|
|
|
|
import { useSettingsState } from './useSettingsState'
|
|
import { useSportActions } from './useSportActions'
|
|
import { usePopupNavigation } from './usePopupNavigation'
|
|
|
|
import type { MatchData } from '../../types'
|
|
import { PopupPages, PlayerPlaylistFormats } from '../../types'
|
|
|
|
export const useMatchPopup = () => {
|
|
const [match, setMatch] = useState<MatchData>(null)
|
|
const [matchPlaylists, setMatchPlaylists] = useState<MatchPlaylists | null>(null)
|
|
const {
|
|
closePopup,
|
|
goBack,
|
|
goToSettings,
|
|
isOpen,
|
|
openPopup,
|
|
page,
|
|
} = usePopupNavigation()
|
|
|
|
const {
|
|
episodeDuration,
|
|
resetSelectedActions,
|
|
selectedActions,
|
|
selectedPlaylistFormat,
|
|
setEpisodeDuration,
|
|
setSelectedActions,
|
|
setSelectedPlaylistFormat,
|
|
} = useSettingsState(match?.sportType)
|
|
|
|
const { actions, fetchSportActions } = useSportActions(match?.sportType)
|
|
|
|
useEffect(() => {
|
|
if (!isOpen) {
|
|
setMatch(null)
|
|
setMatchPlaylists(null)
|
|
}
|
|
}, [isOpen])
|
|
|
|
useEffect(() => {
|
|
if (selectedPlaylistFormat !== PlayerPlaylistFormats.SELECTED_ACTIONS) {
|
|
resetSelectedActions()
|
|
}
|
|
}, [selectedPlaylistFormat, resetSelectedActions])
|
|
|
|
useEffect(() => {
|
|
const isSettingsPage = page === PopupPages.SETTINGS
|
|
const actionsFormatSelected = (
|
|
selectedPlaylistFormat === PlayerPlaylistFormats.SELECTED_ACTIONS
|
|
)
|
|
if (isSettingsPage && actionsFormatSelected) {
|
|
fetchSportActions()
|
|
}
|
|
}, [
|
|
selectedPlaylistFormat,
|
|
match,
|
|
page,
|
|
fetchSportActions,
|
|
resetSelectedActions,
|
|
])
|
|
|
|
useEffect(() => {
|
|
if (!match || !isOpen || page !== PopupPages.PLAYLIST) return
|
|
|
|
getMatchPlaylists({
|
|
matchId: match.id,
|
|
// запрос с экшнами [1, 2, 3] временный
|
|
selectedActions: isEmpty(selectedActions) ? [1, 2, 3] : selectedActions,
|
|
sportType: match.sportType,
|
|
}).then(setMatchPlaylists)
|
|
}, [
|
|
isOpen,
|
|
match,
|
|
page,
|
|
selectedActions,
|
|
])
|
|
|
|
return {
|
|
actions,
|
|
closePopup,
|
|
episodeDuration,
|
|
goBack,
|
|
goToSettings,
|
|
isOpen,
|
|
match,
|
|
matchPlaylists,
|
|
onActionClick: setSelectedActions,
|
|
onDurationChange: setEpisodeDuration,
|
|
onFormatSelect: setSelectedPlaylistFormat,
|
|
openPopup,
|
|
page,
|
|
selectedActions,
|
|
selectedPlaylistFormat,
|
|
setMatch,
|
|
}
|
|
}
|
|
|