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) => { const { selectedLeague, selectedSport, setSportIds, } = useHeaderFiltersStore() const compareSport = (match: Match, sportNames: Array) => { 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 = [] const sportIds = new Set([]) 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, } }