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.
 
 
 
 
spa_instat_tv/src/features/TournamentList/hooks.tsx

76 lines
2.2 KiB

import { useEffect } from 'react'
import { getSportLexic } from 'helpers/getSportLexic'
import { TournamentListProps } from 'features/TournamentList'
import type { Match } from 'features/Matches'
import { useHeaderFiltersStore } from 'features/HeaderFilters'
export const useTournaments = (matches: Array<Match>) => {
const {
selectedLeague,
selectedSport,
setSportIds,
} = useHeaderFiltersStore()
const compareSport = (match: Match, sportNames: Array<string>) => {
if (sportNames[0] === 'all_sports') {
return true
}
const sport = getSportLexic(match.sportType)
return (sportNames.indexOf(sport) >= 0 || sportNames.indexOf(`${sport}_popup`) >= 0)
}
const compareLeague = (id: number) => {
if (selectedLeague[0] === 'all_competitions') {
return true
}
return (selectedLeague.indexOf(id) >= 0)
}
const tournamentSort: Array<number> = []
const sportIds = new Set<number>([])
const tournaments = matches.reduce((acc: TournamentListProps, match: Match) => {
if (matches.length === 0) return {}
if (!acc[match.tournament.id] && compareSport(match, selectedSport)
&& compareLeague(match.tournament.id)) {
const tournament = {
...match.tournament,
countryId: match.countryId,
live: match.live,
matches: [match],
sportType: match.sportType,
}
acc[match.tournament.id] = {
tournament: {
...tournament,
},
tournamentMatches: [match],
}
tournamentSort.push(match.tournament.id)
sportIds.add(match.sportType)
} else if (compareSport(match, selectedSport) && compareLeague(match.tournament.id)) {
acc[match.tournament.id] = {
...acc[match.tournament.id],
tournament: {
...acc[match.tournament.id].tournament,
live: acc[match.tournament.id]?.tournament.live
? acc[match.tournament.id]?.tournament.live
: match.live,
},
tournamentMatches: [...acc[match.tournament.id].tournamentMatches, match],
}
}
return acc
}, {})
useEffect(() => {
sportIds && setSportIds(sportIds)
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [matches])
return {
tournamentSort,
tournaments,
}
}