{"version":3,"file":"ond-marketing-landing.d181c65d3bbaa8b2.js","mappings":"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","names":["i0","ctx_r0","heading$","picture$","description","url$","links$","ondPageType","OndMarketingLandingComponent_ng_container_0_h1_2_Template","OndMarketingLandingComponent_ng_container_0_fin_block_image_11_Template","OndMarketingLandingComponent_ng_container_0_div_14_Template","OndMarketingLandingComponent_ng_container_0_fin_ond_marketing_cross_linking_18_Template","bookingWidgetLocations$","flightParams$","defaultCountryImage$","OndMarketingLandingComponent","constructor","route","ondMarketingOffersService","languageService","pageMetaService","configService","navigationMenuService","breadcrumbService","locationService","renderer","router","cmsTemplateService","schemaService","this","OndPageType","LANDING","url","urlMetaData","subscriptions","Subscription","ngOnInit","params","pipe","switchMap","paramsToFlightPair","finShare","createPairStream","campaignImage$","load","langValue","map","template","safeMap","t","main","filter","isPresent","findByType","CmsViewType","FRONT_PAGE_OFFER","campaign","picture","iif","origin","length","of","locations$","pair","getLocationData","destination","ondStream$","combineLatest","overrideBreadcrumb","flightParams","originLocationCode","prefillBookingWidgetField","destinationLocationCode","locationData","translate","constructOndHeadingPath","getLocationName","defaultCountryImage","mainLocationData","metaData$","getPageMeta","add","queryParams","subscribe","activeParams","title","urlSegments","pairsResponse","destinationAirport","originAirport","addFlightSchema","departureAirportName","departureAirportIataCode","arrivalAirportName","arrivalAirportIataCode","pairs","Object","values","OndMarketingRoutesPath","CITY_TO_CITY","path","lang","forEach","htmlDescription","detailText","ignoredSEOTitle","moveMetaAndLinksToHead","attributes","content","property","tagName","rel","href","unique","language","formattedLang","cfg","allowedLocales","replace","newPath","split","splice","hreflang","baseUrl","join","encodedUrl","encodeIgnoredSEOTitle","newUrl","navigate","setTitle","setDescription","locationCode","isDestinationCode","undefined","getAirportName","transformLocationCode","langKeyValue","translationData","flightType","getFlightType","ngOnDestroy","unsubscribe","originCountry","destinationCountry","isCountryCode","fetchLocationPairs","deprecatedDestinationsBreadcrumbItem$","currentPath$","dst","cp","totr","destinationLocationData","setBreadcrumb","country","countryUrl","cityName","destinationUrl","static","__ngFactoryType__","i1","i2","i3","i4","i5","i6","i7","core","VBU","selectors","decls","vars","consts","rf","ctx","OndMarketingLandingComponent_ng_container_0_Template","OndMarketingLandingViewPageGuard","sentryLogger","canActivate","_state","recurseLangParam","isInvalidRoute","deny","isValidCode","code","codes","hasNoValidRoutes","hasInvalidRoute","some","warn","navigateByUrl","RootPaths","OND_MARKETING_LANDING_ROOT","replaceUrl","jDH","factory","ɵfac","pairs$","OndMarketingListingComponent","LISTING","getCurrentCountry","data","key","OndMarketingListingComponent_h1_1_Template","OndMarketingListingComponent_fin_ond_marketing_cross_linking_3_Template","ondMarketingLandingRoutes","component","BaseLayoutComponent","children","HeaderComponent","outlet","COUNTRY_TO_COUNTRY","FROM_COUNTRY","FROM","CmsFooterComponent","OndMarketingLandingRouteModule","$C","G2t","imports","NavigationModule","BaseLayoutModule","CmsModule","RouterModule","forChild","OndMarketingLandingModule","OndMarketingOffersService","OndMarketingDataService","CommonModule","OndMarketingLandingCoreModule","UiTranslateModule","PipesModule","ComponentsModule"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/modules/ond-marketing-landing/components/ond-marketing-landing.component.html","./src/modules/ond-marketing-landing/components/ond-marketing-landing.component.ts","./src/modules/ond-marketing-landing/services/ond-marketing-landing-view-page.guard.ts","./src/modules/ond-marketing-landing/components/ond-marketing-listing.component.html","./src/modules/ond-marketing-landing/components/ond-marketing-listing.component.ts","./src/modules/ond-marketing-landing/ond-marketing-landing.routes.ts","./src/modules/ond-marketing-landing/ond-marketing-landing.module.ts"],"sourcesContent":["\n
\n

\n {{ heading$ | async }}\n

\n
\n\n \n \n\n
\n \n \n\n \n \n
\n
\n
\n\n \n \n\n \n \n\n \n
\n
\n","import { Component, OnDestroy, OnInit, Renderer2, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { combineLatest, iif, Observable, of, Subscription } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\n\nimport { LanguageService } from '@fcom/ui-translate';\nimport { ConfigService } from '@fcom/core/services';\nimport { CmsContent, CmsImageData, CmsTemplate, CmsViewType } from '@fcom/core-api';\nimport {\n BreadcrumbService,\n CmsPageComponentMetaData,\n NavigationMenuService,\n PageMetaService,\n SchemaService,\n} from '@fcom/common/services';\nimport { BreadcrumbItem } from '@fcom/common/interfaces';\nimport { isPresent, ReplaceParams, safeMap, unique, unsubscribe } from '@fcom/core/utils';\nimport {\n constructOndHeadingPath,\n encodeIgnoredSEOTitle,\n getFlightType,\n getLocationName,\n isCountryCode,\n isDestinationCode,\n transformLocationCode,\n} from '@fcom/ond-marketing-landing-core/services/utils';\nimport {\n FlightPair,\n OndLocationData,\n OndLocationsResponse,\n OndMarketingRoutesPath,\n OndPageType,\n OndPairEnhancedResponse,\n} from '@fcom/ond-marketing-landing-core/interfaces';\nimport { OndMarketingOffersService } from '@fcom/ond-marketing-landing-core/services';\nimport { finShare } from '@fcom/rx';\nimport { BookingLocationCodes } from '@fcom/common/interfaces/booking';\nimport { CmsTemplateService, findByType } from '@fcom/cms';\n\n@Component({\n templateUrl: 'ond-marketing-landing.component.html',\n styleUrls: ['ond-marketing-landing.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class OndMarketingLandingComponent implements OnInit, OnDestroy {\n picture$: Observable;\n heading$: Observable;\n flightParams$: Observable;\n locations$: Observable;\n bookingWidgetLocations$: Observable;\n links$: Observable;\n ondPageType: OndPageType = OndPageType.LANDING;\n description: string;\n url$ = this.route.url;\n urlMetaData: Array = [];\n campaignImage$: Observable;\n defaultCountryImage$: Observable;\n private subscriptions: Subscription = new Subscription();\n\n constructor(\n private route: ActivatedRoute,\n private ondMarketingOffersService: OndMarketingOffersService,\n private languageService: LanguageService,\n private pageMetaService: PageMetaService,\n private configService: ConfigService,\n private navigationMenuService: NavigationMenuService,\n private breadcrumbService: BreadcrumbService,\n private locationService: Location,\n private renderer: Renderer2,\n private router: Router,\n private cmsTemplateService: CmsTemplateService,\n private schemaService: SchemaService\n ) {}\n\n ngOnInit(): void {\n this.flightParams$ = this.route.params.pipe(\n switchMap((params) => this.paramsToFlightPair(params)),\n finShare()\n );\n\n this.links$ = this.flightParams$.pipe(\n switchMap((params) => {\n return this.createPairStream(params);\n }),\n finShare()\n );\n\n this.campaignImage$ = this.cmsTemplateService.load(`/${this.languageService.langValue}`).pipe(\n map((template: CmsTemplate) => safeMap(template, (t: CmsTemplate) => t.main)),\n filter(isPresent),\n finShare(),\n findByType(CmsViewType.FRONT_PAGE_OFFER, false),\n map((campaign: CmsContent) => campaign?.picture || null)\n );\n\n this.defaultCountryImage$ = this.flightParams$.pipe(\n switchMap((params) => iif(() => params.origin.length > 2, of(null), this.campaignImage$))\n );\n\n this.locations$ = this.flightParams$.pipe(\n switchMap((pair) => {\n const vitalLocations: string[] = pair.destination ? [pair.origin, pair.destination] : [pair.origin];\n return this.ondMarketingOffersService.getLocationData(vitalLocations);\n }),\n finShare()\n );\n\n const ondStream$ = combineLatest([this.flightParams$, this.locations$]).pipe(finShare());\n\n this.overrideBreadcrumb(ondStream$);\n\n this.bookingWidgetLocations$ = this.flightParams$.pipe(\n switchMap((flightParams) => {\n return of([\n {\n originLocationCode: this.prefillBookingWidgetField(flightParams.origin),\n destinationLocationCode: this.prefillBookingWidgetField(flightParams.destination),\n },\n ]);\n })\n );\n\n this.heading$ = ondStream$.pipe(\n switchMap(([flightParams, locationData]) => {\n return this.languageService.translate(constructOndHeadingPath('bookFlights', flightParams), {\n origin: getLocationName(flightParams.origin, locationData),\n destination: getLocationName(flightParams.destination, locationData),\n originLocationCode: flightParams.origin,\n destinationLocationCode: flightParams.destination,\n });\n }),\n finShare()\n );\n\n this.picture$ = combineLatest([ondStream$, this.defaultCountryImage$]).pipe(\n map(([[flightParams, locationData], defaultCountryImage]) => {\n const mainLocationData = locationData[flightParams.destination] || locationData[flightParams.origin];\n return (mainLocationData as OndLocationData)?.picture\n ? (mainLocationData as OndLocationData).picture\n : defaultCountryImage;\n })\n );\n const metaData$ = ondStream$.pipe(\n switchMap(([flightParams, locationData]): Observable => this.getPageMeta(flightParams, locationData))\n );\n\n this.subscriptions.add(\n combineLatest([this.flightParams$, metaData$, this.route.queryParams, this.route.url, this.links$]).subscribe(\n ([activeParams, [title, description, url], queryParams, urlSegments, pairsResponse]) => {\n if (activeParams.destinationAirport && activeParams.originAirport) {\n this.schemaService.addFlightSchema({\n departureAirportName: activeParams.originAirport,\n departureAirportIataCode: activeParams.origin,\n arrivalAirportName: activeParams.destinationAirport,\n arrivalAirportIataCode: activeParams.destination,\n });\n }\n\n const pairs = Object.values(pairsResponse);\n if (OndMarketingRoutesPath.CITY_TO_CITY === urlSegments[0].path) {\n const lang: string = this.languageService.langValue;\n pairs\n .filter((pair) => lang === pair.lang)\n .forEach((pair) => {\n if (pair.title) {\n title = pair.title;\n }\n\n if (pair.htmlDescription) {\n description = pair.htmlDescription;\n }\n\n if (pair.detailText) {\n this.description = pair.detailText;\n }\n });\n }\n\n if (!activeParams.ignoredSEOTitle) {\n const encodedUrl = encodeIgnoredSEOTitle(url);\n const orgPath = this.router.url.split('?')[0] ? this.router.url.split('?')[0] : this.router.url;\n const newUrl = `${orgPath}/${encodedUrl}`;\n this.router.navigate([newUrl], { queryParams: queryParams });\n } else {\n this.pageMetaService.moveMetaAndLinksToHead(\n [\n {\n attributes: {\n content: this.router.url,\n property: 'og:url',\n },\n tagName: 'meta',\n },\n {\n attributes: {\n rel: 'canonical',\n href: this.router.url,\n },\n tagName: 'link',\n },\n ...pairs\n .map((pair) => pair.lang)\n .filter(unique)\n .map((language) => {\n const formattedLang = this.configService.cfg.allowedLocales[language]?.replace('_', '-');\n const pathArray = this.locationService.path().split('/');\n const newPath = pathArray.splice(2);\n\n return {\n attributes: {\n rel: 'alternate',\n hreflang: formattedLang ?? language,\n href: `${this.configService.cfg.baseUrl}/${language}/${newPath.join('/')}`,\n },\n tagName: 'link',\n };\n }),\n ],\n this.renderer\n );\n }\n this.pageMetaService.setTitle(title);\n this.pageMetaService.setDescription(description);\n }\n )\n );\n }\n\n prefillBookingWidgetField(locationCode: string): string | undefined {\n return isDestinationCode(locationCode) ? locationCode : undefined;\n }\n\n paramsToFlightPair(params: Params): Observable {\n return combineLatest([\n this.ondMarketingOffersService.getAirportName(\n transformLocationCode(params.originLocationCode),\n this.languageService.langKeyValue\n ),\n this.ondMarketingOffersService.getAirportName(\n transformLocationCode(params.destinationLocationCode),\n this.languageService.langKeyValue\n ),\n ]).pipe(\n map(([originAirport, destinationAirport]) => {\n return {\n origin: transformLocationCode(params.originLocationCode) || '',\n originAirport: originAirport,\n destinationAirport: destinationAirport,\n destination: transformLocationCode(params.destinationLocationCode) || '',\n ignoredSEOTitle: params.ignoredSEOTitle || '',\n };\n }),\n finShare()\n );\n }\n\n getPageMeta(flightParams: FlightPair, locationData: OndLocationsResponse): Observable {\n const translationData: ReplaceParams = {\n origin: getLocationName(flightParams.origin, locationData),\n originLocationCode: flightParams.origin,\n destination: getLocationName(flightParams.destination, locationData),\n destinationLocationCode: flightParams.destination,\n };\n\n const flightType = getFlightType(flightParams);\n return combineLatest([\n this.languageService.translate(`ondMarketing.metaData.${flightType}.title`, translationData),\n this.languageService.translate(`ondMarketing.metaData.${flightType}.description`, translationData),\n this.languageService.translate(`ondMarketing.seoUrl.${getFlightType(flightParams, false)}`, translationData),\n ]);\n }\n\n ngOnDestroy(): void {\n this.subscriptions = unsubscribe(this.subscriptions);\n }\n\n private createPairStream(flightParams: FlightPair): Observable {\n let originLocationCode: string | undefined;\n let destinationLocationCode: string | undefined;\n let originCountry: string | undefined;\n let destinationCountry: string | undefined;\n\n if (!isCountryCode(flightParams.origin)) {\n originLocationCode = flightParams.origin;\n destinationLocationCode = flightParams.destination ? flightParams.destination : undefined;\n } else {\n originCountry = flightParams.origin;\n destinationCountry = flightParams.destination ? flightParams.destination : undefined;\n }\n\n return this.ondMarketingOffersService.fetchLocationPairs({\n origin: originLocationCode,\n destination: destinationLocationCode,\n originCountry,\n destinationCountry,\n });\n }\n\n private overrideBreadcrumb(ondStream$: Observable<[FlightPair, OndLocationsResponse]>) {\n this.subscriptions.add(\n combineLatest([\n this.navigationMenuService.deprecatedDestinationsBreadcrumbItem$,\n this.navigationMenuService.currentPath$,\n this.languageService.translate('flightsTo'),\n ondStream$,\n ]).subscribe(([dst, cp, totr, [flightParams, locationData]]) => {\n if (isDestinationCode(flightParams.origin) && isDestinationCode(flightParams.destination)) {\n const destinationLocationData = locationData[flightParams.destination] as OndLocationData;\n const originLocationData = locationData[flightParams.origin] as OndLocationData;\n const countryCrumb: BreadcrumbItem = {\n title: destinationLocationData.country,\n url: destinationLocationData.countryUrl,\n };\n const destinationCrumb: BreadcrumbItem = {\n title: `${totr} ${destinationLocationData.cityName}`,\n url: destinationLocationData.destinationUrl,\n };\n const currentCrumb: BreadcrumbItem = {\n title: `${originLocationData.cityName} ${destinationLocationData.cityName}`,\n url: cp,\n };\n\n this.breadcrumbService.setBreadcrumb([dst, countryCrumb, destinationCrumb, currentCrumb]);\n } else {\n this.breadcrumbService.setBreadcrumb([dst]);\n }\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\n\nimport { recurseLangParam } from '@fcom/common/utils/route-utils';\nimport { SentryLogger, RootPaths } from '@fcom/core';\nimport { isCountryCode, isDestinationCode } from '@fcom/ond-marketing-landing-core/services/utils';\n\n@Injectable()\nexport class OndMarketingLandingViewPageGuard implements CanActivate {\n constructor(\n private sentryLogger: SentryLogger,\n private router: Router\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): boolean {\n const lang = recurseLangParam(route);\n const originLocationCode = route.params['originLocationCode'] || '';\n const destinationLocationCode = route.params['destinationLocationCode'] || '';\n\n if (this.isInvalidRoute([originLocationCode, destinationLocationCode])) {\n return this.deny(lang);\n }\n\n return true;\n }\n\n // @TODO: check that page for origin and destination is actually valid when data is available\n private isValidCode(code: string): boolean {\n return isCountryCode(code) || isDestinationCode(code);\n }\n\n private isInvalidRoute(codes: string[]): boolean {\n const hasNoValidRoutes = codes.filter((code) => this.isValidCode(code)).length === 0;\n const hasInvalidRoute = codes.some((code) => code && !this.isValidCode(code));\n\n return hasNoValidRoutes || hasInvalidRoute;\n }\n\n private deny(lang: string): false {\n this.sentryLogger.warn('Someone tried to access OnD marketing landing page without valid flight pair parameters');\n this.router.navigateByUrl(`/${lang}/${RootPaths.OND_MARKETING_LANDING_ROOT}`, { replaceUrl: true });\n return false;\n }\n}\n","
\n

\n {{ heading$ | async }}\n

\n\n \n \n
\n","import { Component, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { Observable, Subscription } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\nimport { LanguageService } from '@fcom/ui-translate';\nimport { unsubscribe } from '@fcom/core/utils';\nimport { PageMetaService } from '@fcom/common/services';\nimport { OndDataStream, OndPageType, OndPairEnhancedResponse } from '@fcom/ond-marketing-landing-core/interfaces';\nimport { OndMarketingOffersService } from '@fcom/ond-marketing-landing-core/services';\nimport { getCurrentCountry } from '@fcom/ond-marketing-landing-core/services/utils';\n\n@Component({\n selector: 'fin-ond-marketing-listing',\n templateUrl: 'ond-marketing-listing.component.html',\n})\nexport class OndMarketingListingComponent implements OnInit, OnDestroy {\n heading$: Observable;\n ondStream$: Observable;\n pairs$: Observable;\n ondPageType: OndPageType = OndPageType.LISTING;\n private subscriptions: Subscription = new Subscription();\n\n constructor(\n readonly route: ActivatedRoute,\n private ondMarketingOffersService: OndMarketingOffersService,\n private languageService: LanguageService,\n private pageMetaService: PageMetaService,\n private renderer: Renderer2\n ) {}\n\n ngOnInit(): void {\n this.pageMetaService.moveMetaAndLinksToHead([], this.renderer);\n\n if (this.languageService.langValue === 'en') {\n this.pairs$ = this.ondMarketingOffersService.fetchLocationPairs({\n originCountry: 'fi',\n lang: this.languageService.langValue,\n });\n } else {\n this.pairs$ = this.ondMarketingOffersService.fetchLocationPairs({\n originCountry: getCurrentCountry(this.languageService.langValue),\n lang: this.languageService.langValue,\n });\n }\n\n this.heading$ = this.route.data.pipe(\n switchMap((data) => {\n return this.languageService.translate(`ondMarketing.ribbon.${data.key}`);\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions = unsubscribe(this.subscriptions);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { HeaderComponent, NavigationModule } from '@fcom/common/components';\nimport { BaseLayoutComponent, BaseLayoutModule } from '@fcom/common/components/base-layout';\nimport { CmsModule, CmsFooterComponent } from '@fcom/cms/components';\nimport { OndMarketingRoutesPath } from '@fcom/ond-marketing-landing-core';\n\nimport { OndMarketingLandingComponent } from './components/ond-marketing-landing.component';\nimport { OndMarketingLandingViewPageGuard } from './services/ond-marketing-landing-view-page.guard';\nimport { OndMarketingListingComponent } from './components/ond-marketing-listing.component';\n\nexport const ondMarketingLandingRoutes: Routes = [\n {\n path: '',\n component: BaseLayoutComponent,\n children: [\n { path: '', component: HeaderComponent, outlet: 'header' },\n {\n path: `${OndMarketingRoutesPath.CITY_TO_CITY}`,\n component: OndMarketingListingComponent,\n data: { key: 'cityToCity' },\n },\n {\n path: `${OndMarketingRoutesPath.CITY_TO_CITY}/:originLocationCode/:destinationLocationCode`,\n component: OndMarketingLandingComponent,\n canActivate: [OndMarketingLandingViewPageGuard],\n },\n {\n path: `${OndMarketingRoutesPath.CITY_TO_CITY}/:originLocationCode/:destinationLocationCode/:ignoredSEOTitle`,\n component: OndMarketingLandingComponent,\n canActivate: [OndMarketingLandingViewPageGuard],\n },\n {\n path: `${OndMarketingRoutesPath.COUNTRY_TO_COUNTRY}`,\n component: OndMarketingListingComponent,\n data: { key: 'countryToCountry' },\n },\n {\n path: `${OndMarketingRoutesPath.COUNTRY_TO_COUNTRY}/:originLocationCode/:destinationLocationCode`,\n component: OndMarketingLandingComponent,\n canActivate: [OndMarketingLandingViewPageGuard],\n },\n {\n path: `${OndMarketingRoutesPath.COUNTRY_TO_COUNTRY}/:originLocationCode/:destinationLocationCode/:ignoredSEOTitle`,\n component: OndMarketingLandingComponent,\n canActivate: [OndMarketingLandingViewPageGuard],\n },\n {\n path: `${OndMarketingRoutesPath.FROM_COUNTRY}`,\n component: OndMarketingListingComponent,\n data: { key: 'fromCountry' },\n },\n {\n path: `${OndMarketingRoutesPath.FROM_COUNTRY}/:originLocationCode`,\n component: OndMarketingLandingComponent,\n canActivate: [OndMarketingLandingViewPageGuard],\n },\n {\n path: `${OndMarketingRoutesPath.FROM_COUNTRY}/:originLocationCode/:ignoredSEOTitle`,\n component: OndMarketingLandingComponent,\n canActivate: [OndMarketingLandingViewPageGuard],\n },\n {\n path: `${OndMarketingRoutesPath.FROM}`,\n component: OndMarketingListingComponent,\n data: { key: 'from' },\n },\n {\n path: `${OndMarketingRoutesPath.FROM}/:originLocationCode`,\n component: OndMarketingLandingComponent,\n canActivate: [OndMarketingLandingViewPageGuard],\n },\n {\n path: `${OndMarketingRoutesPath.FROM}/:originLocationCode/:ignoredSEOTitle`,\n component: OndMarketingLandingComponent,\n canActivate: [OndMarketingLandingViewPageGuard],\n },\n { path: '', component: CmsFooterComponent, outlet: 'footer' },\n ],\n },\n];\n\n@NgModule({\n imports: [NavigationModule, BaseLayoutModule, CmsModule, RouterModule.forChild(ondMarketingLandingRoutes)],\n declarations: [],\n providers: [OndMarketingLandingViewPageGuard],\n exports: [RouterModule],\n})\nexport class OndMarketingLandingRouteModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { UiTranslateModule } from '@fcom/ui-translate';\nimport { CmsModule } from '@fcom/cms';\nimport { ComponentsModule } from '@fcom/common/components';\nimport { PipesModule } from '@fcom/common/pipes/pipes.module';\nimport {\n OndMarketingLandingCoreModule,\n OndMarketingOffersService,\n OndMarketingDataService,\n} from '@fcom/ond-marketing-landing-core';\nimport { OndMarketingListingComponent } from '@fcom/ond-marketing-landing/components/ond-marketing-listing.component';\n\nimport { OndMarketingLandingRouteModule } from './ond-marketing-landing.routes';\nimport { OndMarketingLandingComponent } from './components/ond-marketing-landing.component';\n\n@NgModule({\n imports: [\n OndMarketingLandingRouteModule,\n CommonModule,\n OndMarketingLandingCoreModule,\n UiTranslateModule,\n PipesModule,\n ComponentsModule,\n CmsModule,\n ],\n providers: [OndMarketingOffersService, OndMarketingDataService],\n declarations: [OndMarketingLandingComponent, OndMarketingListingComponent],\n exports: [OndMarketingLandingComponent],\n})\nexport class OndMarketingLandingModule {}\n"],"x_google_ignoreList":[]}