{"version":3,"file":"chunk-w2vlhitl.js","sources":["packages/sports/web/app/src/competition-list/competition-tree.service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { CompetitionTreeConfig, Sitecore, SportsConfig, TimeFilterConfig } from '@frontend/sports/common/client-config-data-access';\nimport { SportConstant } from '@frontend/sports/common/core/data-access/constants';\nimport { CountItem, ItemType, LeagueItem, VirtualCompetitionPrefix, children, takeTop } from '@frontend/sports/common/core/data-access/sport-model';\nimport { isDefined, xor } from '@frontend/sports/common/core/utils/extended-types';\nimport { UrlParam } from '@frontend/sports/navigation/core/feature/url-builder';\nimport { Tournament } from '@frontend/sports/types/components/tournaments';\nimport { DeviceService } from '@frontend/vanilla/core';\nimport { original, produce } from 'immer';\nimport { flatten, isArray, sortBy } from 'lodash-es';\n\nimport { CalendarService } from '../calendar/calendar.service';\nimport { IntervalFilter } from '../calendar/count-interval.service';\nimport { TreeItem, TreeSeparatorItem } from '../common/item/item.model';\nimport { SportUrlParam, UrlHelperService } from '../navigation-core/url-helper.service';\nimport { CompetitionRoute } from '../navigation/navigation.models';\nimport { TabBarItem } from '../tab-bar/tab-bar.models';\nimport {\n CalendarTreeItem,\n LeagueTreeItem,\n RegionTreeItem,\n SportTreeItem,\n SportTreeState,\n TournamentTreeItem,\n TreeOptions,\n VirtualGroupTreeItem,\n getItemTypeForSport,\n} from './competition-list.models';\n\ninterface GroupedCountItem {\n top: CountItem[];\n all: CountItem[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CompetitionTreeService {\n constructor(\n private urlHelper: UrlHelperService,\n private sitecore: Sitecore,\n private calendar: CalendarService,\n private sportConfig: SportsConfig,\n private device: DeviceService,\n private timeFilterConfig: TimeFilterConfig,\n private competitionTreeConfig: CompetitionTreeConfig,\n ) {}\n\n get(sport: CountItem, context?: string, eSportsLobby = false): SportTreeItem {\n const { top, all } = this.getGroupped(sport);\n const interval = this.calendar.getInterval(context);\n const options = this.getOptions({\n sport: sport.id,\n interval,\n regions: all.length,\n topRegions: top.length,\n isEsport: sport.isEsport,\n eSportsLobby,\n seoOptimize: this.device.isRobot,\n });\n\n const tree = new SportTreeItem({ ...sport, children: all }, options);\n\n if (top.length) {\n if (sport.id !== SportConstant.Tennis) {\n tree.children.unshift(new TreeSeparatorItem(this.sitecore.event.AZcountries));\n }\n\n tree.children.unshift(...top.map((region) => new RegionTreeItem(sport, region, options)));\n }\n\n return tree;\n }\n\n getTopCompetitions(\n sport: CountItem,\n tournaments: Tournament[] = [],\n context?: string,\n optionsParams?: Partial,\n ): SportTreeItem | undefined {\n const interval = this.calendar.getInterval(context);\n if (interval && !this.timeFilterConfig.isTimeFilterEnabled) {\n return;\n }\n\n const options = {\n ...this.getOptions({ sport: sport.id, interval, isEsport: sport.isEsport }),\n ...optionsParams,\n };\n\n options.priceBoostCountMapper = this.getPriceBoostCount();\n\n if (!options.topTitle) {\n throw new Error('Top title should be defined');\n }\n\n const topLeaguesOrder = this.getTopLeaguesOrder();\n\n let regions;\n\n if (sport.id === SportConstant.Tennis) {\n regions = children(sport, ItemType.Tournament);\n } else {\n regions = children(sport, ItemType.Region);\n }\n\n const allLeagues = children(sport, ItemType.Competition);\n const virtualLeagues = allLeagues.filter((league) => league.isVirtual);\n const nonVirtualLeagues = allLeagues.filter((league) => !league.isVirtual);\n const groups = children(sport, ItemType.VirtualCompetitionGroup);\n\n const leagueIdToRegionMap = this.getChildMap(regions);\n const groupIdToLeagueMap = this.getChildMap(allLeagues);\n\n const visibleLeaguesOrder = new Map();\n\n // Adding VirtualCompetitionGroups\n const visibleGroups: LeagueItem[] = [];\n for (const league of groups) {\n const siblingsWithOrder = this.getSiblingsWithOrder(league.siblings, topLeaguesOrder);\n if (siblingsWithOrder.length === 0) {\n continue;\n }\n\n visibleLeaguesOrder.set(league, Math.min(...siblingsWithOrder.map((siblingWithOrder) => siblingWithOrder.order)));\n siblingsWithOrder.forEach((sibling) => topLeaguesOrder.delete(sibling.siblingId));\n visibleGroups.push(league);\n }\n\n // Adding VirtualCompetitions\n const visibleLeagues: LeagueItem[] = [];\n for (const league of virtualLeagues) {\n const siblingsWithOrder = this.getSiblingsWithOrder(league.siblings, topLeaguesOrder);\n if (siblingsWithOrder.length === 0) {\n continue;\n }\n\n visibleLeaguesOrder.set(league, Math.min(...siblingsWithOrder.map((siblingWithOrder) => siblingWithOrder.order)));\n siblingsWithOrder.forEach((sibling) => topLeaguesOrder.delete(sibling.siblingId));\n visibleLeagues.push(league);\n }\n\n // Adding 'normal' Leagues\n for (const league of nonVirtualLeagues) {\n const siblingsWithOrder = this.getSiblingsWithOrder(league.siblings, topLeaguesOrder);\n if (siblingsWithOrder.length === 0) {\n continue;\n }\n\n visibleLeaguesOrder.set(league, Math.min(...siblingsWithOrder.map((siblingWithOrder) => siblingWithOrder.order)));\n siblingsWithOrder.forEach((sibling) => topLeaguesOrder.delete(sibling.siblingId));\n visibleLeagues.push(league);\n }\n\n const leagueAndGroupsSortedList = visibleLeagues\n .concat(visibleGroups)\n .sort((first, second) => visibleLeaguesOrder.get(first)! - visibleLeaguesOrder.get(second)!);\n\n if (tournaments.length + visibleLeagues.length + visibleGroups.length === 0) {\n return;\n }\n\n const leagueAndGroupsTreeItems = leagueAndGroupsSortedList.map((item) => {\n if (item.type === ItemType.VirtualCompetitionGroup) {\n const groupLeague = groupIdToLeagueMap.get(item.id)!;\n const groupRegion = leagueIdToRegionMap.get(groupLeague.id)!;\n\n return new VirtualGroupTreeItem(sport, groupRegion, groupLeague, item, options);\n }\n\n const region = leagueIdToRegionMap.get(item.id)!;\n\n return new LeagueTreeItem(sport, region, item, options);\n });\n\n const tournamentTreeItems = tournaments.map(\n (tournament) => new TournamentTreeItem(sport, tournament, this.urlHelper.getTournamentUrl.bind(this.urlHelper)),\n );\n\n const tree = new SportTreeItem({ ...sport, children: [] }, options);\n tree.title = options.topTitle;\n tree.subTitle = options.subTitle;\n tree.expanded = true;\n tree.active = true;\n tree.children = tournamentTreeItems.concat(leagueAndGroupsTreeItems);\n tree.priceBoostCount = options.priceBoostCountMapper ? options.priceBoostCountMapper(sport) : 0;\n\n return tree;\n }\n\n getTopRegions(sport: CountItem, context?: string): SportTreeItem {\n const setChildren = (item: CountItem, items: CountItem[] = []) => ({\n ...item,\n children: items,\n });\n const { top, all } = this.getGroupped(sport);\n const interval = this.calendar.getInterval(context);\n const options = this.getOptions({ sport: sport.id, interval, regions: all.length, topRegions: top.length, isEsport: sport.isEsport });\n const tree = new SportTreeItem(\n setChildren(\n sport,\n top.map((item) => setChildren(item)),\n ),\n options,\n );\n if (sport.id === SportConstant.Tennis) {\n tree.moreTitle = options.title;\n }\n\n return tree;\n }\n\n getAll(sport: CountItem, state?: SportTreeState): TreeItem | undefined {\n if (!state?.context) {\n return;\n }\n\n const interval = this.calendar.getInterval(state.context);\n\n if (!interval || (interval && this.timeFilterConfig.isTimeFilterEnabled)) {\n return;\n }\n\n const item = new CalendarTreeItem(sport, interval, (current, name) => this.urlHelper.getSportUrl(current, name));\n\n item.active = !state.region && !state.league;\n\n return item;\n }\n\n setState(sport?: TreeItem, state?: SportTreeState): TreeItem | undefined {\n if (sport instanceof SportTreeItem) {\n // top tree has TournamentTreeItem and CompetitionTreeItem children\n if (sport.children[0] instanceof RegionTreeItem) {\n return this.setTreeState(sport, state);\n }\n\n return this.setTopTreeState(sport, state);\n }\n\n return;\n }\n\n toggleExpanded(tree: TreeItem, item: TreeItem): TreeItem {\n return produce(tree, (draft) => {\n this.traverse(original(draft)!, draft, (originalItem, draftItem) => {\n if (originalItem === item) {\n draftItem.expanded = !originalItem.expanded;\n\n return true;\n }\n\n return false;\n });\n });\n }\n\n private traverse(root: TreeItem, draft: TreeItem, action: (originalItem: TreeItem, draftItem: TreeItem) => boolean): boolean {\n if (action(root, draft)) {\n return true;\n }\n\n for (const child of root.children) {\n const draftChild = draft.children[root.children.indexOf(child)];\n if (this.traverse(child, draftChild, action)) {\n return true;\n }\n }\n\n return false;\n }\n\n private getSiblingsWithOrder(siblingIds: number[], sortOrderMap: Map): { siblingId: number; order: number }[] {\n const siblingsWithOrder: { siblingId: number; order: number }[] = [];\n siblingIds.forEach((siblingId) => {\n const order = sortOrderMap.get(siblingId);\n if (order !== undefined) {\n siblingsWithOrder.push({ siblingId, order });\n }\n });\n\n return siblingsWithOrder;\n }\n\n private setTreeState(sport: SportTreeItem, state?: SportTreeState): SportTreeItem {\n if (!state?.sport) {\n return sport;\n }\n\n return produce(sport, (draft) => {\n this.setDeselected(draft);\n this.setSelected(draft);\n this.setExpanded(draft, !!state.sportExpanded);\n\n const selectedRegionId = state.region || (draft.children.length === 1 ? draft.children[0].id : undefined);\n\n // as we have the top regions, the same region might appear twice\n draft.children\n .filter((region) => region.id === selectedRegionId)\n .forEach((region, index) => {\n this.setSelected(region, index === 0);\n\n if (state.league) {\n const leagues = isArray(state.league) ? state.league : [state.league];\n region.children.filter((league) => leagues.some((y) => y === league.id)).forEach((league) => this.setSelected(league));\n } else {\n this.setSelected(region.children[0]);\n }\n });\n\n if (!state.regionExpanded) {\n return;\n }\n\n draft.children.filter((region) => state.regionExpanded!.indexOf(region.id) !== -1).forEach((region) => this.setExpanded(region));\n });\n }\n\n private setTopTreeState(sport: SportTreeItem, state?: SportTreeState): SportTreeItem {\n if (!state) {\n return sport;\n }\n\n return produce(sport, (draft) => {\n const leagues = isArray(state.league) ? state.league : [state.league];\n\n this.setExpanded(draft, !!state.sportExpanded);\n\n if (state.isVirtual) {\n draft.children.forEach((child) => {\n child.active = false;\n });\n\n const virtualGroup = draft.children.find(\n (child) => child.id === state.virtualCompetitionGroup && child instanceof VirtualGroupTreeItem,\n );\n\n if (virtualGroup) {\n virtualGroup.active = true;\n\n return;\n }\n\n const virtualCompetition = draft.children.find(\n (child) => child.id === state.league && child instanceof LeagueTreeItem && child.isVirtual,\n );\n\n if (virtualCompetition) {\n virtualCompetition.active = true;\n }\n\n return;\n }\n\n draft.children.forEach((child) => (child.active = leagues.some((league) => league === child.id) || child.id === state.tournament));\n });\n }\n\n private setExpanded(item: TreeItem, expanded: boolean = true): void {\n item.expanded = this.device.isRobot || expanded;\n }\n\n private setSelected(item: TreeItem, expanded: boolean = true): void {\n item.active = true;\n this.setExpanded(item, expanded);\n }\n\n private setDeselected(item: TreeItem): void {\n if (item.active) {\n item.active = false;\n item.children.forEach((child) => this.setDeselected(child));\n }\n }\n\n private getTopLeaguesOrder(): Map {\n const source = this.sportConfig.topCompetitions.map((item, index) => [item, index]);\n\n return new Map(source as [number, number][]);\n }\n\n private getChildMap(source: T[]): Map {\n const sourceChildren = source.map((item) => item.children.map<[number, T]>((child) => [child.id, item]));\n\n return new Map(flatten(sourceChildren));\n }\n\n getGroupped(sport: CountItem): GroupedCountItem {\n return sport.id === SportConstant.Tennis ? this.getGroupedTournaments(sport) : this.getGroupedRegions(sport);\n }\n\n private getGroupedRegions(sport: CountItem): GroupedCountItem {\n const regions = children(sport, ItemType.Region);\n const top = takeTop(regions);\n const all = regions.sort((a, b) => a.name.localeCompare(b.name));\n\n return { top, all };\n }\n\n private getGroupedTournaments(sport: CountItem): GroupedCountItem {\n const tournaments = children(sport, ItemType.Tournament);\n const isTop = (tournament: CountItem) => isDefined(tournament.order) || tournament.children.some((league) => isDefined(league.order));\n const filterTop = (topTournaments: boolean) => tournaments.filter((tournament) => xor(!topTournaments, isTop(tournament)));\n\n const top = sortBy(filterTop(true), (tournament) => tournament.order);\n const all = sortBy(filterTop(false), (tournament) => tournament.name);\n\n return { top, all };\n }\n\n private getOptions(settings: {\n sport: number;\n interval?: IntervalFilter;\n regions?: number;\n topRegions?: number;\n isEsport?: boolean;\n eSportsLobby?: boolean;\n seoOptimize?: boolean;\n }): TreeOptions {\n const options: TreeOptions = {\n urlMapper: this.getUrl(settings.interval, settings.eSportsLobby),\n countMapper: this.competitionTreeConfig.showCountDsl ? this.getCount(settings.interval) : (item) => 0,\n title: this.sitecore.event.AllCompetitionsTitle,\n subTitle: this.sitecore.event.AZCompetitions,\n topTitle: this.sitecore.event.TopTournaments,\n moreTitle: this.sitecore.event.AllTournaments,\n allTitle: this.sitecore.globalMessages.All,\n seoOptimize: settings.seoOptimize,\n eSportsLobby: settings.eSportsLobby,\n };\n\n if (settings.sport !== SportConstant.Tennis) {\n options.title = this.sitecore.event.AllCompetitionsTitle;\n options.topTitle = this.sitecore.event.TopCompetitions;\n options.moreTitle = this.sitecore.event.AllCompetitionsTitle;\n\n if (!settings.topRegions && settings.regions && settings.regions > 1) {\n options.title = this.sitecore.event.AZCountriesTitle;\n options.moreTitle = this.sitecore.event.AllCountriesFooterText;\n }\n\n if (settings.topRegions || (settings.regions && settings.regions > 1)) {\n options.title = this.sitecore.event.AllCountriesTitle;\n options.subTitle = this.sitecore.event.AZcountries;\n options.moreTitle = this.sitecore.event.AllCountriesFooterText;\n }\n }\n\n if (settings.isEsport) {\n options.title = this.sitecore.eSports.CompetitionsByRegion;\n }\n\n if (settings.interval && !this.timeFilterConfig.isTimeFilterEnabled) {\n options.title = `${settings.interval.title} - ${options.title}`;\n }\n\n return options;\n }\n\n private getUrl(\n interval?: IntervalFilter,\n eSportsLobby?: boolean,\n ): (sport?: UrlParam, region?: UrlParam, league?: UrlParam, group?: UrlParam) => string {\n return (sport, region, league, group) => {\n let context: string | undefined = interval ? interval.name : SportUrlParam.Betting;\n if (eSportsLobby && sport && !region && !league && !group) {\n context = undefined;\n }\n\n return this.urlHelper.getSportUrl(sport, context, region, league, group);\n };\n }\n\n private getCount(interval?: IntervalFilter): (item?: CountItem) => number {\n return (item) => {\n if (!item?.counts) {\n return 0;\n }\n\n if (interval) {\n return item.counts.preMatch + item.counts.live;\n }\n\n return item.counts.preMatch + item.counts.live + item.counts.specials;\n };\n }\n\n private getPriceBoostCount(): (item?: CountItem) => number {\n return (item) => item?.counts?.priceBoost ?? 0;\n }\n\n getCalendarPills(sport: CountItem | undefined, route: CompetitionRoute): TabBarItem[] | undefined {\n if (sport) {\n const tree = this.getTopCompetitions(sport, [], route.context);\n\n return this.getCompetitionsTabs(route, sport, tree);\n }\n\n return undefined;\n }\n\n getCompetitionsTabs(route: CompetitionRoute, sport: CountItem | undefined, topcompetitions?: SportTreeItem): TabBarItem[] {\n const pills: TabBarItem[] = [];\n const leaguePrefix = route.isVirtual ? VirtualCompetitionPrefix : undefined;\n\n const selectedTab = route.league ? route.league : Number(route.region) || 0;\n\n topcompetitions?.children.map((competition) =>\n pills.push({\n active: competition.id === selectedTab,\n icon: this.getRegionId(sport, Number(competition.id)),\n id: Number(competition.id) || 0,\n title: competition.title,\n url: competition?.href,\n ignoreBrowserHistory: true,\n }),\n );\n\n if ((route.league || route.region) && !pills.some((p) => p.id === selectedTab)) {\n pills.unshift({\n active: route.region !== undefined || route.league !== undefined,\n icon: `country-icon c${route.region}`,\n id: route.league ? Number(route.league) : Number(route.region) || 0,\n title: route.league ? this.getLeague(sport, Number(route.league)) : this.getRegion(sport, route.region),\n url: this.urlHelper.getSportUrl(\n sport,\n route.context,\n this.getUrlParameter(route.region, route.regionName),\n this.getUrlParameter(route.league, route.leagueName, leaguePrefix),\n ),\n ignoreBrowserHistory: true,\n });\n }\n\n pills.unshift({\n active: route.region === undefined && route.league === undefined,\n icon: `country-icon c-1`,\n id: -1,\n title: sport!.id !== SportConstant.Tennis ? this.sitecore.event.AllCountriesTitle : this.sitecore.event.AllCompetitionsTitle,\n url: this.urlHelper.getSportUrl(sport, route.context),\n ignoreBrowserHistory: true,\n });\n\n if (pills.length === 1) {\n pills[0].active = true;\n }\n\n return pills.filter((pill) => pill.title);\n }\n\n getRegionId(sport: CountItem | undefined, leaugeid: number): string {\n let regionid;\n if (sport) {\n const regions = children(sport, ItemType.Region);\n const leagueIdToRegionMap = this.getChildMap(regions);\n regionid = leagueIdToRegionMap.get(leaugeid)?.id;\n }\n\n return `country-icon c${regionid}`;\n }\n\n private getRegion(sport: CountItem | undefined, id?: number): string {\n let region: UrlParam | undefined;\n if (id && sport) {\n const type = getItemTypeForSport(sport.id);\n\n region = this.getChildren(children(sport, type), id);\n }\n\n return region ? region.name : '';\n }\n\n private getLeague(sport: CountItem | undefined, id?: number): string {\n let league: UrlParam | undefined;\n if (id && sport) {\n league = this.getChildren(children(sport, ItemType.Competition), id);\n }\n\n return league ? league.name : '';\n }\n\n private getChildren(source: UrlParam[], id: number): UrlParam | undefined {\n return source.filter((item) => item.id === id).pop();\n }\n\n getUrlParameter(id?: number[] | number, name?: string, prefix?: string): UrlParam | undefined {\n if (!id || !name || Array.isArray(id)) {\n return;\n }\n\n const urlParameter: UrlParam = { id, name };\n if (prefix) {\n urlParameter.prefix = prefix;\n }\n\n return urlParameter;\n }\n}\n"],"names":["CompetitionTreeService","constructor","urlHelper","sitecore","calendar","sportConfig","device","timeFilterConfig","competitionTreeConfig","get","sport","context","eSportsLobby","top","all","getGroupped","interval","getInterval","options","getOptions","id","regions","length","topRegions","isEsport","seoOptimize","isRobot","tree","SportTreeItem","__spreadProps","__spreadValues","children","SportConstant","Tennis","unshift","TreeSeparatorItem","event","AZcountries","map","region","RegionTreeItem","getTopCompetitions","tournaments","optionsParams","isTimeFilterEnabled","priceBoostCountMapper","getPriceBoostCount","topTitle","Error","topLeaguesOrder","getTopLeaguesOrder","ItemType","Tournament","Region","allLeagues","Competition","virtualLeagues","filter","league","isVirtual","nonVirtualLeagues","groups","VirtualCompetitionGroup","leagueIdToRegionMap","getChildMap","groupIdToLeagueMap","visibleLeaguesOrder","Map","visibleGroups","siblingsWithOrder","getSiblingsWithOrder","siblings","set","Math","min","siblingWithOrder","order","forEach","sibling","delete","siblingId","push","visibleLeagues","leagueAndGroupsSortedList","concat","sort","first","second","leagueAndGroupsTreeItems","item","type","groupLeague","groupRegion","VirtualGroupTreeItem","LeagueTreeItem","tournamentTreeItems","tournament","TournamentTreeItem","getTournamentUrl","bind","title","subTitle","expanded","active","priceBoostCount","getTopRegions","setChildren","items","moreTitle","getAll","state","CalendarTreeItem","current","name","getSportUrl","setState","setTreeState","setTopTreeState","toggleExpanded","produce","draft","traverse","original","originalItem","draftItem","root","action","child","draftChild","indexOf","siblingIds","sortOrderMap","undefined","setDeselected","setSelected","setExpanded","sportExpanded","selectedRegionId","index","leagues","isArray","some","y","regionExpanded","virtualGroup","find","virtualCompetitionGroup","virtualCompetition","source","topCompetitions","sourceChildren","flatten","getGroupedTournaments","getGroupedRegions","takeTop","a","b","localeCompare","isTop","isDefined","filterTop","topTournaments","xor","sortBy","settings","urlMapper","getUrl","countMapper","showCountDsl","getCount","AllCompetitionsTitle","AZCompetitions","TopTournaments","AllTournaments","allTitle","globalMessages","All","TopCompetitions","AZCountriesTitle","AllCountriesFooterText","AllCountriesTitle","eSports","CompetitionsByRegion","group","SportUrlParam","Betting","counts","preMatch","live","specials","_a","priceBoost","getCalendarPills","route","getCompetitionsTabs","topcompetitions","pills","leaguePrefix","VirtualCompetitionPrefix","selectedTab","Number","competition","icon","getRegionId","url","href","ignoreBrowserHistory","p","getLeague","getRegion","getUrlParameter","regionName","leagueName","pill","leaugeid","regionid","getItemTypeForSport","getChildren","pop","prefix","Array","urlParameter","f","ɵɵinject","UrlHelperService","Sitecore","CalendarService","SportsConfig","DeviceService","TimeFilterConfig","CompetitionTreeConfig","factory","ɵfac","providedIn","_CompetitionTreeService"],"mappings":"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"}