import { useMemo } from 'react' import orderBy from 'lodash/orderBy' import { getSportLexic } from 'helpers/getSportLexic' import { ProfileTypes } from 'config' import { TournamentListProps } from 'features/TournamentList' import type { Match } from 'features/Matches' import { useHeaderFiltersStore } from 'features/HeaderFilters' import { useUserFavoritesStore } from 'features/UserFavorites/store' interface TournamentsSortProps { id: number, isFavorite: boolean, isLive: boolean, isSuperTournament: boolean, } export const useTournaments = (matches: Array) => { const { selectedLeague, selectedSport, } = useHeaderFiltersStore() const { isInFavorites } = useUserFavoritesStore() 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) } // eslint-disable-next-line react-hooks/exhaustive-deps const tournamentSort: Array = [] const tournaments = matches.reduce((acc: TournamentListProps, match: Match) => { if (matches.length === 0) return {} const tournamentInFavorites = isInFavorites( ProfileTypes.TOURNAMENTS, // в избранном могут быть только обычные турниры match.tournament.is_super_tournament ? match.group.id : match.tournament.id, ) if (!acc[match.tournament.id] && compareSport(match, selectedSport) && compareLeague(match.tournament.id)) { const tournament = { ...match.tournament, countryId: match.countryId, isFavorite: tournamentInFavorites, live: match.live, matches: [match], sportType: match.sportType, } acc[match.tournament.id] = { tournament: { ...tournament, }, tournamentMatches: [match], } tournamentSort.push({ id: match.tournament.id, isFavorite: tournamentInFavorites, isLive: match.live, isSuperTournament: Boolean(match.tournament.is_super_tournament), }) } 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 }, {}) const tournamentsSorted = useMemo(() => orderBy( tournamentSort, ['isLive', 'isFavorite', 'isSuperTournament'], ['desc', 'desc', 'desc'], ), [tournamentSort]) return { tournamentSort: tournamentsSorted, tournaments, } }