{"version":3,"file":"chunk-h1053iwc.js","sources":["packages/sports/web/app/src/event-details/bet-builder-v2/bet-builder-tracking.ts","packages/sports/web/app/src/betslip-base/models/betslip-upsell.model.ts","packages/sports/web/app/src/option-pick/event-pick.component.ts","packages/sports/web/app/src/option-pick/pick.component.html"],"sourcesContent":["import { trackingConstants } from '@frontend/sports/tracking/feature';\n\nexport enum BetBuilderTrackingValues {\n BetBuilder = 'betbuilder',\n BetBuilderEventList = 'bet builder event list',\n BuildaBet = 'build a bet',\n BuildaBetButton = 'build a bet button',\n BuildaBetPod = 'build a bet market pod',\n Click = 'click',\n Close = 'close',\n CloseParlay = 'close parlay',\n Coupon = 'coupons / parlay',\n EditPickButton = 'edit pick button',\n EventDetails = 'event details',\n EventDetailsMedia = 'event details media',\n EventInfo = 'event info',\n EventInfoPopup = 'event info popup',\n GoToBetslip = 'go to betslip',\n HowTo = 'how to',\n HowToInfoPopup = 'how to info popup',\n KeepPicks = 'keep picks',\n Load = 'load',\n MarketBoardButton = 'market board button',\n PreCreated = 'pre created option',\n ProductIcon = 'product icon',\n Tab = 'tab',\n QuickBetslip = 'quick betslip',\n WarningPopup = 'warning popup',\n EmbeddedSource = 'SGP embedded',\n OverlaySource = 'SGP overlay',\n OverlaySubNaviagtion = 'SGP overlay - sub navigation',\n InfoRibbon = 'SGP info ribbon',\n InfoDialog = 'SGP info',\n FindOutMore = 'find out more link',\n OkGotItCta = 'ok got it cta',\n LearnMoreCta = 'learn more cta',\n BetBarBadge = 'sgp',\n BetBarPlusBadge = 'sgp+',\n AngstromSgp = 'Angstrom SGP',\n InHouseFootball = 'InHouseBYB',\n InHouseFootballEmbedded = 'InHouseBYB embedded',\n InHouseFootballOverlay = 'InHouseBYB overlay',\n AngstromSgpEmbedded = 'Angstrom SGP embedded',\n AngstromSgpOverlay = 'Angstrom SGP overlay',\n SportcastSgpEmbedded = 'Sportcast SGP embedded',\n SportcastSgpOverlay = 'Sportcast SGP overlay',\n UncombinableSelections = \"selections can't be combined\",\n}\n\nexport interface TrackBetBuilderSwitcherClick {\n [trackingConstants.COMPONENT_CATEGORY_EVENT]: string | undefined;\n [trackingConstants.COMPONENT_LABEL_EVENT]: string | undefined;\n [trackingConstants.COMPONENT_ACTION_EVENT]: string | undefined;\n [trackingConstants.COMPONENT_POSITION_EVENT]: string | undefined;\n [trackingConstants.COMPONENT_LOCATION_EVENT]: string | undefined;\n [trackingConstants.COMPONENT_EVENT_DETAILS]: string | undefined;\n [trackingConstants.COMPONENT_URL_CLICKED]: string | undefined;\n [trackingConstants.SPORT_ID]: string | undefined;\n [trackingConstants.SPORT_LEAGUE_ID]: string | undefined;\n}\n","export enum BetslipUpsellConstants {\n TrackingCategoryEvent = 'Upsell',\n TrackingLabelEvent = 'Sports Upsell',\n // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n TrackingSource = 'Upsell',\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Component, Inject, Input, OnChanges, Optional } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { OfferSource } from '@cds';\nimport { BetBuilderProvider } from '@cds/betting-offer/add-ons';\nimport { AutomationModule } from '@frontend/sports/automation/core-feature';\nimport { EventModel, EventOption, EventOptionGroup } from '@frontend/sports/betting-offer/feature/model';\nimport { NativePrice } from '@frontend/sports/odds/feature/native-price';\nimport { NOT_APPLICABLE, TRACKING_NO_GAMEDETAILS, trackingConstants } from '@frontend/sports/tracking/feature';\nimport { Store } from '@ngrx/store';\nimport { ExternalBetslipActions } from 'packages/sports/common/betslip/core/external-betslip-actions';\nimport { V1PickId, V2OptionMarketPickId } from 'packages/sports/common/betslip/core/picks/pick-id';\nimport { BetslipIntegrationService } from 'packages/sports/common/betslip/integration/betslip-integration.service';\nimport {\n BETSLIP_LINE_SWITCHER_INJECTION_TOKEN,\n ILineSwitcherPickHandlerService,\n} from 'packages/sports/common/betslip/integration/services/line-switcher-pick-handler.service';\n\nimport { getBetslipGroupInformation } from '../betbuilder/utils';\nimport { BetslipUpsellConstants } from '../betslip-base/models/betslip-upsell.model';\nimport { SourceOfPick } from '../betslip-base/models/pick-models';\nimport { BetBuilderTrackingValues } from '../event-details/bet-builder-v2/bet-builder-tracking';\nimport { GeolocationCheckService } from '../geo-location/geo-location-check.service';\nimport { isSheetViewOpen } from '../ui-manager/ui-manager.state';\nimport { OptionIndicatorDirective } from './option-indicator.directive';\nimport { PickSourceProvider } from './pick-source.provider';\nimport { PickComponent } from './pick.component';\n\n@Component({\n selector: 'ms-event-pick',\n templateUrl: 'pick.component.html',\n standalone: true,\n imports: [OptionIndicatorDirective, AutomationModule, AsyncPipe],\n styleUrl: './event-pick.component.scss',\n})\nexport class EventPickComponent extends PickComponent implements OnChanges {\n @Input() option: EventOption;\n @Input() optionGroup: EventOptionGroup;\n @Input() event: EventModel;\n @Input() isFromPortal?: boolean;\n @Input() isPriceBoosted: boolean;\n @Input() calenderTrack?: string;\n @Input() trackingControllerTabName?: string;\n @Input() trackingPlayerName?: string;\n @Input() trackingVariant?: string;\n private isSheetViewOpen = false;\n override pickId: V1PickId | V2OptionMarketPickId;\n\n constructor(\n geolocationCheckService: GeolocationCheckService,\n betslipIntegration: BetslipIntegrationService,\n private pickSourceProvider: PickSourceProvider,\n private store: Store,\n changeDetection: ChangeDetectorRef,\n @Inject(BETSLIP_LINE_SWITCHER_INJECTION_TOKEN) @Optional() lineSwitcherPickHandlerService: ILineSwitcherPickHandlerService | null,\n ) {\n super(geolocationCheckService, betslipIntegration, changeDetection, lineSwitcherPickHandlerService);\n this.store\n .select(isSheetViewOpen)\n .pipe(takeUntilDestroyed())\n .subscribe((isSheetView: boolean) => (this.isSheetViewOpen = isSheetView));\n }\n\n private canTrackPickDetails(): boolean {\n return (\n this.trackingSource === BetslipUpsellConstants.TrackingSource ||\n this.sourceOfPick === SourceOfPick.OutrightsGrid ||\n this.sourceOfPick === SourceOfPick.BetStationMarquee\n );\n }\n\n get price(): NativePrice {\n return this.isPriceBoosted ? this.option.boostedPrice! : this.option.nativePrice;\n }\n\n get priceId(): number | undefined {\n return this.isPriceBoosted ? this.option.boostedPriceId! : this.option.id;\n }\n\n private createPickId(): V1PickId | V2OptionMarketPickId {\n const isHybridSplitTv1Pick = this.event.offerSource === OfferSource.V2 && this.optionGroup.source === OfferSource.V1;\n const isPureTv1Pick = this.event.offerSource === OfferSource.V1 && this.optionGroup.source !== OfferSource.V2;\n if (isPureTv1Pick || isHybridSplitTv1Pick) {\n return new V1PickId(this.option.originalEventId || this.event.id, this.option.optionGroupId, this.option.id);\n } else {\n const priceId = this.isPriceBoosted ? this.option.boostedPriceId! : this.option.priceId!;\n\n return new V2OptionMarketPickId(\n this.event.hybridFixtureData != null ? this.event.hybridFixtureData.fixtureId : this.option.originalEventId || this.event.id,\n this.option.optionGroupId,\n this.option.id,\n priceId,\n );\n }\n }\n\n protected addPick(): void {\n this.store.dispatch(\n ExternalBetslipActions.addPick({\n pickId: this.pickId,\n tracking: this.pickSource,\n isPriceBoosted: this.isPriceBoosted,\n groupInfo: getBetslipGroupInformation(this.event),\n isBetBuilder: this.option.isBetBuilder,\n }),\n );\n }\n\n protected removePick(): void {\n this.store.dispatch(ExternalBetslipActions.removePick({ pickId: this.pickId }));\n }\n\n override pickClick(): void {\n super.pickClick();\n }\n\n ngOnChanges(): void {\n this.state.locked = !this.option.online || !this.optionGroup.online;\n this.setPickId(this.createPickId());\n }\n\n private get pickSource() {\n const pickSource = this.pickSourceProvider.get(\n this.trackingSource,\n this.trackingPosition,\n this.isFallbackMarketEnabled,\n this.marqueeName,\n this.sitecoreTemplateId,\n this.marqueeType,\n undefined,\n this.isAutomatedMarquee,\n );\n\n pickSource.additional = pickSource.additional || {};\n\n if (this.canTrackPickDetails()) {\n pickSource.additional[trackingConstants.SPORT_ID] = this.event.sport.id.toString();\n pickSource.additional[trackingConstants.SPORT_LEAGUE_ID] = this.event.league.id.toString();\n pickSource.additional[trackingConstants.RESULT_ID] = this.option.id.toString();\n pickSource.additional[trackingConstants.MARKET_ID] = this.option.optionGroupId.toString();\n pickSource.additional[trackingConstants.MARQUEE_CONTENT_LOGIC] = this.isFallbackMarketEnabled ? 'fallback' : 'default';\n pickSource.additional[trackingConstants.MARQUEE_NAME] = this.marqueeName || NOT_APPLICABLE;\n pickSource.additional[trackingConstants.MARQUEE_TYPE] = this.marqueeType || NOT_APPLICABLE;\n pickSource.additional[trackingConstants.SITECORE_TEMPLATE_ID] = this.sitecoreTemplateId || NOT_APPLICABLE;\n }\n\n if (this.isSheetViewOpen) {\n pickSource.additional[trackingConstants.COMPONENT_MODULE_NAME] = trackingConstants.SEE_ALL_OVERLAY;\n pickSource.sheetviewSuffix = `/${trackingConstants.SEE_ALL_OVERLAY}`;\n }\n\n if (this.trackingControllerTabName) {\n pickSource.controllerTabName = this.trackingControllerTabName;\n }\n if (this.trackingPlayerName) {\n pickSource.playerName = this.trackingPlayerName;\n }\n if (this.trackingVariant) {\n pickSource.variant = this.trackingVariant;\n }\n pickSource.gameDetails = this.trackingGameDetails ?? TRACKING_NO_GAMEDETAILS;\n pickSource.sourceOfPick = this.sourceOfPick || NOT_APPLICABLE;\n pickSource.betDetails = pickSource.betDetails ? pickSource.betDetails + ';' + this.getBetDetails() : this.getBetDetails();\n pickSource.betType = this.optionGroup.name;\n pickSource.contentPosition = this.trackingPosition?.toString();\n pickSource.moduleType = this.trackingModuleType;\n pickSource.additional[trackingConstants.BET_CALENDER] = this.calenderTrack || NOT_APPLICABLE;\n pickSource.parentLeagueId = this.event.league.parentLeagueId;\n\n return pickSource;\n }\n\n private getBetDetails(): string {\n const groupId =\n this.event.betBuilderInfo?.betBuilderId && this.event.betBuilderInfo?.betBuilderProvider !== BetBuilderProvider.Default\n ? ';' + this.event.betBuilderInfo.betBuilderId\n : '';\n if (this.sourceOfPick === SourceOfPick.EmbeddedBetBuilder) {\n const provider =\n this.event.betBuilderInfo?.betBuilderProvider === BetBuilderProvider.Angstrom\n ? BetBuilderTrackingValues.AngstromSgpEmbedded\n : BetBuilderTrackingValues.InHouseFootballEmbedded;\n\n return provider + groupId;\n }\n if (this.sourceOfPick === SourceOfPick.OverlayBetBuilder) {\n const provider =\n this.event.betBuilderInfo?.betBuilderProvider === BetBuilderProvider.Angstrom\n ? BetBuilderTrackingValues.AngstromSgpOverlay\n : BetBuilderTrackingValues.InHouseFootballOverlay;\n\n return provider + groupId;\n }\n\n return this.betDetails || NOT_APPLICABLE;\n }\n}\n","