{"version":3,"file":"default-src_modules_common-booking_index_ts.d69438ca71a9553f.js","mappings":"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","names":["i0","flight_r2","_r1","$implicit","ctx_r2","flightSelected","emit","$event","changeSeats","travelers$","i_r4","slideIndex$","seatSelections$","cartOrOrder$","flightAncillaryAvailability$","ancillaryLoader$","_r5","continue","translationKey_r6","key","ButtonPosition","GRID","seatMapPreloadingEnabled","selectionLoading$","hasSelections$","ButtonTheme","LIGHT_PRIMARY_CTA_HEATHER","DARK_PRIMARY_NORDIC_BLUE","totalPrice$","itineraryModal","data","selectionPhase$","outbound$","inbound$","locations$","SeatPreSelectionComponent","constructor","store$","gtmService","configService","this","Category","ModalButtons","SeatMapStatus","locations","passengersWithPetcIncompatibleSeats$","of","preSelectClosed","EventEmitter","seatChanged","BehaviorSubject","isSideBarOpen","itineraryModalClosed$","subscriptions","Subscription","open","translationKey$","showFlightCard$","AncillaryLoaderStatus","OFF","subtotalPriceSub$","ReplaySubject","ngOnInit","cfg","enableBookingFlowSeatMapPreFetch","passengers$","pipe","map","cartOrOrder","passengers","subTotalPrice$","calculateSubTotalPrice","SEAT","combineLatest","cartTotalPrice$","totalPrice","subTotalPrice","amount","String","Number","currencyCode","selections","Object","values","some","selection","s","seatNumber","finShare","add","flights$","slideIndex","flights","subscribe","currentFlight","updateSubTotal","id","hasSelections","setTitle","length","subTotalChange","fragmentId","next","category","take","isLast","trackEvent","confirmSelection","setTimeout","skipSeatSelection","trackElementState","dispatch","SeatMapActions","e","flightId","viewDetails","getBoundDetailsModalData","ngOnDestroy","unsubscribe","seatSelections","allSeatSelections","priceAndCurrencyCode","filter","seatSelection","variant","pricePerItem","paid","reduce","combined","currentSeatSelection","price","undefined","elementName","state","cart","seatMapEvent","ElementTypes","BUTTON","ElementActions","CLICK","flightInfo","getSeatMapFlightInfoFromCart","flightsTrackBy","_index","flight","static","__ngFactoryType__","i1","i2","i3","_angular_core__WEBPACK_IMPORTED_MODULE_12__","VBU","selectors","inputs","tripType$","purchaseFlow$","combinedSeats","outputs","decls","vars","consts","template","rf","ctx","SeatPreSelectionComponent_div_15_Template","SeatPreSelectionComponent_ng_container_20_Template","SeatPreSelectionComponent_fin_itinerary_24_Template","LIGHT_SECONDARY_OUTLINE","DONE","ctx_r1","openSurvey","survey","MultiCitySurveyComponent","alwaysRender","QualtricsSurveys","MULTI_CITY","enableSurvey$","cartState$","cartState","startWith","order$","orderData","switchMap","order","cartData","checkIfSurveyShouldBeShown","enableMultiCity","tripType","getProductTripTypeFromBoundsForGA4","bounds","GA4TripType","MULTICITY","_angular_core__WEBPACK_IMPORTED_MODULE_7__","MultiCitySurveyComponent_ng_container_0_Template","policy_r2","_c0","rebookPolicy_r1","_c1","cancellationPolicy_r3","ctx_r4","inboundBrandName$","showHighlightedContent$","policy_r4","inbound","value","OfferPolicyComponent_ng_template_4_p_13_Template","outbound","label","outboundBrandName$","typeClass_r6","isOneWay$","mapRebookPolicy","fareFamily","translatedBenefitRows","find","row","mapCancellationPolicy","OfferPolicyComponent","v","fareFamilies$","Boolean","fareFamilies","fareFamilyBrandName","isOneWay","rebookAndCancellationPolicies$","rebook","code","cancel","name","brandName","core","OfferPolicyComponent_section_0_Template","OfferPolicyComponent_section_2_Template","OfferPolicyComponent_ng_template_4_Template","tmp_1_0","tmp_2_0","imageData_r1","aspectRatio$","SustainablityInfoModalComponent_ng_container_2_div_1_Template","article_r3","picture","subjectTaxonomyTags","join","safArticle$","SustainablityInfoModalComponent","fragmentService","mediaQueryService","closeModal","getFragment","isBreakpoint$","isMobile","modalOpen","SustainablityInfoModalComponent_ng_container_2_Template","CLOSE","BookingCommonModule","$C","G2t","CommonModule","ComponentsModule","CommonBookingComponentsModule","PipesModule","GtmModule","CmsModule","UiTranslateModule","UiComponentsModule","IconsModule","ModalModule","QualtricsModule","BoundSelectionErrorMessageComponent","i4","BookingFlightComponent","i5","i6","i7","i8","i9","i10","i11","i12","i13","GrandTotalComponent","i14","i15","SustainabilityTripMessageComponent","i16","i17","i18","i19","i20","FlightSelectionWarningComponent","i21","i22","i23","i24","ctx_r0","listTitle","_r2","product_r4","index_r5","index","onSelectProduct","count$","status$","ButtonState","UPDATING","title","description","image","lowestPrice","hideZeroPrices","originalPrice","price$","purchasedCount$","productCardLocalizationsPrefix","useNewProductCardLayout","SvgLibraryIcon","ARROW_RIGHT","PLUS","OK","isSpecialUpsellProduct","LIGHT_PRIMARY_NORDIC_BLUE","hideViewButton","maxPurchasesDone$","notAvailable$","noQuotaLeft","notEligibleWithIncompatibleSeat","focusOnProductBtn$","focusOnViewDetails$","tmp_25_0","productCardNotification$","theme","tmp_26_0","icon","tmp_27_0","messageKey","tmp_28_0","titleKey","productTag","localizationKey","isLaptopUp$","ProductListComponent_ng_container_0_Conditional_1_Template","ProductListComponent_ng_container_0_ng_container_3_Template","tabletShowTwoPerRow","products_r6","LoaderType","INLINE","ProductListComponent","NotificationTheme","selectProduct","products$","bounds$","products","sendEcommerceImpressionsEvent","ecommerceEventGA4","GtmEvent","VIEW_ITEM_LIST","getGA4ProductsFromSmpProducts","purchaseFlow","sendEcommerceClickEvent","matchedProduct","product","SELECT_ITEM","gtmProducts","BAGGAGE","resolveGtmCategory","brand","FINNAIR","list","GtmPurchaseFlow","BOOKING","CORPORATE","includes","GtmEcommerceList","BOOKING_SMP","MMB_VIEW_PNR","position","ecommerceEvent","PRODUCT_IMPRESSIONS","GtmEcommerceMeasurement","IMPRESSIONS","gtmProductName","gtmProduct","enhancedEcommerceProductClickOrDetailView","PRODUCT_CLICK","_angular_core__WEBPACK_IMPORTED_MODULE_9__","ProductListComponent_ng_container_0_Template","ProductListComponent_ng_template_2_Template","loader_r7","message_r1","teaserTitle","teaserText","localSettings","iconName","TripMessageComponent","tripMessage$","fragmentKey","_angular_core__WEBPACK_IMPORTED_MODULE_2__","TripMessageComponent_ng_container_0_Template","bound","service","isShortHaulFlight","INFO","IncludedProductItemComponent","uuid","includePaddings","expandOpen","disabled","displaySeatReassignMessage","getIconForService","getIconForServiceCategory","buttonTranslationKey","additionalTitle","ngContentSelectors","IncludedProductItemComponent_fin_included_product_item_summary_12_Template","IncludedProductItemComponent_div_16_Template","upsell","CHEVRON_DOWN","openViewDetails","type","departure","dateTime","cabin","locationCode","cityName","arrival","tails","isByBusOnly","uniqueAirlineNames","duration","stops","itinerary","BoundType","isBookingFlow","getTails","getCabinClass","cabinClass","_angular_core__WEBPACK_IMPORTED_MODULE_3__","BookingFlightComponent_fcom_flight_card_0_Template","messageKey_r3","AncillarySubviewComponent_ng_container_18_ng_container_3_Template","ctx_r3","updateSlideIndex","subtitleMessageKey$","boundsOrFlights","closeSubview","closeSidebar","purchasedServices$","showFareFamilyInAncillarySidebar","boundOrFlightAncillaryAvailability$","skipEnabled","skipText","maxedOutForFragment$","_r8","reassignFreeSeats","ARROW_BACK","_r9","onClose","AncillarySubviewComponent_fcom_cta_button_29_span_9_ng_container_12_span_1_Template","AncillarySubviewComponent_fcom_cta_button_29_span_9_ng_container_12_span_2_Template","AncillarySubviewComponent_fcom_cta_button_29_span_9_ng_container_10_Template","AncillarySubviewComponent_fcom_cta_button_29_span_9_ng_container_12_Template","reassignFreeSeatsVisible$","hideSideBar","_r6","handleSecondaryCtaClick","showFlightCard_r7","finLet","handleCtaClick","AncillarySubviewComponent_fcom_cta_button_29_ng_container_8_Template","AncillarySubviewComponent_fcom_cta_button_29_span_9_Template","showCtaButton$","ctaButtonTitle","disableButtons$","isTabletUp$","secondaryButtonDisabled$","_r10","AncillarySubviewComponent_fcom_modal_31_fin_itinerary_2_Template","_r11","closeConfirmModal","confirmModalData_r12","ngIf","confirmData","confirmationModalTranslationKeys_r13","CUSTOM","firstContentParagraph","secondContentParagraph","closeButton","_c7","continueButton","AncillarySubviewComponent_ng_container_32_fcom_modal_1_Template","confirmationModalTranslationKeys","AncillarySubviewComponent","elementRef","changeDetectorRef","renderer","scrollService","mediaqueryService","STEPS","BOOKING_STEPS","ButtonSize","IconPosition","ANIMATION_DURATION_MS","AirOffersStatus","onlyShowAncillaries","confirmModalData$","hideChangeButton","close","changeStep","reassignSeats","secondaryButtonClick","flightOrBoundSelected","subViewVisible$","basketOpen$","slideIndexSubject$","showCtaButtonSubject$","boundsOrFlightsSubject$","categorySubject$","customDataSubject$","subscription","show","delay","subViewVisibleDelayed$","distinctUntilChanged","keepState","visible","data$","initialSlideIndex","initializeCtaButtonTitle","services","unpaid","hasUnpaidItems","subTotal","boundsOrFlights$","prev","indexToGo","currentBoundOrFlight","setReassignSeatsEligible","ngOnChanges","changes","currentValue","visible$","setSubTotalPrice","scrollTop","scrollContainer","scrollToImmediate","resize$","fromEvent","window","debounceTime","bindCtaButtonHeightFixHandler","bindBasketHandling","subview","COVER","detectChanges","openBasket","closeBasket","onEdit","step","showFlightCard","cleanUp","content","showNewCta","currentBoundOrFlightId","unpaidSeats$","getUnpaidSeatsBySegmentId","checkInEligibilities$","getCheckInEligibilities","unpaidSeats","checkInEligibilities","hasCheckInEligibility","eligibility","checkinWindow","reason","hasUnpaidSeatForSegment","boundItem","segments","segment","showReassignFreeSeats","retry$","Subject","merge","mapTo","RETRY_TIMES","WAIT_TIME_IN_MS","nativeElement","element","querySelector","ctaButtonHeightFixRef","rect","getBoundingClientRect","setStyle","height","topPaddingToExclude","hideModal$","event","target","innerWidth","width","currentFlightId","_angular_core__WEBPACK_IMPORTED_MODULE_13__","viewQuery","AncillarySubviewComponent_ng_container_18_Template","AncillarySubviewComponent_fin_ancillary_sidebar_28_Template","AncillarySubviewComponent_fcom_cta_button_29_Template","AncillarySubviewComponent_fcom_modal_31_Template","AncillarySubviewComponent_ng_container_32_Template","subviewName","subviewContext","tmp_8_0","currentStep$","phase","ANCILLARIES","DARK_TERTIARY_GHOST","_c6","ARROW_LEFT","LEFT","unpaidServices$","TabStateService","selectedTabId$","init","tabGroupId","pseudoLocal","isPresent","clear","PseudoLocalActions","getSelectedTabId","setSelectedTabId","tabId","_angular_core__WEBPACK_IMPORTED_MODULE_6__","jDH","factory","ɵfac","LIGHT_TERTIARY_GHOST","surveyButtonText","_c2","EXTERNAL_TAB","RIGHT","ButtonMode","FILL_MOBILE","qualtricsUrl$","languageService","enableSurvey","qualtricsKey","ctaClick","langKey","translate","params","getQualtricsUrl","langValue","_angular_core__WEBPACK_IMPORTED_MODULE_4__","fromFragment","ctaButtonText","BoundSelectionErrorMessageComponent_ng_container_1_Template","BoundSelectionErrorMessageComponent_ng_template_2_Template","BoundSelectionErrorMessageComponent_Conditional_6_Template","default_r3","TabHeaderComponent","startWith$","tabs","safeMap","tab","focus","ngAfterContentInit","initTabs","tabEventSubscriptions","subscribeToSelections","t","clicked$","subscribeToSelectActions","actions$","selections$","selectedTab","selectedTabIndex$","toArray","findIndex","withLatestFrom","action","previousIndex","selectNextIndex","lastIndex","SelectAction","PREVIOUS","NEXT","LAST","idx","contentQueries","dirIndex","TabLabelComponent","EMBEDDED","shouldCloseSubview","SubviewComponent_div_0_ng_container_8_Template","SubviewComponent_div_0_ng_template_11_Template","enableScroll","mainContent_r3","SubviewComponent","_open","coerceBooleanProperty","_openState","openChange","openSubview","ngZone","document","subviewId","closeSubViewEvent","labelledBy","removeClass","body","emitEvent","bindEventListeners","onModalFocus","addClass","runOutsideAngular","listener","run","addEventListener","removeFocusListener","removeEventListener","forceFocus","el","contains","stopPropagation","focusableElements","Array","from","querySelectorAll","HTMLElement","isVisible","cleanUpEventHandlers","DOCUMENT","_angular_core__WEBPACK_IMPORTED_MODULE_5__","SubviewComponent_div_0_Template","SubViewModule","TabComponent","selected$","_angular_core__WEBPACK_IMPORTED_MODULE_1__","TabComponent_div_0_Template","getRequests","fragmentIds","serviceSelection","serviceSelectionToUpdateRequest","snapshot","serviceSelectionsForFragment","getMessage","toString","toUpperCase","contentKey","getToasterMessages","errorKey","error","ALERT","containsUnpaidSeats","getServiceData","CABIN_BAGGAGE","SPORT","SAF","PET","keySuffix","capitalizeWord","b","all","concat","mapToSeatRequest","selectionsForFlight","keys","travelerId","seatType","isExitSeat","characteristics","SeatCharacteristics","EXIT","quantity","seatSelectionsForFlight","LOUNGE","WIFI","MEAL","CustomServiceType","JOURNEY","c","SelectionPhase","OUTBOUND","INBOUND","WARNING","warningNotificationCtaText","warningNotificationMessage","showWarningNotification","FlightSelectionWarningComponent_fcom_notification_5_Template","FLIGHTS_UNAVAILABLE","TabsModule","subTitle","CHECKMARK","FIRST","keyDownToSelectAction","KeyCodes","HOME","END","keyUpToSelectAction","hostSelected","onKeyDown","fireAction","keyDown","getKeyCodeFromEvent","onKeyUp","keyUp","selected","onClick","mode","TabLabelComponent_span_5_Template","TabLabelComponent_span_6_Template","TabLabelComponent_fcom_icon_7_Template","checked","AncillarySeatMapComponent","availability$","canClearSeats","preSelectedPax$","notEligibleWhenCheckInClosed","subtotalChange","retrySeatmap","finishedReassigningSeats","seatSelected","isIncludedSeatSelection","includedSeats","servicesForFlightAndTravelerId","emitFinishedReassigningSeats","flightIsActive$","_r3","onChangeFlightBound","activeBoundIndex","CHEVRON_LEFT","CHEVRON_RIGHT","AncillaryFlightBoundSelectorComponent_div_0_button_16_Template","AncillaryFlightBoundSelectorComponent_div_0_span_18_Template","AncillaryFlightBoundSelectorComponent_div_0_button_19_Template","operatingAirline","isBusOnlyConnections","focusOnDetails$","_r7","_c3","AncillaryFlightBoundSelectorComponent_fin_flight_card_2_fcom_button_3_Template","AncillaryFlightBoundSelectorComponent_fin_flight_card_2_fcom_button_11_Template","AncillaryFlightBoundSelectorComponent","selectIndex","boundOrFlight","addition","execTimes","AncillaryFlightBoundSelectorComponent_div_0_Template","AncillaryFlightBoundSelectorComponent_fin_flight_card_2_Template","ctaSideBarClosed","boundOrFlight_r3","confirmedOrCheckedInSegments$","tmp_13_0","service$","benefitTranslations$","includedBenefits_r4","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_1_ng_container_1_Template","noAncillaryBecauseAirlineKey$","_c5","noAncillaryBecauseAirline_r5","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_4_fcom_notification_1_ng_container_3_span_1_Template","noAncillaryBecauseAirlineForFragment_r6","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_4_fcom_notification_1_ng_container_3_Template","last_r8","eligibility_r7","noAncillaryBecauseAirlineForFragment$","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_4_fcom_notification_1_Template","priorityBasedEligibilities_r9","_c4","service_r10","translations$","includedService_r11","displayName","tmp_18_0","maxBaggageWeight","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_div_2_div_2_Template","category$","inCart_r12","service_r13","originalPricePerItem","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_div_3_ng_container_3_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_div_3_span_10_Template","SHOPPING_CART","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_p_1_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_div_2_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_div_3_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_div_4_Template","included","added","size","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_ng_container_1_Template","services_r14","eligibility_r15","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_14_fcom_notification_1_Template","_c8","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_11_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_ng_container_14_Template","tmp_11_0","updatedServices$","noService_r16","_r17","index_r18","changeSelectedIndex","services_r19","_c9","displayAsBoundBased$","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_11_ng_container_1_fcom_notification_1_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_11_ng_container_1_ng_template_4_Template","editButton_r20","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_11_ng_container_1_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_1_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_4_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_7_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_template_9_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_ng_container_11_Template","includedBenefits$","showService_r21","services$","AncillarySidebarComponent_ng_container_7_div_1_div_9_Template","AncillarySidebarComponent_ng_container_7_div_1_ng_container_28_Template","showFareFamily","tails$","isBusOnlyConnections$","isTrainOnlyConnections$","priorityBasedEligibilities$","middleNotificationTranslationKey_r22","AncillarySidebarComponent_ng_container_7_ng_container_2_fcom_notification_1_Template","middleNotificationTranslationKey$","AncillarySidebarComponent_ng_container_7_div_1_Template","AncillarySidebarComponent_ng_container_7_ng_container_2_Template","toType","item_r23","translationKeys","noSelection","notAvailable","maxedOut","inCart","FinnairServiceCatalogEligibilityReason","PURCHASE_FRESH_MEAL_NOT_ELIGIBLE_EX_EXCEPT_HEL_WITHIN_24_HOURS","PURCHASE_FRESH_MEAL_NOT_ELIGIBLE_EX_HEL_WITHIN_7_HOURS","PURCHASE_PRE_ORDER_HOT_MEAL_NOT_ELIGIBLE_EX_HEL_WITHIN_16_HOURS","PURCHASE_PRE_ORDER_HOT_MEAL_NOT_ELIGIBLE_EX_EXCEPT_HEL_36_HOURS","PURCHASE_MEAL_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN","PURCHASE_SPECIAL_MEAL_NOT_ELIGIBLE","PURCHASE_WIFI_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN","PURCHASE_BAGGAGE_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN","PURCHASE_LOUNGE_ACCESS_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN","middleNotificationTranslationKey","PURCHASE_SEAT_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN","translationForBenefits","SubCategory","CHECKED_BAGGAGE","AncillarySidebarComponent","Breakpoint","sideBarClosed","isBoundBasedCategory","acc","cur","isBound","isFlight","i","isFinnairNorraOrWetLease","unique","serviceMapping","serviceSelectionsForCategoryAllTravelers","mapValues","isBoundOrFlightConfirmedOrCheckedIn","isByTrainOnly","availability","busOnly","otherAirline","translations","every","isAllowedToUse","eligibilities","includedServices$","purchasedServices","filteredPurchaseServices","boundOrFlightId","purchasedService","serviceForBoundOrFlight","SPECIAL_DIET","selectedService","passengerNames","firstName","lastName","updatedServices","entries","forEach","servicesFromStore","includedServices","push","_","passengersWithPetcIncompatibleSeats","boundId","travelerIds","PET_IN_CABIN","AncillarySidebarComponent_a_4_Template","AncillarySidebarComponent_ng_container_7_Template","FULL","additionalInfoKey$","AdditionalInfoComponent","AdditionalInfoComponent_div_0_Template","AncillaryPriceComponent","disclaimer","filteredGroupedServices","ancillary_r2","AncillarySelectionComponent_ng_container_2_div_6_li_3_span_1_Template","AncillarySelectionComponent_ng_container_2_div_6_li_3_span_4_Template","AncillarySelectionComponent_ng_container_2_div_6_li_3_span_5_Template","removeSelections","CLOSE_DELETE","AncillarySelectionComponent_ng_container_2_div_6_li_3_Template","AncillarySelectionComponent_ng_container_2_div_6_div_4_Template","ancillaries","showRemoveBasedOnAncillaries","AncillarySelectionComponent_ng_container_2_div_6_Template","AncillarySelectionComponent","showRemove","groupedServices","hideSelection","showRemoveButton","getFilteredGroupedServices","firstChange","ancillary","paidQuantity","isModifiable","features","AncillarySelectionComponent_fin_grouped_services_1_Template","AncillarySelectionComponent_ng_container_2_Template","i_r2","category_r1","MealDetailsComponent_ng_container_0_div_1_span_1_Template","meal","itemCategory","ingredients","nutrition","MealDetailsComponent_ng_container_0_div_1_Template","MealDetailsComponent_ng_container_0_div_3_Template","MealDetailsComponent_ng_container_0_div_4_Template","MealDetailsComponent_ng_container_0_div_5_Template","MealDetailsComponent","MealDetailsComponent_ng_container_0_Template","teaserTitle_r2","details_r3","cmsDetails_r5","confirmSeatClick","SeatDetailsComponent_ng_container_2_div_13_ng_container_5_button_3_Template","FILL","seatSelectedForTraveler","SeatDetailsComponent_ng_container_2_div_13_cms_unstyled_teaser_3_Template","SeatDetailsComponent_ng_container_2_div_13_fin_content_image_4_Template","SeatDetailsComponent_ng_container_2_div_13_ng_container_5_Template","detailText","related","exitRow","hideButtons","clearSeat","selectSeat","SeatDetailsComponent_ng_container_2_ng_container_15_button_3_Template","SeatDetailsComponent_ng_container_2_span_3_Template","SeatDetailsComponent_ng_container_2_span_7_Template","SeatDetailsComponent_ng_container_2_div_9_Template","SeatDetailsComponent_ng_container_2_div_13_Template","SeatDetailsComponent_ng_container_2_ng_container_15_Template","seatTitle$","loading_r10","cmsSeatDetails$","SeatDetailsComponent","cmsDataService","seatDetailsLoadComplete","seatCleared","seatDetailsSubscription","seatDetails$","safeMapObs","jsonData","url","getFragmentJson","d","seatDetailsWithCMS$","zip","details","forceSelection","SeatDetailsComponent_ng_template_0_Template","SeatDetailsComponent_ng_container_2_Template","ProductExpandComponent","LoaderTheme","operatingAirlineIdInfo_r3","isOrderIdIdentical","operatingAirlineId","SeatMapViewComponent_ng_template_2_span_5_Template","isOrder","_r4","ALERT_TRIANGLE","notification_r5","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_ng_container_4_ng_container_1_h4_1_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_ng_container_4_ng_container_1_p_3_Template","fallbackNotification_r6","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_ng_container_4_ng_container_1_Template","notifications_r7","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_Conditional_8_ng_container_0_Template","operatingAirlineNotification_r8","operatingAirlineIdInfo$","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_ng_container_4_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_ng_template_6_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_Conditional_8_Template","currentFlightTail","noSeatmapNotifications$","tmp_9_0","isOperated","onBundleToggle","bundleActive$","benefitTextKey","benefitTag","scrollToSeat","selectablePassengers$","seatMapElement","seatMapWrapper","_r12","scrollTo","scrollSeatMap","seatMapContainerWidth$","scrollPosition","aircraft","_r13","openAirplaneModal","IconButtonTheme","IconButtonSize","SMALL","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_fcom_notification_1_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_fcom_notification_3_Template","selectPassenger","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_Conditional_6_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_Conditional_7_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_fin_seat_map_seatchips_8_Template","enableScrollButtons","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_fin_seat_map_mini_map_18_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_span_25_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_span_26_Template","unmodifiableSeat$","unmodifiableFreeSeat$","bundlesEnabled","isAtStart","LARGE","isAtEnd","seatMapStatus$","isFinnairWetLease","SeatMapViewComponent_ng_container_9_ng_container_1_div_1_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_3_Template","SeatMapViewComponent_ng_container_9_ng_container_1_ng_container_5_Template","LOAD_ERROR","OK_NO_AVAILABILITY","SeatMapViewComponent_ng_container_9_ng_container_1_Template","tmp_3_0","loader_r14","_r15","exitRowModalOpen","seatDetails_r16","confirmExitRowSeat","aircraftModalOpen","aircraftInformationTemplate$","SeatMapViewComponent","templateService","viewportScroller","sentryLogger","isReassigningSeats","flight$","resolveTailName","seatMap$","seatMap","preSelectedPax","mapPassengers","passengerOptions$","and","p","getTravelerFullName","passenger","active","bundleActive","enableBookingFlowAncillaryBundles","isWetlease","seatMapEl","clientWidth","_pax","seatMapStatus","_loaderStatus","_order","pax","_active","_seatMapStatus","loaderStatus","REASSIGNING","tryScrollToFirstAvailableSeat","setBenefitDetails","status","paidSeat","modifiableSeat","ticketedSeat","isOrderCreated","getOperatingAirlineId","operatingAirlineIdInfo","getServicesNotifications","operatingAirlineCode","operatingAirlineIds","airlineCode","attempt","flightNumber","seat","toLowerCase","getAttribute","travelers","infants","traveler","passengerTypeCode","FinnairPassengerCode","INF","originalSeatNumber","seats","infant","accompanyingTravelerId","withInfant","withInfantFullName","modifiable","ticketed","trim","passengerId","isAllowedToChangeSeat","actualSeatNumber","getSeatPrice","MODAL","VIEW","getSeatMapFlight","confirmSeatSelection","currentPassengers","getValue","activePaxIndex","isLastPax","isActive","currentPaxs","toggled","direction","divWidth","scrollLeft","scrollBy","left","behavior","requestAnimationFrame","seatElement","isCenterable","seatGElement","parentElement","transform","baseVal","halfViewArea","svgWidth","seatXCoordinate","consolidate","matrix","cartOrOrderId","message","stack","substr","scrollIntoView","block","inline","preventScroll","moveFocus","scrollToAnchor","getAircraftTranslationKey","load","hasCorporateSeatBenefit","benefits","benefit","BENEFITS","isPositive","otherInformation","corporateUserInformation","isEligibleForSeatBenefit","enableCorporateSeatBenefit","textKey","TagTheme","DEFAULT","B2B","AIRCRAFT_TRANSLATION_MAP","SeatMapViewComponent_ng_template_0_Template","SeatMapViewComponent_ng_template_2_Template","SeatMapViewComponent_ng_container_8_Template","SeatMapViewComponent_ng_container_9_Template","SeatMapViewComponent_div_17_Template","SeatMapViewComponent_fcom_modal_19_Template","passenger_r3","clearSelection","index_r4","handleClick","SeatPassengersComponent_ng_container_0_button_5_span_5_Template","SeatPassengersComponent_ng_container_0_button_5_span_6_Template","SeatPassengersComponent_ng_container_0_button_5_fcom_icon_button_7_Template","SINGLE_PAX","passengerForm","options_r7","activeTravelerIndex$","passengers_r8","SeatPassengersComponent_ng_container_0_button_5_Template","SeatPassengersComponent_ng_container_0_form_6_Template","options$","SeatPassengersComponent","formBuilder","selectPax","clearSeatSelection","createForm","group","activeTravelerId","FormControl","get","valueChanges","activeTraveler","getActiveTraveler","idControl","setValue","a","JSON","stringify","tap","_withInfantLabel","withInfantLabel","paxName","alreadyIncludedSeat","SeatPassengersComponent_ng_container_0_Template","SeatMapRendererComponent","updatePosition","updateScrollPosition","scrollPositionWatcher$","templates","cloneNode","unavailable","scrollEvents$","scrollDebounceTime","ngAfterViewInit","setWrapperWidth","activePax$","curr","compareAsJson","resetSeatView","markSeatsUnavailableForPax","bringSelectedSeatTemplateOnTop","addSelectedSeatTemplateToPax","addOriginalSeatForPax","trackElement","GaContext","SEAT_MAP","SCROLL","classList","paxId","seatLink","originalAriaLabel","occupiedSeat","setAttribute","unavailableSeatLabel","remove","appendChild","initials","getInitials","seatToSelect","ariaLabel","innerHTML","selectedSeat","removeChild","removeSeatSelection","rootSelector","node","parentNode","removeAttribute","split","handleSeatClick","preventDefault","closest","activePax","isAvailableForPax","seatId","isExitRow","currentSelectedSeat","isIncludedForPassenger","trackSeatSelection","handleScroll","seatMapWidth","scrollWidth","Math","round","seatInfo","getSeatInfoForTracking","svg","SeatMapMiniMapComponent","keyScrollDirection","setNewAreaPosition","viewPortWidth$","viewPortWidth","container","seatMapContainer","selectedArea","style","offsetWidth","parentWidth","parentLeft","newPosition","clientX","setSelectedAreaPosition","max","areaWidth","parentBorder","wrapper","totalBorderWidth","getTotalBorderWidth","minPosition","borderWidth","clickFront","clickBack","openModal","seatType_r4","SeatMapSeatChipsComponent_fcom_tag_button_10_ng_container_11_Template","SeatMapSeatChipsComponent_fcom_tag_button_10_ng_container_12_Template","i_r5","IconLibrary","imageData_r6","SeatMapSeatChipsComponent_ng_container_14_div_1_ng_container_1_ng_container_2_div_2_Template","article_r7","seatType_r8","article$","SeatMapSeatChipsComponent_ng_container_14_div_1_ng_container_1_ng_container_2_Template","SeatMapSeatChipsComponent_ng_container_14_div_1_ng_container_1_Template","availableSeatTypesInModal","SeatMapSeatChipsComponent_ng_container_14_div_1_Template","SeatMapSeatChipsComponent","seatIconCache","seatTypeModalOpen","availableSeatTypes$","isArray","prevPassengers","prevSeatMapData","nextPassengers","nextSeatMapData","equals","seatMapData","hasInfant","selectedSeats","getSeatTypesFromData","seatTypeChips","statuses","getSeatType","seatPrice","addedSeat","className","showSelectedSeatOnlyWhenLastOneOfThatTypeAndPrice","getFragmentUrl","cmsKey","getIconFromSeatMap","chip","seatTypeInfo","B","sort","parseFloat","localeCompare","minPriceByType","findMinPriceByType","uniqueBy","seatTypeChip","arr","item","seatToReplace","aTag","childNodes","append","outerHTML","seatData","characteristicKey","aircraftCode","Cabin","SeatMapSeatChipsComponent_fcom_icon_button_4_Template","SeatMapSeatChipsComponent_fcom_tag_button_10_Template","SeatMapSeatChipsComponent_ng_container_14_Template","GroupedServicesComponent_fin_titled_card_0_ng_container_2_Template","cabinWeight","serviceList_r2","GroupedServicesComponent_div_1_ng_container_9_Template","GroupedServicesComponent_ng_container_2_ng_container_1_Template","cat_r4","INLINE_TEXT","continuePurchase","GroupedServicesComponent_ng_template_3_li_1_div_1_div_3_button_1_Template","GroupedServicesComponent_ng_template_3_li_1_div_1_div_3_div_2_Template","GroupedServicesComponent_ng_template_3_li_1_div_1_div_3_button_3_Template","loading","showActionsButtons","isShoppingCart","GroupedServicesComponent_ng_template_3_li_1_div_1_fcom_icon_1_Template","GroupedServicesComponent_ng_template_3_li_1_div_1_div_2_Template","GroupedServicesComponent_ng_template_3_li_1_div_1_div_3_Template","enableUpsellMMB","last_r9","service_r8","serviceNameTemplate_r11","seatTags_r10","isMobile$","subCategory","FINNAIR_PLUS","tierLevel","GroupedServicesComponent_ng_template_3_li_1_li_3_span_2_Template","GroupedServicesComponent_ng_template_3_li_1_li_3_div_3_Template","GroupedServicesComponent_ng_template_3_li_1_li_3_Conditional_4_Template","GroupedServicesComponent_ng_template_3_li_1_li_3_Conditional_5_Template","includedInTierBenefit","parameters","isCorporate","GroupedServicesComponent_ng_template_3_li_1_div_1_Template","GroupedServicesComponent_ng_template_3_li_1_li_3_Template","first_r13","isInfant","GroupedServicesComponent_ng_template_3_li_1_Template","INFO_BLOCK","serviceInfo_r14","GroupedServicesComponent_ng_template_5_fcom_tag_0_Template","GroupedServicesComponent_ng_template_5_fcom_tag_1_Template","GroupedServicesComponent_ng_template_5_ng_container_2_Template","isCarrierConnect","isNotIncludedService","serviceListing_r16","serviceInfo_r15","GroupedServicesComponent_ng_template_7_div_1_div_2_Template","GroupedServicesComponent_ng_template_7_div_1_div_3_Template","serviceInfo","onRemoveProduct","SVG_LIBRARY","TRASH","removeInProgress","serviceRemovalInProgress","GroupedServicesComponent_ng_template_7_div_2_div_1_Template","GroupedServicesComponent_ng_template_7_div_2_fcom_button_2_Template","GroupedServicesComponent_ng_template_7_ng_container_0_Template","GroupedServicesComponent_ng_template_7_div_1_Template","GroupedServicesComponent_ng_template_7_div_2_Template","pendingPayment","service_r18","baggageWeight","CABIN_WEIGHT_VARIANTS","GroupedServicesComponent","removeProduct","groupedService","CABIN_WEIGHT","getCabinWeight","flatMap","GroupedServicesComponent_fin_titled_card_0_Template","GroupedServicesComponent_div_1_Template","GroupedServicesComponent_ng_container_2_Template","GroupedServicesComponent_ng_template_3_Template","GroupedServicesComponent_ng_template_5_Template","GroupedServicesComponent_ng_template_7_Template","GroupedServicesComponent_ng_template_9_Template","safThankYouForJoiningUsNotification_r1","safThankYouForJoiningUsNotification$","item_r3","IncludedServiceComponent_ng_container_0_fin_inform_block_8_ul_2_Template","segment_r4","complimentaryServices","IncludedServiceComponent_ng_container_0_ul_10_ng_container_1_div_3_ng_container_1_Template","paxInfo_r7","pax_r6","showUpsellPerPax","IncludedServiceComponent_ng_container_0_ul_10_ng_container_1_div_3_Template","onContinuePurchase","lastPassenger_r8","includeSeatActionButtons","lastSegment_r9","tmp_16_0","updatingService$","removeProgressInfo$","IncludedServiceComponent_ng_container_0_ul_10_ng_container_1_Template","safProductInfo_r12","isModalOpened","IncludedServiceComponent_ng_container_0_div_11_fcom_modal_7_fcom_image_1_Template","safProductInfo$","IncludedServiceComponent_ng_container_0_div_11_fcom_modal_7_Template","seatButtons_r13","IncludedServiceComponent_ng_container_0_fin_inform_block_1_Template","IncludedServiceComponent_ng_container_0_fin_inform_block_7_Template","IncludedServiceComponent_ng_container_0_fin_inform_block_8_Template","IncludedServiceComponent_ng_container_0_ng_container_9_Template","IncludedServiceComponent_ng_container_0_ul_10_Template","IncludedServiceComponent_ng_container_0_div_11_Template","IncludedServiceComponent_ng_container_0_ng_container_12_Template","i_r14","hasNonAySegments$","hasPlusTierBenefit","showNonAYSeats","pax_r15","associatedInfantName","IncludedServiceComponent_ng_template_2_ng_container_1_ng_container_1_Template","IncludedServiceComponent_ng_template_2_ng_container_1_ng_template_2_Template","isNewUpsell_r17","oldWithInfant_r16","IncludedServiceComponent_ng_template_2_ng_container_0_Template","IncludedServiceComponent_ng_template_2_ng_container_1_Template","_r19","clearPendingSeats","IncludedServiceComponent_ng_template_4_fcom_button_1_Template","_r18","viewSeatmap","showClearPendingSeatsButton","IncludedServiceComponent","showAsPending","showUpsellPaymentButton","gtmFlow","MANAGE_BOOKING","gaContext","includeAssignAtAirportStatus","groupServicesByBound","serviceSubject$","serviceSegmentItems$","findServiceInAllFlights","seg","isFirstChange","selectedPassengers","removeInProgressInfo","serviceCatalog","variantsWeCanSell","categories","serviceCategory","servicesForFragment","passengerServices","passengerService","allFlights","flightById","toLookup","serviceCatalogPerCategory","allServiceSegments","serviceSegmentsByFlightId","groupBy","serviceBySegments","serviceSegmentsForFlight","isPassengerSelected","passengerServiceItem","passengerIncludedServices","includedInTicketType","shared","variantsToRemove","flightPassengers","isAvailableForSellServices","showedServices","getGroupedServices","getPassengerTierLevel","money","flightServices","mergeServicesForBound","updateRemovalStatus","removedServiceInfo","flightService","isRemoveInProgressForService","flightIds","f","allFlightServicesInBound","servicesGroupedByBound","isSegmentServicesIdentical","allServices","currentServices","productInfo","segmentId","IncludedServiceComponent_ng_container_0_Template","IncludedServiceComponent_ng_template_2_Template","IncludedServiceComponent_ng_template_4_Template","IncludedProductHeadingComponent_h3_0_ng_container_3_ng_container_3_Template","cityName_r1","isLast_r2","operatedByText","IncludedProductHeadingComponent_h3_0_ng_container_3_Template","IncludedProductHeadingComponent_h3_0_span_4_Template","showLocations","IncludedProductHeadingComponent","locationCodes","getCityName","IncludedProductHeadingComponent_h3_0_Template","IncludedTicketsComponent","FinnairCabinClass","useCabinClass","IncludedTicketsComponent_ng_container_9_Template","IncludedTicketsComponent_ng_template_11_Template","ECONOMY","businessLinkText_r1","picture_r1","upsellClicked","UpsellCardComponent_div_0_ng_container_27_fcom_button_1_Template","UpsellCardComponent_div_0_ng_container_27_fcom_icon_button_3_Template","UpsellCardComponent_div_0_fcom_image_5_Template","UpsellCardComponent_div_0_ng_container_27_Template","UpsellCardComponent_div_0_ng_template_29_Template","tmp_12_0","loading_r5","UpsellCardComponent","articleKey","boundWithServices","UpsellCardComponent_div_0_Template","UpsellCardComponent_ng_template_1_Template","SPECIAL_NEED","specialNeed_r6","emitUpsellClick","translationPrefix","showModal","InformationModalComponent_div_0_fcom_button_12_Template","modalArticle$","InformationModalComponent","article","header","main","footer","InformationModalComponent_div_0_Template","bodyClass","serviceSummary","IncludedProductItemSummaryComponent_ng_container_0_fin_included_product_item_summary_seat_1_Template","IncludedProductItemSummaryComponent_ng_container_0_fin_included_product_item_summary_other_2_Template","IncludedProductItemSummaryComponent","update","getSummaryForCategory","IncludedProductItemSummaryComponent_ng_container_0_Template","seat_r2","IncludedProductItemSummarySeatComponent_span_1_span_1_Template","flightsSeats","seat_r3","IncludedProductItemSummarySeatComponent_ng_container_2_span_1_span_3_Template","IncludedProductItemSummarySeatComponent_ng_container_2_span_1_span_4_Template","flightSeats_r4","lastFlight_r5","IncludedProductItemSummarySeatComponent_ng_container_2_span_1_Template","IncludedProductItemSummarySeatComponent","getSeatsByFlight","IncludedProductItemSummarySeatComponent_ng_container_0_Template","IncludedProductItemSummarySeatComponent_span_1_Template","IncludedProductItemSummarySeatComponent_ng_container_2_Template","item_r1","IncludedProductItemSummaryOtherComponent_span_1_span_1_span_1_Template","text","IncludedProductItemSummaryOtherComponent_span_1_span_1_Template","IncludedProductItemSummaryOtherComponent_span_1_span_2_Template","ServiceType","NON_INCLUDED","IncludedProductItemSummaryOtherComponent","summary","IncludedProductItemSummaryOtherComponent_span_1_Template","descriptionKey","tag","SeatBenefitComponent_Conditional_2_Conditional_1_Template","SeatBenefitComponent","SeatBenefitComponent_Conditional_1_Template","SeatBenefitComponent_Conditional_2_Template","SeatBundleToggleComponent","ToggleSwitchStatus","bundleToggled","emitToggle","discountPercentage","SeatBundleToggleComponent_For_3_Template","UNCHECKED","SEAT_OR_ECONOMY","POPULAR","ACTIVE","NonZeroAmountPipe","EJ8","pure","TitledCardComponent","CommonBookingAncillariesModule","ButtonModule","ProductsModule","AncillarySubviewModule","FinFormsModule","CommonProductSelectionComponent","i25","i26","i27","i28","i29","i30","i31","i32","i33","i34","i35","i36","i37","i38","i39","i40","i41","i42","i43","i44","i45","i46","i47","IncludedProductsComponent","i48","i49","notification_r2","CommonProductSelectionComponent_ng_container_4_fcom_notification_3_span_1_Template","CommonProductSelectionComponent_ng_container_4_fcom_notification_3_span_3_Template","last_r3","additionalText","iterable_r4","hasServiceSelected$","filter_r8","iterable_r6","selectedFilter$","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_div_3_div_1_fcom_tag_button_1_Template","filters","filter_r11","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_div_3_div_2_button_2_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_div_3_div_1_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_div_3_div_2_Template","clickInput","flightOrBound","globalId","_r14","media","DISCOUNT","addQuantity","removeQuantity","minNumberItems","paxLevelQuotaReached$","form","controls","maxNumberItems","displayTotalPrice$","_r16","label_r17","click","buttonText$","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_ng_container_24_fin_plus_minus_selector_4_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_ng_container_24_fcom_button_5_Template","isTabletDown$","inputType","CONFIG","toppedQuotaKey","noQuotaLeftKey","alreadyPurchased","blockSelectionNotification","quotaLimitKey","quota_r18","count","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_ng_container_37_fcom_notification_1_Template","QuotaType","FREE","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_input_2_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_input_3_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fin_content_image_7_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_Conditional_17_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_Conditional_21_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_div_23_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_ng_container_24_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fcom_notification_27_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fcom_notification_30_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fcom_notification_33_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fcom_notification_35_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fcom_notification_36_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_ng_container_37_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fin_product_expand_39_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_fin_product_expand_40_Template","last_r20","showBlockingNotification","SELECTED","quota$","TOPPED","NO","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_div_1_Template","additionalInfoBlockUrl_r22","contentUrl_r21","useConfirmModalBeforeSelectionRemoval","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_div_3_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_fcom_notification_6_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_8_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_ng_container_9_Template","combinedGroupedServices","radio","selectedServices$","additionalInfoBlockUrl","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_additional_info_1_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_label_3_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_fin_tab_7_Template","serviceTabGroupId","initialTravelerIdSelected$","travelersAndServices$","CommonProductSelectionComponent_ng_container_4_fcom_notification_1_Template","CommonProductSelectionComponent_ng_container_4_fcom_notification_3_Template","CommonProductSelectionComponent_ng_container_4_ng_container_5_Template","showSportNotification$","notifications$","blockingNotifications$","notification_r23","CommonProductSelectionComponent_div_5_fcom_notification_1_span_1_Template","CommonProductSelectionComponent_div_5_fcom_notification_1_span_3_Template","last_r24","fallbackNotification_r25","CommonProductSelectionComponent_div_5_fcom_notification_1_Template","CommonProductSelectionComponent_div_5_ng_template_3_Template","contentUrl$_r26","SelectionState","LOADING","HAS_SERVICES","NO_SERVICES","notSelectedVariant","selectServiceKey","COMMON_TOASTER_ID","fb","toasterService","cdr","combinedServices$","initialSelectedTravelerId$","showConfirmationModalBeforeSelectionForPassengers$","showConfirmationModalBeforeSelectionRemovalForPassengers$","blockSelectionNotification$","serviceQuantityMap$","paxLevelQuota$","combinedQuota","variants","openConfirmModalWithData","FormGroup","isTabletDown","baseStream$","flightOrBound$","getAdditionalText","markForCheck","filteredTravelers$","getFilteredTravelers$","setupForm","setupTravelersAndServices","state$","servicesReady$","isNotEmpty","servicesReady","hasServices","travelersWithServices","initialTravelerId","notifications","n","blockSelection","removeMessage","flightOrBoundId","useConfirmModal","getAdditionalInfoBlock","NON_SCHENGEN_LOUNGES","isShortHaul","addValuesToFormAfterConfirmModal","formControls","removeSelection","initialSelections","removeControl","initialServices","travelerForm","isRadioDisplay","includedServicesForTravelerAndFragment","findServiceItemsForPassengerForFragment","registerControl","control","isService","is","initialSelection","sumOfPricesForTravelersServiceSelection","model","isEmptyObjectOrHasEmptyValues","travelerSelections","sm","toBoolean","asTravelerService","selectionsToStore","selectionsPerTraveler","traveledId","selectionsForFragment","servicesForFragments","checkAndQueueToasterNotification","ServicesActions","nextHasSpecialDiet","selectionsForTraveler","currentSelection","currentHasSpecialDiet","travelerSelection","showSpecialDietSelected","showSpecialDietUnselected","addMessageToQueue","selectionsForFragmentAndCategory$","originalQuota","combinedServices","showConfirmationModalBeforeSelectionForPassengers","showConfirmationModalBeforeSelectionRemovalForPassengers","finnairPassengers","selection$","getRawValue","servicesToDisplay","extendedServices","getExtendedServices","getSelectedServices","getFilters","getHasServiceSelected","alreadyPaid","travellerSelection","baseFilters","NO_VARIANTS","PreciseNumber","fromString","multiply","selectionQuota$","getIsSelectedStream","getInputType","isSelected","selectionQuota","calculateQuota","getPaxLevelQuotaReached","translateMultiple","logErrors","paxLevelQuota","quota","availableQuota","_angular_core__WEBPACK_IMPORTED_MODULE_15__","CommonProductSelectionComponent_fin_loader_3_Template","CommonProductSelectionComponent_ng_container_4_Template","CommonProductSelectionComponent_div_5_Template","CommonProductSelectionComponent_ng_template_6_Template","TabGroupComponent","originalTotalPrice_r1","useSymbol","points_r3","GrandTotalTheme","RENEWED","serviceFlow$","prices$","prices","hasUnitPrices","serviceFlow","total","totalPoints","ServiceFlow","AWARD","toAmount","totalAmountPaid","totalAmount","MMB_ANCILLARY","totalPoints$","originalTotalPrice$","discountReasonCode","originalTotalAmount","GrandTotalComponent_span_6_Template","GrandTotalComponent_span_8_Template","GrandTotalComponent_span_10_Template","DelayPipe","input","delayInMilliSeconds","Observable","b_r1","BookingSummaryFlightComponent_div_0_div_38_ng_container_1_Template","BookingSummaryFlightComponent_div_0_div_38_ng_container_2_Template","BookingSummaryFlightComponent_div_0_div_38_ng_container_3_Template","bookingClass","BookingSummaryFlightComponent_div_0_div_40_ng_container_1_div_5_ng_container_2_Template","BookingSummaryFlightComponent_div_0_div_40_ng_container_1_div_5_ng_container_3_Template","BookingSummaryFlightComponent_div_0_div_40_ng_container_1_div_5_Template","flights_r3","flight_r4","BookingSummaryFlightComponent_div_0_div_40_ng_container_1_Template","BookingSummaryFlightComponent_div_0_div_40_div_5_Template","BookingSummaryFlightComponent_div_0_div_13_Template","BookingSummaryFlightComponent_div_0_div_38_Template","BookingSummaryFlightComponent_div_0_div_39_Template","BookingSummaryFlightComponent_div_0_div_40_Template","bound$","icon$","BookingSummaryFlightComponent","isBusOrTrain","MINUS","AIRCRAFT_HORIZONTAL","BookingSummaryFlightComponent_div_0_Template","innerIconClass","titleClass","edit","skipEditAlign","trackingContext","C","isDisabled","editText","BookingSummarySectionComponent","padding","isChangeButton","AppConstants","isContent","innerClass","defaultClass","hostVars","hostBindings","BookingSummarySectionComponent_fcom_icon_2_Template","BookingSummarySectionComponent_h2_4_Template","BookingSummarySectionComponent_div_5_Template","BookingSummarySectionComponent_div_6_Template","t_r1","email","birthDate","phone","BookingSummaryTravelerComponent_ng_container_0_div_1_div_6_Template","BookingSummaryTravelerComponent_ng_container_0_div_1_div_7_Template","BookingSummaryTravelerComponent_ng_container_0_div_1_div_8_Template","BookingSummaryTravelerComponent_ng_container_0_div_1_div_9_Template","BookingSummaryTravelerComponent_ng_container_0_div_1_Template","BookingSummaryTravelerComponent","BookingSummaryTravelerComponent_ng_container_0_Template","traveler$","paxService_r1","BookingSummaryAncillaryComponent_div_4_span_2_Template","BookingSummaryAncillaryComponent_div_4_span_4_Template","BookingSummaryAncillaryComponent_div_4_div_6_Template","isLast_r3","isFirst_r2","isGroupService","BookingSummaryAncillaryComponent","BookingSummaryAncillaryComponent_div_4_Template","BookingSummaryModule","BookingSummaryComponent","AncillaryHeaderComponent","headerTitle","_angular_core__WEBPACK_IMPORTED_MODULE_35__","DrawerModule","FlightsModule","NotificationsModule","DirectiveModule","headingClasses","titleTranslationKey","item_r2","IncludedProductsComponent_div_1_div_1_Template","contents_r4","boundWithServices_r6","service_r7","booking","showUpsell","removeInProgress$","tmp_7_0","upsellInModal$","MEDIUM","IncludedProductsComponent_fcom_tab_8_ng_container_2_div_8_fcom_button_1_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_div_8_fcom_button_2_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_fin_dapi_included_service_5_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_fin_upsell_card_6_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_fin_information_modal_7_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_div_8_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_fcom_button_10_Template","isFirstService_r12","showAdditionalTitle","expand","enabled","showInformationModal","isShowMoreBtn","showModifyButtons","servicesToShow","IncludedProductsComponent_fcom_tab_8_div_1_Template","IncludedProductsComponent_fcom_tab_8_ng_container_2_Template","IncludedProductsComponent_fcom_tab_8_div_3_Template","showTickets","TabLayoutType","TabTheme","showHeading","NEVER","updateServices","headerContents$","headerContentTranslationKey","previousValue","servicesForBounds","getServicesToShowForBounds","getServicesForBoundWithUpsell","servicesOrder","serviceData","_angular_core__WEBPACK_IMPORTED_MODULE_8__","IncludedProductsComponent_h2_0_Template","IncludedProductsComponent_div_1_Template","IncludedProductsComponent_fcom_tab_8_Template","CLASSIC","STRETCH","linkText","SustainabilityTripMessageComponent_ng_container_0_button_7_Template","message_r3","iconCategory","SustainabilityTripMessageComponent_ng_container_0_Template"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-pre-selection/seat-pre-selection.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-pre-selection/seat-pre-selection.component.ts","./src/modules/booking/modules/common/components/multi-city-survey/multi-city-survey.component.html","./src/modules/booking/modules/common/components/multi-city-survey/multi-city-survey.component.ts","./src/modules/booking/modules/common/components/offer-policy/offer-policy.component.html","./src/modules/booking/modules/common/components/offer-policy/offer-policy.component.ts","./src/modules/booking/modules/common/components/sustainability/sustainablity-info-modal/sustainablity-info-modal.component.html","./src/modules/booking/modules/common/components/sustainability/sustainablity-info-modal/sustainablity-info-modal.component.ts","./src/modules/booking/modules/common/booking-common.module.ts","./src/modules/common-booking/modules/ancillaries/components/product-list/product-list.component.html","./src/modules/common-booking/modules/ancillaries/components/product-list/product-list.component.ts","./src/modules/booking/modules/common/components/trip-message/trip-message.component.html","./src/modules/booking/modules/common/components/trip-message/trip-message.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-product-item/included-product-item.component.html","./src/modules/common-booking/modules/ancillaries/components/included-product-item/included-product-item.component.ts","./src/modules/booking/modules/common/components/flight/flight.component.html","./src/modules/booking/modules/common/components/flight/flight.component.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-subview/ancillary-subview.component.html","./src/modules/common-booking/modules/ancillaries/components/ancillary-subview/ancillary-subview.component.ts","./src/modules/common-booking/modules/tabs/tab-state.service.ts","./src/modules/booking/modules/common/components/bound-selection-error-message/bound-selection-error-message.component.html","./src/modules/booking/modules/common/components/bound-selection-error-message/bound-selection-error-message.component.ts","./src/modules/common-booking/modules/tabs/tab-header.component.ts","./src/modules/common-booking/modules/tabs/tab-header.component.html","./src/modules/common-booking/components/subview/subview.component.html","./src/modules/common-booking/components/subview/subview.component.ts","./src/modules/common-booking/components/subview/subview.module.ts","./src/modules/common-booking/modules/tabs/tab.component.html","./src/modules/common-booking/modules/tabs/tab.component.ts","./src/modules/common-booking/utils/ancillaries.utils.ts","./src/modules/booking/modules/common/components/flight-selection-warning/flight-selection-warning.component.html","./src/modules/booking/modules/common/components/flight-selection-warning/flight-selection-warning.component.ts","./src/modules/common-booking/modules/tabs/tabs.module.ts","./src/modules/common-booking/modules/tabs/tab-label.component.html","./src/modules/common-booking/modules/tabs/tab-label.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/ancillary-seat-map/ancillary-seat-map.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/ancillary-seat-map/ancillary-seat-map.component.html","./src/modules/common-booking/modules/ancillaries/components/flight-bound-selector/ancillary-flight-bound-selector.component.html","./src/modules/common-booking/modules/ancillaries/components/flight-bound-selector/ancillary-flight-bound-selector.component.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-sidebar/ancillary-sidebar.component.html","./src/modules/common-booking/modules/ancillaries/components/ancillary-sidebar/ancillary-sidebar.component.ts","./src/modules/common-booking/modules/ancillaries/components/additional-info/additional-info.component.html","./src/modules/common-booking/modules/ancillaries/components/additional-info/additional-info.component.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-price/ancillary-price.component.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-price/ancillary-price.component.html","./src/modules/common-booking/modules/ancillaries/components/ancillary-selection/ancillary-selection.component.html","./src/modules/common-booking/modules/ancillaries/components/ancillary-selection/ancillary-selection.component.ts","./src/modules/common-booking/modules/ancillaries/components/meals/meal-details.component.html","./src/modules/common-booking/modules/ancillaries/components/meals/meal-details.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-details/seat-details.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-details/seat-details.component.ts","./src/modules/common-booking/modules/ancillaries/components/product-expand/product-expand.component.ts","./src/modules/common-booking/modules/ancillaries/components/product-expand/product-expand.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-view/seat-map-view.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-view/seat-map-view.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-passengers/seat-passengers.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-passengers/seat-passengers.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-renderer/seat-map-renderer.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-renderer/seat-map-renderer.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-mini-map/seat-map-mini-map.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-mini-map/seat-map-mini-map.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-seatchips/seat-map-seatchips.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-map-seatchips/seat-map-seatchips.component.ts","./src/modules/common-booking/modules/ancillaries/components/grouped-services/grouped-services.component.html","./src/modules/common-booking/modules/ancillaries/components/grouped-services/grouped-services.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-service/included-service.component.html","./src/modules/common-booking/modules/ancillaries/components/included-service/included-service.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-product-heading/included-product-heading.component.html","./src/modules/common-booking/modules/ancillaries/components/included-product-heading/included-product-heading.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-tickets/included-tickets.component.html","./src/modules/common-booking/modules/ancillaries/components/included-tickets/included-tickets.component.ts","./src/modules/common-booking/modules/ancillaries/components/upsell-card/upsell-card.component.html","./src/modules/common-booking/modules/ancillaries/components/upsell-card/upsell-card.component.ts","./src/modules/common-booking/modules/ancillaries/components/information-modal/information-modal.component.html","./src/modules/common-booking/modules/ancillaries/components/information-modal/information-modal.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-product-item-summary/included-product-item-summary.component.html","./src/modules/common-booking/modules/ancillaries/components/included-product-item-summary/included-product-item-summary.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-product-item-summary-seat/included-product-item-summary-seat.component.html","./src/modules/common-booking/modules/ancillaries/components/included-product-item-summary-seat/included-product-item-summary-seat.component.ts","./src/modules/common-booking/modules/ancillaries/components/included-product-item-summary-other/included-product-item-summary-other.component.html","./src/modules/common-booking/modules/ancillaries/components/included-product-item-summary-other/included-product-item-summary-other.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-benefit/seat-benefit.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-benefit/seat-benefit.component.ts","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-bundle-toggle/seat-bundle-toggle.component.html","./src/modules/common-booking/modules/ancillaries/components/seat-map/seat-bundle-toggle/seat-bundle-toggle.component.ts","./src/modules/common/pipes/non-zero-amount.pipe.ts","./src/modules/ui-components/components/product-variants/titled-card.component.ts","./src/modules/ui-components/components/product-variants/titled-card.component.html","./src/modules/common-booking/modules/ancillaries/ancillaries.module.ts","./src/modules/common-booking/modules/ancillaries/components/common-product-selection/common-product-selection.component.html","./src/modules/common-booking/modules/ancillaries/components/common-product-selection/common-product-selection.component.ts","./src/modules/common-booking/modules/tabs/tab-group.component.ts","./src/modules/common-booking/modules/tabs/tab-group.component.html","./src/modules/booking/modules/common/components/grand-total/grand-total.component.html","./src/modules/booking/modules/common/components/grand-total/grand-total.component.ts","./src/modules/common/pipes/delay.pipe.ts","./src/modules/common-booking/components/booking-summary/flight/booking-summary-flight.component.html","./src/modules/common-booking/components/booking-summary/flight/booking-summary-flight.component.ts","./src/modules/common-booking/components/booking-summary/section/booking-summary-section.component.html","./src/modules/common-booking/components/booking-summary/section/booking-summary-section.component.ts","./src/modules/common-booking/components/booking-summary/traveler/booking-summary-traveler.component.html","./src/modules/common-booking/components/booking-summary/traveler/booking-summary-traveler.component.ts","./src/modules/common-booking/components/booking-summary/ancillary/booking-summary-ancillary.component.html","./src/modules/common-booking/components/booking-summary/ancillary/booking-summary-ancillary.component.ts","./src/modules/common-booking/components/booking-summary/booking-summary.module.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-header/ancillary-header.component.ts","./src/modules/common-booking/modules/ancillaries/components/ancillary-header/ancillary-header.component.html","./src/modules/common-booking/modules/ancillaries/components/ancillary-subview/ancillary-subview.module.ts","./src/modules/common-booking/modules/ancillaries/components/included-products/included-products.component.html","./src/modules/common-booking/modules/ancillaries/components/included-products/included-products.component.ts","./src/modules/common-booking/modules/ancillaries/enums.ts","./src/modules/booking/modules/common/components/sustainability/sustainability-trip-message/sustainability-trip-message.component.html","./src/modules/booking/modules/common/components/sustainability/sustainability-trip-message/sustainability-trip-message.component.ts"],"sourcesContent":["\n
\n {{ 'ancillaries.seats.usDotMessage' | finLocalization }}\n \n
\n\n \n \n
\n\n
\n
\n \n \n \n
\n
\n\n\n\n\n\n\n \n {{ 'price.continueButtonTotal' | finLocalization }}: \n {{ totalPrice$ | async | finPrice | finEmpty: '–' }}\n \n\n\n\n \n \n\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { BehaviorSubject, combineLatest, Observable, of, ReplaySubject, Subscription } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport {\n Category,\n FinnairCart,\n FinnairItineraryItemFlight,\n FinnairOrder,\n FinnairPassengerItem,\n FinnairServiceItem,\n} from '@fcom/dapi/api/models';\nimport { ElementActions, ElementTypes, GtmPurchaseFlow, GtmTripType } from '@fcom/common/interfaces';\nimport { Amount, LocationInfoMap, ServiceCatalogSelectionsForAllTravelers } from '@fcom/dapi/interfaces';\nimport { unsubscribe } from '@fcom/core/utils';\nimport { ButtonPosition, ButtonTheme, ModalButtons } from '@fcom/ui-components';\nimport { BookingAppState } from '@fcom/common/interfaces/booking';\nimport { GtmService } from '@fcom/common/gtm';\nimport { finShare } from '@fcom/rx';\nimport { ConfigService } from '@fcom/core';\nimport { SeatMapStatus } from '@fcom/common/interfaces/seat-map.interface';\n\nimport { EligibilityWithCategory, FlightWithStreams, ItineraryModal, SeatChangeEvent } from '../../../interfaces';\nimport { SeatMapActions, seatSelections } from '../../../../../store';\nimport { calculateSubTotalPrice, getSeatMapFlightInfoFromCart } from '../../../utils';\nimport { getBoundDetailsModalData } from '../../../../../utils/ancillaries.utils';\nimport { AncillaryLoaderStatus } from '../../../enums';\n\n@Component({\n selector: 'fin-seat-pre-selection',\n templateUrl: './seat-pre-selection.component.html',\n styleUrls: ['./seat-pre-selection.component.scss'],\n})\nexport class SeatPreSelectionComponent implements OnInit, OnDestroy {\n readonly Category = Category;\n readonly ButtonTheme = ButtonTheme;\n readonly ButtonPosition = ButtonPosition;\n readonly ModalButtons = ModalButtons;\n readonly SeatMapStatus = SeatMapStatus;\n\n @Input() flights$: Observable;\n @Input() travelers$: Observable;\n @Input() tripType$: Observable;\n @Input() purchaseFlow$: Observable;\n @Input() locations: LocationInfoMap = {};\n @Input()\n flightAncillaryAvailability$: Observable<{ [fragmentId: string]: EligibilityWithCategory[] }>;\n @Input() cartOrOrder$: Observable;\n @Input()\n passengersWithPetcIncompatibleSeats$: Observable<{ [boundId: string]: string[] }> = of({});\n @Input() seatSelections$: Observable;\n @Input() combinedSeats: FinnairServiceItem | null;\n @Input() cartTotalPrice$: Observable;\n @Input() selectionLoading$: Observable;\n\n @Output() preSelectClosed = new EventEmitter();\n @Output() flightSelected = new EventEmitter();\n @Output() seatChanged = new EventEmitter();\n\n slideIndex$ = new BehaviorSubject(0);\n isSideBarOpen = false;\n itineraryModalClosed$: EventEmitter = new EventEmitter();\n subTotalPrice$: Observable;\n hasSelections$: Observable;\n totalPrice$: Observable;\n subscriptions: Subscription = new Subscription();\n itineraryModal: ItineraryModal = {\n open: false,\n data: null,\n };\n translationKey$: BehaviorSubject<{ key?: string; params?: Record }> = new BehaviorSubject(\n {}\n );\n passengers$: Observable;\n showFlightCard$: Observable = of(true);\n ancillaryLoader$: BehaviorSubject = new BehaviorSubject(AncillaryLoaderStatus.OFF);\n seatMapPreloadingEnabled = false;\n private subtotalPriceSub$: ReplaySubject = new ReplaySubject<\n Amount & { category: Category; fragmentId: string }\n >(1);\n\n constructor(\n private store$: Store,\n private gtmService: GtmService,\n private configService: ConfigService\n ) {}\n\n ngOnInit(): void {\n this.seatMapPreloadingEnabled = this.configService.cfg.enableBookingFlowSeatMapPreFetch;\n this.passengers$ = this.cartOrOrder$.pipe(map((cartOrOrder) => cartOrOrder.passengers));\n\n this.subTotalPrice$ = calculateSubTotalPrice(this.subtotalPriceSub$, of(Category.SEAT));\n\n this.totalPrice$ = combineLatest([this.cartTotalPrice$, this.subTotalPrice$]).pipe(\n map(([totalPrice, subTotalPrice]) => ({\n amount: String(Number(totalPrice.amount) + Number(subTotalPrice.amount)),\n currencyCode: totalPrice.currencyCode,\n }))\n );\n\n this.hasSelections$ = this.seatSelections$.pipe(\n map((selections) => Object.values(selections).some((selection) => selection.some((s) => s.seatNumber))),\n finShare()\n );\n\n this.subscriptions.add(\n combineLatest([this.slideIndex$, this.flights$])\n .pipe(\n map(([slideIndex, flights]) => {\n return flights[slideIndex];\n })\n )\n .subscribe((currentFlight) => {\n this.isSideBarOpen = false;\n this.flightSelected.emit(currentFlight);\n this.updateSubTotal(currentFlight.id);\n })\n );\n\n this.subscriptions.add(\n combineLatest([this.slideIndex$, this.flights$, this.hasSelections$]).subscribe(\n ([slideIndex, flights, hasSelections]) => {\n const isLast = slideIndex === flights.length - 1;\n\n this.setTitle(isLast, hasSelections);\n }\n )\n );\n }\n\n subTotalChange(amount: Amount, fragmentId: string): void {\n this.subtotalPriceSub$.next({ ...amount, fragmentId, category: Category.SEAT });\n }\n\n continue(): void {\n this.subscriptions.add(\n combineLatest([this.slideIndex$, this.flights$, this.hasSelections$])\n .pipe(take(1))\n .subscribe(([slideIndex, flights, hasSelections]) => {\n const isLast = slideIndex === flights.length - 1;\n\n if (hasSelections) {\n this.trackEvent('continue-selection');\n }\n\n if (!isLast) {\n this.slideIndex$.next(slideIndex + 1);\n } else if (hasSelections) {\n this.isSideBarOpen = true;\n } else {\n this.confirmSelection();\n }\n })\n );\n }\n\n confirmSelection(): void {\n this.trackEvent('confirm-selection');\n this.isSideBarOpen = false;\n // setTimeout so that sidebar is closed properly before this component is destroyed\n setTimeout(() => {\n this.preSelectClosed.emit(true);\n });\n }\n\n skipSeatSelection(trackElementState: string): void {\n this.trackEvent(`skip-selection-${trackElementState}`, trackElementState);\n // Clear cart only if user has made seat selection to avoid unnecessary back-end calls\n this.subscriptions.add(\n this.hasSelections$.pipe(take(1)).subscribe((hasSelections) => {\n if (hasSelections) {\n this.store$.dispatch(SeatMapActions.clearSelections());\n }\n this.preSelectClosed.emit(hasSelections);\n })\n );\n }\n\n changeSeats(e: SeatChangeEvent): void {\n this.seatChanged.emit(e);\n this.updateSubTotal(e.flightId);\n }\n\n setTitle(isLast: boolean, hasSelections: boolean): void {\n if (hasSelections) {\n if (isLast) {\n this.translationKey$.next({ key: 'actions.next' });\n } else {\n this.translationKey$.next({ key: 'ancillaries.seats.continueToFlight' });\n }\n } else if (isLast) {\n this.translationKey$.next({ key: 'ancillaries.seats.skipSeatSelection' });\n } else {\n this.translationKey$.next({ key: 'ancillaries.seats.skipFlight' });\n }\n }\n\n viewDetails(): void {\n this.itineraryModal = getBoundDetailsModalData(this.cartOrOrder$, this.slideIndex$);\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.subscriptions);\n }\n\n updateSubTotal(flightId: string): void {\n this.subscriptions.add(\n this.store$.pipe(seatSelections(), take(1)).subscribe((allSeatSelections) => {\n const priceAndCurrencyCode = (\n allSeatSelections && allSeatSelections[flightId] ? allSeatSelections[flightId] : []\n )\n .filter((seatSelection) => seatSelection.variant && seatSelection.pricePerItem && !seatSelection.paid)\n .reduce(\n (combined, currentSeatSelection) => {\n return {\n price: combined.price + Number(currentSeatSelection.pricePerItem.amount ?? 0),\n currencyCode: combined.currencyCode ?? currentSeatSelection.pricePerItem.currencyCode,\n };\n },\n { price: 0, currencyCode: undefined }\n );\n\n const amount = {\n amount: String(priceAndCurrencyCode?.price),\n currencyCode: priceAndCurrencyCode?.currencyCode,\n };\n\n this.subtotalPriceSub$.next({ ...amount, fragmentId: flightId, category: Category.SEAT });\n })\n );\n }\n\n private trackEvent(elementName: string, state?: string): void {\n this.subscriptions.add(\n this.cartOrOrder$.pipe(take(1)).subscribe((cart) => {\n this.gtmService.seatMapEvent(elementName, ElementTypes.BUTTON, state, ElementActions.CLICK, {\n flightInfo: getSeatMapFlightInfoFromCart(cart),\n });\n })\n );\n }\n\n /**\n * This is a performance improvement and stops child components being destroyed and recreated when the flights array changes.\n */\n flightsTrackBy(_index: number, flight: FlightWithStreams): string {\n return flight.id;\n }\n}\n","\n
\n

\n {{ 'feedback.multiCitySurveyTitle' | finLocalization }}\n

\n

\n \n {{ 'feedback.multiCitySurveyDescription' | finLocalization }}\n \n \n {{ 'feedback.multiCitySurveyLinkText' | finLocalization }}\n \n

\n
\n\n \n
\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, map, Observable, of, startWith, Subscription, switchMap } from 'rxjs';\n\nimport { BookingAppState } from '@fcom/common/interfaces/booking';\nimport { QualtricsSurveys } from '@fcom/common/qualtrics/qualtrics.utils';\nimport { ConfigService, unsubscribe } from '@fcom/core/index';\nimport { orderData } from '@fcom/common-booking/store';\nimport { FinnairCart, FinnairOrder } from '@fcom/dapi/api/models';\nimport { CartState } from '@fcom/dapi';\nimport { finShare } from '@fcom/rx';\nimport { getProductTripTypeFromBoundsForGA4 } from '@fcom/common/utils/gtm.utils';\nimport { GA4TripType } from '@fcom/common/interfaces';\n\nimport { cartState } from '../../../../store/selectors';\n\n@Component({\n selector: 'fin-multi-city-survey',\n templateUrl: './multi-city-survey.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MultiCitySurveyComponent implements OnInit, OnDestroy {\n @Input() alwaysRender = false;\n\n survey = QualtricsSurveys.MULTI_CITY;\n openSurvey = false;\n enableSurvey$ = new BehaviorSubject(false);\n cartOrOrder$: Observable;\n\n private subscriptions: Subscription = new Subscription();\n\n constructor(\n private configService: ConfigService,\n private store$: Store\n ) {}\n\n ngOnInit(): void {\n const cartState$ = this.store$.pipe(cartState(), startWith(null), finShare());\n const order$ = this.store$.pipe(orderData(), startWith(null), finShare());\n\n this.cartOrOrder$ = order$.pipe(\n switchMap((order) => {\n return order ? of(order) : cartState$.pipe(map((state: CartState) => state?.cartData));\n })\n );\n\n this.checkIfSurveyShouldBeShown();\n }\n\n ngOnDestroy(): void {\n this.subscriptions = unsubscribe(this.subscriptions);\n }\n\n checkIfSurveyShouldBeShown(): void {\n if (!this.configService.cfg.enableMultiCity) {\n return;\n }\n\n if (this.alwaysRender) {\n this.enableSurvey$.next(true);\n return;\n }\n\n this.subscriptions.add(\n this.cartOrOrder$.subscribe((cartOrOrder) => {\n if (!cartOrOrder) {\n this.enableSurvey$.next(false);\n return;\n }\n\n const tripType = getProductTripTypeFromBoundsForGA4(cartOrOrder?.bounds);\n\n this.enableSurvey$.next(tripType === GA4TripType.MULTICITY);\n })\n );\n }\n}\n","
\n \n
\n\n
\n \n
\n\n\n

\n {{ policy.outbound?.label }}\n

\n

\n \n {{ outbound$ | finMap: 'departure.locationCode' | async }}–{{\n outbound$ | finMap: 'arrival.locationCode' | async\n }}\n ({{ outboundBrandName$ | async }})\n \n \n {{ policy.outbound?.value }}\n \n

\n

\n \n {{ inbound$ | finMap: 'departure.locationCode' | async }}–{{\n inbound$ | finMap: 'arrival.locationCode' | async\n }}\n ({{ inboundBrandName$ | async }})\n \n \n {{ policy.inbound?.value }}\n \n

\n
\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\nimport { combineLatest, Observable, of } from 'rxjs';\nimport { filter, map, startWith } from 'rxjs/operators';\n\nimport { FareFamily, FinnairBoundItem, TranslatedBenefitRow } from '@fcom/dapi/api/models';\nimport { finShare } from '@fcom/rx';\nimport { FareFamilyMap } from '@fcom/common/interfaces/booking';\n\nexport const mapRebookPolicy = (fareFamily: FareFamily) =>\n fareFamily?.translatedBenefitRows.find((row) => row.key === 'rebook');\n\nexport const mapCancellationPolicy = (fareFamily: FareFamily) =>\n fareFamily?.translatedBenefitRows.find((row) => row.key === 'cancel');\n\ninterface TranslatedBenefitRowBounds {\n outbound: TranslatedBenefitRow | undefined;\n inbound?: TranslatedBenefitRow | undefined;\n}\n\n@Component({\n selector: 'fin-offer-policy',\n templateUrl: './offer-policy.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OfferPolicyComponent implements OnInit {\n @Input()\n fareFamilies$: Observable;\n @Input()\n outbound$: Observable;\n @Input()\n inbound$: Observable;\n @Input()\n isOneWay$: Observable;\n @Input()\n showHighlightedContent$: Observable = of(false);\n\n outboundBrandName$: Observable;\n inboundBrandName$: Observable;\n\n rebookAndCancellationPolicies$: Observable<{\n rebook: TranslatedBenefitRowBounds;\n cancel: TranslatedBenefitRowBounds;\n }>;\n\n constructor() {}\n\n ngOnInit(): void {\n this.outboundBrandName$ = combineLatest([\n this.outbound$.pipe(filter((v) => !!v)),\n this.fareFamilies$.pipe(filter(Boolean)),\n ]).pipe(\n map(([outbound, fareFamilies]: [FinnairBoundItem, FareFamilyMap]) => {\n return this.fareFamilyBrandName(outbound, fareFamilies);\n }),\n filter((v) => !!v)\n );\n\n this.inboundBrandName$ = combineLatest([\n this.inbound$.pipe(filter((v) => !!v)),\n this.fareFamilies$.pipe(filter(Boolean)),\n this.isOneWay$,\n ]).pipe(\n filter(([, , isOneWay]) => !isOneWay),\n map(([inbound, fareFamilies]: [FinnairBoundItem, FareFamilyMap, boolean]) => {\n return this.fareFamilyBrandName(inbound, fareFamilies);\n }),\n filter((v) => !!v)\n );\n\n this.rebookAndCancellationPolicies$ = combineLatest([\n this.fareFamilies$.pipe(filter(Boolean)),\n this.outbound$,\n this.inbound$.pipe(startWith(null as FinnairBoundItem)),\n ]).pipe(\n map(([fareFamilies, outbound, inbound]) => ({\n rebook: {\n outbound: mapRebookPolicy(fareFamilies[outbound?.fareFamily?.code]),\n inbound: inbound ? mapRebookPolicy(fareFamilies[inbound?.fareFamily?.code]) : null,\n },\n cancel: {\n outbound: mapCancellationPolicy(fareFamilies[outbound?.fareFamily?.code]),\n inbound: inbound ? mapCancellationPolicy(fareFamilies[inbound?.fareFamily?.code]) : null,\n },\n })),\n finShare()\n );\n }\n\n private fareFamilyBrandName(outbound: FinnairBoundItem, fareFamilies: FareFamilyMap) {\n const brandName = outbound.fareFamily.name;\n const code = outbound.fareFamily.code;\n return brandName ? brandName : (fareFamilies[code] || ({} as FareFamily)).brandName;\n }\n}\n","\n \n
\n \n
\n\n \n \n
\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { map, Observable } from 'rxjs';\n\nimport { FragmentService, MediaQueryService } from '@fcom/common/services';\nimport { CmsArticle } from '@fcom/core-api/interfaces';\nimport { ModalButtons } from '@fcom/ui-components';\nimport { AspectRatioString } from '@fcom/common/interfaces';\n\n@Component({\n selector: 'fin-sustainablity-info-modal',\n templateUrl: './sustainablity-info-modal.component.html',\n styleUrls: ['./sustainablity-info-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SustainablityInfoModalComponent implements OnInit {\n @Input() modalOpen: boolean;\n\n @Output()\n closeModal: EventEmitter = new EventEmitter();\n\n safArticle$: Observable;\n\n public readonly ModalButtons = ModalButtons;\n aspectRatio$: Observable;\n\n constructor(\n private fragmentService: FragmentService,\n private mediaQueryService: MediaQueryService\n ) {}\n\n ngOnInit(): void {\n this.safArticle$ = this.fragmentService.getFragment('fragments.safInfo.url');\n\n this.aspectRatio$ = this.mediaQueryService\n .isBreakpoint$('mobile')\n .pipe(map((isMobile) => (isMobile ? '4x3' : '21x9')));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { IconsModule, ModalModule, UiComponentsModule } from '@fcom/ui-components';\nimport { UiTranslateModule } from '@fcom/ui-translate';\nimport { CmsModule } from '@fcom/cms';\nimport { ComponentsModule } from '@fcom/common/components';\nimport { GtmModule } from '@fcom/common/gtm/gtm.module';\nimport { PipesModule } from '@fcom/common/pipes/pipes.module';\nimport { CommonBookingComponentsModule } from '@fcom/common-booking/components';\nimport { QualtricsModule } from '@fcom/common/qualtrics/qualtrics.module';\n\nimport { BoundSelectionErrorMessageComponent } from './components/bound-selection-error-message/bound-selection-error-message.component';\nimport { FlightSelectionWarningComponent } from './components/flight-selection-warning/flight-selection-warning.component';\nimport { OfferPolicyComponent } from './components/offer-policy/offer-policy.component';\nimport { BookingFlightComponent } from './components/flight/flight.component';\nimport { GrandTotalComponent } from './components/grand-total/grand-total.component';\nimport { TripMessageComponent } from './components/trip-message/trip-message.component';\nimport { SustainabilityTripMessageComponent } from './components/sustainability/sustainability-trip-message/sustainability-trip-message.component';\nimport { SustainablityInfoModalComponent } from './components/sustainability/sustainablity-info-modal/sustainablity-info-modal.component';\nimport { MultiCitySurveyComponent } from './components/multi-city-survey/multi-city-survey.component';\n\nconst COMPONENTS = [\n BoundSelectionErrorMessageComponent,\n OfferPolicyComponent,\n BookingFlightComponent,\n GrandTotalComponent,\n TripMessageComponent,\n SustainabilityTripMessageComponent,\n SustainablityInfoModalComponent,\n FlightSelectionWarningComponent,\n MultiCitySurveyComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ComponentsModule,\n CommonBookingComponentsModule,\n PipesModule,\n GtmModule,\n CmsModule,\n UiTranslateModule,\n UiComponentsModule,\n IconsModule,\n ModalModule,\n QualtricsModule,\n ],\n declarations: [...COMPONENTS],\n exports: [...COMPONENTS],\n providers: [],\n})\nexport class BookingCommonModule {}\n","\n @if (listTitle) {\n

\n {{ listTitle }}\n

\n }\n \n \n 0) &&\n (product.count$ | async) === 0\n ? ''\n : (product.count$ | async) === 0\n ? (productCardLocalizationsPrefix + 'services.' + product.category + '.state.selection.default'\n | finLocalization)\n : (product.count$ | async) === 1\n ? (productCardLocalizationsPrefix + 'services.' + product.category + '.state.selection.singular'\n | finLocalization)\n : (productCardLocalizationsPrefix + 'services.' + product.category + '.state.selection.plural'\n | finLocalization: { numberOfItems: product.count$ | async })\n \"\n [purchasedText]=\"\n (product.purchasedCount$ | async) === 0\n ? (productCardLocalizationsPrefix + 'services.' + product.category + '.state.purchased.default'\n | finLocalization)\n : (product.purchasedCount$ | async) === 1\n ? (productCardLocalizationsPrefix + 'services.' + product.category + '.state.purchased.singular'\n | finLocalization)\n : (product.purchasedCount$ | async) > 1\n ? (productCardLocalizationsPrefix + 'services.' + product.category + '.state.purchased.plural'\n | finLocalization: { numberOfItems: product.purchasedCount$ | async })\n : ''\n \"\n [viewSummaryText]=\"'services.productCards.viewSummary' | finLocalization\"\n [buttonIcon]=\"useNewProductCardLayout ? SvgLibraryIcon.ARROW_RIGHT : SvgLibraryIcon.PLUS\"\n [buttonText]=\"\n (useNewProductCardLayout && (product.count$ | async) > 0\n ? 'ancillaries.productCard.button.modify'\n : useNewProductCardLayout\n ? 'ancillaries.productCard.button.select'\n : (product.status$ | async) === ButtonState.OK\n ? 'services.' + product.category + '.state.modify.text'\n : 'services.' + product.category + '.state.select.text'\n ) | finLocalization\n \"\n [buttonAriaText]=\"\n ((product.status$ | async) === ButtonState.OK\n ? 'services.' + product.category + '.state.modify.ariaText'\n : (product.status$ | async) === ButtonState.UPDATING\n ? 'services.' + product.category + '.state.updating.ariaText'\n : 'services.' + product.category + '.state.select.ariaText'\n ) | finLocalization\n \"\n [buttonTheme]=\"\n product.isSpecialUpsellProduct\n ? ButtonTheme.DARK_PRIMARY_NORDIC_BLUE\n : (product.status$ | async) === ButtonState.OK\n ? ButtonTheme.LIGHT_SECONDARY_OUTLINE\n : ButtonTheme.LIGHT_PRIMARY_NORDIC_BLUE\n \"\n [hideViewButton]=\"product.hideViewButton\"\n [hideButton]=\"\n (product.category !== Category.SEAT && product.maxPurchasesDone$ | async) === true ||\n (product.notAvailable$ | async) === true ||\n (product.noQuotaLeft && (product.count$ | async) === 0) ||\n product.notEligibleWithIncompatibleSeat === true\n \"\n (selectProduct)=\"onSelectProduct(product.category, index)\"\n (viewDetails)=\"viewDetails.emit(product.category)\"\n [focusOnBtn$]=\"(focusOnProductBtn$ | async) === product.category | finToObservable\"\n [focusOnViewSummary$]=\"(focusOnViewDetails$ | async) === product.category | finToObservable\"\n [attr.data-testid]=\"'service-selection-' + product.category\"\n [notificationTheme]=\"(product.productCardNotification$ | async)?.theme\"\n [notificationIcon]=\"(product.productCardNotification$ | async)?.icon\"\n [notificationText]=\"(product.productCardNotification$ | async)?.messageKey | finLocalization\"\n [notificationTitle]=\"(product.productCardNotification$ | async)?.titleKey | finLocalization\"\n [productTagText]=\"product.productTag?.localizationKey | finLocalization\"\n [productTagIcon]=\"product.productTag?.icon\"\n [productTagTheme]=\"product.productTag?.theme\"\n [useNewProductCardLayout]=\"useNewProductCardLayout\"\n [countText]=\"\n useNewProductCardLayout && (product.count$ | async) > 0\n ? ('ancillaries.productCard.added' | finLocalization: { numberOfItems: product.count$ | async })\n : ''\n \"\n [isLaptopUp]=\"isLaptopUp$ | async\"\n [isSpecialUpsellProduct]=\"product.isSpecialUpsellProduct\"\n >\n \n \n
\n\n\n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { combineLatest, Observable, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { ButtonTheme, NotificationTheme } from '@fcom/ui-components';\nimport {\n FINNAIR,\n GtmEcommerceClickProduct,\n GtmEcommerceImpressionProduct,\n GtmEcommerceList,\n GtmEcommerceMeasurement,\n GtmEvent,\n GtmPurchaseFlow,\n LoaderType,\n} from '@fcom/common/interfaces';\nimport { CmsImageData } from '@fcom/core-api/interfaces';\nimport { Category, FinnairBoundItem } from '@fcom/dapi/api/models';\nimport { Amount, SelectedServiceData } from '@fcom/dapi/interfaces';\nimport { unsubscribe } from '@fcom/core/utils';\nimport { GtmService } from '@fcom/common/gtm';\nimport { getGA4ProductsFromSmpProducts, resolveGtmCategory } from '@fcom/common/utils/gtm.utils';\nimport { MediaQueryService } from '@fcom/common/services';\n\nimport { ButtonState, ProductTag } from '../../interfaces';\n\nexport interface PurchasesDonePerFragment {\n [fragmentId: string]: boolean;\n}\n\nexport interface ProductCardNotification {\n messageKey?: string;\n titleKey?: string;\n icon?: SvgLibraryIcon;\n theme: NotificationTheme;\n}\n\nexport interface SmpProduct {\n category: Category;\n title: string;\n description: string;\n image: CmsImageData;\n status$: Observable;\n price$: Observable;\n count$: Observable;\n purchasedCount$?: Observable;\n maxNumberItems$?: Observable;\n maxPurchasesDone$?: Observable;\n notAvailable$?: Observable;\n notEligibleWithIncompatibleSeat?: boolean;\n purchasesDoneForFragment$?: Observable;\n noQuotaLeft: boolean;\n productCardNotification$: Observable;\n lowestPrice?: Amount;\n originalPrice?: Amount;\n productTag?: ProductTag;\n hideViewButton: boolean;\n isSpecialUpsellProduct?: boolean;\n}\n\n@Component({\n selector: 'fin-product-list',\n styleUrls: ['product-list.component.scss'],\n templateUrl: 'product-list.component.html',\n})\nexport class ProductListComponent implements OnInit, OnDestroy {\n readonly ButtonState = ButtonState;\n readonly ButtonTheme = ButtonTheme;\n readonly LoaderType = LoaderType;\n readonly Category = Category;\n readonly NotificationTheme = NotificationTheme;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n private subscriptions: Subscription = new Subscription();\n isLaptopUp$: Observable;\n\n @Input() hideZeroPrices = false;\n @Input() products$: Observable;\n @Input() tabletShowTwoPerRow = false;\n @Input() purchaseFlow: GtmPurchaseFlow;\n @Input() focusOnViewDetails$: Observable;\n @Input() focusOnProductBtn$: Observable;\n @Input() productCardLocalizationsPrefix = '';\n @Input() bounds$: Observable;\n @Input() listTitle?: string;\n @Input() useNewProductCardLayout = false;\n\n @Output() selectProduct: EventEmitter = new EventEmitter();\n @Output() viewDetails: EventEmitter = new EventEmitter();\n\n constructor(\n private gtmService: GtmService,\n private mediaQueryService: MediaQueryService\n ) {}\n\n ngOnInit(): void {\n this.subscriptions.add(\n combineLatest([this.products$, this.bounds$])\n .pipe(take(1))\n .subscribe(([products, bounds]) => {\n this.sendEcommerceImpressionsEvent(products);\n this.gtmService.ecommerceEventGA4(\n GtmEvent.VIEW_ITEM_LIST,\n getGA4ProductsFromSmpProducts(products, this.purchaseFlow, bounds)\n );\n })\n );\n this.isLaptopUp$ = this.mediaQueryService.isBreakpoint$('laptop_up');\n }\n\n ngOnDestroy(): void {\n this.subscriptions = unsubscribe(this.subscriptions);\n }\n\n onSelectProduct(category: Category, index: number): void {\n this.selectProduct.emit({ category, index: 0 });\n this.sendEcommerceClickEvent(category, index);\n\n this.subscriptions.add(\n combineLatest([this.products$, this.bounds$])\n .pipe(take(1))\n .subscribe(([products, bounds]) => {\n const matchedProduct = products.find((product) => product.category === category);\n\n this.gtmService.ecommerceEventGA4(\n GtmEvent.SELECT_ITEM,\n getGA4ProductsFromSmpProducts([matchedProduct], this.purchaseFlow, bounds)\n );\n })\n );\n }\n\n private sendEcommerceImpressionsEvent(products: SmpProduct[]): void {\n const gtmProducts: GtmEcommerceImpressionProduct[] = products.map((product, index) => {\n const name = product.category === Category.BAGGAGE ? 'BAG' : resolveGtmCategory(product.category)[0];\n return {\n name,\n id: name,\n brand: FINNAIR,\n category: resolveGtmCategory(product.category)[1],\n list: [GtmPurchaseFlow.BOOKING, GtmPurchaseFlow.CORPORATE].includes(this.purchaseFlow)\n ? GtmEcommerceList.BOOKING_SMP\n : GtmEcommerceList.MMB_VIEW_PNR,\n position: index + 1,\n };\n });\n\n this.gtmService.ecommerceEvent(\n GtmEvent.PRODUCT_IMPRESSIONS,\n GtmEcommerceMeasurement.IMPRESSIONS,\n gtmProducts,\n this.purchaseFlow\n );\n }\n\n private sendEcommerceClickEvent(category: Category, index: number): void {\n const gtmProductName = category === Category.BAGGAGE ? 'BAG' : resolveGtmCategory(category)[0];\n const gtmProduct: GtmEcommerceClickProduct = {\n name: gtmProductName,\n id: gtmProductName,\n brand: FINNAIR,\n category: resolveGtmCategory(category)[1],\n position: index + 1,\n };\n\n this.gtmService.enhancedEcommerceProductClickOrDetailView(\n GtmEvent.PRODUCT_CLICK,\n GtmEcommerceMeasurement.CLICK,\n gtmProduct,\n [GtmPurchaseFlow.BOOKING, GtmPurchaseFlow.CORPORATE].includes(this.purchaseFlow)\n ? GtmEcommerceList.BOOKING_SMP\n : GtmEcommerceList.MMB_VIEW_PNR,\n this.purchaseFlow\n );\n }\n}\n","\n \n \n
\n
\n
\n \n
\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\nimport { CmsArticle } from '@fcom/core-api/';\nimport { FragmentService } from '@fcom/common/services';\n\n@Component({\n selector: 'fin-trip-message',\n templateUrl: './trip-message.component.html',\n styleUrls: ['./trip-message.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TripMessageComponent implements OnInit {\n @Input() fragmentKey: string;\n\n tripMessage$: Observable;\n\n constructor(private fragmentService: FragmentService) {}\n\n ngOnInit(): void {\n this.tripMessage$ = this.fragmentService.getFragment(this.fragmentKey);\n }\n}\n","
\n \n
\n \n \n
\n \n {{ buttonTranslationKey | finLocalization }}\n {{ additionalTitle }}\n \n \n
\n
\n\n \n
\n \n
\n\n\n \n
\n
\n
\n \n \n {{ 'MMB.purchase.success.seats.reassignNote.title' | finLocalization }}\n \n
\n
\n {{ 'MMB.purchase.success.seats.reassignNote.message' | finLocalization }}\n
\n
\n
\n \n \n\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { v4 as uuid } from 'uuid';\n\nimport { FinnairBoundItem, FinnairPassengerItem } from '@fcom/dapi/api/models';\nimport { FinnairServiceItemWithUpsell } from '@fcom/dapi/interfaces';\nimport { getIconForServiceCategory } from '@fcom/dapi/utils';\n\n@Component({\n selector: 'fin-included-product-item',\n styleUrls: ['./included-product-item.component.scss'],\n templateUrl: './included-product-item.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedProductItemComponent {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n uuid = uuid();\n\n @Input() category: string;\n @Input() buttonTranslationKey: string;\n @Input() additionalTitle: string;\n @Input() includePaddings = true;\n @Input() expandOpen = false;\n @Input() disabled = false;\n @Input() displaySeatReassignMessage = false;\n @Input() isShortHaulFlight: boolean;\n @Input() passengers: FinnairPassengerItem[];\n @Input() bound: FinnairBoundItem;\n @Input() service: FinnairServiceItemWithUpsell;\n\n getIconForService(): SvgLibraryIcon {\n return getIconForServiceCategory(this.category);\n }\n}\n","\n \n\n\n\n \n \n\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\nimport { ModalButtons } from '@fcom/ui-components';\nimport { BoundType } from '@fcom/dapi';\nimport { FinnairBoundItem, FinnairCabinClass, FinnairItineraryItemFlight, FinnairOrder } from '@fcom/dapi/api/models';\nimport { getTails, isByBusOnly } from '@fcom/common-booking/utils/common-booking.utils';\n\n@Component({\n selector: 'fin-booking-flight',\n templateUrl: './flight.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BookingFlightComponent implements OnInit {\n readonly ModalButtons = ModalButtons;\n readonly BoundType = BoundType;\n\n modalOpen = false;\n\n /**\n * Flight Bound Information\n */\n @Input() bound: FinnairBoundItem;\n\n /**\n * A map of the locations in the bound/booking to get city and airport names\n */\n @Input() locations: FinnairOrder['locations'];\n\n /**\n * Type of bound to render in the timeline\n */\n @Input() type: BoundType = null;\n\n @Input()\n isBookingFlow = false;\n\n tails: string[];\n isByBusOnly: boolean;\n cabin: FinnairCabinClass;\n\n ngOnInit(): void {\n this.tails = getTails(this.bound);\n this.isByBusOnly = isByBusOnly(this.bound);\n this.cabin = this.getCabinClass(this.bound);\n }\n\n openViewDetails(): void {\n this.modalOpen = true;\n }\n\n getCabinClass(bound: FinnairBoundItem): FinnairCabinClass {\n return bound.cabinClass ?? (bound.itinerary[0] as FinnairItineraryItemFlight).cabinClass;\n }\n}\n","\n \n \n \n \n \n \n \n\n \n
\n
\n
\n
\n \n 0 && slideIndex >= 0\">\n \n \n {{ messageKey | finLocalization }}\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 \n {{ 'subtotal' | finLocalization }}: \n {{ subTotalPrice$ | async | finPrice | finEmpty: '–' }}\n \n \n \n {{ 'subtotal' | finLocalization }}: \n {{ subTotalPrice$ | async | finPrice | finEmpty: '–' }}\n \n
\n \n
\n
\n
\n \n
\n \n \n \n
\n \n \n\n \n \n \n \n \n \n
\n

{{ confirmationModalTranslationKeys.firstContentParagraph | finLocalization }}

\n

{{ confirmationModalTranslationKeys.secondContentParagraph | finLocalization }}

\n
\n
\n \n \n
\n \n
\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport {\n BehaviorSubject,\n combineLatest,\n fromEvent,\n merge,\n Observable,\n of,\n ReplaySubject,\n Subject,\n Subscription,\n} from 'rxjs';\nimport { debounceTime, delay, distinctUntilChanged, filter, map, mapTo, switchMap, take } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport { ButtonPosition, ButtonSize, ButtonTheme, IconPosition, ModalButtons } from '@fcom/ui-components';\nimport { LoaderType, Step } from '@fcom/common/interfaces';\nimport { Amount, LocationInfoMap } from '@fcom/dapi/interfaces';\nimport { finShare, keepState } from '@fcom/rx';\nimport { unsubscribe } from '@fcom/core/utils';\nimport {\n Category,\n FinnairBoundItem,\n FinnairCart,\n FinnairCheckInEligibility,\n FinnairItineraryItemFlight,\n FinnairOrder,\n FinnairPassengerItem,\n FinnairServiceBoundItem,\n FinnairServiceItem,\n} from '@fcom/dapi/api/models';\nimport { BookingSteps } from '@fcom/common/interfaces/booking/booking-step.interface';\nimport { MediaQueryService, ScrollService } from '@fcom/common/services';\nimport { BOOKING_STEPS } from '@fcom/common/config/booking-config';\nimport { AirOffersStatus, BookingAppState } from '@fcom/common/interfaces/booking';\n\nimport { BookingSummaryService } from '../../../../interfaces';\nimport {\n ConfirmModal,\n ConfirmModalData,\n EligibilityWithCategory,\n ItineraryModal,\n PurchasedServicesForOrder,\n} from '../../interfaces';\nimport { SubviewComponent } from '../../../../components/subview/subview.component';\nimport { calculateSubTotalPrice } from '../../utils';\nimport { getBoundDetailsModalData } from '../../../../utils/ancillaries.utils';\nimport { getCheckInEligibilities, getUnpaidSeatsBySegmentId } from '../../../../store';\nimport { AncillaryLoaderStatus } from '../../enums';\n\n@Component({\n selector: 'fin-ancillary-subview',\n styleUrls: ['ancillary-subview.component.scss'],\n templateUrl: 'ancillary-subview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AncillarySubviewComponent implements OnInit, OnChanges, OnDestroy {\n @ViewChild('scrollContainer', { static: false }) scrollContainer: ElementRef;\n\n STEPS: BookingSteps = BOOKING_STEPS;\n\n readonly ButtonPosition = ButtonPosition;\n readonly ButtonTheme = ButtonTheme;\n readonly ButtonSize = ButtonSize;\n readonly IconPosition = IconPosition;\n readonly Category = Category;\n readonly ModalButtons = ModalButtons;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n /**\n * A little bit longer than the CSS animation to ensure that the element has slid down\n */\n readonly ANIMATION_DURATION_MS = 350;\n\n /**\n * Exposes data given in the `open()` call to the template\n */\n readonly data$: Observable;\n\n readonly LoaderType = LoaderType;\n readonly AirOffersStatus = AirOffersStatus;\n readonly AncillaryLoaderStatus = AncillaryLoaderStatus;\n\n @Input()\n subviewName: string;\n\n @Input()\n showFlightCard$: Observable;\n\n @Input()\n cartTotalPrice$: Observable;\n\n @Input()\n boundsOrFlights: (FinnairBoundItem | FinnairItineraryItemFlight)[] = [];\n\n @Input()\n locations: LocationInfoMap = {};\n\n @Input()\n titleKey: string;\n\n @Input()\n category: Category;\n\n @Input()\n cartOrOrder$: Observable;\n\n @Input()\n currentStep$: Observable;\n\n @Input()\n unpaidServices$: Observable;\n\n @Input()\n subtitleMessageKey$: Observable;\n\n @Input()\n currentIncludedServices!: FinnairServiceItem | null;\n\n @Input()\n onlyShowAncillaries = false;\n\n @Input()\n showFareFamilyInAncillarySidebar = true;\n\n @Input()\n purchasedServices$: Observable = of({});\n\n @Input()\n subviewContext: string;\n\n @Input()\n maxedOutForFragment$: Observable<{ [fragmentId: string]: boolean }>;\n\n @Input()\n skipEnabled = false;\n\n @Input()\n skipText = '';\n\n @Input()\n boundOrFlightAncillaryAvailability$: Observable<{ [fragmentId: string]: EligibilityWithCategory[] }>;\n\n @Input()\n passengersWithPetcIncompatibleSeats$: Observable<{ [boundId: string]: string[] }> = of({});\n\n @Input()\n confirmModalData$ = new BehaviorSubject({\n open: false,\n });\n\n @Input()\n hideChangeButton = false;\n\n @Input()\n ancillaryLoader$: BehaviorSubject = new BehaviorSubject(\n AncillaryLoaderStatus.OFF\n );\n\n @Input()\n hideSideBar = false;\n\n @Output()\n closeConfirmModal: EventEmitter = new EventEmitter();\n\n /**\n * Called when the subview is closed after onConfirm, no matter how the subview was closed.\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output()\n close: EventEmitter = new EventEmitter();\n\n @Output()\n changeStep: EventEmitter = new EventEmitter();\n\n @Output()\n reassignSeats: EventEmitter<{ currentFlightId: string }> = new EventEmitter();\n\n @Output()\n secondaryButtonClick: EventEmitter = new EventEmitter();\n\n @Output()\n flightOrBoundSelected: EventEmitter = new EventEmitter();\n\n @ViewChild('closeButton', { static: true })\n closeButton: ElementRef;\n\n @ViewChild('content', { static: true })\n content: ElementRef;\n\n @ViewChild('subview', { static: true })\n subview: SubviewComponent;\n\n @ViewChild('ctaButtonHeightFixRef', { static: false })\n ctaButtonHeightFixRef: ElementRef;\n\n initialSlideIndex: number;\n slideIndex: number;\n isSideBarOpen = false;\n ctaButtonTitle: string;\n passengers$: Observable;\n subViewVisible$: Subject = new BehaviorSubject(false);\n reassignFreeSeatsVisible$: Subject = new BehaviorSubject(false);\n unpaidSeats$: Observable;\n checkInEligibilities$: Observable;\n disableButtons$: Observable;\n subViewVisibleDelayed$: Observable;\n basketOpen$: BehaviorSubject = new BehaviorSubject(false);\n itineraryModalClosed$: EventEmitter = new EventEmitter();\n subTotalPrice$: Observable;\n itineraryModal: ItineraryModal = {\n open: false,\n data: null,\n };\n showCtaButton$: Observable;\n slideIndexSubject$ = new ReplaySubject(1);\n secondaryButtonDisabled$: Observable;\n isTabletUp$: Observable;\n\n private showCtaButtonSubject$: BehaviorSubject = new BehaviorSubject(true);\n private boundsOrFlightsSubject$: ReplaySubject<(FinnairBoundItem | FinnairItineraryItemFlight)[]> = new ReplaySubject<\n (FinnairBoundItem | FinnairItineraryItemFlight)[]\n >(1);\n private categorySubject$: ReplaySubject = new ReplaySubject(1);\n private customDataSubject$: Subject = new ReplaySubject(1);\n private subtotalPriceSub$: ReplaySubject = new ReplaySubject<\n Amount & { category: Category; fragmentId: string }\n >(1);\n private subscription: Subscription = new Subscription();\n\n constructor(\n public elementRef: ElementRef,\n private store$: Store,\n private changeDetectorRef: ChangeDetectorRef,\n private renderer: Renderer2,\n private scrollService: ScrollService,\n private mediaqueryService: MediaQueryService\n ) {\n this.showCtaButton$ = this.showCtaButtonSubject$.pipe(\n switchMap((show) => {\n return show ? of(show).pipe(delay(250)) : of(show);\n })\n );\n\n this.subViewVisibleDelayed$ = this.subViewVisible$.pipe(\n distinctUntilChanged(),\n keepState(this.ANIMATION_DURATION_MS)\n );\n\n this.disableButtons$ = this.subViewVisible$.pipe(map((visible) => !visible));\n\n this.data$ = this.customDataSubject$.pipe(finShare());\n\n this.subTotalPrice$ = calculateSubTotalPrice(this.subtotalPriceSub$, this.categorySubject$);\n }\n\n ngOnInit(): void {\n this.initialSlideIndex = -1;\n this.slideIndexSubject$.next(this.initialSlideIndex);\n this.initializeCtaButtonTitle();\n\n this.passengers$ = this.cartOrOrder$.pipe(map(({ passengers }) => passengers));\n\n this.isTabletUp$ = this.mediaqueryService.isBreakpoint$('mobile').pipe(map((isMobile) => !isMobile));\n\n this.secondaryButtonDisabled$ = this.hideSideBar\n ? combineLatest([\n this.cartOrOrder$.pipe(map((order) => order?.services?.unpaid?.length === 0)),\n this.subTotalPrice$,\n ]).pipe(map(([hasUnpaidItems, subTotal]) => hasUnpaidItems && subTotal?.amount === '0'))\n : of(false);\n\n const boundsOrFlights$ = this.boundsOrFlightsSubject$.pipe(\n distinctUntilChanged(\n (prev, next) => prev.map((value) => value.id).join() === next.map((value) => value.id).join()\n )\n );\n\n this.subscription.add(\n combineLatest([this.slideIndexSubject$, boundsOrFlights$])\n .pipe(\n map(([slideIndex, boundsOrFlights]): [number, FinnairBoundItem | FinnairItineraryItemFlight] => {\n return [slideIndex, boundsOrFlights[slideIndex]];\n })\n )\n .subscribe(([indexToGo, currentBoundOrFlight]) => {\n this.slideIndex = indexToGo;\n this.flightOrBoundSelected.emit(currentBoundOrFlight);\n this.setReassignSeatsEligible(currentBoundOrFlight?.id);\n this.closeSidebar();\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['boundsOrFlights']) {\n this.boundsOrFlightsSubject$.next(changes['boundsOrFlights'].currentValue);\n }\n if (changes['category']) {\n this.categorySubject$.next(changes['category'].currentValue);\n }\n }\n\n /**\n * Whether or not the subview is visible in DOM taking the animations into account.\n */\n public get visible$(): Observable {\n return this.subViewVisible$;\n }\n\n setSubTotalPrice(amount: Amount, category: Category, fragmentId: string): void {\n this.subtotalPriceSub$.next({ ...amount, category, fragmentId });\n }\n\n updateSlideIndex(slideIndex: number, scrollTop: boolean): void {\n this.slideIndexSubject$.next(slideIndex);\n if (this.scrollContainer && scrollTop) {\n this.scrollService.scrollToImmediate(this.scrollContainer);\n }\n }\n\n /**\n * Open the subview and possibly supply custom data to the instance.\n * @param subviewName name of the subview\n * @param {T} data optional data to expose as `subview.data` in the templates\n * @param {number} slideIndex slide index to be opened\n * @return void\n */\n open(data?: T, slideIndex: number = this.initialSlideIndex): void {\n this.slideIndexSubject$.next(slideIndex);\n this.customDataSubject$.next(data);\n this.subscription = new Subscription();\n this.subViewVisible$.next(true);\n const resize$: Observable = fromEvent(window, 'resize').pipe(debounceTime(100));\n this.bindCtaButtonHeightFixHandler(resize$);\n this.bindBasketHandling(resize$);\n this.subview.open = true;\n }\n\n onClose(): void {\n if (this.category !== Category.COVER && this.hideSideBar === false) {\n this.isSideBarOpen = true;\n this.showCtaButtonSubject$.next(false);\n } else {\n this.closeSubview();\n }\n }\n\n closeSubview(): void {\n this.slideIndexSubject$.next(this.initialSlideIndex);\n this.closeSidebar();\n\n this.subViewVisible$.next(false);\n this.changeDetectorRef.detectChanges();\n\n this.subview.open = false;\n }\n\n openBasket(): void {\n this.basketOpen$.next(true);\n }\n\n closeBasket(): void {\n this.basketOpen$.next(false);\n }\n\n onEdit(step: Step): void {\n this.closeSubview();\n this.changeStep.emit(step);\n }\n\n viewDetails(): void {\n this.itineraryModal = getBoundDetailsModalData(this.cartOrOrder$, this.slideIndexSubject$);\n }\n\n closeSidebar(): void {\n this.isSideBarOpen = false;\n this.showCtaButtonSubject$.next(true);\n }\n\n handleCtaClick(showFlightCard: boolean): void {\n if (this.slideIndex >= this.boundsOrFlights.length - 1 || !showFlightCard) {\n this.onClose();\n } else {\n this.updateSlideIndex(this.slideIndex + 1, true);\n }\n }\n\n handleSecondaryCtaClick(): void {\n this.secondaryButtonClick.emit();\n }\n\n ngOnDestroy(): void {\n this.cleanUp();\n this.elementRef = null;\n this.content = null;\n this.closeButton = null;\n }\n\n private initializeCtaButtonTitle(): void {\n this.subscription.add(\n combineLatest([this.boundsOrFlightsSubject$, this.slideIndexSubject$, this.showFlightCard$]).subscribe(\n ([boundsOrFlights, slideIndex, showNewCta]) => {\n if (this.category === Category.COVER || !boundsOrFlights.length) {\n this.ctaButtonTitle = 'actions.done';\n } else if (showNewCta) {\n if (slideIndex < boundsOrFlights.length - 1) {\n this.ctaButtonTitle = 'actions.nextFlight';\n } else if (this.hideSideBar) {\n this.ctaButtonTitle = 'services.productCards.moreTravelExtras';\n } else {\n this.ctaButtonTitle = 'services.productCards.viewSummary';\n }\n } else {\n this.ctaButtonTitle = 'actions.continue';\n }\n }\n )\n );\n }\n\n private setReassignSeatsEligible(currentBoundOrFlightId: string) {\n this.unpaidSeats$ = this.store$.pipe(getUnpaidSeatsBySegmentId(currentBoundOrFlightId));\n this.checkInEligibilities$ = this.store$.pipe(getCheckInEligibilities());\n\n this.subscription.add(\n combineLatest([this.unpaidSeats$, this.checkInEligibilities$])\n .pipe(\n map(([unpaidSeats, checkInEligibilities]) => {\n const hasCheckInEligibility = checkInEligibilities.some((eligibility) => {\n const containsBoundId = eligibility.id.includes(currentBoundOrFlightId);\n const hasCheckInWindow = !!eligibility.checkinWindow;\n const hasNoReason = !eligibility.reason;\n return containsBoundId && hasCheckInWindow && hasNoReason;\n });\n\n const hasUnpaidSeatForSegment = unpaidSeats.some((boundItem) =>\n boundItem.segments.some((segment) => segment.id === currentBoundOrFlightId)\n );\n\n return hasCheckInEligibility && hasUnpaidSeatForSegment;\n })\n )\n .subscribe((showReassignFreeSeats) => this.reassignFreeSeatsVisible$.next(showReassignFreeSeats))\n );\n }\n\n // eslint-disable-next-line sonarjs/cognitive-complexity\n private bindCtaButtonHeightFixHandler(resize$: Observable) {\n const RETRY_TIMES = 1;\n const WAIT_TIME_IN_MS = 500;\n const retry$ = new Subject();\n this.subscription.add(\n merge(\n this.subViewVisibleDelayed$.pipe(filter(Boolean)),\n resize$.pipe(mapTo(true)),\n retry$.pipe(take(RETRY_TIMES))\n )\n .pipe(delay(WAIT_TIME_IN_MS))\n .subscribe(() => {\n if (this.elementRef?.nativeElement) {\n const element = this.elementRef.nativeElement.querySelector('fcom-cta-button .cta-button');\n if (element && this.ctaButtonHeightFixRef && this.ctaButtonHeightFixRef.nativeElement) {\n const rect = element.getBoundingClientRect();\n try {\n const topPaddingToExclude = 16;\n const newHeight = rect.height > topPaddingToExclude ? rect.height - topPaddingToExclude : rect.height;\n this.renderer.setStyle(this.ctaButtonHeightFixRef.nativeElement, 'height', `${newHeight}px`);\n if (rect.height === 0) {\n retry$.next(true);\n }\n } catch (e) {\n // Failed to set height\n }\n }\n }\n })\n );\n }\n\n private bindBasketHandling(resize$: Observable) {\n const hideModal$: Observable = resize$.pipe(\n map((event) => +event.target?.['innerWidth']),\n filter((width) => width >= 600),\n mapTo(false)\n );\n\n this.subscription.add(\n hideModal$.subscribe((value) => {\n this.basketOpen$.next(value);\n })\n );\n }\n\n private cleanUp() {\n this.subscription = unsubscribe(this.subscription);\n }\n\n reassignFreeSeats(): void {\n this.reassignSeats.emit({ currentFlightId: this.boundsOrFlights[this.slideIndex].id });\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Observable, of } from 'rxjs';\nimport { Store } from '@ngrx/store';\nimport { filter, distinctUntilChanged } from 'rxjs/operators';\n\nimport { AppState } from '@fcom/core';\nimport { pseudoLocal } from '@fcom/core/selectors';\nimport { PseudoLocalActions } from '@fcom/core/actions';\nimport { isPresent } from '@fcom/core/utils';\n\n/**\n * Note! This is service meant to be provided by TabHeaderComponent and TabGroupComponent\n * for their child components to share data. Therefore DO NOT add this to any other provider!\n */\n@Injectable()\nexport class TabStateService {\n private selectedTabId$: Observable = of(null);\n private tabGroupId: string;\n\n constructor(private store$: Store) {}\n\n init(tabGroupId: string): void {\n this.tabGroupId = tabGroupId;\n this.selectedTabId$ = this.store$.pipe(\n pseudoLocal(this.tabGroupId),\n filter((id: string) => isPresent(id)),\n distinctUntilChanged()\n );\n }\n\n clear(): void {\n this.store$.dispatch(PseudoLocalActions.destroyValue({ key: this.tabGroupId }));\n }\n\n getSelectedTabId(): Observable {\n return this.selectedTabId$;\n }\n\n setSelectedTabId(tabId: string): void {\n if (tabId) {\n this.store$.dispatch(PseudoLocalActions.setValue({ key: this.tabGroupId, data: tabId }));\n } else {\n this.clear();\n }\n }\n}\n","
\n \n \n

\n \n

\n
\n\n
\n \n
\n\n @if (enableSurvey && qualtricsUrl$ | async) {\n
\n\n
\n \n
\n }\n
\n","import { Component, EventEmitter, Output, OnInit, Input, TemplateRef } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable, combineLatest } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { LanguageService } from '@fcom/ui-translate';\nimport { getQualtricsUrl } from '@fcom/common/qualtrics/qualtrics.utils';\nimport { ButtonMode, ButtonTheme, IconPosition } from '@fcom/ui-components';\n\n@Component({\n selector: 'fin-bound-selection-error-message',\n templateUrl: 'bound-selection-error-message.component.html',\n})\nexport class BoundSelectionErrorMessageComponent implements OnInit {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly ButtonTheme = ButtonTheme;\n readonly IconPosition = IconPosition;\n readonly ButtonMode = ButtonMode;\n\n @Input() fromFragment: TemplateRef;\n\n @Input({ required: true }) ctaButtonText: string;\n\n @Input() enableSurvey = true;\n\n @Input() qualtricsKey = 'feedback.generalSurveyUrl';\n\n @Input() surveyButtonText = 'feedback.title';\n\n /**\n * Emits when the CTA element has been clicked\n * @type {EventEmitter}\n */\n @Output()\n ctaClick: EventEmitter = new EventEmitter();\n\n qualtricsUrl$: Observable;\n\n constructor(private languageService: LanguageService) {}\n\n ngOnInit(): void {\n this.qualtricsUrl$ = combineLatest([\n this.languageService.langKey,\n this.languageService.translate(this.qualtricsKey),\n ]).pipe(\n map((params) => {\n return getQualtricsUrl(params[0], this.languageService.langValue, params[1]);\n })\n );\n }\n}\n","import { AfterContentInit, Component, ContentChildren, Input, OnDestroy, OnInit, QueryList } from '@angular/core';\n\nimport { Observable, Subscription, merge } from 'rxjs';\nimport { filter, withLatestFrom, map } from 'rxjs/operators';\n\nimport { isPresent, unsubscribe } from '@fcom/core/utils';\nimport { safeMap } from '@fcom/rx';\n\nimport { TabStateService } from './tab-state.service';\nimport { SelectAction, TabLabelComponent } from './tab-label.component';\n\nconst selectNextIndex = (action: SelectAction, previousIndex: number, length: number) => {\n const lastIndex = length - 1;\n switch (action) {\n case SelectAction.PREVIOUS:\n return previousIndex !== 0 ? previousIndex - 1 : lastIndex;\n case SelectAction.NEXT:\n return previousIndex !== lastIndex ? previousIndex + 1 : 0;\n case SelectAction.LAST:\n return lastIndex;\n default:\n return 0;\n }\n};\n\n@Component({\n selector: 'fin-tab-header',\n styleUrls: ['tab-header.component.scss'],\n templateUrl: 'tab-header.component.html',\n providers: [TabStateService],\n})\nexport class TabHeaderComponent implements OnInit, OnDestroy, AfterContentInit {\n @Input()\n tabGroupId: string;\n @Input()\n startWith$: Observable;\n\n @ContentChildren(TabLabelComponent)\n tabs: QueryList;\n private subscriptions: Subscription = new Subscription();\n private tabEventSubscriptions: Subscription;\n\n constructor(private service: TabStateService) {}\n\n ngOnInit(): void {\n this.service.init(this.tabGroupId);\n\n this.subscriptions.add(\n this.startWith$\n .pipe(filter((startWith: string) => isPresent(startWith)))\n .subscribe((startWith: string) => this.service.setSelectedTabId(startWith))\n );\n this.subscriptions.add(\n this.service\n .getSelectedTabId()\n .pipe(\n filter(() => isPresent(this.tabs)),\n safeMap((tabId: string) => this.tabs.find((tab) => tab.tabId === tabId)),\n filter((tab: TabLabelComponent) => isPresent(tab))\n )\n .subscribe((tab: TabLabelComponent) => tab.focus())\n );\n }\n\n ngAfterContentInit(): void {\n this.subscriptions.add(this.tabs.changes.subscribe(() => this.initTabs()));\n this.initTabs();\n }\n\n ngOnDestroy(): void {\n this.service.clear();\n this.subscriptions = unsubscribe(this.subscriptions);\n this.tabEventSubscriptions = unsubscribe(this.tabEventSubscriptions);\n }\n\n private initTabs(): void {\n unsubscribe(this.tabEventSubscriptions);\n this.tabEventSubscriptions = new Subscription();\n this.subscribeToSelections(merge(...this.tabs.map((t) => t.clicked$)));\n this.subscribeToSelectActions(merge(...this.tabs.map((t) => t.actions$)));\n }\n\n private subscribeToSelections(selections$: Observable) {\n this.tabEventSubscriptions.add(\n selections$.subscribe((selectedTab: TabLabelComponent) => this.service.setSelectedTabId(selectedTab.tabId))\n );\n }\n\n private subscribeToSelectActions(actions$: Observable) {\n const selectedTabIndex$ = this.service\n .getSelectedTabId()\n .pipe(safeMap((tabId) => this.tabs.toArray().findIndex((t) => t.tabId === tabId) || 0));\n this.tabEventSubscriptions.add(\n actions$\n .pipe(\n withLatestFrom(selectedTabIndex$),\n map(([action, previousIndex]) => selectNextIndex(action, previousIndex, this.tabs.length)),\n map((idx: number) => this.tabs.toArray()[idx].tabId)\n )\n .subscribe((tabId: string) => this.service.setSelectedTabId(tabId))\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 { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { v4 as uuid } from 'uuid';\n\nimport { keepState } from '@fcom/rx';\nimport { addClass, isVisible, removeClass } from '@fcom/core/utils';\nimport { LoaderType } from '@fcom/common/interfaces';\nimport { AirOffersStatus } from '@fcom/common/interfaces/booking';\n\nimport { AncillaryLoaderStatus } from '../../modules/ancillaries/enums';\n\n/**\n * A subview component that displays its content in a scrollable div.\n *\n * @example\n * Example with buttons from parameters\n * The button is rendered inside the scrollable content\n *\n *
\n * \n *  \n *    

This is scrollable content

\n * \n *
This is custom data passed in the open call: {{ subview.data$ | async | json }}
\n *
\n *
\n *
\n */\n\n@Component({\n selector: 'fin-subview',\n styleUrls: ['subview.component.scss'],\n templateUrl: 'subview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SubviewComponent implements OnDestroy {\n /**\n * A little bit longer than the CSS animation to ensure that the element has slid down\n */\n readonly ANIMATION_DURATION_MS = 350;\n readonly subviewId = uuid();\n readonly AncillaryLoaderStatus = AncillaryLoaderStatus;\n readonly LoaderType = LoaderType;\n readonly AirOffersStatus = AirOffersStatus;\n\n @Output() openChange = new EventEmitter();\n\n @Input()\n subviewName: string;\n\n @Input()\n subviewContext: string;\n\n @Input()\n enableScroll = true;\n\n @Input()\n ancillaryLoader$: BehaviorSubject;\n\n @Input()\n set open(_open: boolean) {\n const open = coerceBooleanProperty(_open);\n\n if (this._openState === open) {\n return;\n }\n this._openState = open;\n\n this.openChange.emit(this._openState);\n\n if (this._openState) {\n this.openSubview();\n } else {\n this.closeSubview(true);\n }\n }\n\n get open(): boolean {\n return this._openState;\n }\n\n /**\n * Called when the subview is closed after onConfirm, no matter how the subview was closed.\n */\n @Output()\n closeSubViewEvent: EventEmitter = new EventEmitter();\n\n /**\n * Asking confirmation for close.\n */\n @Output()\n shouldCloseSubview: EventEmitter = new EventEmitter();\n\n subViewVisible$: Subject = new BehaviorSubject(false);\n subViewVisibleDelayed$: Observable;\n labelledBy: string;\n\n private removeFocusListener: () => void;\n\n /**\n * Private boolean property storing the open state\n */\n private _openState = false;\n\n constructor(\n public elementRef: ElementRef,\n private ngZone: NgZone,\n @Inject(DOCUMENT) private document: Document,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.labelledBy = `subview-${this.subviewId}-title`;\n this.subViewVisibleDelayed$ = this.subViewVisible$.pipe(\n distinctUntilChanged(),\n keepState(this.ANIMATION_DURATION_MS)\n );\n }\n\n get visible$(): Observable {\n return this.subViewVisible$;\n }\n\n ngOnDestroy(): void {\n this.cleanUp();\n removeClass(this.document.body, 'subview-open');\n this.elementRef = null;\n }\n\n closeSubview(emitEvent: boolean): void {\n this.subViewVisible$.next(false);\n this.changeDetectorRef.detectChanges();\n this.cleanUp();\n removeClass(this.document.body, 'subview-open');\n if (emitEvent) {\n // This needs to happen after this.cleanUp() which is removing focus listening from this component\n this.closeSubViewEvent.emit();\n }\n }\n\n /**\n * Open the subview.\n * @return void\n */\n private openSubview(): void {\n this.subViewVisible$.next(true);\n this.bindEventListeners();\n this.changeDetectorRef.detectChanges();\n this.onModalFocus(null, true);\n addClass(this.document.body, 'subview-open');\n }\n\n private bindEventListeners(): void {\n this.ngZone.runOutsideAngular(() => {\n const listener = (event) => {\n return this.ngZone.run(() => {\n this.onModalFocus(event);\n });\n };\n this.document.addEventListener('focus', listener, true);\n this.document.addEventListener('focusin', listener);\n this.removeFocusListener = () => {\n this.document.removeEventListener('focus', listener, true);\n this.document.removeEventListener('focusin', listener);\n };\n });\n }\n\n private onModalFocus(event: FocusEvent | null, forceFocus = false): void {\n const el = this.elementRef?.nativeElement;\n if (!!el && (!el.contains(event?.target) || forceFocus)) {\n event?.stopPropagation();\n\n const focusSelector = 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n const focusableElements: Element[] = Array.from((el as Element).querySelectorAll(focusSelector))\n .filter((e) => e instanceof HTMLElement)\n .filter(isVisible);\n\n if (focusableElements.length !== 0) {\n setTimeout(() => (focusableElements[0] as HTMLElement).focus(), 0);\n }\n }\n }\n\n private cleanUp() {\n this.cleanUpEventHandlers();\n }\n\n private cleanUpEventHandlers() {\n if (this.removeFocusListener) {\n this.removeFocusListener();\n this.removeFocusListener = undefined;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { UiTranslateModule } from '@fcom/ui-translate';\nimport { ComponentsModule } from '@fcom/common/components/components.module';\nimport { PipesModule } from '@fcom/common/pipes/pipes.module';\n\nimport { SubviewComponent } from './subview.component';\n\n@NgModule({\n imports: [CommonModule, ComponentsModule, PipesModule, UiTranslateModule],\n declarations: [SubviewComponent],\n exports: [SubviewComponent],\n})\nexport class SubViewModule {}\n","\n \n\n","import { Component, Input, OnInit } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { TabStateService } from './tab-state.service';\n\n@Component({\n selector: 'fin-tab',\n templateUrl: 'tab.component.html',\n})\nexport class TabComponent implements OnInit {\n @Input()\n tabId: string;\n\n selected$: Observable;\n\n constructor(private service: TabStateService) {}\n\n ngOnInit(): void {\n this.selected$ = this.service.getSelectedTabId().pipe(map((id) => id === this.tabId));\n }\n}\n","import { Store } from '@ngrx/store';\nimport { map } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\n\nimport { ToasterMessage } from '@fcom/common/interfaces';\nimport { snapshot } from '@fcom/rx';\nimport { CustomServiceType, SeatCharacteristics } from '@fcom/dapi';\nimport {\n Category,\n FinnairBoundItem,\n FinnairCart,\n FinnairItineraryItemFlight,\n FinnairOrder,\n FinnairServiceRequestItem,\n} from '@fcom/dapi/api/models';\nimport { serviceSelectionToUpdateRequest } from '@fcom/common-booking/modules/ancillaries/utils';\nimport { seatSelectionsForFlight, serviceSelectionsForFragment } from '@fcom/common-booking/store/selectors';\nimport { NotificationTheme } from '@fcom/ui-components';\nimport { capitalizeWord } from '@fcom/core/utils';\nimport { ItineraryModal } from '@fcom/common-booking/modules/ancillaries/interfaces';\nimport { BookingAppState, SelectionPhase } from '@fcom/common/interfaces/booking';\nimport { FlightSeatSelections } from '@fcom/common/interfaces/seat-map.interface';\n\nexport interface AncillaryToasterMessages {\n error: ToasterMessage;\n}\n\nconst getRequests = (\n store$: Store,\n category: Category,\n fragmentIds: string[]\n): FinnairServiceRequestItem[] => {\n return fragmentIds.map((fragmentId) => ({\n category,\n fragmentId,\n serviceSelection: serviceSelectionToUpdateRequest(\n snapshot(store$.pipe(serviceSelectionsForFragment(fragmentId, category)))\n ),\n }));\n};\n\nconst getMessage = (category: Category, key: string, theme: ToasterMessage['theme']): ToasterMessage => ({\n id: `ANCILLARY_${category.toString()}_${key}`.toUpperCase(),\n contentKey: `ancillaries.toaster.${key}`,\n theme,\n});\n\nconst getToasterMessages = (category: Category, errorKey: string): AncillaryToasterMessages => {\n return {\n error: getMessage(category, errorKey, NotificationTheme.ALERT),\n };\n};\n\nexport const mapToSeatRequest = (\n flightId: string,\n selectionsForFlight: FlightSeatSelections\n): FinnairServiceRequestItem[] => {\n return [\n {\n category: Category.SEAT,\n fragmentId: flightId,\n serviceSelection: selectionsForFlight\n ? Object.keys(selectionsForFlight).map((travelerId) => ({\n travelerId,\n variant: selectionsForFlight[travelerId].seatType || '',\n seatNumber: selectionsForFlight[travelerId].seatNumber,\n isExitSeat: selectionsForFlight[travelerId].characteristics?.includes(SeatCharacteristics.EXIT) ?? false,\n quantity: selectionsForFlight[travelerId].seatNumber ? 1 : 0,\n }))\n : [],\n },\n ];\n};\n\nexport const containsUnpaidSeats = (order: FinnairOrder): boolean => {\n return !!order.services.unpaid?.find((s) => s.category === Category.SEAT);\n};\n\nexport const getServiceData = (\n store$: Store,\n category: Category,\n bounds: FinnairBoundItem[],\n flights: FinnairItineraryItemFlight[]\n): [FinnairServiceRequestItem[], AncillaryToasterMessages] => {\n switch (category) {\n case Category.CABIN_BAGGAGE:\n case Category.BAGGAGE:\n case Category.SPORT:\n case Category.SAF:\n case Category.PET: {\n const keySuffix = category === Category.BAGGAGE ? 'Bags' : capitalizeWord(category);\n return [\n getRequests(\n store$,\n category,\n bounds.map((b) => b.id)\n ),\n getToasterMessages(category, 'errorSaving' + keySuffix),\n ];\n }\n case Category.SEAT: {\n const requests: FinnairServiceRequestItem[] = flights.reduce((all, flight) => {\n return all.concat(mapToSeatRequest(flight.id, snapshot(store$.pipe(seatSelectionsForFlight(flight.id)))));\n }, []);\n\n return [requests, getToasterMessages(category, 'errorSavingSeats')];\n }\n case Category.LOUNGE:\n case Category.WIFI:\n case Category.MEAL: {\n const keySuffix = category === Category.MEAL ? 'Meals' : capitalizeWord(category);\n return [\n getRequests(\n store$,\n category,\n flights.map((b) => b.id)\n ),\n getToasterMessages(category, 'errorSaving' + keySuffix),\n ];\n }\n case Category.COVER: {\n return [\n getRequests(store$, category, [CustomServiceType.JOURNEY]),\n getToasterMessages(category, 'errorSavingTripCover'),\n ];\n }\n default:\n return [[], undefined];\n }\n};\n\nexport const getBoundDetailsModalData = (\n cartOrOrder$: Observable,\n slideIndex$: Observable\n): ItineraryModal => {\n const bounds$ = cartOrOrder$.pipe(map((cart) => cart.bounds));\n\n return {\n open: true,\n data: {\n outbound$: bounds$.pipe(map((bounds) => bounds[0])),\n inbound$: bounds$.pipe(map((bounds) => (bounds.length > 1 ? bounds[1] : undefined))),\n locations$: cartOrOrder$.pipe(map((c) => c.locations)),\n selectionPhase$: slideIndex$.pipe(\n map((slideIndex) => (slideIndex === 0 ? SelectionPhase.OUTBOUND : SelectionPhase.INBOUND))\n ),\n },\n };\n};\n","
\n
\n \n
{{ title }}
\n
\n \n {{ warningNotificationCtaText }}\n {{ warningNotificationMessage }}\n \n \n
\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\n\nimport { NotificationTheme } from '@fcom/ui-components';\n\n@Component({\n selector: 'fin-flight-selection-warning',\n templateUrl: './flight-selection-warning.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FlightSelectionWarningComponent {\n readonly NotificationTheme = NotificationTheme;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input() title: string;\n @Input() warningNotificationMessage: string;\n @Input() warningNotificationCtaText: string;\n @Input() showWarningNotification = true;\n\n @Output()\n ctaClick: EventEmitter = new EventEmitter();\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { IconsModule } from '@fcom/ui-components';\nimport { PipesModule } from '@fcom/common/pipes/pipes.module';\nimport { ComponentsModule } from '@fcom/common/components/components.module';\n\nimport { TabGroupComponent } from './tab-group.component';\nimport { TabHeaderComponent } from './tab-header.component';\nimport { TabLabelComponent } from './tab-label.component';\nimport { TabComponent } from './tab.component';\n\n// Missing stuff that could be handy at some point:\n// - disabled tabs\n// - vertical layout\n// - custom tab styling\n\nconst COMPONENTS = [TabHeaderComponent, TabLabelComponent, TabGroupComponent, TabComponent];\n\n@NgModule({\n imports: [CommonModule, ComponentsModule, PipesModule, IconsModule],\n declarations: [...COMPONENTS],\n exports: [...COMPONENTS],\n})\nexport class TabsModule {}\n","\n \n {{ subTitle }}\n \n \n {{ title }}\n \n \n\n","import { Component, ElementRef, HostBinding, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { isPresent, KeyCodes, stopPropagation, unsubscribe, KeyCode, getKeyCodeFromEvent } from '@fcom/core/utils';\n\nimport { TabStateService } from './tab-state.service';\n\nexport enum SelectAction {\n PREVIOUS,\n NEXT,\n FIRST,\n LAST,\n}\n\nconst keyDownToSelectAction: { key: KeyCode; value: SelectAction }[] = [\n { key: KeyCodes.HOME, value: SelectAction.FIRST },\n { key: KeyCodes.END, value: SelectAction.LAST },\n];\nconst keyUpToSelectAction: { key: KeyCode; value: SelectAction }[] = [\n { key: KeyCodes.LEFT, value: SelectAction.PREVIOUS },\n { key: KeyCodes.RIGHT, value: SelectAction.NEXT },\n];\n\n@Component({\n selector: 'fin-tab-label',\n styleUrls: ['tab-label.component.scss'],\n templateUrl: 'tab-label.component.html',\n})\nexport class TabLabelComponent implements OnInit, OnDestroy {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input()\n tabId: string;\n @Input()\n title: string;\n @Input()\n subTitle: string;\n @Input()\n checked: boolean;\n\n @HostBinding('attr.selected')\n hostSelected = false;\n selected$: Observable;\n clicked$: Subject = new Subject();\n actions$: Subject = new Subject();\n\n @ViewChild('content', { static: true })\n private content: ElementRef;\n private subscription: Subscription;\n\n constructor(private service: TabStateService) {}\n\n ngOnInit(): void {\n this.selected$ = this.service.getSelectedTabId().pipe(map((id) => id === this.tabId));\n this.subscription = this.selected$.subscribe((selected: boolean) => (this.hostSelected = selected));\n }\n\n ngOnDestroy(): void {\n this.subscription = unsubscribe(this.subscription);\n }\n\n focus = (): void => this.content.nativeElement.focus();\n\n onClick(event: MouseEvent): false {\n this.clicked$.next(this);\n return stopPropagation(event);\n }\n\n onKeyDown = (event: KeyboardEvent): boolean =>\n this.fireAction(\n keyDownToSelectAction.find((keyDown) => keyDown.key === getKeyCodeFromEvent(event)),\n event\n );\n onKeyUp = (event: KeyboardEvent): boolean =>\n this.fireAction(\n keyUpToSelectAction.find((keyUp) => keyUp.key === getKeyCodeFromEvent(event)),\n event\n );\n\n private fireAction(mode?: { key: KeyCode; value: SelectAction }, event?: Event): boolean {\n if (!isPresent(mode)) {\n return true;\n }\n this.actions$.next(mode.value);\n return stopPropagation(event);\n }\n}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { BehaviorSubject, Observable, of, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport {\n FinnairCart,\n FinnairItineraryItemFlight,\n FinnairOrder,\n FinnairPassengerItem,\n FinnairServiceItem,\n} from '@fcom/dapi/api/models';\nimport { Amount, ServiceCatalogSelectionsForAllTravelers, TravelerService } from '@fcom/dapi/interfaces';\nimport { unsubscribe } from '@fcom/core/utils';\nimport { BookingAppState } from '@fcom/common/interfaces/booking';\n\nimport { EligibilitiesForFragments, FlightWithStreams, SeatChangeEvent } from '../../../interfaces';\nimport { seatSelections } from '../../../../../store';\nimport { servicesForFlightAndTravelerId } from '../../../utils';\nimport { AncillaryLoaderStatus } from '../../../enums';\n\n@Component({\n selector: 'fin-ancillary-seat-map',\n templateUrl: './ancillary-seat-map.component.html',\n})\nexport class AncillarySeatMapComponent implements OnInit, OnDestroy {\n @Input() flight: FlightWithStreams;\n @Input() cartOrOrder$: Observable;\n @Input() passengers$: Observable;\n @Input() seatSelections$: Observable;\n @Input() flightIsActive$: Observable;\n @Input() includedSeats: FinnairServiceItem | null;\n @Input() availability$: Observable = of({});\n @Input() canClearSeats = true;\n @Input() preSelectedPax$: Observable = of(undefined);\n @Input() ancillaryLoader$: BehaviorSubject;\n @Input() notEligibleWhenCheckInClosed = false;\n\n @Output() changeSeats: EventEmitter = new EventEmitter();\n @Output() subtotalChange: EventEmitter = new EventEmitter();\n @Output() retrySeatmap: EventEmitter = new EventEmitter();\n @Output() finishedReassigningSeats: EventEmitter = new EventEmitter();\n\n subscriptions = new Subscription();\n\n constructor(private store$: Store) {}\n\n seatSelected(e: SeatChangeEvent): void {\n this.changeSeats.emit(e);\n this.updateSubTotal();\n }\n\n updateSubTotal(): void {\n this.subscriptions.add(\n this.store$.pipe(seatSelections(), take(1)).subscribe((allSeatSelections) => {\n const priceAndCurrencyCode = (\n allSeatSelections && allSeatSelections[this.flight.id] ? allSeatSelections[this.flight.id] : []\n )\n .filter((seatSelection) => !this.isIncludedSeatSelection(this.includedSeats, this.flight.id, seatSelection))\n .filter((seatSelection) => seatSelection.variant && seatSelection.pricePerItem && !seatSelection.paid)\n .reduce(\n (combined, currentSeatSelection) => {\n return {\n price: combined.price + Number(currentSeatSelection.pricePerItem.amount ?? 0),\n currencyCode: combined.currencyCode ?? currentSeatSelection.pricePerItem.currencyCode,\n };\n },\n { price: 0, currencyCode: undefined }\n );\n\n this.subtotalChange.emit({\n amount: String(priceAndCurrencyCode?.price),\n currencyCode: priceAndCurrencyCode?.currencyCode,\n });\n })\n );\n }\n\n ngOnInit(): void {\n this.updateSubTotal();\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.subscriptions);\n }\n\n private isIncludedSeatSelection(\n includedSeats: FinnairServiceItem | null,\n flightId: string,\n seatSelection: TravelerService\n ): boolean {\n return servicesForFlightAndTravelerId(includedSeats, flightId, seatSelection.travelerId).some(\n ({ seatNumber }) => seatNumber === seatSelection.variant\n );\n }\n\n emitFinishedReassigningSeats(): void {\n this.finishedReassigningSeats.emit();\n }\n}\n","\n\n","
\n {{\n 'ancillaries.journey'\n | finLocalization\n : {\n journeyNumber: activeBoundIndex + 1,\n from: locations[boundsOrFlights[activeBoundIndex].departure.locationCode].cityName,\n to: locations[boundsOrFlights[activeBoundIndex].arrival.locationCode].cityName,\n }\n }}\n
\n \n \n
\n\n
\n 1\"\n class=\"flex--nogrow flex--self-start\"\n [title]=\"\n ($any(boundsOrFlights[activeBoundIndex]).itinerary ? 'actions.previousBound' : 'actions.previousFlight')\n | finLocalization\n \"\n (click)=\"onChangeFlightBound(activeBoundIndex - 1, -1)\"\n data-testid=\"service-selection-prev-segment\"\n >\n \n \n
\n \n
\n 1\"\n class=\"flex--nogrow flex--self-end\"\n [title]=\"\n ($any(boundsOrFlights[activeBoundIndex]).itinerary ? 'actions.nextBound' : 'actions.nextFlight')\n | finLocalization\n \"\n (click)=\"onChangeFlightBound(activeBoundIndex + 1, 1)\"\n data-testid=\"service-selection-next-segment\"\n >\n \n \n
\n
\n\n\n
\n
\n 1\"\n class=\"flex--nogrow\"\n [text]=\"'carousel.previous' | finLocalization\"\n [aria]=\"{\n label:\n ($any(boundsOrFlights[activeBoundIndex]).itinerary ? 'actions.previousBound' : 'actions.previousFlight')\n | finLocalization,\n }\"\n [theme]=\"ButtonTheme.LIGHT_SECONDARY_OUTLINE\"\n [disabled]=\"activeBoundIndex === 0\"\n data-testid=\"service-selection-prev-segment\"\n (clickBtn)=\"activeBoundIndex !== 0 && onChangeFlightBound(activeBoundIndex - 1, -1)\"\n >\n \n
\n \n {{ 'services.flight' | finLocalization }}\n {{ activeBoundIndex + 1 }} / {{ boundsOrFlights.length }}\n \n
\n 1\"\n class=\"flex--nogrow\"\n [text]=\"'carousel.next' | finLocalization\"\n [aria]=\"{\n label:\n ($any(boundsOrFlights[activeBoundIndex]).itinerary ? 'actions.nextBound' : 'actions.nextFlight')\n | finLocalization,\n }\"\n [theme]=\"ButtonTheme.LIGHT_SECONDARY_OUTLINE\"\n [disabled]=\"activeBoundIndex === boundsOrFlights.length - 1\"\n data-testid=\"service-selection-next-segment\"\n (clickBtn)=\"activeBoundIndex !== boundsOrFlights.length - 1 && onChangeFlightBound(activeBoundIndex + 1, 1)\"\n >\n \n
\n
\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable } from 'rxjs';\n\nimport { BoundType, LocationInfoMap } from '@fcom/dapi';\nimport { FinnairBoundItem, FinnairItineraryItemFlight, FinnairPassengerItem } from '@fcom/dapi/api/models';\nimport { SelectionPhase } from '@fcom/common/interfaces/booking';\nimport { ButtonSize, ButtonTheme } from '@fcom/ui-components';\n\nimport { getTails, isByBusOnly } from '../../../../utils/common-booking.utils';\n\nconst MAX_EXEC_TIMES = 20;\n\n@Component({\n selector: 'fin-ancillary-flight-bound-selector',\n templateUrl: 'ancillary-flight-bound-selector.component.html',\n styleUrls: ['ancillary-flight-bound-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AncillaryFlightBoundSelectorComponent implements OnInit {\n readonly BoundType = BoundType;\n readonly ButtonSize = ButtonSize;\n readonly ButtonTheme = ButtonTheme;\n readonly SelectionPhase = SelectionPhase;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input() showFlightCard$: Observable;\n\n @Input()\n boundsOrFlights: (FinnairBoundItem | FinnairItineraryItemFlight)[];\n\n @Input()\n activeBoundIndex = 0;\n\n @Input()\n locations: LocationInfoMap;\n\n @Input()\n passengers: FinnairPassengerItem[];\n\n @Input()\n focusOnDetails$: Observable;\n\n @Output()\n selectIndex: EventEmitter = new EventEmitter();\n\n @Output()\n viewDetails: EventEmitter = new EventEmitter();\n\n tails: { [boundOrFlightId: string]: string[] };\n isBusOnlyConnections: { [boundOrFlightId: string]: boolean };\n\n ngOnInit(): void {\n this.tails = this.boundsOrFlights.reduce((all, boundOrFlight) => {\n all[boundOrFlight.id] = getTails(boundOrFlight);\n return all;\n }, {});\n\n this.isBusOnlyConnections = this.boundsOrFlights.reduce((all, boundOrFlight) => {\n all[boundOrFlight.id] = isByBusOnly(boundOrFlight);\n return all;\n }, {});\n }\n\n onChangeFlightBound(index: number, addition: number, execTimes = 0): void {\n const indexToGo =\n index < 0 ? this.boundsOrFlights.length - 1 : index <= this.boundsOrFlights.length - 1 ? index : 0;\n const boundOrFlight = this.boundsOrFlights[indexToGo];\n if (boundOrFlight) {\n this.selectIndex.emit(indexToGo);\n return;\n }\n\n if (execTimes < MAX_EXEC_TIMES) {\n this.onChangeFlightBound(indexToGo + addition, addition, execTimes + 1);\n }\n }\n}\n","\n {{ skipText }}\n
\n
\n \n \n \n
\n {{ ((displayAsBoundBased$ | async) ? 'services.bound' : 'services.flight') | finLocalization }}\n {{ index + 1 }}, {{ boundOrFlight.departure.dateTime | finDateFormat: 'DATE' }}\n
\n \n {{ boundOrFlight.fareFamily.name }}\n
\n
\n \n \n \n
\n \n \n \n \n \n \n
\n

\n {{\n benefitTranslations$\n | finMap: 'title'\n | async\n | finLocalization: { amount: includedBenefits[0].quantity }\n }}\n

\n

\n {{ benefitTranslations$ | finMap: 'description' | async | finLocalization }}\n

\n
\n
\n \n \n \n \n {{ eligibility | finLocalization }}\n \n \n {{\n noAncillaryBecauseAirlineKey$\n | async\n | finLocalization: { airline: noAncillaryBecauseAirline, airlines: noAncillaryBecauseAirline }\n }}\n \n \n \n \n\n \n
\n
\n \n

\n {{ translations$ | finMap: 'title' | async | finLocalization }}\n

\n
\n\n \n \n

{{ service.value.name }}

\n
\n \n \n {{ translations$ | finMap: 'paid' | async | finLocalization }}:\n\n {{\n 'MMB.includedProducts.' + includedService.category + '.text'\n | finLocalization\n : {\n amount: includedService.quantity,\n displayName: includedService.title || includedService['displayName'] || '',\n seatNumber: includedService.seatNumber ?? '',\n weight: includedService.maxBaggageWeight,\n }\n | finEmpty: includedService.title\n }}\n
\n
\n\n
\n \n = 0,\n 'medium-type': +service.pricePerItem?.amount > 0,\n }\"\n >\n {{ inCart }}:\n {{\n 'MMB.includedProducts.' + service.category + '.text'\n | finLocalization\n : {\n amount: service.quantity,\n displayName: service.title || service['displayName'] || '',\n seatNumber: service.seatNumber,\n weight: service.maxBaggageWeight,\n }\n | finEmpty: service.title\n }}\n {{ service.originalPricePerItem | finPrice }} \n {{ service.pricePerItem | finPrice }}\n
\n \n\n
\n
\n
\n {{ translations$ | finMap: 'noSelection' | async | finLocalization }}\n
\n
\n
\n \n \n \n \n \n {{ eligibility | finLocalization }}\n \n \n
\n\n \n
\n
\n
\n {{ translations$ | finMap: 'noSelection' | async | finLocalization }}\n
\n
\n
\n
\n\n \n \n \n {{ translations$ | finMap: 'maxedOut' | async | finLocalization }}\n \n \n \n \n \n \n \n \n \n \n \n {{ middleNotificationTranslationKey | finLocalization }}\n \n \n \n \n\n \n {{ 'subtotal' | finLocalization }}: \n {{ subTotalPrice$ | async | finPrice | finEmpty: '–' }}\n \n \n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Store } from '@ngrx/store';\nimport { combineLatest, filter, Observable, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\n\nimport { ButtonPosition, ButtonSize, ButtonTheme, IconPosition, NotificationTheme } from '@fcom/ui-components';\nimport { AppState } from '@fcom/core';\nimport { Amount, LocationInfoMap, ServiceCatalogSelectionsForAllTravelers } from '@fcom/dapi';\nimport { isFinnairNorraOrWetLease, mapValues, unique } from '@fcom/core/utils';\nimport {\n Category,\n FinnairBoundItem,\n FinnairItineraryItemFlight,\n FinnairPassengerItem,\n FinnairServiceCatalogEligibilityReason,\n SubCategory,\n} from '@fcom/dapi/api/models';\nimport { finShare } from '@fcom/rx';\nimport { Breakpoint } from '@fcom/common/interfaces/breakpoint.interface';\n\nimport { EligibilitiesForFragments, PurchasedServicesForOrder, UpdatedServicesForPassenger } from '../../interfaces';\nimport { isBoundBasedCategory, serviceMapping, ServiceMapping } from '../../utils';\nimport { seatSelections, serviceSelectionsForCategoryAllTravelers } from '../../../../store';\nimport {\n getTails,\n isBound,\n isBoundOrFlightConfirmedOrCheckedIn,\n isByBusOnly,\n isByTrainOnly,\n isFlight,\n} from '../../../../utils/common-booking.utils';\nimport { PurchasesDonePerFragment } from '../product-list/product-list.component';\n\nconst translationKeys = {\n [Category.MEAL]: {\n title: 'services.meal.title',\n noSelection: 'services.meal.state.selection.default',\n notAvailable: 'ancillaries.meals.noMealsAvailable',\n maxedOut: 'ancillaries.meals.maxedOut',\n paid: 'ancillaries.meals.paid',\n inCart: 'ancillaries.meals.inCart',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_FRESH_MEAL_NOT_ELIGIBLE_EX_EXCEPT_HEL_WITHIN_24_HOURS]:\n 'ancillaries.meals.eligibility.mealsNotAvailable',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_FRESH_MEAL_NOT_ELIGIBLE_EX_HEL_WITHIN_7_HOURS]:\n 'ancillaries.meals.eligibility.mealsNotAvailable',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_PRE_ORDER_HOT_MEAL_NOT_ELIGIBLE_EX_HEL_WITHIN_16_HOURS]:\n 'ancillaries.meals.eligibility.mealsNotAvailable',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_PRE_ORDER_HOT_MEAL_NOT_ELIGIBLE_EX_EXCEPT_HEL_36_HOURS]:\n 'ancillaries.meals.eligibility.mealsNotAvailable',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_MEAL_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN]:\n 'ancillaries.meals.eligibility.boundFlown',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_SPECIAL_MEAL_NOT_ELIGIBLE]:\n 'ancillaries.meals.eligibility.mealsNotAvailable',\n },\n [Category.WIFI]: {\n title: 'services.wifi.title',\n noSelection: 'services.wifi.state.selection.default',\n notAvailable: 'ancillaries.wifi.noWifiAvailable',\n maxedOut: 'ancillaries.wifi.maxedOut',\n paid: 'ancillaries.wifi.paid',\n inCart: 'ancillaries.wifi.inCart',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_WIFI_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN]:\n 'ancillaries.wifi.eligibility.boundFlown',\n },\n [Category.BAGGAGE]: {\n title: 'services.baggage.title',\n noSelection: 'services.baggage.state.selection.default',\n notAvailable: 'ancillaries.bags.noBagsAvailable',\n paid: 'ancillaries.bags.paid',\n inCart: 'ancillaries.bags.inCart',\n maxedOut: 'ancillaries.bags.maxedOut',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_BAGGAGE_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN]:\n 'ancillaries.bags.eligibility.boundFlown',\n },\n [Category.CABIN_BAGGAGE]: {\n title: 'services.cabinBaggage.title',\n noSelection: 'services.cabinBaggage.state.selection.default',\n notAvailable: 'ancillaries.cabinBaggage.notAvailable',\n paid: 'ancillaries.cabinBaggage.paid',\n inCart: 'ancillaries.cabinBaggage.inCart',\n maxedOut: 'ancillaries.cabinBaggage.maxedOut',\n },\n [Category.LOUNGE]: {\n title: 'services.lounge.title',\n noSelection: 'services.lounge.state.selection.default',\n notAvailable: 'ancillaries.lounge.noLoungeAvailable',\n maxedOut: 'ancillaries.lounge.maxedOut',\n paid: 'ancillaries.lounge.paid',\n inCart: 'ancillaries.lounge.inCart',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_LOUNGE_ACCESS_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN]:\n 'ancillaries.lounge.eligibility.boundFlown',\n },\n [Category.SPORT]: {\n title: 'services.sport.title',\n noSelection: 'services.sport.state.selection.default',\n notAvailable: 'ancillaries.sport.noSportAvailable',\n maxedOut: 'ancillaries.sport.maxedOut',\n paid: 'ancillaries.sport.paid',\n inCart: 'ancillaries.sport.inCart',\n },\n [Category.PET]: {\n title: 'services.pet.title',\n noSelection: 'services.pet.state.selection.default',\n notAvailable: 'ancillaries.pet.noPetAvailable',\n maxedOut: 'ancillaries.pet.maxedOut',\n paid: 'ancillaries.pet.paid',\n inCart: 'ancillaries.pet.inCart',\n middleNotificationTranslationKey: 'services.pet.sideBarMiddleNotification',\n },\n [Category.SEAT]: {\n title: 'services.seat.title',\n noSelection: 'services.seat.state.selection.default',\n notAvailable: 'ancillaries.seats.noSeatsAvailable',\n paid: 'ancillaries.seats.paid',\n inCart: 'ancillaries.seats.inCart',\n maxedOut: 'ancillaries.seats.maxedOut',\n [FinnairServiceCatalogEligibilityReason.PURCHASE_SEAT_NOT_ELIGIBLE_WHEN_ALREADY_FLOWN]:\n 'ancillaries.seat.eligibility.boundFlown',\n },\n};\n\nconst translationForBenefits = {\n [SubCategory.CHECKED_BAGGAGE]: {\n title: 'benefits.checkedBaggage.title',\n description: 'benefits.checkedBaggage.description',\n },\n};\n\n@Component({\n selector: 'fin-ancillary-sidebar',\n styleUrls: ['ancillary-sidebar.component.scss'],\n templateUrl: 'ancillary-sidebar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AncillarySidebarComponent implements OnInit {\n readonly Breakpoint = Breakpoint;\n readonly ButtonPosition = ButtonPosition;\n readonly ButtonSize = ButtonSize;\n readonly ButtonTheme = ButtonTheme;\n readonly Category = Category;\n readonly IconPosition = IconPosition;\n readonly NotificationTheme = NotificationTheme;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input()\n category$: Observable;\n\n @Input()\n isSideBarOpen = false;\n\n @Input()\n boundsOrFlights$: Observable<(FinnairBoundItem | FinnairItineraryItemFlight)[]> = of([]);\n\n @Input()\n availability$: Observable;\n\n @Input()\n maxedOutForFragment$: Observable;\n\n @Input()\n subTotalPrice$: Observable;\n\n @Input()\n locations: LocationInfoMap;\n\n @Input()\n passengers: Array = [];\n\n @Input()\n subviewName: string;\n\n @Input()\n showFareFamily = true;\n\n @Input()\n purchasedServices$: Observable = of({});\n\n @Input()\n skipEnabled = false;\n\n @Input()\n skipText = '';\n\n @Input()\n passengersWithPetcIncompatibleSeats$: Observable<{ [boundId: string]: string[] }> = of({});\n\n @Input()\n ctaButtonText = 'ancillaries.backToServices';\n\n @Output()\n ctaSideBarClosed: EventEmitter = new EventEmitter();\n\n @Output()\n sideBarClosed: EventEmitter = new EventEmitter();\n\n @Output()\n changeSelectedIndex: EventEmitter = new EventEmitter();\n\n services$: Observable;\n service$: Observable;\n updatedServices$: Observable;\n includedBenefits$: Observable;\n translations$: Observable | undefined>;\n benefitTranslations$: Observable | null>;\n noAncillaryBecauseAirlineForFragment$: Observable<{ [fragmentId: string]: string }>;\n noAncillaryBecauseAirlineKey$: Observable;\n confirmedOrCheckedInSegments$: Observable<{ [boundOrFlightId: string]: boolean }>;\n tails$: Observable<{ [boundOrFlightId: string]: string[] }>;\n isBusOnlyConnections$: Observable<{ [boundOrFlightId: string]: boolean }>;\n isTrainOnlyConnections$: Observable<{ [boundOrFlightId: string]: boolean }>;\n priorityBasedEligibilities$: Observable<{ [fragmentId: string]: string[] }>;\n displayAsBoundBased$: Observable;\n middleNotificationTranslationKey$: Observable;\n\n constructor(private store$: Store) {}\n\n ngOnInit(): void {\n this.displayAsBoundBased$ = this.category$.pipe(map(isBoundBasedCategory));\n\n this.noAncillaryBecauseAirlineKey$ = this.category$.pipe(\n map((category) =>\n isBoundBasedCategory(category)\n ? 'ancillaries.bags.noBagsAvailableAirlines'\n : 'ancillaries.seats.noSeatsAvailableAirline'\n )\n );\n\n this.noAncillaryBecauseAirlineForFragment$ = this.boundsOrFlights$.pipe(\n map((boundsOrFlights) => {\n return boundsOrFlights.reduce((acc, cur) => {\n if (isBound(cur)) {\n acc[cur.id] = cur.itinerary\n .filter(isFlight)\n .map((i: FinnairItineraryItemFlight) => i.operatingAirline)\n .filter((operatingAirline) => !isFinnairNorraOrWetLease(operatingAirline.name, operatingAirline.code))\n .map((operatingAirline) => operatingAirline.name)\n .filter(unique)\n .join(', ');\n } else {\n acc[cur.id] = !isFinnairNorraOrWetLease(cur.operatingAirline.name, cur.operatingAirline.code)\n ? cur.operatingAirline.name\n : undefined;\n }\n return acc;\n }, {});\n }),\n finShare()\n );\n this.service$ = this.category$.pipe(map((category) => serviceMapping.find((s) => s.category === category)));\n this.translations$ = this.category$.pipe(map((category) => translationKeys[category]));\n\n this.includedBenefits$ = this.category$.pipe(\n switchMap((category) => {\n switch (category) {\n case Category.BAGGAGE:\n return this.store$.pipe(\n serviceSelectionsForCategoryAllTravelers(category),\n map((selections) =>\n mapValues(selections, (selection) =>\n selection.filter((s) => s.category === SubCategory.CHECKED_BAGGAGE)\n )\n ),\n finShare()\n );\n default:\n return of({});\n }\n }),\n finShare()\n );\n\n this.benefitTranslations$ = this.category$.pipe(\n map((category) => {\n switch (category) {\n case Category.BAGGAGE:\n return translationForBenefits[SubCategory.CHECKED_BAGGAGE];\n default:\n return null;\n }\n })\n );\n\n this.services$ = this.category$.pipe(\n switchMap((category) => {\n switch (category) {\n case Category.SEAT:\n return this.store$.pipe(seatSelections());\n case Category.BAGGAGE:\n return this.store$.pipe(\n serviceSelectionsForCategoryAllTravelers(category),\n map((selections) =>\n mapValues(selections, (selection) =>\n selection.filter((s) => s.category !== SubCategory.CHECKED_BAGGAGE)\n )\n ),\n finShare()\n );\n default:\n return this.store$.pipe(serviceSelectionsForCategoryAllTravelers(category), finShare());\n }\n })\n );\n\n this.confirmedOrCheckedInSegments$ = this.boundsOrFlights$.pipe(\n map((boundsOrFlights) => {\n return boundsOrFlights.reduce((all, boundOrFlight) => {\n all[boundOrFlight.id] = isBoundOrFlightConfirmedOrCheckedIn(boundOrFlight);\n return all;\n }, {});\n })\n );\n\n this.tails$ = this.boundsOrFlights$.pipe(\n map((boundsOrFlights) => {\n return boundsOrFlights.reduce((all, boundOrFlight) => {\n all[boundOrFlight.id] = getTails(boundOrFlight);\n return all;\n }, {});\n })\n );\n\n this.isBusOnlyConnections$ = this.boundsOrFlights$.pipe(\n map((boundsOrFlights) => {\n return boundsOrFlights.reduce((all, boundOrFlight) => {\n all[boundOrFlight.id] = isByBusOnly(boundOrFlight);\n return all;\n }, {});\n })\n );\n\n this.isTrainOnlyConnections$ = this.boundsOrFlights$.pipe(\n map((boundsOrFlights) => {\n return boundsOrFlights.reduce((all, boundOrFlight) => {\n all[boundOrFlight.id] = isByTrainOnly(boundOrFlight);\n return all;\n }, {});\n })\n );\n\n this.priorityBasedEligibilities$ = combineLatest([\n this.boundsOrFlights$.pipe(map((bounds) => bounds.map(({ id }) => id))),\n this.availability$,\n this.isBusOnlyConnections$,\n this.noAncillaryBecauseAirlineForFragment$,\n this.translations$,\n ]).pipe(\n map(([fragmentIds, availability, busOnly, otherAirline, translations]) => {\n return fragmentIds.reduce((all, fragmentId) => {\n if (busOnly[fragmentId]) {\n all[fragmentId] = [translations?.['notAvailable'] + 'Bus'];\n } else if (otherAirline[fragmentId]) {\n all[fragmentId] = [translations?.['notAvailable']];\n } else if (availability[fragmentId] && availability[fragmentId].every((e) => !e.isAllowedToUse)) {\n const eligibilities = availability[fragmentId]\n .map((e) => translations?.[e.reason])\n .filter(Boolean)\n .filter(unique);\n all[fragmentId] = eligibilities.length > 0 ? eligibilities : ['services.cannotAdd'];\n }\n return all;\n }, {});\n }),\n finShare()\n );\n\n const includedServices$ = combineLatest([this.purchasedServices$, this.services$]).pipe(\n map(([purchasedServices, services]) => {\n return Object.keys({ ...purchasedServices }).reduce(\n (filteredPurchaseServices, boundOrFlightId) => {\n filteredPurchaseServices[boundOrFlightId] = purchasedServices[boundOrFlightId].filter(\n (purchasedService) => {\n const serviceForBoundOrFlight = services[boundOrFlightId];\n if (\n ![SubCategory.SEAT, SubCategory.MEAL, SubCategory.SPECIAL_DIET].includes(purchasedService.category)\n ) {\n return true;\n }\n return (\n serviceForBoundOrFlight?.some(\n (selectedService) =>\n selectedService.travelerId === purchasedService.travelerId &&\n ((selectedService.category === SubCategory.SEAT &&\n selectedService.variant === purchasedService.seatNumber) ||\n selectedService.variant === purchasedService.variant)\n ) ?? true\n );\n }\n );\n return filteredPurchaseServices;\n },\n { ...purchasedServices }\n );\n })\n );\n\n this.updatedServices$ = combineLatest([this.services$, includedServices$]).pipe(\n map(([services, included]) => {\n const passengerNames = this.passengers.reduce((acc, { id, firstName, lastName }) => {\n acc[id] = `${firstName} ${lastName}`;\n return acc;\n }, {});\n const updatedServices = {};\n Object.entries(services).forEach(([fragmentId, servicesFromStore]) => {\n servicesFromStore\n .filter((service) => service.quantity > 0 && !service.paid)\n .filter((service) => {\n return !Object.entries(included).some(([id, includedServices]) => {\n return (\n fragmentId === id &&\n includedServices.some(\n (s) =>\n s.travelerId === service.travelerId &&\n s.variant === service.variant &&\n s.quantity === service.quantity\n )\n );\n });\n })\n .forEach((service) => {\n updatedServices[fragmentId] = updatedServices[fragmentId] || {};\n if (updatedServices[fragmentId][service.travelerId]) {\n updatedServices[fragmentId][service.travelerId].added.push(service);\n } else {\n updatedServices[fragmentId][service.travelerId] = {\n name: passengerNames[service.travelerId],\n added: [service],\n };\n }\n });\n });\n\n Object.entries(included).forEach(([fragmentId, includedServices]) => {\n includedServices\n .filter((service) => service.quantity > 0)\n .forEach((service) => {\n updatedServices[fragmentId] = updatedServices[fragmentId] || {};\n if (updatedServices[fragmentId]?.[service.travelerId]) {\n if (updatedServices[fragmentId][service.travelerId].included) {\n updatedServices[fragmentId][service.travelerId].included.push(service);\n } else {\n updatedServices[fragmentId][service.travelerId].included = [service];\n }\n } else {\n updatedServices[fragmentId] = {\n ...updatedServices[fragmentId],\n [service.travelerId]: { name: passengerNames[service.travelerId], included: [service] },\n };\n }\n });\n });\n return updatedServices;\n })\n );\n\n this.middleNotificationTranslationKey$ = combineLatest([\n this.category$,\n this.services$,\n this.passengersWithPetcIncompatibleSeats$,\n ]).pipe(\n filter(([category]) => category === Category.PET),\n map(([_, services, passengersWithPetcIncompatibleSeats]) => {\n return Object.keys(passengersWithPetcIncompatibleSeats)?.some((boundId) => {\n const travelerIds = passengersWithPetcIncompatibleSeats[boundId];\n return (\n travelerIds &&\n services &&\n services[boundId]?.some(\n (service) => service.category === SubCategory.PET_IN_CABIN && travelerIds.includes(service.travelerId)\n )\n );\n })\n ? translationKeys[Category.PET].middleNotificationTranslationKey\n : undefined;\n })\n );\n }\n\n toType(t: FinnairBoundItem | FinnairItineraryItemFlight): FinnairBoundItem | FinnairItineraryItemFlight {\n return 'fareFamily' in t ? (t as FinnairBoundItem) : (t as FinnairItineraryItemFlight);\n }\n}\n","
\n
\n \n
\n
\n {{ additionalInfoKey$ | async | finLocalization }}\n
\n
\n","import { Component, Input } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'fin-additional-info',\n styleUrls: ['additional-info.component.scss'],\n templateUrl: 'additional-info.component.html',\n})\nexport class AdditionalInfoComponent {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input() additionalInfoKey$: Observable;\n}\n","import { Component, Input } from '@angular/core';\n\nimport { Amount } from '@fcom/dapi/interfaces';\n\n@Component({\n selector: 'fin-ancillary-price',\n templateUrl: 'ancillary-price.component.html',\n})\nexport class AncillaryPriceComponent {\n @Input() price: Amount;\n @Input() title: string;\n @Input() disclaimer: string;\n}\n","
\n {{ price | finPrice }}\n {{ title | finLocalization }}\n
\n
\n {{ disclaimer | finLocalization }}\n
\n","
\n 0\"\n class=\"block pr-xsmall-b border-bottom\"\n [groupedServices]=\"filteredGroupedServices\"\n >\n\n \n
0\">\n \n
{{ 'ancillaries.selectionText' | finLocalization }}
\n
\n\n
\n
\n
    \n
  • \n 1\">{{ ancillary.quantity }} x {{ ancillary.translations.title }}\n \n {{ ancillary.originalPrice | finPrice }}\n \n {{ ancillary.totalPrice | finPrice }}\n
  • \n
\n
\n
\n \n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\n\nimport { GroupedServices } from '@fcom/dapi';\nimport { ButtonSize, ButtonTheme, IconPosition } from '@fcom/ui-components';\n\nimport { ExtendedService } from '../../interfaces';\n\n@Component({\n selector: 'fin-ancillary-selection',\n styleUrls: ['./ancillary-selection.component.scss'],\n templateUrl: 'ancillary-selection.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AncillarySelectionComponent implements OnInit, OnChanges {\n readonly ButtonSize = ButtonSize;\n readonly ButtonTheme = ButtonTheme;\n readonly IconPosition = IconPosition;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input()\n showRemove = true;\n @Input()\n ancillaries: ExtendedService[] = [];\n @Input()\n groupedServices: GroupedServices[] = [];\n @Input()\n hideSelection = false;\n\n @Output()\n removeSelections: EventEmitter = new EventEmitter();\n\n showRemoveBasedOnAncillaries: boolean;\n filteredGroupedServices: GroupedServices[];\n\n ngOnInit(): void {\n this.showRemoveBasedOnAncillaries = this.showRemoveButton();\n this.filteredGroupedServices = this.getFilteredGroupedServices();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes['showRemove']?.firstChange || !changes['ancillaries']?.firstChange) {\n this.showRemoveBasedOnAncillaries = this.showRemoveButton();\n }\n\n if (!changes['groupedServices']?.firstChange) {\n this.filteredGroupedServices = this.getFilteredGroupedServices();\n }\n }\n\n private getFilteredGroupedServices(): GroupedServices[] {\n return this.groupedServices.filter(({ key }) => key !== 'pendingPayment');\n }\n\n private showRemoveButton(): boolean {\n return (\n this.showRemove &&\n this.ancillaries.every(\n (ancillary) =>\n ancillary.paidQuantity === 0 || +ancillary.totalPrice?.amount === 0 || ancillary.isModifiable === true\n )\n );\n }\n}\n","\n 0\"\n class=\"meal-details-categories nordic-blue-900-text font-body-1 pr-medium-y\"\n >\n \n {{ i > 0 ? ', ' : ''\n }}{{ 'ancillaries.meals.categories.' + category + '.full' | finLocalization | finEmpty: category }}\n \n \n
\n
\n
\n

{{ 'ancillaries.meals.details.ingredients' | finLocalization }}:

\n
\n
\n
\n

{{ 'ancillaries.meals.details.nutritionFacts' | finLocalization }}:

\n
\n
\n \n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { ExtendedService } from '../../interfaces';\n\n@Component({\n selector: 'fin-meal-details',\n styleUrls: ['meal-details.component.scss'],\n templateUrl: 'meal-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MealDetailsComponent {\n @Input()\n meal: ExtendedService;\n}\n","\n \n\n\n\n
\n
\n {{ teaserTitle }}\n \n {{ details.seatNumber }}\n {{\n 'ancillaries.seats.popover.exitLabel' | finLocalization\n }}\n \n
\n
\n \n {{ details.price?.originalPrice | finPrice: { roundPrice: details.price.originalPrice.amount === '0' } }}\n
\n
\n {{ details.price?.price | finPrice: { roundPrice: details.price?.price.amount === '0' } }}\n
\n
\n \n\n
\n
\n\n \n\n \n\n \n \n \n\n \n {{ 'ancillaries.seats.popover.clear' | finLocalization }}\n \n \n
\n\n \n \n \n\n \n {{ 'ancillaries.seats.popover.clear' | finLocalization }}\n \n \n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable, of, Subscription, zip } from 'rxjs';\nimport { delay, distinctUntilChanged, filter, map, startWith, switchMap } from 'rxjs/operators';\n\nimport { ButtonMode, IconPosition } from '@fcom/ui-components';\nimport { LanguageService } from '@fcom/ui-translate';\nimport { LoaderType } from '@fcom/common/interfaces';\nimport { CmsDataService } from '@fcom/core/services';\nimport { finShare, safeMap as safeMapObs } from '@fcom/rx';\nimport { isPresent, stopPropagation, unsubscribe } from '@fcom/core/utils';\nimport { CmsSeatDetails } from '@fcom/common/interfaces/booking';\n\nimport { ButtonState, SeatDetails } from '../../../interfaces';\n\nconst POPOVER_ANIMATION_DURATION = 300;\n\n@Component({\n selector: 'fin-seat-details',\n styleUrls: ['./seat-details.component.scss'],\n templateUrl: './seat-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeatDetailsComponent implements OnInit, OnDestroy {\n public readonly LoaderType = LoaderType;\n public readonly ButtonState = ButtonState;\n public readonly IconPosition = IconPosition;\n public readonly ButtonMode = ButtonMode;\n public readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input()\n seatDetails$: Observable;\n\n @Input()\n hideButtons = false;\n\n /**\n * Emits when the seat details are loaded\n * @type {EventEmitter}\n */\n @Output()\n seatDetailsLoadComplete: EventEmitter = new EventEmitter();\n\n /**\n * Emits when the seat has been selected for the traveler\n * @type {EventEmitter}\n */\n @Output()\n seatSelected: EventEmitter = new EventEmitter();\n\n /**\n * Emits when the seat should be cleared\n * @type {EventEmitter}\n */\n @Output()\n seatCleared: EventEmitter = new EventEmitter();\n\n cmsSeatDetails$: Observable;\n seatTitle$: Observable;\n seatDetailsWithCMS$: Observable;\n seatDetailsSubscription = new Subscription();\n\n constructor(\n private languageService: LanguageService,\n private cmsDataService: CmsDataService\n ) {}\n\n ngOnInit(): void {\n this.cmsSeatDetails$ = this.seatDetails$.pipe(\n safeMapObs((s: SeatDetails) => s.seatType),\n distinctUntilChanged(),\n switchMap((seatType: string) => this.languageService.translate(['seatTypes', seatType])),\n map((jsonData: any) => jsonData?.url),\n switchMap((url: string) =>\n isPresent(url)\n ? this.cmsDataService.getFragmentJson(url).pipe(startWith(null as CmsSeatDetails))\n : of({} as CmsSeatDetails)\n ),\n finShare()\n );\n\n this.seatTitle$ = this.cmsSeatDetails$.pipe(\n switchMap((d: CmsSeatDetails) => {\n if (!d || d.teaserTitle) {\n return of(d?.teaserTitle);\n }\n return this.seatDetails$.pipe(map((s) => s.seatType));\n })\n );\n\n this.seatDetailsWithCMS$ = zip(\n this.seatDetails$.pipe(delay(POPOVER_ANIMATION_DURATION)),\n this.cmsSeatDetails$.pipe(filter(Boolean))\n );\n\n this.seatDetailsSubscription.add(\n this.seatDetailsWithCMS$.subscribe(() => {\n this.seatDetailsLoadComplete.emit();\n })\n );\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.seatDetailsSubscription);\n }\n\n selectSeat(details: SeatDetails, event: Event): void {\n stopPropagation(event);\n this.seatSelected.emit(details);\n }\n\n clearSeat(details: SeatDetails, event: Event): void {\n stopPropagation(event);\n this.seatCleared.emit(details);\n }\n\n confirmSeatClick(details: SeatDetails, event: Event, forceSelection = false): false {\n if (details.seatSelectedForTraveler === details.travelerId && !forceSelection) {\n this.seatCleared.emit(details);\n } else {\n this.seatSelected.emit(details);\n }\n return stopPropagation(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { v4 as uuid } from 'uuid';\n\n@Component({\n selector: 'fin-product-expand',\n templateUrl: 'product-expand.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProductExpandComponent implements OnInit {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input() title: string;\n\n open = false;\n id: string;\n\n ngOnInit(): void {\n this.id = uuid();\n }\n}\n","
\n \n {{ title }}\n \n \n\n \n
\n \n
\n
\n
\n","\n \n\n\n\n \n {{\n (operatingAirlineIdInfo.isOrder\n ? 'ancillaries.seat.operatingAirlineNotification.generalMessage.mmb'\n : 'ancillaries.seat.operatingAirlineNotification.generalMessage.booking'\n ) | finLocalization\n }}\n \n {{\n (operatingAirlineIdInfo.isOrderIdIdentical\n ? 'ancillaries.seat.operatingAirlineNotification.pnrMessage.sameId'\n : 'ancillaries.seat.operatingAirlineNotification.pnrMessage.differentId'\n ) | finLocalization\n }}\n \n {{ operatingAirlineIdInfo.operatingAirlineId.id }}\n \n \n \n\n\n\n\n
\n \n \n {{ 'services.seat.notAvailableWhenCheckInClosed' | finLocalization }}\n \n \n \n \n \n \n

\n {{ 'ancillaries.seats.loadErrorTitle' | finLocalization }}\n

\n

{{ 'ancillaries.seats.loadErrorContent' | finLocalization }}

\n \n
\n \n
\n
\n \n \n \n {{ notification.key | finLocalization }}\n \n

\n {{ notification.reason.key | finLocalization: notification.reason.data }}\n

\n
\n
\n \n

\n {{ 'services.cannotAdd' | finLocalization }}\n

\n
\n \n @if ((operatingAirlineIdInfo$ | async)?.isOperated) {\n \n }\n
\n \n \n {{ 'MMB.view.seatMap.paidSeatNotification' | finLocalization }}\n \n \n {{ 'MMB.view.seatMap.ticketedSeatNotification' | finLocalization }}\n \n\n \n\n @if (bundlesEnabled) {\n \n }\n\n @if (benefitTextKey) {\n \n }\n\n \n\n
\n \n \n \n \n \n
\n\n
\n \n
\n\n
\n
{{ 'seatMap.airCraftModel' | finLocalization }}
\n \n {{ flight.aircraft.name }}\n \n {{ 'aircrafts.' + flight.aircraft.code | finLocalization }} ({{ flight.aircraft.code }})\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 \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ViewportScroller } from '@angular/common';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { BehaviorSubject, combineLatest, Observable, of, ReplaySubject, Subject, Subscription } from 'rxjs';\nimport { delay, distinctUntilChanged, filter, map, switchMap, take, withLatestFrom } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport {\n ButtonPosition,\n ButtonSize,\n ButtonTheme,\n IconButtonSize,\n IconButtonTheme,\n IconPosition,\n LoaderTheme,\n ModalButtons,\n NotificationTheme,\n TagTheme,\n} from '@fcom/ui-components';\nimport {\n Category,\n FinnairCart,\n FinnairItineraryItemFlight,\n FinnairOperatingAirlineId,\n FinnairOrder,\n FinnairPassengerCode,\n FinnairPassengerItem,\n FinnairServiceItem,\n SeatInfo,\n SeatmapSvgAndControlData,\n} from '@fcom/dapi/api/models';\nimport { resolveTailName, stopPropagation, unsubscribe } from '@fcom/core/utils';\nimport { ElementActions, ElementTypes, SelectOption } from '@fcom/common/interfaces';\nimport { LanguageService } from '@fcom/ui-translate';\nimport { Amount, ServiceCatalogSelectionsForAllTravelers } from '@fcom/dapi/interfaces';\nimport { AIRCRAFT_TRANSLATION_MAP, SeatMapStatus } from '@fcom/common/interfaces/seat-map.interface';\nimport { ConfigService, SentryLogger } from '@fcom/core/services';\nimport { CmsTemplateService } from '@fcom/cms';\nimport { CmsTemplate } from '@fcom/core-api';\nimport { GtmService } from '@fcom/common/gtm';\nimport { finShare, snapshot } from '@fcom/rx';\n\nimport {\n EligibilitiesForFragments,\n FlightWithStreams,\n Notification,\n SeatChangeEvent,\n SeatDetails,\n SeatMapTraveler,\n} from '../../../interfaces';\nimport { SeatMapRendererComponent } from '../seat-map-renderer/seat-map-renderer.component';\nimport {\n getSeatMapFlight,\n getSeatPrice,\n getServicesNotifications,\n isAllowedToChangeSeat,\n servicesForFlightAndTravelerId,\n} from '../../../utils';\nimport { AncillaryLoaderStatus } from '../../../enums';\nimport { CommonBookingFeatureState, SeatMapActions } from '../../../../../store';\nimport { isOrder } from '../../../../../utils/common-booking.utils';\nimport { SeatBenefitTag } from '../seat-benefit/seat-benefit.component';\nimport { BENEFITS } from '../../../../../utils/benefit.utils';\n\nconst FLIGHT_CONTAINER_ANIMATION_DELAY = 350;\n\ninterface OperatingAirlineIdInfo {\n operatingAirlineId: FinnairOperatingAirlineId;\n isOperated: boolean;\n isOrderIdIdentical: boolean;\n isOrder: boolean;\n}\n\n@Component({\n selector: 'fin-seat-map-view',\n styleUrls: ['./seat-map-view.component.scss'],\n templateUrl: './seat-map-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeatMapViewComponent implements OnInit, OnDestroy, OnChanges {\n readonly ButtonPosition = ButtonPosition;\n readonly ButtonSize = ButtonSize;\n readonly ButtonTheme = ButtonTheme;\n readonly Category = Category;\n readonly IconButtonSize = IconButtonSize;\n readonly IconButtonTheme = IconButtonTheme;\n readonly IconPosition = IconPosition;\n readonly LoaderTheme = LoaderTheme;\n readonly ModalButtons = ModalButtons;\n readonly SeatMapStatus = SeatMapStatus;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly NotificationTheme = NotificationTheme;\n\n @Input() flight: FlightWithStreams;\n @Input() passengers$: Observable;\n @Input() seatSelections$: Observable;\n @Input() flightIsActive$: Observable;\n @Input() cartOrOrder$: Observable;\n @Input() includedSeats: FinnairServiceItem | null;\n @Input() availability$: Observable = of({});\n @Input() canClearSeats = true;\n @Input() notEligibleWhenCheckInClosed = false;\n @Input() preSelectedPax$: Observable = of(undefined);\n @Input() ancillaryLoader$: BehaviorSubject;\n\n @Output() changeSeats: EventEmitter = new EventEmitter();\n @Output() subtotalChange: EventEmitter = new EventEmitter();\n @Output() retrySeatmap: EventEmitter = new EventEmitter();\n @Output() isReassigningSeats: EventEmitter = new EventEmitter();\n\n @ViewChild('seatMap') seatMapElement: SeatMapRendererComponent;\n\n subscriptions: Subscription = new Subscription();\n selectablePassengers$: BehaviorSubject = new BehaviorSubject([]);\n seatDetails$: Subject = new ReplaySubject(1);\n passengerOptions$: Observable;\n seatMapContainerWidth$: BehaviorSubject = new BehaviorSubject(undefined);\n unmodifiableSeat$: Observable;\n unmodifiableFreeSeat$: Observable;\n noSeatmapNotifications$: Observable;\n isAtStart = true;\n isAtEnd = false;\n currentFlightTail: string;\n exitRowModalOpen = false;\n aircraftModalOpen = false;\n aircraftInformationTemplate$: BehaviorSubject = new BehaviorSubject(undefined);\n scrollPosition = 0;\n isFinnairWetLease = false;\n operatingAirlineIdInfo$: Observable;\n flight$: BehaviorSubject = new BehaviorSubject(null);\n benefitTextKey: string;\n benefitTag: SeatBenefitTag;\n bundleActive$: Observable;\n bundlesEnabled = false;\n\n constructor(\n private languageService: LanguageService,\n private templateService: CmsTemplateService,\n private configService: ConfigService,\n private viewportScroller: ViewportScroller,\n private gtmService: GtmService,\n private sentryLogger: SentryLogger,\n private changeDetectorRef: ChangeDetectorRef,\n private store$: Store\n ) {}\n\n ngOnInit(): void {\n this.currentFlightTail = resolveTailName(this.flight.operatingAirline.code);\n\n this.subscriptions.add(\n combineLatest([this.passengers$, this.seatSelections$, this.flight.seatMap$])\n .pipe(\n take(1),\n switchMap(([passengers, seatSelections, seatMap]) => {\n return this.preSelectedPax$.pipe(\n distinctUntilChanged(),\n map((preSelectedPax) => {\n return [passengers, seatSelections, seatMap, preSelectedPax] as [\n FinnairPassengerItem[],\n ServiceCatalogSelectionsForAllTravelers,\n SeatmapSvgAndControlData,\n string,\n ];\n })\n );\n })\n )\n .subscribe(([passengers, seatSelections, seatMap, preSelectedPax]) => {\n this.selectablePassengers$.next(this.mapPassengers(passengers, seatSelections, seatMap, preSelectedPax));\n })\n );\n\n this.passengerOptions$ = this.selectablePassengers$.pipe(\n withLatestFrom(this.languageService.translate('seatMap.and')),\n map(([passengers, and]) => passengers.map((p) => ({ value: p.id, name: this.getTravelerFullName(p, and) })))\n );\n\n this.bundleActive$ = this.selectablePassengers$.pipe(\n map((passengers) => {\n const activePassenger = passengers.find((passenger) => passenger.active);\n return !!activePassenger?.bundleActive;\n }),\n distinctUntilChanged()\n );\n\n this.bundlesEnabled = this.configService.cfg.enableBookingFlowAncillaryBundles;\n\n this.subscriptions.add(\n this.flight.seatMap$.subscribe((seatMap) => {\n this.isFinnairWetLease = seatMap.isWetlease;\n\n // Wait until seat map element is visible before triggering seat chips to render.\n setTimeout(() => {\n const seatMapEl = this.seatMapElement?.seatMapWrapper?.nativeElement;\n this.seatMapContainerWidth$.next(seatMapEl?.clientWidth);\n this.changeDetectorRef.detectChanges();\n }, 0);\n })\n );\n\n this.subscriptions.add(\n combineLatest([\n this.selectablePassengers$,\n this.flightIsActive$.pipe(delay(FLIGHT_CONTAINER_ANIMATION_DELAY)), // Delay to prevent transition collision, to be refactored\n this.flight.seatMapStatus$,\n this.ancillaryLoader$,\n this.cartOrOrder$,\n ])\n .pipe(\n filter(\n ([_pax, active, seatMapStatus, _loaderStatus, _order]) => active && seatMapStatus === SeatMapStatus.OK\n ),\n take(1),\n map(([pax, _active, _seatMapStatus, loaderStatus, order]) => {\n return { pax, loaderStatus, order };\n })\n )\n .subscribe(({ pax, loaderStatus, order }) => {\n if (loaderStatus === AncillaryLoaderStatus.REASSIGNING) {\n this.store$.dispatch(SeatMapActions.resetSeatSelections({ cartOrOrder: order! }));\n }\n if (pax.length > 0) {\n this.tryScrollToFirstAvailableSeat(pax[0]);\n }\n })\n );\n\n this.subscriptions.add(\n combineLatest([this.flight$, this.cartOrOrder$]).subscribe(([flight, cartOrOrder]) => {\n this.setBenefitDetails(flight, cartOrOrder);\n })\n );\n\n this.subscriptions.add(\n this.flight.seatMapStatus$\n .pipe(\n filter(\n (status: SeatMapStatus) =>\n status === SeatMapStatus.OK ||\n status === SeatMapStatus.LOAD_ERROR ||\n status === SeatMapStatus.OK_NO_AVAILABILITY\n )\n )\n .subscribe(() => {\n this.ancillaryLoader$.next(AncillaryLoaderStatus.OFF);\n this.isReassigningSeats.emit(false);\n })\n );\n\n this.unmodifiableSeat$ = this.selectablePassengers$.pipe(\n map((pax) => {\n const active = pax.find((p) => p.active);\n return active.paidSeat && !active.modifiableSeat;\n })\n );\n this.unmodifiableFreeSeat$ = this.selectablePassengers$.pipe(\n map((pax) => {\n const active = pax.find((p) => p.active);\n return !active.paidSeat && active.ticketedSeat && !active.modifiableSeat;\n })\n );\n\n this.operatingAirlineIdInfo$ = combineLatest([\n this.flight$.pipe(filter((flight) => !!flight)),\n this.cartOrOrder$,\n ]).pipe(\n map(([flight, cartOrOrder]) => {\n const isOrderCreated = isOrder(cartOrOrder);\n const operatingAirlineId = isOrderCreated\n ? this.getOperatingAirlineId(cartOrOrder as FinnairOrder, flight.operatingAirline.code)\n : undefined;\n return {\n operatingAirlineId,\n isOperated: isOrderCreated ? !!operatingAirlineId : flight.operatingAirline.code !== 'AY',\n isOrderIdIdentical: !!operatingAirlineId && cartOrOrder.id === operatingAirlineId.id,\n isOrder: isOrderCreated,\n };\n })\n );\n this.noSeatmapNotifications$ = combineLatest([this.availability$, this.operatingAirlineIdInfo$]).pipe(\n map(([availability, operatingAirlineIdInfo]) =>\n getServicesNotifications({}, availability, Category.SEAT, this.flight, false, operatingAirlineIdInfo.isOperated)\n ),\n finShare()\n );\n }\n\n private getOperatingAirlineId(order: FinnairOrder, operatingAirlineCode: string): FinnairOperatingAirlineId {\n return order.operatingAirlineIds.find(\n (operatingAirlineId) => operatingAirlineId.airlineCode === operatingAirlineCode\n );\n }\n\n tryScrollToFirstAvailableSeat(pax: SeatMapTraveler, attempt = 0): void {\n if (attempt >= 10) {\n this.sentryLogger.error('Failed to find the seatmap after 1000ms', {\n flightNumber: this.flight.flightNumber,\n cabinClass: this.flight.cabinClass,\n id: snapshot(this.cartOrOrder$).id,\n });\n\n return;\n }\n\n setTimeout(() => {\n const seatMap = this.seatMapElement?.seatMap?.nativeElement;\n\n if (!seatMap) {\n const nextAttempt = attempt + 1;\n this.tryScrollToFirstAvailableSeat(pax, nextAttempt);\n return;\n }\n const seatNumber =\n pax.seat?.seatNumber ??\n seatMap?.querySelector(`[data-${pax.id.toLowerCase()}=\"available\"]`).getAttribute('data-id');\n\n if (seatNumber) {\n this.scrollToSeat(seatNumber, false);\n }\n }, 100);\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.subscriptions);\n }\n\n private mapPassengers(\n travelers: FinnairPassengerItem[],\n seatSelections: ServiceCatalogSelectionsForAllTravelers,\n seatMap: SeatmapSvgAndControlData,\n preSelectedPax: string | undefined\n ): SeatMapTraveler[] {\n const infants = travelers.filter((traveler) => traveler.passengerTypeCode === FinnairPassengerCode.INF);\n return travelers\n .filter((traveler) => traveler.passengerTypeCode !== FinnairPassengerCode.INF)\n .map((traveler, index) => {\n const selections = seatSelections[this.flight.id]?.find((p) => p.travelerId === traveler.id);\n const seatNumber = selections?.seatNumber;\n const originalSeatNumber = servicesForFlightAndTravelerId(this.includedSeats, this.flight.id, traveler.id)[0]\n ?.seatNumber;\n const seat = seatNumber && seatMap.seats.find((s) => s.seatNumber === seatNumber);\n const infant = infants.find((i) => i.accompanyingTravelerId === traveler.id);\n return {\n id: traveler.id,\n traveler,\n withInfant: !!infant,\n withInfantFullName: infant ? `${infant.firstName} ${infant.lastName}` : '',\n groupedServices: null,\n active: preSelectedPax ? traveler.id === preSelectedPax : index === 0,\n seat,\n seatNumber,\n originalSeatNumber,\n modifiableSeat: selections?.modifiable,\n ticketedSeat: selections?.ticketed,\n paidSeat: selections?.paid,\n };\n });\n }\n\n private getTravelerFullName(passenger: SeatMapTraveler, and: string): string {\n const withInfant = passenger.withInfant ? `(${and} ${passenger.withInfantFullName})` : '';\n return `${passenger.traveler.firstName} ${passenger.traveler.lastName} ${withInfant}`.trim();\n }\n\n selectSeat({\n passengerId,\n seatNumber,\n exitRow,\n }: {\n passengerId: string;\n seatNumber: string;\n exitRow: boolean;\n }): void {\n const isModifiableSeats: boolean =\n !this.includedSeats || isAllowedToChangeSeat(this.includedSeats, this.flight.id, passengerId);\n if (!isModifiableSeats) {\n return;\n }\n\n this.subscriptions.add(\n this.flight.seatMap$.pipe(take(1)).subscribe((seatMap) => {\n const shouldRevertSeat = !this.canClearSeats && seatNumber === null;\n const actualSeatNumber = shouldRevertSeat\n ? servicesForFlightAndTravelerId(this.includedSeats, this.flight.id, passengerId)[0]?.seatNumber\n : seatNumber;\n const seat: SeatInfo = seatMap.seats.find((s) => s.seatNumber === actualSeatNumber);\n if (seat && exitRow && actualSeatNumber) {\n this.seatDetails$.next({\n travelerId: passengerId,\n seat,\n seatNumber: actualSeatNumber,\n seatType: seat.type,\n price: getSeatPrice(seat, passengerId),\n exitRow,\n });\n this.exitRowModalOpen = true;\n this.gtmService.seatMapEvent('exit-row-modal', ElementTypes.MODAL, '', ElementActions.VIEW, {\n flightInfo: getSeatMapFlight(this.flight),\n });\n } else {\n this.confirmSeatSelection(passengerId, actualSeatNumber);\n }\n })\n );\n }\n\n confirmExitRowSeat(passengerId: string, seatNumber: string): void {\n this.confirmSeatSelection(passengerId, seatNumber);\n this.gtmService.seatMapEvent('exit-row-confirm', ElementTypes.BUTTON, 'cta', ElementActions.CLICK, {\n flightInfo: getSeatMapFlight(this.flight),\n });\n }\n\n confirmSeatSelection(passengerId: string, seatNumber: string): void {\n this.exitRowModalOpen = false;\n const currentPassengers = this.selectablePassengers$.getValue();\n const activePaxIndex = currentPassengers.findIndex((pax) => pax.active);\n const isLastPax = activePaxIndex === currentPassengers.length - 1;\n const isActive = (index: number): boolean => {\n if (seatNumber) {\n return isLastPax ? index === 0 : activePaxIndex + 1 === index;\n }\n return index === activePaxIndex;\n };\n\n this.selectablePassengers$.next(\n currentPassengers.map((pax, index) => {\n return {\n ...pax,\n ...(pax.id === passengerId && {\n seatNumber,\n }),\n active: isActive(index),\n };\n })\n );\n\n this.changeSeats.emit({\n travelerId: passengerId,\n seatNumber,\n flightId: this.flight.id,\n });\n }\n\n selectPassenger(passengerId: string): void {\n const currentPaxs = this.selectablePassengers$.getValue();\n\n this.selectablePassengers$.next(\n currentPaxs.map((pax) => {\n return {\n ...pax,\n active: pax.id === passengerId,\n };\n })\n );\n }\n\n onBundleToggle(toggled: boolean): void {\n this.selectablePassengers$.next(\n this.selectablePassengers$.getValue().map((pax) => (pax.active ? { ...pax, bundleActive: toggled } : pax))\n );\n }\n\n scrollSeatMap(direction: string): void {\n const seatMap = this.seatMapElement.seatMapWrapper.nativeElement;\n const divWidth = seatMap.clientWidth / 2;\n\n if (direction === 'left') {\n this.scrollPosition = seatMap.scrollLeft + divWidth;\n seatMap.scrollBy({\n left: divWidth,\n behavior: 'smooth',\n });\n } else {\n this.scrollPosition = seatMap.scrollLeft - divWidth;\n seatMap.scrollBy({\n left: -divWidth,\n behavior: 'smooth',\n });\n }\n\n this.gtmService.seatMapEvent('seatmap-full', ElementTypes.BUTTON, 'arrow', ElementActions.CLICK, {\n flightInfo: getSeatMapFlight(this.flight),\n });\n }\n\n scrollTo(position: number): void {\n requestAnimationFrame(() => {\n const seatMap: HTMLDivElement = this.seatMapElement.seatMapWrapper.nativeElement;\n\n seatMap.scrollTo({\n left: position,\n behavior: 'smooth',\n });\n });\n }\n\n scrollToSeat(seatNumber: string, focus = true): void {\n requestAnimationFrame(() => {\n const seatMap: HTMLDivElement = this.seatMapElement.seatMapWrapper.nativeElement;\n const seatElement: HTMLAnchorElement = seatMap.querySelector(`[data-id=\"${seatNumber}\"] a`);\n\n if (!seatElement) {\n return;\n }\n\n /**\n * Calculate if the seat can be centered or not. If this is not done this can cause bugs\n * where the slider partially moves onto the next seatmap as the browser tries to force the\n * seat to the center of the view.\n */\n let isCenterable = false;\n\n try {\n let seatGElement = seatElement.parentElement as unknown as SVGGElement;\n\n /**\n * Business seats are wrapped in 2 levels of parent SVGGElements. So we need to go to the\n * parents parent to get the actual positioning. (The `transform: translate(100, 200)` that\n * you see) in the elements panel on dev tools.\n */\n if (!seatGElement.transform.baseVal.length) {\n seatGElement = seatGElement.parentElement as unknown as SVGGElement;\n }\n\n const halfViewArea = seatMap.getBoundingClientRect().width * 0.5;\n const svgWidth = seatMap.querySelector('svg').getBoundingClientRect().width;\n const seatXCoordinate = seatGElement.transform.baseVal.consolidate().matrix.e;\n\n isCenterable = svgWidth - seatXCoordinate > halfViewArea && seatXCoordinate > halfViewArea;\n } catch (e) {\n const cartOrOrderId = snapshot(this.cartOrOrder$).id;\n this.sentryLogger.error('Failed to calculate seatmap scroll to seat', {\n message: e.message,\n stack: e.stack.substr(0, 500),\n flightNumber: this.flight.flightNumber,\n cabinClass: this.flight.cabinClass,\n // A quick filter for PNR's, so that only cart ids are reported to Sentry.\n id: cartOrOrderId.length === 6 ? null : cartOrOrderId,\n });\n }\n\n seatElement.scrollIntoView({\n behavior: 'auto',\n block: 'nearest',\n inline: isCenterable ? 'center' : 'nearest',\n });\n\n if (focus) {\n seatElement.focus({ preventScroll: true });\n }\n });\n }\n\n moveFocus(e: Event, el: string): void {\n stopPropagation(e);\n this.viewportScroller.scrollToAnchor(el);\n }\n\n enableScrollButtons(event: 'left' | 'center' | 'right'): void {\n this.isAtStart = event === 'left';\n this.isAtEnd = event === 'right';\n }\n\n openAirplaneModal(): void {\n this.aircraftModalOpen = true;\n const fragmentKey = `fragments.airCraftInfo.${this.getAircraftTranslationKey()}.url`;\n this.subscriptions.add(\n this.languageService\n .translate(fragmentKey)\n .pipe(\n filter(Boolean),\n switchMap((url) => this.templateService.load(url))\n )\n .subscribe((template) => this.aircraftInformationTemplate$.next(template))\n );\n this.gtmService.seatMapEvent('aircraft-info-modal', ElementTypes.MODAL, '', ElementActions.VIEW, {\n flightInfo: getSeatMapFlight(this.flight),\n });\n }\n\n setBenefitDetails(flight: FinnairItineraryItemFlight, order: FinnairOrder | FinnairCart): void {\n const bound = order.bounds.find((bound) =>\n bound.itinerary.some((itinerary: FinnairItineraryItemFlight) => itinerary.id === flight.id)\n );\n const hasFareFamilySeatBenefit = order.benefits?.[bound.fareFamily.code]?.translatedBenefitRows.find(\n (benefit) => benefit.key === BENEFITS.seatSelection\n )?.isPositive;\n const hasCorporateSeatBenefit =\n !hasFareFamilySeatBenefit && order.otherInformation?.corporateUserInformation?.isEligibleForSeatBenefit;\n if (this.configService.cfg.enableCorporateSeatBenefit && hasCorporateSeatBenefit) {\n this.benefitTextKey = 'seatMap.benefits.corporateBenefitDescription';\n this.benefitTag = {\n textKey: 'seatMap.benefits.corporateBenefitTag',\n theme: TagTheme.DEFAULT,\n icon: {\n name: SvgLibraryIcon.B2B,\n },\n };\n }\n }\n\n private getAircraftTranslationKey(): string | undefined {\n const code = this.flight.aircraft.code;\n if (!AIRCRAFT_TRANSLATION_MAP[code]) {\n this.sentryLogger.error('Invalid aircraft model', { aircraft: this.flight.aircraft });\n }\n\n return AIRCRAFT_TRANSLATION_MAP[code];\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.flight) {\n this.flight$.next(changes.flight.currentValue);\n }\n }\n}\n","\n

\n {{ 'seatMap.passengersTitle' | finLocalization }}\n

\n
\n \n \n
\n {{ passenger.traveler.firstName }} {{ passenger.traveler.lastName }}\n \n ({{ 'seatMap.and' | finLocalization }} {{ passenger.withInfantFullName }} )\n \n , {{ passenger.seatNumber }}\n \n \n
\n \n
\n\n
\n \n \n
\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport {\n BehaviorSubject,\n combineLatest,\n distinctUntilChanged,\n map,\n Observable,\n Subscription,\n tap,\n withLatestFrom,\n} from 'rxjs';\n\nimport { unsubscribe } from '@fcom/core/utils';\nimport { ElementActions, ElementTypes, SelectOption } from '@fcom/common/interfaces';\nimport { LanguageService } from '@fcom/ui-translate';\nimport { GtmService } from '@fcom/common/gtm';\nimport { FinnairItineraryItemFlight, FinnairServiceItem } from '@fcom/dapi/api/models';\nimport { IconButtonSize, IconButtonTheme } from '@fcom/ui-components';\n\nimport { getSeatMapFlight, servicesForFlightAndTravelerId } from '../../../utils';\nimport { SeatMapTraveler } from '../../../../ancillaries/interfaces';\n\n@Component({\n selector: 'fin-seat-passengers',\n templateUrl: './seat-passengers.component.html',\n styleUrls: ['./seat-passengers.component.scss'],\n})\nexport class SeatPassengersComponent implements OnInit, OnChanges, OnDestroy {\n @Input() passengers$: Observable;\n @Input() flight: FinnairItineraryItemFlight;\n @Input() includedSeats: FinnairServiceItem | null;\n\n @Output() selectPax: EventEmitter = new EventEmitter();\n @Output() clearSeatSelection: EventEmitter<{ passengerId: string; seatNumber: string; exitRow: boolean }> =\n new EventEmitter();\n\n readonly IconButtonSize = IconButtonSize;\n readonly IconButtonTheme = IconButtonTheme;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n passengerForm: FormGroup;\n options$: Observable;\n subscriptions: Subscription = new Subscription();\n activeTravelerIndex$ = new BehaviorSubject(1);\n\n constructor(\n private formBuilder: FormBuilder,\n private languageService: LanguageService,\n private gtmService: GtmService\n ) {}\n\n ngOnInit(): void {\n this.createForm();\n this.passengerForm = this.formBuilder.group({\n activeTravelerId: new FormControl(null),\n });\n\n this.subscriptions.add(\n this.passengerForm\n .get('activeTravelerId')\n .valueChanges.pipe(withLatestFrom(this.passengers$))\n .subscribe(([activeTravelerId, passengers]) => {\n this.selectPax.emit(activeTravelerId);\n const activeTraveler = this.getActiveTraveler(passengers);\n\n if (this.activeTravelerIndex$.getValue() !== activeTraveler.index + 1) {\n this.activeTravelerIndex$.next(activeTraveler.index + 1);\n }\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes.passengers || !this.passengerForm) {\n return;\n }\n\n const idControl = this.passengerForm.get('activeTravelerId') as FormControl;\n const activeTraveler = this.getActiveTraveler(changes.passengers.currentValue);\n\n if (idControl.value !== activeTraveler.id) {\n idControl.setValue(activeTraveler.id);\n }\n\n if (this.activeTravelerIndex$.getValue() !== activeTraveler.index + 1) {\n this.activeTravelerIndex$.next(activeTraveler.index + 1);\n }\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.subscriptions);\n }\n\n getActiveTraveler(passengers: SeatMapTraveler[]): {\n id: string;\n index: number;\n } {\n return {\n id: passengers.find((traveler) => traveler.active).id,\n index: passengers.findIndex((traveler) => traveler.active),\n };\n }\n\n createForm(): void {\n this.options$ = combineLatest([this.languageService.translate('seatMap.and'), this.passengers$]).pipe(\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n tap(([_withInfantLabel, passengers]) => {\n const activeTraveler = this.getActiveTraveler(passengers);\n\n this.passengerForm.get('activeTravelerId').setValue(activeTraveler.id);\n }),\n map(([withInfantLabel, passengers]) => {\n return passengers.map((passenger) => {\n const paxName = `${passenger.traveler.firstName} ${passenger.traveler.lastName}`;\n const paxNameWithInfant = `${paxName} ${withInfantLabel} ${passenger.withInfantFullName}`;\n const seatNumber = passenger.seatNumber ? `, ${passenger.seatNumber}` : '';\n\n return {\n name: `${passenger.withInfant ? paxNameWithInfant : paxName}${seatNumber}`,\n value: passenger.id,\n };\n });\n })\n );\n }\n\n handleClick(passengerId: string, index: number): void {\n this.selectPax.emit(passengerId);\n\n this.gtmService.seatMapEvent(`pax-select-${index + 1}`, ElementTypes.BUTTON, '', ElementActions.CLICK, {\n flightInfo: getSeatMapFlight(this.flight),\n });\n }\n\n clearSelection(passengerId: string): void {\n const alreadyIncludedSeat = servicesForFlightAndTravelerId(this.includedSeats, this.flight.id, passengerId)[0];\n\n this.clearSeatSelection.emit({ passengerId, seatNumber: alreadyIncludedSeat?.seatNumber ?? null, exitRow: false });\n }\n}\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnDestroy, Output, ViewChild } from '@angular/core';\n\nimport { BehaviorSubject, distinctUntilChanged, Observable, Subject, Subscription } from 'rxjs';\nimport { debounceTime, map, take, withLatestFrom } from 'rxjs/operators';\n\nimport { compareAsJson, unsubscribe } from '@fcom/core/utils';\nimport { ElementActions, ElementTypes, GaContext } from '@fcom/common/interfaces';\nimport { GtmService } from '@fcom/common/gtm';\nimport { FinnairServiceItem } from '@fcom/dapi/api/models';\n\nimport { getInitials, getSeatInfoForTracking, getSeatMapFlight, servicesForFlightAndTravelerId } from '../../../utils';\nimport { FlightWithStreams, SeatMapTraveler } from '../../../interfaces';\n\n@Component({\n selector: 'fin-seat-map-renderer',\n styleUrls: ['./seat-map-renderer.component.scss'],\n templateUrl: './seat-map-renderer.component.html',\n})\nexport class SeatMapRendererComponent implements AfterViewInit, OnDestroy {\n @Input() flight: FlightWithStreams;\n @Input() passengers$: Observable;\n @Input() unavailableSeatLabel: string;\n @Input() includedSeats: FinnairServiceItem | null;\n\n @Output() updatePosition: EventEmitter<'left' | 'center' | 'right'> = new EventEmitter();\n @Output() selectSeat: EventEmitter<{ passengerId: string; seatNumber: string; exitRow: boolean }> =\n new EventEmitter();\n @Output() updateScrollPosition: EventEmitter = new EventEmitter();\n\n @ViewChild('seatMap') seatMap: ElementRef;\n @ViewChild('seatMapWrapper') seatMapWrapper: ElementRef;\n\n activePax$: Observable;\n scrollPositionWatcher$ = new BehaviorSubject<'left' | 'center' | 'right'>('left');\n subscriptions: Subscription = new Subscription();\n templates: { [key: string]: () => SVGGElement } = {\n selected: () => this.seatMap.nativeElement.querySelector('.seat-selected-template')?.cloneNode(true),\n unavailable: () => this.seatMap.nativeElement.querySelector('.seat-unavailable-template')?.cloneNode(true),\n };\n\n scrollEvents$: Subject = new Subject();\n readonly scrollDebounceTime = 200;\n\n constructor(private gtmService: GtmService) {}\n\n ngAfterViewInit(): void {\n this.setWrapperWidth();\n this.activePax$ = this.passengers$.pipe(\n map((passengers) => {\n return passengers.find((passenger) => passenger.active);\n }),\n distinctUntilChanged((prev, curr) => {\n return prev.id === curr.id;\n })\n );\n\n /* Whenever there's a change in passengers, we will mark seats with correct templates (unavailable, selected) for all passengers. */\n this.subscriptions.add(\n this.passengers$.pipe(distinctUntilChanged(compareAsJson)).subscribe((passengers) => {\n this.resetSeatView(passengers[0].id);\n\n passengers.forEach((passenger) => {\n if (passenger.active) {\n this.markSeatsUnavailableForPax(passenger.id);\n this.bringSelectedSeatTemplateOnTop(passenger.id);\n }\n\n if (passenger.seatNumber) {\n this.addSelectedSeatTemplateToPax(passenger);\n }\n\n if (passenger.originalSeatNumber) {\n this.addOriginalSeatForPax(passenger);\n }\n });\n })\n );\n\n this.subscriptions.add(\n this.scrollPositionWatcher$.pipe(distinctUntilChanged()).subscribe((position) => {\n this.updatePosition.emit(position);\n })\n );\n\n this.subscriptions.add(\n this.scrollEvents$.pipe(debounceTime(this.scrollDebounceTime)).subscribe((position) => {\n this.updateScrollPosition.emit(position);\n this.gtmService.trackElement(\n 'seatmap-full',\n GaContext.SEAT_MAP,\n ElementTypes.BUTTON,\n '',\n ElementActions.SCROLL\n );\n })\n );\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.subscriptions);\n }\n\n addOriginalSeatForPax(passenger: SeatMapTraveler): void {\n const seatToSelect = this.seatMap.nativeElement.querySelector(`[data-id=\"${passenger.originalSeatNumber}\"]`);\n seatToSelect.classList.add('current-seat');\n }\n\n markSeatsUnavailableForPax(paxId: string): void {\n this.seatMap.nativeElement.querySelectorAll(`[data-${paxId.toLowerCase()}=\"unavailable\"]`).forEach((seat) => {\n const seatLink = seat.querySelector('a');\n const template = this.templates.unavailable();\n const originalAriaLabel = seatLink.getAttribute('aria-label');\n const seatNumber = seat.getAttribute('data-id');\n const occupiedSeat = seat.classList.contains('seat-occupied');\n\n seatLink.setAttribute('aria-label', `${seatNumber}, ${this.unavailableSeatLabel}`);\n seatLink.setAttribute('data-original-aria-label', originalAriaLabel);\n\n if (!occupiedSeat) {\n template.classList.remove('seat-unavailable-template');\n template.classList.add('seat-unavailable');\n seatLink.appendChild(template);\n }\n });\n }\n\n addSelectedSeatTemplateToPax(passenger: SeatMapTraveler): void {\n const initials = getInitials(passenger.traveler.firstName, passenger.traveler.lastName);\n const template = this.templates.selected();\n const seatToSelect = this.seatMap.nativeElement.querySelector(`[data-id=\"${passenger.seatNumber}\"] a`);\n\n const ariaLabel = seatToSelect.getAttribute('aria-label');\n seatToSelect.setAttribute(\n 'aria-label',\n `${ariaLabel}. ${passenger.traveler.firstName} ${passenger.traveler.lastName}`\n );\n\n template.classList.remove('seat-selected-template');\n template.classList.add('seat-selected');\n template.querySelector('.pax-label').innerHTML = initials;\n template.querySelector('.code-label').innerHTML = passenger.seatNumber;\n seatToSelect.appendChild(template);\n }\n\n bringSelectedSeatTemplateOnTop(paxId: string): void {\n /* The seat-selected template is added before seat-unavailable template in the DOM.\n Thus it's not visible when changing to a pax with an infant, because we mark certain seats unavailable.\n We need to bring the selected seat template on top in the DOM. */\n this.seatMap?.nativeElement?.querySelectorAll(`[data-${paxId.toLowerCase()}=\"unavailable\"]`).forEach((seat) => {\n const seatLink = seat.querySelector('a');\n const selectedSeat = seatLink?.querySelector('.seat-selected');\n\n if (selectedSeat) {\n seatLink.removeChild(selectedSeat); // first remove selectedSeat template from underneath unavailable seat template\n seatLink.appendChild(selectedSeat);\n }\n });\n }\n\n removeSeatSelection(passengerId: string, originalSeatNumber: string = null): void {\n this.selectSeat.emit({\n passengerId,\n seatNumber: originalSeatNumber,\n exitRow: false,\n });\n }\n\n resetSeatView(paxId: string): void {\n const rootSelector = `[data-${paxId.toLowerCase()}]`;\n const selectedOrUnavailable = `${rootSelector} .seat-selected, ${rootSelector} .seat-unavailable`;\n\n this.seatMap.nativeElement.querySelectorAll(selectedOrUnavailable).forEach((node) => {\n if (node) {\n const originalAriaLabel = node.parentNode.getAttribute('data-original-aria-label');\n const ariaLabel = node.parentNode.getAttribute('aria-label');\n\n if (originalAriaLabel) {\n node.parentNode.setAttribute('aria-label', originalAriaLabel);\n node.parentNode.removeAttribute('data-original-aria-label');\n }\n\n node.parentNode.setAttribute('aria-label', ariaLabel?.split('.')[0]);\n node.parentNode.removeChild(node);\n }\n });\n }\n\n handleSeatClick(event: MouseEvent): void {\n event.preventDefault();\n const seatElement = (event.target as Element).closest('.seat');\n\n if (!seatElement) {\n return;\n }\n\n this.subscriptions.add(\n this.activePax$.pipe(take(1), withLatestFrom(this.passengers$)).subscribe(([activePax, passengers]) => {\n const isAvailableForPax = seatElement?.getAttribute(`data-${activePax.id.toLowerCase()}`) === 'available';\n const seatId = seatElement.getAttribute('data-id');\n const isExitRow = Boolean(seatElement.getAttribute('data-exitrow'));\n const currentSelectedSeat = passengers.find((pax) => pax.seatNumber === seatId);\n\n if (!isAvailableForPax && seatId !== activePax.seatNumber && seatId !== activePax.originalSeatNumber) {\n this.trackSeatSelection('seat-unavailable', seatElement, activePax);\n return;\n }\n\n if (this.isIncludedForPassenger(activePax.id, seatId) && seatId !== activePax.originalSeatNumber) {\n return;\n }\n\n if (!currentSelectedSeat || (activePax.seatNumber === seatId && activePax.originalSeatNumber)) {\n this.selectSeat.emit({\n passengerId: activePax.id,\n seatNumber: !currentSelectedSeat ? seatId : activePax.originalSeatNumber,\n exitRow: isExitRow,\n });\n this.trackSeatSelection('seat-selected', seatElement, activePax);\n return;\n }\n\n this.trackSeatSelection('seat-cleared', seatElement, activePax);\n this.removeSeatSelection(currentSelectedSeat.id, currentSelectedSeat.originalSeatNumber);\n })\n );\n }\n\n handleScroll(): void {\n const seatMapElement = this.seatMapWrapper.nativeElement;\n const divWidth = seatMapElement.clientWidth;\n const seatMapWidth = seatMapElement.scrollWidth;\n const scrollLeft = Math.round(seatMapElement.scrollLeft); // Use rounding to get rid of half pixels\n this.scrollEvents$.next(scrollLeft);\n\n const isAtStart = scrollLeft === 0;\n const isAtEnd = scrollLeft === seatMapWidth - divWidth;\n const value = isAtStart ? 'left' : isAtEnd ? 'right' : 'center';\n\n this.scrollPositionWatcher$.next(value);\n }\n\n setWrapperWidth(): void {\n const svg = this.seatMap.nativeElement.querySelector('svg');\n const svgWidth = svg?.getAttribute('data-optimal-width');\n if (svgWidth) {\n this.seatMap.nativeElement.setAttribute('style', `width: ${svgWidth}px`);\n }\n }\n\n private trackSeatSelection(\n id: 'seat-selected' | 'seat-cleared' | 'seat-unavailable',\n seatElement: Element,\n activePax: SeatMapTraveler\n ): void {\n this.subscriptions.add(\n this.flight.seatMap$.pipe(take(1)).subscribe((seatMap) => {\n this.gtmService.seatMapEvent(id, ElementTypes.BUTTON, 'cta', ElementActions.CLICK, {\n seatInfo: getSeatInfoForTracking(seatMap, seatElement, activePax),\n flightInfo: getSeatMapFlight(this.flight),\n });\n })\n );\n }\n\n private isIncludedForPassenger(passengerId: string, seatId: string): boolean {\n return servicesForFlightAndTravelerId(this.includedSeats, this.flight.id, passengerId).some(\n ({ seatNumber }) => seatNumber === seatId\n );\n }\n}\n","
\n
\n
\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { Observable, Subscription } from 'rxjs';\n\nimport { unsubscribe } from '@fcom/core/utils';\nimport { ElementActions, ElementTypes, GaContext } from '@fcom/common/interfaces';\nimport { GtmService } from '@fcom/common/gtm';\n\nimport { FlightWithStreams } from '../../../interfaces';\n\n@Component({\n selector: 'fin-seat-map-mini-map',\n templateUrl: './seat-map-mini-map.component.html',\n styleUrls: ['./seat-map-mini-map.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class SeatMapMiniMapComponent implements OnDestroy, OnChanges, AfterViewInit {\n @Input() flight: FlightWithStreams;\n @Input() viewPortWidth$: Observable;\n @Input() scrollPosition: number;\n\n @Output() scrollTo: EventEmitter = new EventEmitter();\n @Output() keyScrollDirection: EventEmitter<'left' | 'right'> = new EventEmitter();\n\n @ViewChild('selectedArea') selectedArea: ElementRef;\n @ViewChild('seatMapContainer') seatMapContainer: ElementRef;\n @ViewChild('wrapper') wrapper: ElementRef;\n\n svgWidth: number;\n subscription = new Subscription();\n\n constructor(private gtmService: GtmService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.scrollPosition) {\n this.setNewAreaPosition();\n }\n }\n\n ngAfterViewInit(): void {\n this.subscription.add(\n this.viewPortWidth$.subscribe((viewPortWidth) => {\n if (!viewPortWidth) {\n return;\n }\n const container = this.seatMapContainer.nativeElement;\n this.svgWidth = container.querySelector('svg')?.getAttribute('data-optimal-width');\n if (this.svgWidth) {\n const visibleAreaPercentage = viewPortWidth / this.svgWidth;\n this.selectedArea.nativeElement.style.width = `${container.offsetWidth * visibleAreaPercentage}px`;\n }\n })\n );\n\n this.setNewAreaPosition();\n }\n\n ngOnDestroy(): void {\n unsubscribe(this.subscription);\n }\n\n handleClick(e: MouseEvent): void {\n const parentWidth = this.seatMapContainer.nativeElement.offsetWidth;\n const parentLeft = this.seatMapContainer.nativeElement.getBoundingClientRect().left;\n const areaWidth = this.selectedArea.nativeElement.offsetWidth;\n\n const newPosition = e.clientX - parentLeft - areaWidth / 2;\n this.setSelectedAreaPosition(newPosition);\n\n this.scrollTo.emit((Math.max(0, newPosition) / parentWidth) * this.svgWidth);\n this.gtmService.trackElement('seatmap-mini', GaContext.SEAT_MAP, ElementTypes.BUTTON, '', ElementActions.CLICK);\n }\n\n setSelectedAreaPosition(newPosition: number): void {\n const parentWidth = this.seatMapContainer.nativeElement.offsetWidth;\n const areaWidth = this.selectedArea.nativeElement.offsetWidth;\n\n const parentBorder = (this.wrapper.nativeElement.offsetWidth - this.wrapper.nativeElement.clientWidth) / 2;\n const totalBorderWidth = this.getTotalBorderWidth();\n const minPosition = totalBorderWidth * -1;\n\n if (newPosition < minPosition) {\n newPosition = minPosition;\n }\n if (newPosition + areaWidth > parentWidth + totalBorderWidth) {\n newPosition = parentWidth - areaWidth + (totalBorderWidth / 2 + parentBorder);\n }\n\n requestAnimationFrame(() => {\n this.selectedArea.nativeElement.style.left = `${newPosition}px`;\n });\n }\n\n getTotalBorderWidth(): number {\n if (!this.selectedArea) {\n return 0;\n }\n\n const selectedAreaBorder =\n (this.selectedArea.nativeElement.offsetWidth - this.selectedArea.nativeElement.clientWidth) / 2;\n const parentBorder = (this.wrapper.nativeElement.offsetWidth - this.wrapper.nativeElement.clientWidth) / 2;\n\n return selectedAreaBorder + parentBorder;\n }\n\n setNewAreaPosition(): void {\n const borderWidth = this.getTotalBorderWidth();\n\n requestAnimationFrame(() => {\n let newPosition = (this.scrollPosition / this.svgWidth) * this.seatMapContainer.nativeElement.offsetWidth;\n\n if (newPosition === 0) {\n newPosition = -borderWidth;\n }\n\n this.setSelectedAreaPosition(newPosition);\n });\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'ArrowRight') {\n this.keyScrollDirection.emit('left');\n } else if (event.key === 'ArrowLeft') {\n this.keyScrollDirection.emit('right');\n }\n }\n\n clickFront(): void {\n this.scrollTo.emit(0);\n }\n\n clickBack(): void {\n this.scrollTo.emit(this.svgWidth);\n }\n}\n","
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n \n \n \n
\n\n","
\n

{{ 'seatMap.seatTypesTitle' | finLocalization }}

\n \n \n
\n\n
\n \n
\n
\n \n {{ seatType.icon }}\n \n
\n
\n
{{ seatType.label | finLocalization }}
\n
\n \n {{ seatType.originalPrice | finPrice }},\n {{ seatType.price | finPrice }}\n \n \n {{ seatType.price | finPrice }}\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
\n \n \n\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { IconLibrary, SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { combineLatest, distinctUntilChanged, filter, map, Observable } from 'rxjs';\n\nimport { Cabin, FinnairAmount, SeatInfo, SeatmapSvgAndControlData, SeatPrice } from '@fcom/dapi/api/models';\nimport { AIRCRAFT_TRANSLATION_MAP } from '@fcom/common/interfaces/seat-map.interface';\nimport { ButtonSize, TagTheme, IconButtonSize, IconButtonTheme, IconPosition, ModalButtons } from '@fcom/ui-components';\nimport { equals, isPresent, uniqueBy } from '@fcom/core/utils';\nimport { CmsArticle } from '@fcom/core-api';\nimport { FragmentService } from '@fcom/common/services';\nimport { GtmService } from '@fcom/common/gtm';\nimport { ElementActions, ElementTypes } from '@fcom/common/interfaces';\n\nimport { getSeatMapFlight, getSeatPrice, getSeatType } from '../../../utils';\nimport { FlightWithStreams, SeatMapTraveler, seatTypeInfo } from '../../../interfaces';\n\nexport interface SeatChipData {\n article$: Observable;\n className: string;\n label: string;\n icon: string;\n originalPrice: FinnairAmount;\n price: FinnairAmount;\n seat: SeatInfo;\n seatType: {\n className: string;\n label: string;\n cmsKey: string;\n };\n}\n\n@Component({\n selector: 'fin-seat-map-seatchips',\n templateUrl: './seat-map-seatchips.component.html',\n styleUrls: ['./seat-map-seatchips.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeatMapSeatChipsComponent implements OnInit {\n @Input() flight: FlightWithStreams;\n @Input() passengers$: Observable;\n @Input() seatMapElement: ElementRef;\n\n @Output() scrollToSeat: EventEmitter = new EventEmitter();\n\n availableSeatTypes$: Observable;\n availableSeatTypesInModal: SeatChipData[];\n\n readonly ButtonSize = ButtonSize;\n readonly IconButtonSize = IconButtonSize;\n readonly IconButtonTheme = IconButtonTheme;\n readonly IconLibrary = IconLibrary;\n readonly IconPosition = IconPosition;\n readonly ModalButtons = ModalButtons;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly TagTheme = TagTheme;\n\n seatIconCache: Record = {};\n seatTypeModalOpen = false;\n\n constructor(\n private fragmentService: FragmentService,\n private gtmService: GtmService\n ) {}\n\n ngOnInit(): void {\n this.availableSeatTypes$ = combineLatest([this.passengers$, this.flight.seatMap$]).pipe(\n filter(([passengers, seatMap]) => Array.isArray(passengers) && isPresent(seatMap)),\n distinctUntilChanged(\n ([prevPassengers, prevSeatMapData], [nextPassengers, nextSeatMapData]) =>\n equals(prevSeatMapData, nextSeatMapData) && equals(prevPassengers, nextPassengers)\n ),\n map(([passengers, seatMapData]) => {\n const activePax = passengers.find((pax) => pax.active);\n const hasInfant = passengers.some((pax) => pax.withInfant);\n const selectedSeats = passengers\n .map((pax) => {\n return pax.seatNumber;\n })\n .filter(Boolean);\n\n return this.getSeatTypesFromData(activePax.id, hasInfant, seatMapData, selectedSeats);\n })\n );\n }\n\n getSeatTypesFromData(\n paxId: string,\n hasInfant: boolean,\n seatMap: SeatmapSvgAndControlData,\n selectedSeats: string[]\n ): SeatChipData[] {\n let seatTypeChips: SeatChipData[] = [];\n\n seatMap.seats\n .filter((seat) => {\n return seat.statuses[paxId] === 'available';\n })\n .forEach((seat) => {\n const seatType = getSeatType(seat.characteristics);\n const seatPrice = getSeatPrice(seat, paxId);\n\n const seatsOfSameTypeAndPrice = seatTypeChips.filter((addedSeat) => {\n const isSameSeatType = addedSeat.seatType.className === seatType.className;\n\n if (!isSameSeatType) {\n return false;\n }\n\n return addedSeat.price?.amount === seatPrice?.price?.amount;\n });\n\n if (seatsOfSameTypeAndPrice.length) {\n seatTypeChips = this.showSelectedSeatOnlyWhenLastOneOfThatTypeAndPrice(\n seat,\n seatType,\n seatPrice,\n selectedSeats,\n seatTypeChips\n );\n } else {\n seatTypeChips.push({\n ...seatType,\n article$: this.fragmentService.getFragment(this.getFragmentUrl(seatMap, seatType.cmsKey)),\n icon: this.getIconFromSeatMap(seat),\n price: getSeatPrice(seat, paxId).price,\n originalPrice: getSeatPrice(seat, paxId).originalPrice,\n seat,\n seatType,\n });\n }\n });\n\n // if none of the passengers has an infant, we filter out baby bassinet seat chips\n if (!hasInfant) {\n seatTypeChips = seatTypeChips.filter((chip) => chip.seatType.className !== seatTypeInfo.B.className);\n }\n\n // First, sort by type and price\n seatTypeChips.sort((a, b) => {\n if (a.className === b.className) {\n return parseFloat(a.price.amount) - parseFloat(b.price.amount);\n }\n return a.className.localeCompare(b.className);\n });\n\n // Calculate the minimum price for each type\n const minPriceByType = this.findMinPriceByType(seatTypeChips);\n\n // Sort the array based on the type and price\n seatTypeChips.sort((a, b) => {\n if (minPriceByType[a.className] === minPriceByType[b.className]) {\n return a.className.localeCompare(b.className);\n }\n return Number(minPriceByType[a.className]) - Number(minPriceByType[b.className]);\n });\n\n this.availableSeatTypesInModal = seatTypeChips.filter(uniqueBy((seatTypeChip) => seatTypeChip.className));\n\n return seatTypeChips;\n }\n\n findMinPriceByType(arr: SeatChipData[]): Record {\n return arr.reduce((minPriceByType, item) => {\n if (!minPriceByType[item.className] || item.price.amount < minPriceByType[item.className]) {\n minPriceByType[item.className] = item.price.amount;\n }\n return minPriceByType;\n }, {});\n }\n\n /**\n * For performance reasons we pass in the seatType and seatPrice, so we don't figure out the values again.\n *\n * Because this is called for every seat (so for example 300 seats on the A350) it can be quite heavy.\n */\n showSelectedSeatOnlyWhenLastOneOfThatTypeAndPrice(\n seat: SeatInfo,\n seatType: SeatChipData['seatType'],\n seatPrice: SeatPrice,\n selectedSeats: string[],\n seatTypeChips: SeatChipData[]\n ): SeatChipData[] {\n const seatToReplace = seatTypeChips.find((seatTypeChip) => {\n const isSameSeatType = seatTypeChip.seatType.className === seatType.className;\n\n return (\n isSameSeatType &&\n seatTypeChip.price?.amount === seatPrice?.price?.amount &&\n selectedSeats.includes(seatTypeChip.seat.seatNumber)\n );\n });\n\n if (!seatToReplace) {\n return seatTypeChips;\n }\n\n return seatTypeChips.map((seatTypeChip) => {\n if (seatToReplace.seat.seatNumber === seatTypeChip.seat.seatNumber) {\n seatToReplace.seat = seat;\n seatToReplace.icon = this.getIconFromSeatMap(seat);\n }\n\n return seatTypeChip;\n });\n }\n\n /**\n * Extract from the main SVG a copy of the seat icon for a specific seat.\n *\n * Removes the A tag from the seat and keeps everything else.\n * Removes xy coordinates from the seat element.\n */\n getIconFromSeatMap(seat: SeatInfo): string {\n if (this.seatIconCache[seat.seatNumber]) {\n return this.seatIconCache[seat.seatNumber];\n }\n\n const element: SVGGElement = this.seatMapElement.nativeElement\n .querySelector(`[data-id=\"${seat.seatNumber}\"]`)\n .cloneNode(true);\n\n const aTag = element.querySelector('a');\n\n Array.from(aTag.childNodes).forEach((node) => {\n if ((node as SVGGElement).classList.contains('seat-selected')) {\n return;\n }\n\n element.append(node);\n });\n element.removeAttribute('transform');\n element.removeChild(aTag);\n\n this.seatIconCache[seat.seatNumber] = element.outerHTML;\n\n return this.seatIconCache[seat.seatNumber];\n }\n\n handleClick(seatData: SeatChipData): void {\n this.scrollToSeat.emit(seatData.seat.seatNumber);\n this.gtmService.seatMapEvent(\n `seat-type-${seatData.seatType.cmsKey}`,\n ElementTypes.BUTTON,\n 'chip',\n ElementActions.CLICK,\n {\n flightInfo: getSeatMapFlight(this.flight),\n }\n );\n }\n\n openModal(): void {\n this.seatTypeModalOpen = true;\n this.gtmService.seatMapEvent('seat-type-info-modal', ElementTypes.MODAL, '', ElementActions.VIEW, {\n flightInfo: getSeatMapFlight(this.flight),\n });\n }\n\n closeModal(): void {\n this.seatTypeModalOpen = false;\n }\n\n private getFragmentUrl(seatMap: SeatmapSvgAndControlData, characteristicKey: string): string {\n const cabinClass = Cabin[this.flight.cabinClass];\n const aircraftType = AIRCRAFT_TRANSLATION_MAP[seatMap.aircraftCode];\n return `fragments.seatTypeInfos.${aircraftType}.${cabinClass.toLowerCase()}.${characteristicKey}.url`;\n }\n}\n","\n \n\n\n
\n
\n \n
\n {{ 'MMB.includedProducts.cabinBaggage.infantAllowance' | finLocalization }}\n
\n \n \n
\n \n
\n \n
\n \n
\n\n\n \n\n\n\n
    \n
  • \n \n \n
    \n {{ 'MMB.includedProducts.serviceCategory.' + cat.key + '.title' | finLocalization }}\n
    \n \n \n {{ 'actions.modify' | finLocalization }}\n \n
    \n \n
    \n \n {{ 'actions.pay' | finLocalization }}\n \n \n \n\n
      \n
    • \n
      \n \n \n \n \n \n {{ 'MMB.includedProducts.availableForSell.' + service.subCategory + '.text' | finLocalization }}\n \n \n
      \n @if (service.includedInTierBenefit && service.parameters?.isCorporate) {\n \n \n \n {{ 'MMB.includedProducts.corporateBenefitTag' | finLocalization }}\n \n \n } @else if (cat.tierLevel && service.includedInTierBenefit) {\n \n \n {{\n 'MMB.includedProducts.chip.text' | finLocalization: { tier: cat.tierLevel }\n }}\n \n }\n \n
    • \n
    \n
  • \n
\n
\n\n\n \n \n {{ 'MMB.services.seat.checkBoardingPassStatus' | finLocalization }}\n \n \n \n {{ 'MMB.services.seat.assignedAtAirportStatus' | finLocalization }}\n \n \n\n\n\n \n \n \n \n
\n \n
\n \n {{ serviceInfo.service.totalPrice | finPrice }}\n \n \n
\n
\n \n
\n \n \n
\n
\n\n\n {{\n service.includedInTierBenefit\n ? service.displayName\n : ('MMB.includedProducts.' + service.subCategory + '.text'\n | finLocalization\n : {\n seatNumber: service.seatNumber,\n amount: service.quantity,\n weight: service.parameters?.baggageWeight,\n displayName: service.displayName,\n }\n | finEmpty: service.displayName)\n }}\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { IconLibrary, SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable } from 'rxjs';\n\nimport { ButtonTheme, IconPosition, TagTheme } from '@fcom/ui-components';\nimport { SubCategory } from '@fcom/dapi/api/models/sub-category';\nimport { GroupedServices, RemovedServiceInfo } from '@fcom/dapi/interfaces';\nimport { Category } from '@fcom/dapi/api/models/category';\nimport { MediaQueryService } from '@fcom/common/services';\nimport { LoaderType } from '@fcom/common/interfaces';\nimport { FinnairPassengerServiceSelectionItem } from '@fcom/dapi/api/models';\n\nimport { isNotIncludedService } from '../../../../utils/common-booking.utils';\n\nconst CABIN_WEIGHT_VARIANTS = ['CABIN_WEIGHT', 'CABIN_WEIGHT_COMBINED', 'CABIN_WEIGHT_COMBINED_OLD'];\n\n@Component({\n selector: 'fin-grouped-services',\n templateUrl: 'grouped-services.component.html',\n styleUrls: ['../../../../assets/helper-classes.scss', 'grouped-services.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GroupedServicesComponent implements OnInit {\n readonly ButtonTheme = ButtonTheme;\n readonly Category = Category;\n readonly LoaderType = LoaderType;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly TagTheme = TagTheme;\n readonly isNotIncludedService = isNotIncludedService;\n readonly IconPosition = IconPosition;\n readonly IconLibrary = IconLibrary;\n\n @Input()\n category: Category;\n\n @Input()\n groupedServices: GroupedServices[];\n\n @Input()\n loading: boolean;\n\n @Input()\n enableUpsellMMB: boolean = false;\n\n @Input()\n isCarrierConnect = false;\n\n @Input()\n isShoppingCart = false;\n\n @Input()\n isInfant: boolean;\n\n @Input()\n serviceRemovalInProgress: boolean;\n\n @Output() selectProduct: EventEmitter = new EventEmitter();\n\n @Output() removeProduct: EventEmitter = new EventEmitter();\n\n @Output() continuePurchase: EventEmitter = new EventEmitter();\n\n expandOpen = false;\n\n filteredGroupedServices: GroupedServices[];\n\n cabinWeight: number;\n\n isMobile$: Observable;\n\n constructor(private mediaQueryService: MediaQueryService) {}\n\n ngOnInit(): void {\n this.isMobile$ = this.mediaQueryService.isBreakpoint$('mobile');\n\n this.filteredGroupedServices = this.groupedServices.map((groupedService) => {\n const services = this.enableUpsellMMB\n ? groupedService.services.filter((service) => ![SubCategory.CABIN_WEIGHT].includes(service.subCategory))\n : groupedService.services;\n return {\n ...groupedService,\n services,\n };\n });\n\n this.cabinWeight = this.category === Category.CABIN_BAGGAGE ? this.getCabinWeight(this.groupedServices) : 0;\n }\n\n onSelectProduct(): void {\n this.selectProduct.emit(true);\n }\n\n private getCabinWeight(groupedServices: GroupedServices[]): number {\n return (\n groupedServices\n .flatMap((groupedService) => groupedService.services)\n .find((service) => CABIN_WEIGHT_VARIANTS.includes(service.variant))?.parameters?.baggageWeight ?? 0\n );\n }\n\n onRemoveProduct(service: FinnairPassengerServiceSelectionItem): void {\n this.removeProduct.emit({\n category: this.category,\n variant: service.variant,\n seatNumber: service.seatNumber,\n });\n }\n}\n","\n \n \n \n\n \n \n\n \n
    \n
  • {{ 'MMB.includedProducts.availableForSell.lounge.plusTireBenefit.child' | finLocalization }}
  • \n
  • {{ 'MMB.includedProducts.availableForSell.lounge.plusTireBenefit.guest' | finLocalization }}
  • \n
\n \n\n 0\"\n class=\"block ms-medium-b\"\n [title]=\"'MMB.includedProducts.availableForSell.meal.infoTitle' | finLocalization\"\n >\n
    \n
  • {{ item.displayName }}
  • \n
\n \n\n \n
\n \n
\n {{ 'MMB.includedProducts.availableForSell.seat.notAY' | finLocalization }}\n
\n
\n
\n\n \n \n \n
\n \n \n
\n\n \n \n \n
\n \n\n
\n \n\n \n {{ 'ancillaries.saf.impactOfContributionTitle' | finLocalization }}\n \n\n \n \n
\n

\n {{ 'ancillaries.saf.contributionThankYouTitle' | finLocalization }}\n

\n \n {{ 'ancillaries.saf.readMore.text' | finLocalization }}\n
\n \n
\n\n \n\n\n\n {{ pax.firstName }} {{ pax.lastName }}\n\n \n \n {{ pax.firstName }} {{ pax.lastName }} ({{\n 'passenger.withInfant' | finLocalization: { withInfantFullName: pax.associatedInfantName } | finToLowerCase: ''\n }})\n \n\n \n {{\n 'MMB.labels.travellingWithInfant'\n | finLocalization: { firstName: pax.firstName, lastName: pax.lastName, infantName: pax.associatedInfantName }\n }}\n \n \n\n\n\n
\n \n \n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { filter, map, switchMap, take } from 'rxjs/operators';\nimport { BehaviorSubject, combineLatest, Observable, of, Subscription } from 'rxjs';\n\nimport { CmsArticle } from '@fcom/core-api/interfaces';\nimport { finShare } from '@fcom/rx';\nimport { ButtonMode, ButtonTheme, IconPosition, NotificationTheme } from '@fcom/ui-components';\nimport { compareAsJson, groupBy, toLookup, unique, unsubscribe } from '@fcom/core/utils';\nimport { ElementActions, ElementTypes, FragmentService, GaContext, GtmEvent, GtmPurchaseFlow } from '@fcom/common';\nimport { GtmService } from '@fcom/common/gtm';\nimport { getGA4ProductsFromSmpProducts } from '@fcom/common/utils/gtm.utils';\nimport {\n FinnairPassengerServiceSelectionItemWithStatus,\n FinnairServiceItemWithUpsell,\n FlightServices,\n RemovedServiceInfo,\n RemovedServiceProgress,\n SelectedServiceData,\n} from '@fcom/dapi/interfaces';\nimport {\n Category,\n FinnairBoundItem,\n FinnairCart,\n FinnairOrder,\n FinnairPassengerCode,\n FinnairPassengerItem,\n FinnairPassengerServiceItem,\n FinnairPassengerServiceSelectionItem,\n FinnairServiceItem,\n FinnairServiceSegmentItem,\n} from '@fcom/dapi/api/models';\n\nimport { SmpProduct } from '../product-list/product-list.component';\nimport { getGroupedServices, isFlight } from '../../../../utils/common-booking.utils';\nimport { getPassengerTierLevel, isBoundBasedCategory } from '../../utils';\n\n@Component({\n selector: 'fin-dapi-included-service',\n styleUrls: ['./included-service.component.scss'],\n templateUrl: './included-service.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedServiceComponent implements OnDestroy, OnInit, OnChanges {\n readonly Category = Category;\n readonly FinnairPassengerCode = FinnairPassengerCode;\n readonly NotificationTheme = NotificationTheme;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly ButtonTheme = ButtonTheme;\n readonly ButtonMode = ButtonMode;\n readonly IconPosition = IconPosition;\n\n private subscriptions: Subscription = new Subscription();\n\n @Input() service: FinnairServiceItemWithUpsell;\n @Input() showAsPending = false;\n @Input() cartOrOrder$: Observable;\n @Input() passengers$: Observable = of([]);\n @Input() showUpsellPerPax: boolean = false;\n @Input() showUpsellPaymentButton = true;\n @Input() includeSeatActionButtons = false;\n @Input() showClearPendingSeatsButton = false;\n @Input() products$: Observable = new BehaviorSubject([]);\n @Input() gtmFlow: GtmPurchaseFlow = GtmPurchaseFlow.MANAGE_BOOKING;\n @Input() gaContext: GaContext = GaContext.MANAGE_BOOKING;\n @Input() isCarrierConnect = false;\n @Input() includeAssignAtAirportStatus = false;\n @Input() showNonAYSeats = false;\n @Input() removeProgressInfo$: Observable = of({ removeInProgress: false });\n @Input() isShoppingCart = false;\n @Input() groupServicesByBound = false;\n\n @Output() selectProduct: EventEmitter = new EventEmitter();\n @Output() continuePurchase: EventEmitter = new EventEmitter();\n @Output() removeProduct: EventEmitter = new EventEmitter();\n @Output() viewSeatmap: EventEmitter = new EventEmitter();\n @Output() clearPendingSeats: EventEmitter = new EventEmitter();\n\n serviceSegmentItems$: Observable;\n serviceSubject$: BehaviorSubject = new BehaviorSubject(null);\n hasNonAySegments$: Observable;\n safProductInfo$: Observable;\n safThankYouForJoiningUsNotification$: Observable;\n isModalOpened = false;\n\n constructor(\n private gtmService: GtmService,\n private fragmentService: FragmentService\n ) {}\n\n ngOnInit(): void {\n this.serviceSubject$.next(this.service);\n this.serviceSegmentItems$ = this.findServiceInAllFlights();\n this.hasNonAySegments$ = this.serviceSegmentItems$.pipe(\n map((segments) => segments.some((seg) => seg.operatingAirline.code !== 'AY'))\n );\n\n this.safProductInfo$ = this.serviceSubject$.pipe(\n filter((service) => service.category === Category.SAF),\n switchMap(() => this.fragmentService.getFragment('fragments.services.productInfo.saf.contributeUrl'))\n );\n this.safThankYouForJoiningUsNotification$ = this.serviceSubject$.pipe(\n filter((service) => service.category === Category.SAF),\n switchMap(() => this.fragmentService.getFragment('fragments.thankYouForJoiningUs.url'))\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.service && !changes.service.isFirstChange()) {\n this.serviceSubject$.next(this.service);\n }\n }\n\n private findServiceInAllFlights(): Observable {\n const isPassengerSelected = (\n selectedPassengers: FinnairPassengerItem[],\n passengerServiceItem: FinnairPassengerServiceItem\n ): boolean =>\n selectedPassengers.length === 0 || selectedPassengers.some(({ id }) => id === passengerServiceItem.id);\n\n return combineLatest([\n this.cartOrOrder$,\n combineLatest([this.passengers$, this.serviceSubject$]).pipe(\n map(([passengers, service]) =>\n service.category === Category.SEAT\n ? passengers.filter((pax) => pax.passengerTypeCode !== FinnairPassengerCode.INF)\n : passengers\n )\n ),\n this.serviceSubject$,\n this.removeProgressInfo$,\n ]).pipe(\n map(([order, selectedPassengers, service, removeInProgressInfo]) => {\n const { bounds, serviceCatalog } = order;\n const variantsWeCanSell =\n serviceCatalog?.categories\n ?.flatMap((serviceCategory) =>\n Object.values(serviceCategory.services).flatMap((servicesForFragment) =>\n Object.values(servicesForFragment).flatMap((passengerServices) =>\n passengerServices.flatMap((passengerService) => passengerService.variant)\n )\n )\n )\n .filter(unique) ?? [];\n const allFlights = bounds.flatMap((bound) => bound.itinerary).filter(isFlight);\n const flightById = toLookup(allFlights, (flight) => flight.id);\n\n const serviceCatalogPerCategory = serviceCatalog?.categories.find(\n ({ category }) =>\n category === this.service.category &&\n [\n Category.CABIN_BAGGAGE,\n Category.BAGGAGE,\n Category.SEAT,\n Category.MEAL,\n Category.WIFI,\n Category.SPORT,\n Category.LOUNGE,\n Category.PET,\n Category.SAF,\n Category.COVER,\n ].includes(category)\n );\n\n const allServiceSegments: FinnairServiceSegmentItem[] = service.bounds.flatMap(({ segments }) => segments);\n const serviceSegmentsByFlightId = groupBy(allServiceSegments, (segment) => segment.id);\n\n const serviceBySegments = Object.entries(serviceSegmentsByFlightId)\n .map(([flightId, serviceSegmentsForFlight]) => {\n const passengerServices = serviceSegmentsForFlight\n .flatMap(({ passengers }) => passengers)\n .filter((passenger) => isPassengerSelected(selectedPassengers, passenger));\n\n const passengerIncludedServices = passengerServices.map((passenger) =>\n passenger.services.filter((s) => s.includedInTicketType)\n );\n\n const complimentaryServices =\n service.category === Category.MEAL\n ? passengerIncludedServices.reduce((shared, services) => {\n return shared.filter((value) => services.some((service) => service.variant === value.variant));\n })\n : [];\n\n const variantsToRemove = complimentaryServices.map((service) => service.variant);\n\n const flightPassengers = passengerServices\n .map((passenger) => {\n const boundId = Object.keys(serviceCatalogPerCategory?.lowestPrice || {}).find((boundId) =>\n boundId.includes(flightId)\n );\n\n const isAvailableForSellServices =\n boundId && serviceCatalogPerCategory?.lowestPrice[boundId][passenger.id] && this.showUpsellPerPax;\n\n const showedServices =\n service.category === Category.MEAL\n ? passenger.services.filter((service) => !variantsToRemove.includes(service.variant))\n : passenger.services;\n\n return {\n ...passenger,\n passengerTypeCode: selectedPassengers.find((p) => p.id === passenger.id)?.passengerTypeCode,\n groupedServices: getGroupedServices(\n showedServices,\n getPassengerTierLevel(passenger.id, selectedPassengers),\n variantsWeCanSell,\n isAvailableForSellServices\n ? [\n {\n id: '',\n subCategory: `${service.category}`,\n totalPrice: serviceCatalogPerCategory?.lowestPrice[boundId][passenger.id].money,\n } as unknown as FinnairPassengerServiceSelectionItem,\n ]\n : [],\n this.isCarrierConnect,\n this.includeAssignAtAirportStatus\n ),\n };\n })\n .filter((passenger) => passenger.groupedServices.length > 0);\n\n const serviceSegmentItem = serviceSegmentsForFlight[serviceSegmentsForFlight.length - 1];\n const flight = flightById[flightId];\n\n return {\n ...serviceSegmentItem,\n operatingAirline: flight.operatingAirline,\n passengers: flightPassengers,\n complimentaryServices,\n } as FlightServices;\n })\n .filter((s) => s.passengers?.length > 0 || s.complimentaryServices.length > 0);\n const flightServices =\n this.groupServicesByBound && isBoundBasedCategory(this.service.category)\n ? this.mergeServicesForBound(serviceBySegments, bounds)\n : serviceBySegments;\n return this.updateRemovalStatus(flightServices, removeInProgressInfo);\n }),\n finShare()\n );\n }\n\n private updateRemovalStatus(flightServices: FlightServices[], removedServiceInfo: RemovedServiceProgress) {\n return flightServices.map((flightService) => {\n return {\n ...flightService,\n passengers: flightService.passengers.map((pax) => {\n return {\n ...pax,\n groupedServices: pax.groupedServices.map((groupedService) => {\n return {\n ...groupedService,\n services: groupedService.services.map((service) => {\n return {\n ...service,\n removeInProgress: this.isRemoveInProgressForService(\n removedServiceInfo,\n flightService,\n pax.id,\n service\n ),\n };\n }),\n };\n }),\n };\n }),\n };\n });\n }\n\n private isRemoveInProgressForService(\n removedServiceInfo: RemovedServiceProgress,\n flightServices: FlightServices,\n paxId: string,\n service: FinnairPassengerServiceSelectionItemWithStatus\n ) {\n return (\n removedServiceInfo.removeInProgress &&\n removedServiceInfo.service.category === this.service.category &&\n paxId === removedServiceInfo.service.travelerId &&\n (flightServices.id === removedServiceInfo.service.fragmentId ||\n flightServices.id === removedServiceInfo.service.boundId) &&\n (this.service.category === Category.SEAT\n ? service.seatNumber === removedServiceInfo.service.seatNumber\n : service.variant === removedServiceInfo.service.variant)\n );\n }\n\n private mergeServicesForBound(flightServices: FlightServices[], bounds: FinnairBoundItem[]): FlightServices[] {\n return bounds\n .map((bound) => {\n const flightIds = bound.itinerary.filter(isFlight).map((f) => f.id);\n const allFlightServicesInBound = flightServices.filter((flightService) => flightIds.includes(flightService.id));\n if (allFlightServicesInBound.length === 0) {\n return null;\n }\n const servicesGroupedByBound = [\n {\n ...allFlightServicesInBound[0],\n departure: bound.departure,\n arrival: bound.arrival,\n id: bound.id,\n },\n ];\n return this.isSegmentServicesIdentical(allFlightServicesInBound)\n ? servicesGroupedByBound\n : allFlightServicesInBound;\n })\n .filter((bound) => !!bound)\n .reduce((allServices, currentServices) => {\n return [...allServices, ...currentServices];\n }, []);\n }\n\n private isSegmentServicesIdentical(flightServices: FlightServices[]): boolean {\n return flightServices.every((flightService) =>\n compareAsJson(flightService.passengers, flightServices[0].passengers)\n );\n }\n\n onContinuePurchase(): void {\n this.gtmService.trackElement(\n 'continue-to-review_view-cta',\n this.gaContext,\n ElementTypes.BUTTON,\n undefined,\n ElementActions.CLICK\n );\n this.continuePurchase.emit(true);\n }\n\n onRemoveProduct(productInfo: RemovedServiceInfo, paxId: string, segmentId: string): void {\n this.removeProduct.emit({\n ...productInfo,\n travelerId: paxId,\n fragmentId: segmentId,\n });\n }\n\n onSelectProduct(category: Category, fragmentId: string, paxId: string): void {\n this.selectProduct.emit({\n category,\n fragmentId,\n paxId,\n });\n\n this.subscriptions.add(\n combineLatest([this.products$, this.cartOrOrder$])\n .pipe(\n take(1),\n filter(([products]) => products.length > 0)\n )\n .subscribe(([products, cartOrOrder]) => {\n const matchedProduct = products.find((product) => product.category === category);\n\n this.gtmService.ecommerceEventGA4(\n GtmEvent.SELECT_ITEM,\n getGA4ProductsFromSmpProducts([matchedProduct], this.gtmFlow, cartOrOrder.bounds)\n );\n })\n );\n }\n\n ngOnDestroy(): void {\n this.subscriptions = unsubscribe(this.subscriptions);\n }\n}\n","

0\" class=\"flex flex--middle font-body-1 ms-small-x\">\n \n \n \n {{ cityName | titlecase }} - \n \n \n {{ operatedByText }}\n \n \n

\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\n\nimport { LocationInfoMap } from '@fcom/dapi/interfaces';\nimport { getCityName } from '@fcom/common/utils/booking.utils';\n\n@Component({\n selector: 'fin-included-product-heading',\n templateUrl: './included-product-heading.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedProductHeadingComponent implements OnInit, OnChanges {\n @Input() locationCodes: string[] = [];\n\n @Input()\n locations: LocationInfoMap;\n\n @Input()\n operatedByText: string | undefined;\n\n showLocations: string[];\n\n ngOnInit(): void {\n this.showLocations = this.locationCodes.map((locationCode) => getCityName(locationCode, this.locations));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes['locationCodes']?.firstChange) {\n this.showLocations = this.locationCodes.map((locationCode) => getCityName(locationCode, this.locations));\n }\n }\n}\n","\n {{\n useCabinClass && bound.cabinClass\n ? ('travelClass.' + bound.cabinClass.toLowerCase() | finLocalization)\n : (bound.fareFamily?.name | titlecase)\n }}\n\n\n\n \n {{ 'MMB.includedProducts.tickets.readMoreAboutEconomy.text' | finLocalization }}\n \n \n\n\n\n {{ 'MMB.includedProducts.tickets.readMoreAboutBusiness.text' | finLocalization }}\n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\n\nimport { LocationInfoMap } from '@fcom/dapi/interfaces';\nimport { FinnairBoundItem, FinnairCabinClass } from '@fcom/dapi/api/models';\n\n@Component({\n selector: 'fin-included-tickets',\n templateUrl: './included-tickets.component.html',\n styleUrls: ['included-tickets.component.scss', '../../../../../common-booking/assets/helper-classes.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedTicketsComponent {\n readonly FinnairCabinClass = FinnairCabinClass;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input() locations: LocationInfoMap;\n @Input() bound: FinnairBoundItem;\n @Input() useCabinClass: boolean;\n}\n","\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n {{ 'actions.from' | finLocalization }}\n
\n
\n {{ service.upsell?.lowestPrice ?? service.totalPrice | finPrice }}\n
\n
\n \n \n \n \n \n \n
\n
\n \n\n\n \n

\n
\n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable } from 'rxjs';\n\nimport { ButtonMode, ButtonSize, ButtonTheme, IconButtonTheme, IconPosition } from '@fcom/ui-components';\nimport { FragmentService, LoaderType, MediaQueryService } from '@fcom/common';\nimport { CmsArticle } from '@fcom/core-api/interfaces';\nimport { Category } from '@fcom/dapi/api/models';\nimport { BoundWithServices, FinnairServiceItemWithUpsell } from '@fcom/dapi/interfaces';\n\n@Component({\n selector: 'fin-upsell-card',\n templateUrl: 'upsell-card.component.html',\n styleUrls: ['../../../../assets/helper-classes.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UpsellCardComponent implements OnInit {\n readonly ButtonMode = ButtonMode;\n readonly ButtonSize = ButtonSize;\n readonly ButtonTheme = ButtonTheme;\n readonly IconButtonTheme = IconButtonTheme;\n readonly Category = Category;\n readonly IconPosition = IconPosition;\n readonly LoaderType = LoaderType;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n isMobile$: Observable;\n\n @Input()\n service: FinnairServiceItemWithUpsell;\n\n @Input() boundWithServices: BoundWithServices;\n\n @Output()\n upsellClicked: EventEmitter = new EventEmitter();\n\n article$: Observable;\n\n constructor(\n private fragmentService: FragmentService,\n private mediaQueryService: MediaQueryService\n ) {\n this.isMobile$ = this.mediaQueryService.isBreakpoint$('mobile');\n }\n\n ngOnInit(): void {\n this.article$ = this.fragmentService.getFragment(this.service.upsell.articleKey);\n }\n}\n","
\n \n \n \n\n \n \n\n
\n \n \n
\n \n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { CmsArticle, CmsTemplate } from '@fcom/core-api/interfaces';\nimport { FragmentService } from '@fcom/common';\nimport { ButtonTheme, ModalButtons } from '@fcom/ui-components';\nimport { finShare } from '@fcom/rx';\nimport { Category } from '@fcom/dapi/api/models';\n\n@Component({\n selector: 'fin-information-modal',\n templateUrl: 'information-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InformationModalComponent implements OnInit {\n readonly ModalButtons = ModalButtons;\n readonly ButtonTheme = ButtonTheme;\n\n @Input()\n category: Category;\n\n @Input()\n upsell = false;\n\n showModal = false;\n\n modalArticle$: Observable;\n\n translationPrefix: string;\n\n @Output()\n upsellClicked: EventEmitter = new EventEmitter();\n\n constructor(private fragmentService: FragmentService) {}\n\n ngOnInit(): void {\n this.translationPrefix = `ancillaries.${this.category}.moreInfo`;\n this.modalArticle$ = this.fragmentService\n .getFragment(`${this.translationPrefix}.modal.article.url`)\n .pipe(\n map((article) => {\n return {\n header: [],\n main: [article],\n footer: [],\n };\n }),\n finShare()\n );\n }\n\n emitUpsellClick(): void {\n this.upsellClicked.emit(this.category);\n this.showModal = false;\n }\n}\n","\n \n \n \n\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit } from '@angular/core';\n\nimport { Category, FinnairBoundItem, FinnairPassengerItem } from '@fcom/dapi/api/models';\nimport { FinnairServiceItemWithUpsell } from '@fcom/dapi/interfaces';\n\nimport { getSummaryForCategory } from '../../../../utils/services-summary.utils';\n\ninterface ServiceSummary {\n quantity?: number;\n description: string;\n text?: string;\n}\n\n@Component({\n selector: 'fin-included-product-item-summary',\n templateUrl: './included-product-item-summary.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedProductItemSummaryComponent implements OnInit, OnChanges {\n @Input() passengers: FinnairPassengerItem[];\n @Input() bound: FinnairBoundItem;\n @Input() service: FinnairServiceItemWithUpsell;\n @Input() isShortHaulFlight: boolean;\n @Input() bodyClass = 'font-body-2';\n protected readonly Category = Category;\n protected serviceSummary: ServiceSummary[] = [];\n\n ngOnChanges(): void {\n this.update();\n }\n\n ngOnInit(): void {\n this.update();\n }\n\n private update() {\n this.serviceSummary = getSummaryForCategory(\n this.service?.category,\n this.bound,\n this.service,\n this.isShortHaulFlight\n );\n }\n}\n","\n
\n {{ 'MMB.services.seats.noneIncluded' | finLocalization }}\n
\n
\n\n \n {{ seat }}\n \n\n 1\">\n \n {{ flightSeats.flight }}:\n \n \n {{ seat }}\n \n \n / \n \n\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit } from '@angular/core';\n\nimport { FinnairBoundItem, FinnairPassengerItem } from '@fcom/dapi/api/models';\nimport { FinnairServiceItemWithUpsell } from '@fcom/dapi/interfaces';\n\nimport { FlightWithSeats, getSeatsByFlight } from '../../../../utils/services-summary.utils';\n\n@Component({\n selector: 'fin-included-product-item-summary-seat',\n templateUrl: './included-product-item-summary-seat.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedProductItemSummarySeatComponent implements OnInit, OnChanges {\n @Input() passengers: FinnairPassengerItem[];\n @Input() bound: FinnairBoundItem;\n @Input() service: FinnairServiceItemWithUpsell;\n @Input() bodyClass = 'font-body-2';\n protected flightsSeats: FlightWithSeats[] = [];\n\n ngOnChanges(): void {\n this.update();\n }\n\n ngOnInit(): void {\n this.update();\n }\n\n private update() {\n this.flightsSeats = getSeatsByFlight(this.passengers, this.bound, this.service);\n }\n}\n","\n \n {{ item.quantity }} x {{ item.text }}\n {{ item.description | finLocalization: { amount: item.quantity } }}\n \n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { ServiceSummaryTranslationKey, ServiceType } from '../../../../utils/services-summary.utils';\n\n/*\n * Used to show the summary for products others than Seats. Products\n * that have a simple way to show the summary as a comma separated\n * list of items that sometimes have a quantity */\n@Component({\n selector: 'fin-included-product-item-summary-other',\n templateUrl: './included-product-item-summary-other.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedProductItemSummaryOtherComponent {\n @Input()\n summary: ServiceSummaryTranslationKey[];\n\n @Input()\n bodyClass = 'font-body-2';\n\n readonly ServiceType = ServiceType;\n}\n","
\n @if (descriptionKey) {\n {{ descriptionKey | finLocalization }}\n }\n @if (tag) {\n \n @if (tag.icon) {\n \n }\n {{ tag.textKey | finLocalization }}\n \n }\n
\n","import { Component, Input } from '@angular/core';\n\nimport { IconSet, TagTheme } from '@fcom/ui-components';\n\nexport interface SeatBenefitTag {\n textKey: string;\n theme?: TagTheme;\n icon?: IconSet;\n}\n\n@Component({\n selector: 'fin-seat-benefit',\n templateUrl: './seat-benefit.component.html',\n styleUrl: './seat-benefit.component.scss',\n})\nexport class SeatBenefitComponent {\n @Input() descriptionKey: string;\n\n @Input() tag: SeatBenefitTag;\n}\n","\n
\n @for (icon of [SvgLibraryIcon.SEAT_OR_ECONOMY, SvgLibraryIcon.PLUS, SvgLibraryIcon.WIFI]; track icon) {\n \n }\n
\n
\n

\n {{ 'ancillaries.bundle.toggle.title' | finLocalization }}\n

\n

\n {{ 'ancillaries.bundle.toggle.description' | finLocalization }}\n

\n
\n
\n
\n -{{ discountPercentage }}%\n
\n \n
\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\n\nimport { TagTheme, ToggleSwitchStatus } from '@fcom/ui-components';\n\n@Component({\n selector: 'fin-seat-bundle-toggle',\n templateUrl: './seat-bundle-toggle.component.html',\n styleUrls: ['./seat-bundle-toggle.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SeatBundleToggleComponent {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly TagTheme = TagTheme;\n readonly ToggleSwitchStatus = ToggleSwitchStatus;\n\n @Input({ required: true }) discountPercentage: string;\n @Input({ required: true }) active: boolean;\n @Output() bundleToggled: EventEmitter = new EventEmitter();\n\n emitToggle(toggled: boolean): void {\n this.bundleToggled.emit(toggled);\n }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\n\nimport { Amount } from '@fcom/dapi';\n\n@Injectable()\n@Pipe({\n name: 'finNonZeroAmount',\n pure: true,\n})\nexport class NonZeroAmountPipe implements PipeTransform {\n transform(amount: Amount, active = true): Amount | undefined {\n if (active) {\n if (!amount?.amount || parseFloat(amount.amount) == 0) {\n return undefined;\n }\n }\n\n return amount;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n/**\n * @deprecated\n *\n * This component is under review and will most likely be removed in the future. If you need to use\n * this please discuss in #design-system channel in slack!\n */\n@Component({\n selector: 'fin-titled-card',\n templateUrl: './titled-card.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TitledCardComponent {\n @Input()\n title: string;\n}\n","
\n
\n {{ title }}\n
\n
\n \n
\n
\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ButtonModule, IconsModule, ProductsModule, UiComponentsModule } from '@fcom/ui-components';\nimport { UiTranslateModule } from '@fcom/ui-translate';\nimport { PipesModule } from '@fcom/common/';\nimport { ComponentsModule } from '@fcom/common/components';\nimport { GtmModule } from '@fcom/common/gtm';\nimport { FinFormsModule } from '@fcom/common/forms';\nimport { CmsModule } from '@fcom/cms/components/cms.module';\nimport { BookingCommonModule } from '@fcom/booking/modules/common/booking-common.module';\n\nimport { CommonBookingComponentsModule } from '../../common-booking.module';\nimport {\n AdditionalInfoComponent,\n AncillaryPriceComponent,\n AncillarySelectionComponent,\n CommonProductSelectionComponent,\n MealDetailsComponent,\n ProductListComponent,\n SeatDetailsComponent,\n} from './components';\nimport { TabsModule } from '../tabs';\nimport { AncillarySubviewModule } from './components/ancillary-subview/ancillary-subview.module';\nimport { ProductExpandComponent } from './components/product-expand/product-expand.component';\nimport { SeatPreSelectionComponent } from './components/seat-map/seat-pre-selection/seat-pre-selection.component';\nimport { SeatMapViewComponent } from './components/seat-map/seat-map-view/seat-map-view.component';\nimport { SeatPassengersComponent } from './components/seat-map/seat-passengers/seat-passengers.component';\nimport { SeatMapRendererComponent } from './components/seat-map/seat-map-renderer/seat-map-renderer.component';\nimport { SeatMapMiniMapComponent } from './components/seat-map/seat-map-mini-map/seat-map-mini-map.component';\nimport { AncillarySeatMapComponent } from './components/seat-map/ancillary-seat-map/ancillary-seat-map.component';\nimport { SeatMapSeatChipsComponent } from './components/seat-map/seat-map-seatchips/seat-map-seatchips.component';\nimport { GroupedServicesComponent } from './components/grouped-services/grouped-services.component';\nimport { IncludedServiceComponent } from './components/included-service/included-service.component';\nimport { IncludedProductHeadingComponent } from './components/included-product-heading/included-product-heading.component';\nimport { IncludedProductsComponent } from './components/included-products/included-products.component';\nimport { IncludedTicketsComponent } from './components/included-tickets/included-tickets.component';\nimport { UpsellCardComponent } from './components/upsell-card/upsell-card.component';\nimport { InformationModalComponent } from './components/information-modal/information-modal.component';\nimport { IncludedProductItemComponent } from './components/included-product-item/included-product-item.component';\nimport { IncludedProductItemSummaryComponent } from './components/included-product-item-summary/included-product-item-summary.component';\nimport { IncludedProductItemSummarySeatComponent } from './components/included-product-item-summary-seat/included-product-item-summary-seat.component';\nimport { IncludedProductItemSummaryOtherComponent } from './components/included-product-item-summary-other/included-product-item-summary-other.component';\nimport { SeatBenefitComponent } from './components/seat-map/seat-benefit/seat-benefit.component';\nimport { SeatBundleToggleComponent } from './components/seat-map/seat-bundle-toggle/seat-bundle-toggle.component';\n\nconst COMPONENTS = [\n ProductListComponent,\n SeatDetailsComponent,\n AncillarySelectionComponent,\n AncillaryPriceComponent,\n MealDetailsComponent,\n AdditionalInfoComponent,\n CommonProductSelectionComponent,\n ProductExpandComponent,\n SeatBenefitComponent,\n SeatBundleToggleComponent,\n SeatPreSelectionComponent,\n SeatMapViewComponent,\n SeatPassengersComponent,\n SeatMapRendererComponent,\n SeatMapMiniMapComponent,\n AncillarySeatMapComponent,\n SeatMapSeatChipsComponent,\n GroupedServicesComponent,\n IncludedServiceComponent,\n IncludedProductHeadingComponent,\n IncludedProductsComponent,\n IncludedTicketsComponent,\n UpsellCardComponent,\n InformationModalComponent,\n IncludedProductItemComponent,\n IncludedProductItemSummaryComponent,\n IncludedProductItemSummarySeatComponent,\n IncludedProductItemSummaryOtherComponent,\n];\n\n@NgModule({\n imports: [\n ButtonModule,\n CommonModule,\n ComponentsModule,\n PipesModule,\n GtmModule,\n IconsModule,\n ProductsModule,\n UiTranslateModule,\n AncillarySubviewModule,\n TabsModule,\n FinFormsModule,\n UiComponentsModule,\n CommonBookingComponentsModule,\n CmsModule,\n BookingCommonModule,\n ],\n declarations: [...COMPONENTS],\n exports: [...COMPONENTS],\n})\nexport class CommonBookingAncillariesModule {}\n","\n \n \n \n\n \n \n \n {{ 'ancillaries.baggage.sportEquipmentNotIncluded' | finLocalization }}\n \n \n \n {{ notification.key | finLocalization }}\n \n \n {{ notification.reason.key | finLocalization: notification.reason.data }}\n \n \n\n \n \n\n \n \n \n \n\n
\n \n \n \n \n\n
0\" class=\"pr-small-x\">\n
1\">\n \n \n
\n \n \n {{\n filter === 'none'\n ? ('ancillaries.show.specialDiet' | finLocalization)\n : ('ancillaries.hide.specialDiet' | finLocalization)\n }}\n \n
\n
\n
\n
\n \n {{ 'ancillaries.noServicesForPax' | finLocalization }}\n \n\n \n \n \n \n \n
\n \n \n \n \n
\n

\n {{ service.translations.title }}\n

\n
\n @if (service.originalPrice) {\n \n {{\n service.originalPrice\n | finPrice\n : {\n roundPrice:\n service.originalPrice && service.originalPrice.amount === '0',\n }\n }}\n \n }\n \n {{\n service.totalPrice\n | finPrice\n : { roundPrice: service.totalPrice && service.totalPrice.amount === '0' }\n }}\n \n
\n\n @if (service.originalPrice) {\n \n \n {{ 'campaign.badge' | finLocalization }}\n \n }\n
\n\n
\n
\n
\n
\n \n \n \n \n \n \n
\n
\n \n\n \n {{ CONFIG[category].toppedQuotaKey | finLocalization }}\n \n \n {{ CONFIG[category].noQuotaLeftKey | finLocalization }}\n \n \n \n \n {{ 'ancillaries.quota.paxQuotaReached' | finLocalization }}\n \n 0 &&\n (service.totalPrice?.amount !== '0' || service.subCategory !== SubCategory.SPECIAL_DIET) &&\n service.inputType !== 'number'\n \"\n [attr.data-testid]=\"'service-notification-paid-' + service.globalId\"\n >\n {{ CONFIG[category]?.alreadyPurchased | finLocalization }}\n \n \n {{ CONFIG[category].blockSelectionNotification | finLocalization }}\n \n \n \n {{ CONFIG[category].quotaLimitKey | finLocalization: { quota: quota.count } }}\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n \n\n \n
\n \n {{\n notification.key | finLocalization\n }}\n \n {{ notification.reason.key | finLocalization: notification.reason.data }}\n \n \n\n \n {{ 'services.cannotAdd' | finLocalization }}\n \n
\n \n\n\n\n
\n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { BehaviorSubject, combineLatest, Observable, of, Subscription } from 'rxjs';\nimport { distinctUntilChanged, filter, map, startWith, switchMap, take, withLatestFrom } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport {\n isEmptyObjectOrHasEmptyValues,\n isNotEmpty,\n PreciseNumber,\n toBoolean,\n unique,\n unsubscribe,\n} from '@fcom/core/utils';\nimport { finShare, snapshot } from '@fcom/rx';\nimport {\n Amount,\n GroupedServices,\n NO_VARIANTS,\n SelectionsPerTraveler,\n ServiceCatalogService,\n ServicePassenger,\n ServicesPerTraveler,\n TravelerService,\n} from '@fcom/dapi/interfaces';\nimport {\n Category,\n FinnairBoundItem,\n FinnairItineraryItemFlight,\n FinnairPassengerItem,\n FinnairPassengerServiceSelectionItem,\n FinnairServiceItem,\n PaxLevelQuota,\n SubCategory,\n} from '@fcom/dapi/api/models';\nimport { LoaderType } from '@fcom/common/interfaces';\nimport {\n AspectRatios,\n ButtonMode,\n ButtonTheme,\n IconPosition,\n ModalButtons,\n NotificationTheme,\n TagTheme,\n} from '@fcom/ui-components';\nimport { BookingAppState } from '@fcom/common/interfaces/booking';\nimport { NON_SCHENGEN_LOUNGES } from '@fcom/booking/utils';\nimport { MediaQueryService, ToasterService } from '@fcom/common/services';\nimport { LanguageService } from '@fcom/ui-translate';\n\nimport {\n findServiceItemsForPassengerForFragment,\n getFilteredTravelers$,\n getPassengerTierLevel,\n getServicesNotifications,\n sumOfPricesForTravelersServiceSelection,\n} from '../../utils';\nimport { QuantityForFragmentAndPassenger, ServicesActions, serviceSelectionsForFragment } from '../../../../store';\nimport {\n ConfirmModal,\n ConfirmModalData,\n EligibilitiesForFragments,\n ExtendedService,\n Notification,\n ProductInputType,\n QuotaType,\n} from '../../interfaces';\nimport { asTravelerService } from '../../../../store/utils/services.utils';\nimport { getGroupedServices } from '../../../../utils/common-booking.utils';\n\nexport enum SelectionState {\n LOADING,\n HAS_SERVICES,\n NO_SERVICES,\n}\n\nexport interface ConfirmModalTranslationKeys {\n title: string;\n firstContentParagraph: string;\n secondContentParagraph: string;\n closeButton: string;\n continueButton: string;\n}\n\ntype TravelerServices = {\n traveler: ServicePassenger;\n services: ExtendedService[];\n selectedServices$: Observable;\n hasServiceSelected$: Observable;\n additionalInfoBlockUrl: string | undefined;\n filters: SubCategoryFilter[];\n selectedFilter$: BehaviorSubject;\n combinedGroupedServices: GroupedServices[];\n useConfirmModalBeforeSelectionRemoval: boolean;\n};\n\ninterface ProductConfig {\n notSelectedVariant?: string;\n selectServiceKey: string;\n toppedQuotaKey?: string;\n quotaLimitKey?: string;\n noQuotaLeftKey?: string;\n blockSelectionNotification?: string;\n alreadyPurchased: string;\n}\n\nconst CONFIG: Record = {\n [Category.WIFI]: {\n notSelectedVariant: '',\n selectServiceKey: 'ancillaries.wifi.selectWifi',\n alreadyPurchased: 'ancillaries.wifi.alreadyPurchased',\n },\n [Category.MEAL]: {\n notSelectedVariant: '',\n selectServiceKey: 'ancillaries.selectMeals',\n alreadyPurchased: 'ancillaries.meals.alreadyPurchased',\n },\n [Category.LOUNGE]: {\n selectServiceKey: 'ancillaries.selectLounge',\n alreadyPurchased: 'ancillaries.lounge.alreadyPurchased',\n },\n [Category.SPORT]: {\n selectServiceKey: 'ancillaries.selectSport',\n alreadyPurchased: 'ancillaries.sport.alreadyPurchased',\n },\n [Category.CABIN_BAGGAGE]: {\n selectServiceKey: 'ancillaries.cabinBaggage.title',\n alreadyPurchased: 'ancillaries.cabinBaggage.alreadyPurchased',\n },\n [Category.BAGGAGE]: {\n selectServiceKey: 'ancillaries.bags.extraTitle',\n alreadyPurchased: 'ancillaries.bags.alreadyPurchased',\n },\n [Category.PET]: {\n selectServiceKey: 'ancillaries.selectPet',\n quotaLimitKey: 'ancillaries.pet.quota.quotaLimit',\n toppedQuotaKey: 'ancillaries.pet.quota.toppedQuota',\n noQuotaLeftKey: 'ancillaries.pet.quota.noQuotaLeft',\n blockSelectionNotification: 'ancillaries.pet.hasIncompatibleSeat',\n alreadyPurchased: 'ancillaries.pet.alreadyPurchased',\n },\n};\n\ntype SelectionWithCategoryAndFragment = [\n SelectionsPerTraveler,\n Category,\n FinnairItineraryItemFlight | FinnairBoundItem,\n];\n\ninterface TravelerSelections {\n [variantOrRadio: string]: string | boolean | number;\n}\ntype TravelerForm = FormGroup<{ [variantOrRadio: string]: FormControl }>;\n\ntype SubCategoryFilter = SubCategory | 'all' | 'none';\n\nconst COMMON_TOASTER_ID = 'COMMON-TOASTER-ID';\n\n@Component({\n selector: 'fin-common-product-selection',\n templateUrl: 'common-product-selection.component.html',\n styleUrls: ['common-product-selection.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CommonProductSelectionComponent implements OnInit, OnDestroy {\n readonly ButtonMode = ButtonMode;\n readonly ButtonTheme = ButtonTheme;\n readonly Category = Category;\n readonly CONFIG = CONFIG;\n readonly IconPosition = IconPosition;\n readonly LoaderType = LoaderType;\n readonly ModalButtons = ModalButtons;\n readonly NotificationTheme = NotificationTheme;\n readonly QuotaType = QuotaType;\n readonly SelectionState = SelectionState;\n readonly SubCategory = SubCategory;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly TagTheme = TagTheme;\n\n @Input()\n servicesReady$: Observable;\n\n @Input()\n category$: Observable;\n\n @Input()\n flightOrBound$: Observable;\n\n @Input()\n services$: Observable;\n\n @Input()\n includedServices$: Observable = of(null);\n\n @Input()\n combinedServices$: Observable = of(null);\n\n @Input()\n travelers$: Observable;\n\n @Input()\n initialSelectedTravelerId$: Observable = of(undefined);\n\n @Input()\n showConfirmationModalBeforeSelectionForPassengers$: Observable = of([]);\n\n @Input()\n showConfirmationModalBeforeSelectionRemovalForPassengers$: Observable = of([]);\n\n @Input()\n blockSelectionNotification$: Observable = of([]);\n\n @Input()\n confirmModalData$: BehaviorSubject = new BehaviorSubject({ open: false });\n\n @Input()\n availability$: Observable = of({});\n\n @Input()\n serviceQuantityMap$: Observable = of({});\n\n @Input()\n paxLevelQuota$: Observable = of({ combinedQuota: 0, variants: [] });\n\n @Output()\n subtotalChange: EventEmitter = new EventEmitter();\n\n @Output()\n openConfirmModalWithData: EventEmitter = new EventEmitter();\n\n form: FormGroup<{ [travelerId: string]: TravelerForm }>;\n state$: Observable;\n additionalText: string | undefined;\n travelersAndServices$: Observable;\n initialTravelerIdSelected$: Observable;\n serviceTabGroupId: string;\n notifications$: Observable;\n showSportNotification$: Observable;\n blockingNotifications$: Observable;\n aspectRatio$: Observable;\n isTabletDown$: Observable;\n flightOrBound: FinnairItineraryItemFlight | FinnairBoundItem;\n category: Category;\n\n private subscriptions: Subscription = new Subscription();\n\n constructor(\n private store$: Store,\n private fb: FormBuilder,\n private mediaQueryService: MediaQueryService,\n private languageService: LanguageService,\n private toasterService: ToasterService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.form = new FormGroup({});\n\n this.isTabletDown$ = this.mediaQueryService.isBreakpoint$('tablet_down');\n this.aspectRatio$ = this.isTabletDown$.pipe(map((isTabletDown) => (isTabletDown ? '21x9' : '1x1')));\n\n const baseStream$ = combineLatest([this.category$, this.flightOrBound$]).pipe(\n distinctUntilChanged((a, b) => a[0] === b[0] && a[1].id === b[1].id)\n );\n this.subscriptions.add(\n baseStream$.subscribe(([category, flightOrBound]) => {\n this.category = category;\n this.flightOrBound = flightOrBound;\n this.serviceTabGroupId = `${category}-${flightOrBound.id}-travelers`;\n this.additionalText = this.getAdditionalText(category, flightOrBound);\n this.cdr.markForCheck();\n })\n );\n\n const filteredTravelers$: Observable = getFilteredTravelers$(this.travelers$);\n\n this.setupForm(baseStream$, filteredTravelers$);\n this.setupTravelersAndServices(baseStream$, filteredTravelers$);\n\n this.state$ = combineLatest([\n this.servicesReady$.pipe(startWith(false)),\n this.travelersAndServices$.pipe(map(isNotEmpty), startWith(false)),\n ]).pipe(\n map(([servicesReady, hasServices]: [boolean, boolean]) => {\n if (!servicesReady) {\n return SelectionState.LOADING;\n }\n if (hasServices) {\n return SelectionState.HAS_SERVICES;\n }\n return SelectionState.NO_SERVICES;\n }),\n distinctUntilChanged(),\n finShare()\n );\n\n // == Tabs ==\n this.initialTravelerIdSelected$ = combineLatest([this.travelersAndServices$, this.initialSelectedTravelerId$]).pipe(\n map(([travelersWithServices, initialTravelerId]) => initialTravelerId ?? travelersWithServices[0]?.traveler.id)\n );\n\n this.notifications$ = combineLatest([this.services$, this.availability$, this.category$, this.flightOrBound$]).pipe(\n map(([services, availability, category, flightOrBound]) =>\n getServicesNotifications(services, availability, category, flightOrBound)\n ),\n finShare()\n );\n\n this.blockingNotifications$ = this.notifications$.pipe(\n map((notifications) => notifications.filter((n) => n.blockSelection))\n );\n\n this.showSportNotification$ = this.category$.pipe(\n map((category) => {\n return category === Category.BAGGAGE;\n })\n );\n }\n\n ngOnDestroy(): void {\n this.toasterService.removeMessage(COMMON_TOASTER_ID);\n this.subscriptions = unsubscribe(this.subscriptions);\n }\n\n clickInput(event: Event, service: ExtendedService, flightOrBoundId: string, travelerId: string): void {\n if (service.useConfirmModal) {\n event.preventDefault();\n this.openConfirmModalWithData.emit({\n variant: service.variant,\n flightOrBoundId: flightOrBoundId,\n travelerId: travelerId,\n });\n }\n }\n\n addQuantity(service: ExtendedService, flightOrBoundId: string, travelerId: string): void {\n const currentValue = +this.form.controls[travelerId]?.controls[service.variant].value;\n const quantity = currentValue + 1;\n\n if (service.useConfirmModal) {\n this.openConfirmModalWithData.emit({\n variant: service.variant,\n quantity,\n flightOrBoundId: flightOrBoundId,\n travelerId: travelerId,\n });\n } else {\n this.form.controls[travelerId]?.controls[service.variant]?.setValue(quantity);\n }\n }\n\n removeQuantity(service: ExtendedService, flightOrBoundId: string, travelerId: string): void {\n const currentValue = +this.form.controls[travelerId]?.controls[service.variant].value;\n const quantity = currentValue - 1;\n\n if (service.useConfirmModal) {\n this.openConfirmModalWithData.emit({\n variant: service.variant,\n quantity,\n flightOrBoundId: flightOrBoundId,\n travelerId: travelerId,\n });\n } else {\n this.form.controls[travelerId]?.controls[service.variant]?.setValue(quantity);\n }\n }\n\n private getAdditionalInfoBlock(services: ExtendedService[], category: Category): string | undefined {\n if (category === Category.LOUNGE) {\n return services.filter((service) => NON_SCHENGEN_LOUNGES.includes(service.variant))?.length > 0\n ? 'fragments.nonSchengenLoungeContent.url'\n : 'fragments.schengenLoungeContent.url';\n }\n return `fragments.services.productInfo.${category}.url`;\n }\n\n private getAdditionalText(\n category: Category,\n flightOrBound: FinnairItineraryItemFlight | FinnairBoundItem\n ): string | undefined {\n if (category === Category.WIFI) {\n if ((flightOrBound as FinnairItineraryItemFlight).isShortHaul) {\n return 'ancillaries.wifi.shorthaulAdditionalInformation';\n }\n return 'ancillaries.wifi.additionalInformation';\n }\n return undefined;\n }\n\n private addValuesToFormAfterConfirmModal(confirmData: ConfirmModalData) {\n const formControls = this.form.controls[confirmData.travelerId].controls;\n if (formControls['radio']) {\n formControls['radio'].setValue(confirmData.variant);\n } else if (confirmData.quantity) {\n formControls[confirmData.variant].setValue(confirmData.quantity);\n } else {\n formControls[confirmData.variant].setValue(true);\n }\n }\n\n private setupForm(\n baseStream$: Observable<[Category, FinnairItineraryItemFlight | FinnairBoundItem]>,\n filteredTravelers$: Observable\n ): void {\n this.subscriptions.add(\n this.confirmModalData$\n .pipe(\n withLatestFrom(this.flightOrBound$),\n filter(\n ([data, flightOrBound]) =>\n (data.confirmData?.variant || data.confirmData?.removeSelection) &&\n data.confirmData?.travelerId &&\n flightOrBound.id === data.confirmData?.flightOrBoundId &&\n !data.open\n )\n )\n .subscribe(([{ confirmData }]) =>\n confirmData.removeSelection\n ? this.removeSelections(undefined, confirmData.travelerId, confirmData.flightOrBoundId, false)\n : this.addValuesToFormAfterConfirmModal(confirmData)\n )\n );\n\n this.subscriptions.add(\n baseStream$\n .pipe(\n switchMap(([category, flightOrBound]) => {\n return combineLatest([\n of(category),\n this.store$.pipe(\n serviceSelectionsForFragment(flightOrBound.id, category)\n ),\n filteredTravelers$.pipe(\n map((travelers) => travelers.map((traveler) => traveler.id)),\n distinctUntilChanged()\n ),\n this.services$,\n this.includedServices$,\n ]).pipe(take(1));\n })\n )\n .subscribe(([category, initialSelections, travelerIds, services, includedServices]) => {\n travelerIds.forEach((travelerId: string) => {\n this.form.removeControl(travelerId, { emitEvent: false });\n const initialServices: TravelerService[] = [].concat(initialSelections?.[travelerId] ?? []);\n const travelerForm: TravelerForm = this.fb.group({});\n if (this.isRadioDisplay()) {\n const includedServicesForTravelerAndFragment = findServiceItemsForPassengerForFragment(\n this.category,\n includedServices,\n travelerId,\n this.flightOrBound.id\n );\n travelerForm.registerControl(\n 'radio',\n this.fb.control(\n includedServicesForTravelerAndFragment?.[0]?.variant ||\n initialServices?.[0]?.variant ||\n CONFIG[category]?.notSelectedVariant\n )\n );\n } else {\n const allServices = services?.[travelerId]?.filter((s) => s.isService) ?? [];\n allServices.forEach((is) => {\n const initialSelection = initialServices.find((s) => s.variant === is.variant);\n const initialQuantityOrBoolean =\n is.maxNumberItems > 1 ? (initialSelection?.quantity ?? 0) : !!initialSelection;\n travelerForm.registerControl(is.variant, this.fb.control(initialQuantityOrBoolean));\n });\n }\n this.form.registerControl(travelerId, travelerForm);\n });\n this.subtotalChange.emit(sumOfPricesForTravelersServiceSelection(initialSelections ?? {}));\n })\n );\n\n const selections$ = this.form.valueChanges.pipe(\n filter((model) => !isEmptyObjectOrHasEmptyValues(model)),\n withLatestFrom(this.services$),\n map(([model, services]) => {\n return Object.keys(model).reduce((selections: SelectionsPerTraveler, travelerId: string) => {\n const servicesForTraveler = services[travelerId] ?? [];\n\n const travelerSelections = servicesForTraveler\n .filter((sm: ServiceCatalogService) => {\n if (sm.maxNumberItems > 1) {\n return Number(model[travelerId][sm.variant]) > 0;\n }\n return toBoolean(model[travelerId][sm.variant]) || model[travelerId]['radio'] === sm.variant;\n })\n .map((s) => {\n if (!s.isService) {\n return undefined;\n }\n const quantity = model[travelerId][s.variant];\n return asTravelerService(s, typeof quantity === 'number' ? quantity : 1);\n });\n\n selections[travelerId] = travelerSelections;\n return selections;\n }, {});\n })\n );\n\n this.subscriptions.add(\n baseStream$\n .pipe(\n switchMap(([category, flightOrBound]) =>\n selections$.pipe(\n map((selections) => [selections, category, flightOrBound] as SelectionWithCategoryAndFragment)\n )\n ),\n withLatestFrom(this.includedServices$)\n )\n .subscribe(([[selections, category, flightOrBound], includedServices]) => {\n const selectionsToStore = this.isRadioDisplay(category)\n ? Object.entries(selections).reduce((selectionsPerTraveler, [traveledId, selectionsForFragment]) => {\n const servicesForFragments = findServiceItemsForPassengerForFragment(\n category,\n includedServices,\n traveledId,\n flightOrBound.id\n );\n\n selectionsPerTraveler[traveledId] = selectionsForFragment.filter((selection) => {\n return !servicesForFragments.some(\n ({ variant, modifiable }) => !modifiable && variant === selection.variant\n );\n });\n\n return selectionsPerTraveler;\n }, {})\n : selections;\n\n this.checkAndQueueToasterNotification(category, selectionsToStore);\n\n this.store$.dispatch(\n ServicesActions.setSelectionsForFragment({\n category: category,\n fragmentId: flightOrBound.id,\n selections: selectionsToStore,\n })\n );\n this.subtotalChange.emit(sumOfPricesForTravelersServiceSelection(selectionsToStore));\n })\n );\n }\n\n private checkAndQueueToasterNotification(\n category: Category,\n selections: SelectionsPerTraveler\n ): void {\n if (category !== Category.MEAL) {\n return;\n }\n\n const nextHasSpecialDiet: Record = Object.entries(selections).reduce(\n (all, [key, selectionsForTraveler]) => {\n all[key] = selectionsForTraveler.some((v) => v.category === SubCategory.SPECIAL_DIET);\n return all;\n },\n {}\n );\n const currentSelection: SelectionsPerTraveler = snapshot(\n this.store$.pipe(serviceSelectionsForFragment(this.flightOrBound.id, this.category))\n );\n const currentHasSpecialDiet: Record = Object.entries(currentSelection).reduce(\n (all, [key, travelerSelection]: [string, TravelerService | TravelerService[]]) => {\n const selectionsForTraveler = Array.isArray(travelerSelection) ? travelerSelection : [travelerSelection];\n all[key] = selectionsForTraveler.some((v) => v.category === SubCategory.SPECIAL_DIET);\n return all;\n },\n {}\n );\n\n const showSpecialDietSelected = Object.entries(nextHasSpecialDiet).some(\n ([key, value]) => value && !currentHasSpecialDiet[key]\n );\n const showSpecialDietUnselected = Object.entries(currentHasSpecialDiet).some(\n ([key, value]) => value && !nextHasSpecialDiet[key]\n );\n\n if (showSpecialDietSelected) {\n this.toasterService.addMessageToQueue({\n id: COMMON_TOASTER_ID,\n contentKey: 'ancillaries.specialDiet.toastMessages.selectedSpecialMeal',\n });\n }\n\n if (showSpecialDietUnselected) {\n this.toasterService.addMessageToQueue({\n id: COMMON_TOASTER_ID,\n contentKey: 'ancillaries.specialDiet.toastMessages.unSelectedSpecialMeal',\n });\n }\n }\n\n private isRadioDisplay(category: Category = this.category): boolean {\n return [Category.WIFI, Category.MEAL].includes(category);\n }\n\n private setupTravelersAndServices(\n baseStream$: Observable<[Category, FinnairItineraryItemFlight | FinnairBoundItem]>,\n filteredTravelers$: Observable\n ): void {\n const selectionsForFragmentAndCategory$ = baseStream$.pipe(\n switchMap(([category, flightOrBound]) => {\n return this.store$.pipe(serviceSelectionsForFragment(flightOrBound.id, category));\n })\n );\n\n const originalQuota = Object.values(snapshot(selectionsForFragmentAndCategory$) ?? {}).filter((item) =>\n Array.isArray(item) ? item.length > 0 : !!item\n ).length;\n\n this.travelersAndServices$ = combineLatest([\n this.services$,\n filteredTravelers$,\n this.includedServices$,\n this.combinedServices$,\n this.showConfirmationModalBeforeSelectionForPassengers$,\n this.showConfirmationModalBeforeSelectionRemovalForPassengers$,\n this.blockSelectionNotification$,\n this.travelers$,\n baseStream$,\n ]).pipe(\n map(\n ([\n services,\n travelers,\n includedServices,\n combinedServices,\n showConfirmationModalBeforeSelectionForPassengers,\n showConfirmationModalBeforeSelectionRemovalForPassengers,\n blockSelectionNotification,\n finnairPassengers,\n [category, flightOrBound],\n ]) => {\n if (Object.values(services ?? {}).length === 0) {\n return [];\n }\n\n return travelers.map((traveler: ServicePassenger) => {\n const selection$: Observable = this.form.controls[traveler.id]?.valueChanges.pipe(\n startWith(this.form.controls[traveler.id].getRawValue()),\n finShare()\n );\n\n const includedServicesForTravelerAndFragment = findServiceItemsForPassengerForFragment(\n category,\n includedServices,\n traveler.id,\n flightOrBound.id\n );\n\n const combinedGroupedServices = getGroupedServices(\n findServiceItemsForPassengerForFragment(\n this.category,\n combinedServices,\n traveler.id,\n this.flightOrBound.id,\n false\n ),\n getPassengerTierLevel(traveler.id, finnairPassengers)\n );\n\n const servicesToDisplay =\n includedServicesForTravelerAndFragment.length > 0 && this.isRadioDisplay()\n ? (services?.[traveler.id] ?? []).filter(\n (s) =>\n !!includedServicesForTravelerAndFragment.find(({ variant, totalPrice, subCategory }) => {\n return (\n variant === s.variant ||\n (totalPrice?.amount === '0' && subCategory === SubCategory.SPECIAL_DIET)\n );\n })\n )\n : (services?.[traveler.id] ?? []);\n\n const extendedServices = this.getExtendedServices(\n traveler,\n servicesToDisplay,\n selection$,\n originalQuota,\n showConfirmationModalBeforeSelectionForPassengers,\n blockSelectionNotification,\n selectionsForFragmentAndCategory$,\n includedServicesForTravelerAndFragment,\n category,\n flightOrBound\n );\n\n const selectedServices$: Observable = this.getSelectedServices(\n selection$,\n extendedServices\n );\n\n const filters = this.getFilters(extendedServices);\n const selectedFilter$ = new BehaviorSubject(\n filters.length === 0 ? 'all' : filters.length > 1 ? filters[0] : 'none'\n );\n return {\n traveler,\n filters,\n selectedFilter$,\n combinedGroupedServices,\n services: extendedServices,\n selectedServices$,\n hasServiceSelected$: this.getHasServiceSelected(\n selection$,\n includedServicesForTravelerAndFragment,\n category\n ),\n additionalInfoBlockUrl: this.getAdditionalInfoBlock(extendedServices, category),\n useConfirmModalBeforeSelectionRemoval: showConfirmationModalBeforeSelectionRemovalForPassengers?.includes(\n traveler.id\n ),\n } as TravelerServices;\n });\n }\n ),\n finShare()\n );\n }\n\n private getHasServiceSelected(\n selection$: Observable,\n includedServicesForTravelerAndFragment: FinnairPassengerServiceSelectionItem[],\n category: Category\n ): Observable {\n return selection$.pipe(\n map((selection) => {\n if (typeof selection['radio'] === 'string') {\n const alreadyPaid = !!includedServicesForTravelerAndFragment.find(\n (service) => service.variant === selection['radio']\n );\n return selection['radio'] !== CONFIG[category].notSelectedVariant || alreadyPaid;\n }\n return Object.keys(selection).some((variant) => {\n const alreadyPaid = !!includedServicesForTravelerAndFragment.find((service) => service.variant === variant);\n\n const travellerSelection = selection[variant];\n\n return (\n (typeof travellerSelection === 'number' ? travellerSelection > 0 : toBoolean(travellerSelection)) ||\n alreadyPaid\n );\n });\n })\n );\n }\n\n private getFilters(extendedServices: ExtendedService[]): SubCategoryFilter[] {\n if (this.category !== Category.MEAL) {\n return [];\n }\n const baseFilters = extendedServices.some((s) => s.subCategory === SubCategory.SPECIAL_DIET)\n ? extendedServices.flatMap((s) => s.subCategory).filter(unique)\n : [];\n\n return baseFilters.length > 1 ? [...baseFilters, 'all'] : baseFilters;\n }\n\n private getSelectedServices(\n selection$: Observable,\n extendedServices: ExtendedService[]\n ): Observable {\n return selection$.pipe(\n map((selection) => {\n return extendedServices\n .filter((service) => {\n if (service.maxNumberItems > 1) {\n return Number(selection[service.variant]) > 0;\n }\n if (this.isRadioDisplay()) {\n return service.variant === selection['radio'] && !NO_VARIANTS.includes(selection['radio']);\n }\n return toBoolean(selection[service.variant]);\n })\n .map((service) => {\n if (typeof selection[service.variant] === 'number') {\n return {\n ...service,\n quantity: Number(selection[service.variant]),\n totalPrice: {\n ...service.totalPrice,\n amount: PreciseNumber.fromString(service.totalPrice.amount)\n .multiply(PreciseNumber.fromString(String(selection[service.variant])))\n .toString(),\n },\n ...(service.originalPrice && {\n originalPrice: {\n ...service.originalPrice,\n amount: PreciseNumber.fromString(service.originalPrice.amount)\n .multiply(PreciseNumber.fromString(String(selection[service.variant])))\n .toString(),\n },\n }),\n };\n }\n return { ...service, quantity: 1 };\n })\n .filter((service) => service.paidQuantity === 0 || +service.totalPrice?.amount === 0);\n })\n );\n }\n\n private getExtendedServices(\n traveler: ServicePassenger,\n services: ServiceCatalogService[],\n selection$: Observable,\n originalQuota: number,\n showConfirmationModalBeforeSelectionForPassengers: string[],\n blockSelectionNotification: string[],\n selectionsForFragmentAndCategory$: Observable>,\n includedServicesForTravelerAndFragment: FinnairPassengerServiceSelectionItem[],\n category: Category,\n flightOrBound: FinnairItineraryItemFlight | FinnairBoundItem\n ): ExtendedService[] {\n const selectionQuota$ = selectionsForFragmentAndCategory$.pipe(\n map(\n (selections) =>\n Object.values(selections).filter((item) => (Array.isArray(item) ? item.length > 0 : !!item)).length\n ),\n finShare()\n );\n\n return services\n .map((service: ServiceCatalogService) => {\n const paidQuantity =\n includedServicesForTravelerAndFragment.find((s) => s.variant === service.variant)?.quantity ?? 0;\n const selected$ = this.getIsSelectedStream(selection$, service, paidQuantity);\n const displayTotalPrice$ = selection$.pipe(\n map((selection) => {\n const count = service.maxNumberItems > 1 ? Number(selection[service.variant]) : 1;\n\n return {\n amount: PreciseNumber.fromString(service.totalPrice.amount)\n .multiply(PreciseNumber.from(count, 0))\n .toString(),\n currencyCode: service.totalPrice.currencyCode,\n };\n })\n );\n const inputType = this.getInputType(service);\n\n return {\n ...service,\n paidQuantity,\n displayTotalPrice$,\n selected$,\n inputType,\n useConfirmModal: service.isService && showConfirmationModalBeforeSelectionForPassengers.includes(traveler.id),\n showBlockingNotification: service.isService && blockSelectionNotification.includes(traveler.id),\n quota$: combineLatest([selected$, selectionQuota$]).pipe(\n map(([isSelected, selectionQuota]) =>\n this.calculateQuota(selectionQuota, service, isSelected, originalQuota)\n ),\n finShare()\n ),\n paxLevelQuotaReached$: this.getPaxLevelQuotaReached(service.variant, this.flightOrBound.id, traveler.id),\n globalId: `${traveler.id}-${category}-${flightOrBound.id}-${service.variant}`,\n buttonText$: selected$.pipe(\n switchMap((selected) => {\n return this.languageService.translateMultiple(\n [\n `ancillaries.${service.category}.${service.variant}.${selected ? 'selected' : 'select'}`,\n `ancillaries.${service.category}.${selected ? 'selected' : 'select'}`,\n ],\n undefined,\n { logErrors: false }\n );\n }),\n map((translations) => translations[0] || translations[1])\n ),\n };\n })\n .filter((s) => s.isService);\n }\n\n removeSelections(event: Event, travelerId: string, flightOrBoundId: string, useConfirmModal: boolean): void {\n if (useConfirmModal) {\n event.preventDefault();\n this.openConfirmModalWithData.emit({\n flightOrBoundId: flightOrBoundId,\n travelerId: travelerId,\n removeSelection: true,\n });\n } else {\n if (this.form.controls[travelerId].controls['radio']) {\n this.form.controls[travelerId].controls['radio'].setValue('');\n }\n }\n }\n\n private getPaxLevelQuotaReached(variant: string, fragmentId: string, travelerId: string) {\n return combineLatest([this.paxLevelQuota$, this.serviceQuantityMap$]).pipe(\n map(([paxLevelQuota, quantity]) => {\n if (!paxLevelQuota.variants.includes(variant)) {\n return false;\n }\n return quantity[fragmentId]?.[travelerId] >= paxLevelQuota.combinedQuota;\n }),\n startWith(false),\n distinctUntilChanged()\n );\n }\n\n private calculateQuota(\n selectionQuota: number,\n service: ServiceCatalogService,\n isSelected: boolean,\n originalQuota: number\n ) {\n const quota = service.quota === null ? undefined : service.quota;\n const availableQuota = quota + originalQuota;\n const isQuotaToppedByCustomer = selectionQuota > 0 && selectionQuota >= availableQuota;\n const type = isSelected\n ? QuotaType.SELECTED\n : availableQuota === 0\n ? QuotaType.NO\n : isQuotaToppedByCustomer\n ? QuotaType.TOPPED\n : QuotaType.FREE;\n\n return {\n type,\n count: quota !== undefined ? availableQuota - selectionQuota : undefined,\n };\n }\n\n private getInputType(service: ServiceCatalogService): ProductInputType {\n return (\n this.isRadioDisplay(service.category) ? 'radio' : service.maxNumberItems > 1 ? 'number' : 'checkbox'\n ) as ProductInputType;\n }\n\n private getIsSelectedStream(\n selection$: Observable,\n service: ServiceCatalogService,\n paidQuantity: number\n ): Observable {\n return selection$.pipe(\n map((selection): boolean => {\n if (paidQuantity > 0 && (!selection['radio'] || selection['radio'] === service.variant)) {\n return true;\n }\n return this.isRadioDisplay(service.category)\n ? selection['radio'] === service.variant\n : toBoolean(selection[service.variant]);\n }),\n finShare()\n );\n }\n}\n","import { Component, ContentChildren, Input, QueryList, OnInit } from '@angular/core';\n\nimport { TabComponent } from './tab.component';\nimport { TabStateService } from './tab-state.service';\n\n@Component({\n selector: 'fin-tab-group',\n templateUrl: 'tab-group.component.html',\n providers: [TabStateService],\n})\nexport class TabGroupComponent implements OnInit {\n @Input()\n tabGroupId: string;\n\n @ContentChildren(TabComponent)\n tabs: QueryList;\n\n constructor(private service: TabStateService) {}\n\n ngOnInit(): void {\n this.service.init(this.tabGroupId);\n }\n}\n","\n","\n

\n {{ 'price.grandTotal' | finLocalization }}\n \n {{\n originalTotalPrice | finPrice: { useSymbol }\n }}\n \n \n {{ ('award.points' | finLocalization: { pointsAmount: points || 0 | finPoints }) + ' + ' }}\n {{ totalPrice$ | async | finPrice: { useSymbol } }}\n \n {{ totalPrice$ | async | finPrice: { useSymbol } }}\n \n

\n\n","import { Component, Input, OnInit } from '@angular/core';\n\nimport { combineLatest, Observable, of } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { Amount } from '@fcom/dapi';\nimport { FinnairTotalPricesDetails, ServiceFlow } from '@fcom/dapi/api/models';\nimport { safeMap as safeMapObs } from '@fcom/rx';\nimport { toAmount } from '@fcom/common-booking/utils/common-booking.utils';\nimport { hasUnitPrices } from '@fcom/common/utils';\n\nexport enum GrandTotalTheme {\n DEFAULT = 'default',\n RENEWED = 'renewed',\n}\n\n@Component({\n selector: 'fin-grand-total',\n templateUrl: './grand-total.component.html',\n})\nexport class GrandTotalComponent implements OnInit {\n readonly GrandTotalTheme = GrandTotalTheme;\n @Input()\n serviceFlow$: Observable = of(undefined);\n\n @Input()\n prices$: Observable;\n\n /**\n * Theme to be shown\n */\n @Input()\n theme = GrandTotalTheme.DEFAULT;\n\n @Input()\n useSymbol = false;\n\n totalPrice$: Observable;\n totalPoints$: Observable;\n originalTotalPrice$: Observable;\n\n ngOnInit(): void {\n this.totalPrice$ = combineLatest([this.prices$, this.serviceFlow$]).pipe(\n filter(([prices]) => hasUnitPrices(prices)),\n safeMapObs(([data, serviceFlow]) => {\n const total = data.total.total;\n if (total.totalPoints) {\n if (!serviceFlow || serviceFlow === ServiceFlow.AWARD) {\n const totalAmount = total.totalAmountPaid ?? total.totalAmount;\n return toAmount(totalAmount);\n } else if (\n (serviceFlow === ServiceFlow.BOOKING || serviceFlow === ServiceFlow.MMB_ANCILLARY) &&\n total.totalAmountPaid\n ) {\n return toAmount(total.totalAmountPaid);\n }\n }\n return toAmount(total.totalAmount);\n })\n );\n\n this.totalPoints$ = this.prices$.pipe(\n filter((data) => !!data?.total?.total?.totalPoints),\n map((data) => +data.total.total.totalPoints.amount)\n );\n\n this.originalTotalPrice$ = this.prices$.pipe(\n filter((data) => !!data?.flight?.total?.discountReasonCode && !!data?.total?.total?.originalTotalAmount),\n map((data) => data.total.total.originalTotalAmount)\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\n@Pipe({\n name: 'finDelay',\n})\nexport class DelayPipe implements PipeTransform {\n transform(input: any, delayInMilliSeconds = 1): Observable {\n if (input && input instanceof Observable) {\n return input.pipe(delay(delayInMilliSeconds));\n }\n return input;\n }\n}\n","
\n
\n {{ title }}\n
\n
\n {{ (bound$ | async).departure.dateTime | finDateFormat: 'FULL' }}\n
\n\n
\n \n
\n \n
\n \n
\n
\n \n
\n
\n
{{ 'bookingSummary.from.title' | finLocalization }}
\n
{{ b.departure['cityName'] }} ({{ b.departure.locationCode }})
\n
\n
\n
{{ 'bookingSummary.to.title' | finLocalization }}
\n
{{ b.arrival['cityName'] }} ({{ b.arrival.locationCode }})
\n
\n
\n
{{ 'flightDuration' | finLocalization }}
\n
\n {{ 'bookingSearch.duration' | finLocalization: (b?.duration | finTemporaryDurationPipe) }}\n
\n
\n
\n
{{ 'bookingSummary.numberOfStops' | finLocalization }}
\n
\n {{ 'bookingSummary.directFlight' | finLocalization }}\n {{ 'stopOver' | finLocalization: [b?.stops] }}\n {{ 'stopOvers' | finLocalization: [b?.stops] }}\n
\n
\n
\n
{{ 'bookingSummary.ticketType' | finLocalization }}
\n
{{ b?.fareFamily?.name }}
\n
\n
\n \n
\n
{{ 'travelClasses' | finLocalization }}
\n
\n {{ flight.departure.locationCode }}—{{ flight.arrival.locationCode }}\n \n {{ 'travelClass.' + flight.cabinClass?.toLowerCase() | finLocalization }} {{ flight.bookingClass }}\n \n \n {{ 'bookingSummary.noTravelClass' | finLocalization }}\n \n
\n
\n
\n
{{ 'bookingSummary.operatedBy' | finLocalization }}
\n
\n {{ flight.departure.locationCode }}—{{ flight.arrival.locationCode }} {{ flight.operatingAirline?.name }}\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { FinnairItineraryItemFlight } from '@fcom/dapi/api/models';\n\nimport { BookingSummaryBound } from '../../../interfaces';\nimport { isBusOrTrain, isFlight } from '../../../utils/common-booking.utils';\n\n@Component({\n selector: 'fin-booking-summary-flight',\n styleUrls: ['./booking-summary-flight.component.scss'],\n templateUrl: './booking-summary-flight.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BookingSummaryFlightComponent implements OnInit {\n readonly SvgLibraryIcon = SvgLibraryIcon;\n\n @Input()\n bound$: Observable;\n @Input()\n title: string;\n\n flights$: Observable;\n icon$: Observable;\n ngOnInit(): void {\n this.flights$ = this.bound$.pipe(\n filter(Boolean),\n map((bound) =>\n bound.itinerary.filter(isFlight).map((i) => ({\n ...i,\n cabinClass: isBusOrTrain(i) ? null : i.cabinClass,\n }))\n )\n );\n this.icon$ = this.bound$.pipe(\n map((bound) =>\n bound.itinerary?.filter(isFlight).some((itinerary) => isBusOrTrain(itinerary))\n ? SvgLibraryIcon.MINUS\n : SvgLibraryIcon.AIRCRAFT_HORIZONTAL\n )\n );\n }\n}\n","
\n
\n \n
\n
\n

\n {{ title | finLocalization }}\n

\n
\n \n
\n
\n \n {{ editText || ('actions.edit' | finLocalization) }}\n \n
\n
\n
\n","import { Component, EventEmitter, Input, Output, HostBinding } from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\n\nimport { AppConstants } from '@fcom/booking/app-constants';\n\n@Component({\n selector: 'fin-booking-summary-section',\n styleUrls: ['./booking-summary-section.component.scss'],\n templateUrl: './booking-summary-section.component.html',\n})\nexport class BookingSummarySectionComponent {\n public readonly C: typeof AppConstants = AppConstants;\n\n @Input()\n title: string;\n @Input()\n icon: SvgLibraryIcon;\n @Input()\n isChangeButton = true;\n @Input()\n editText: string;\n @Input()\n skipEditAlign = false;\n @Input()\n isContent = true;\n @Input()\n titleClass = 'font-heading-4';\n @Input()\n innerClass = 'pr-large-t';\n @Input()\n innerIconClass = 'nordic-blue-900-text';\n @Input()\n isDisabled = false;\n @Input()\n trackingContext: string;\n\n @HostBinding('class.block') defaultClass = true;\n @HostBinding('class.ps-medium-b')\n get padding() {\n return this.isChangeButton;\n }\n @Output()\n edit: EventEmitter = new EventEmitter();\n\n constructor() {}\n}\n","\n
\n
{{ t.type | finLocalization }}
\n
{{ t.firstName }} {{ t.lastName }}
\n
\n {{ 'passenger.withInfant' | finLocalization: { withInfantFullName: t.withInfantFullName } }}\n
\n
{{ 'passengerReview.email' | finLocalization }} {{ t.email }}
\n
\n {{ 'passengerReview.dateOfBirth' | finLocalization }} {{ t.birthDate | finDateFormat: 'DATE' }}\n
\n
{{ 'passengerReview.phone' | finLocalization }} {{ t.phone }}
\n
\n
\n","import { Component, Input, ChangeDetectionStrategy, HostBinding } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\nimport { AppConstants } from '@fcom/booking/app-constants';\n\nimport { BookingSummaryPassenger } from '../../../interfaces/booking-summary.interface';\n\n@Component({\n selector: 'fin-booking-summary-traveler',\n templateUrl: './booking-summary-traveler.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BookingSummaryTravelerComponent {\n public readonly C: typeof AppConstants = AppConstants;\n\n @HostBinding('class.block')\n @HostBinding('class.travelers')\n @HostBinding('class.font-body-1')\n @HostBinding('class.ms-xsmall-y')\n defaultClass = true;\n\n @Input()\n traveler$: Observable;\n\n constructor() {}\n}\n","
\n

{{ title | finLocalization: [] : { logErrors: false } }}

\n \n
\n {{ paxService.firstName }} {{ paxService.lastName }}\n {{ 'ancillaries.group.title' | finLocalization }}\n
\n
\n {{ 'passenger.withInfant' | finLocalization: { withInfantFullName: paxService.associatedInfantName } }}\n
\n
\n {{\n paxService.key\n | finLocalization\n : {\n wifiCount: paxService.quantity,\n loungeCount: paxService.quantity,\n mealCount: paxService.quantity,\n baggageCount: paxService.quantity,\n seatCount: paxService.quantity,\n coverCount: paxService.quantity,\n sportCount: paxService.quantity,\n petCount: paxService.quantity,\n amount: paxService.quantity,\n }\n }}: {{ paxService.price | finPrice }}\n
\n
\n\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\nimport { BookingSummaryService } from '../../../interfaces';\n\n@Component({\n selector: 'fin-booking-summary-ancillary',\n templateUrl: './booking-summary-ancillary.component.html',\n styleUrls: ['./booking-summary-ancillary.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BookingSummaryAncillaryComponent {\n @HostBinding('class.block')\n @HostBinding('class.ancillaries')\n @HostBinding('class.font-body-1')\n defaultClass = true;\n @Input()\n service$: Observable;\n @Input()\n title: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { UiTranslateModule } from '@fcom/ui-translate';\nimport { IconsModule, UiComponentsModule } from '@fcom/ui-components';\nimport { ComponentsModule } from '@fcom/common/components/components.module';\nimport { PipesModule } from '@fcom/common/pipes/pipes.module';\nimport { GtmModule } from '@fcom/common/gtm/gtm.module';\n\nimport { BookingSummaryComponent } from './booking-summary.component';\nimport { BookingSummaryFlightComponent } from './flight/booking-summary-flight.component';\nimport { BookingSummarySectionComponent } from './section/booking-summary-section.component';\nimport { BookingSummaryTravelerComponent } from './traveler/booking-summary-traveler.component';\nimport { BookingSummaryAncillaryComponent } from './ancillary/booking-summary-ancillary.component';\nimport { CommonBookingComponentsModule } from '../../common-booking.module';\n\n@NgModule({\n imports: [\n CommonBookingComponentsModule,\n CommonModule,\n ComponentsModule,\n PipesModule,\n GtmModule,\n UiTranslateModule,\n IconsModule,\n UiComponentsModule,\n ],\n declarations: [\n BookingSummaryComponent,\n BookingSummaryFlightComponent,\n BookingSummarySectionComponent,\n BookingSummaryTravelerComponent,\n BookingSummaryAncillaryComponent,\n ],\n exports: [BookingSummaryComponent],\n})\nexport class BookingSummaryModule {}\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\n\nimport { NotificationTheme } from '@fcom/ui-components';\n\n@Component({\n selector: 'fin-ancillary-header',\n templateUrl: 'ancillary-header.component.html',\n})\nexport class AncillaryHeaderComponent implements OnInit {\n readonly NotificationTheme = NotificationTheme;\n\n @Input()\n title: string;\n\n @ViewChild('headerTitle', { static: true })\n headerTitle: ElementRef;\n\n ngOnInit(): void {\n setTimeout(() => {\n this.headerTitle.nativeElement.focus();\n }, 300);\n }\n}\n","
\n

{{ title }}

\n \n
\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport {\n ButtonModule,\n DrawerModule,\n FlightsModule,\n IconsModule,\n ModalModule,\n NotificationsModule,\n} from '@fcom/ui-components';\nimport { UiTranslateModule } from '@fcom/ui-translate';\nimport { ComponentsModule } from '@fcom/common/components/components.module';\nimport { GtmModule } from '@fcom/common/gtm/gtm.module';\nimport { PipesModule } from '@fcom/common/pipes/pipes.module';\nimport { BookingCommonModule } from '@fcom/booking/modules/common/booking-common.module';\nimport { DirectiveModule } from '@fcom/common/directives';\nimport { CmsModule } from '@fcom/cms';\n\nimport { AncillaryHeaderComponent } from '../ancillary-header/ancillary-header.component';\nimport { AncillaryFlightBoundSelectorComponent } from '../flight-bound-selector/ancillary-flight-bound-selector.component';\nimport { AncillarySubviewComponent } from './ancillary-subview.component';\nimport { AncillarySidebarComponent } from '../ancillary-sidebar/ancillary-sidebar.component';\nimport { CommonBookingComponentsModule } from '../../../../components';\nimport { BookingSummaryModule } from '../../../../components/booking-summary/booking-summary.module';\nimport { SubViewModule } from '../../../../components/subview/subview.module';\n\n@NgModule({\n imports: [\n CommonModule,\n ComponentsModule,\n CommonBookingComponentsModule,\n PipesModule,\n GtmModule,\n BookingCommonModule,\n BookingSummaryModule,\n UiTranslateModule,\n ButtonModule,\n IconsModule,\n DrawerModule,\n FlightsModule,\n ModalModule,\n NotificationsModule,\n SubViewModule,\n DirectiveModule,\n CmsModule,\n ],\n declarations: [\n AncillaryFlightBoundSelectorComponent,\n AncillaryHeaderComponent,\n AncillarySidebarComponent,\n AncillarySubviewComponent,\n ],\n exports: [\n AncillarySubviewComponent,\n AncillaryHeaderComponent,\n AncillaryFlightBoundSelectorComponent,\n AncillarySidebarComponent,\n ],\n})\nexport class AncillarySubviewModule {}\n","

\n {{ titleTranslationKey | finLocalization }}\n

\n\n\n
\n

\n {{ item }}\n

\n
\n\n\n
\n \n
\n \n
\n {{ 'MMB.includedProducts.noServicesTitle' | finLocalization }}\n
\n \n
\n \n \n\n \n\n \n\n \n \n\n \n
\n\n \n \n
\n \n\n
0\">\n \n \n \n
\n \n
\n \n\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nimport { SvgLibraryIcon } from '@finnairoyj/fcom-ui-styles/enums';\nimport { filter, map, NEVER, Observable, of } from 'rxjs';\n\nimport { LanguageService } from '@fcom/ui-translate';\nimport { finShare } from '@fcom/rx';\nimport { ButtonMode, ButtonSize, ButtonTheme, IconPosition, TabLayoutType, TabTheme } from '@fcom/ui-components';\nimport { isShortHaulFlight, LoaderType } from '@fcom/common';\nimport { equals } from '@fcom/core/utils';\nimport { Category, FinnairBoundItem, FinnairCart, FinnairOrder, FinnairServiceItem } from '@fcom/dapi/api/models';\nimport {\n BoundWithServices,\n RemovedServiceInfo,\n RemovedServiceProgress,\n SelectedServiceData,\n UpsellCategoriesForBound,\n} from '@fcom/dapi/interfaces';\n\nimport { getServicesForBoundWithUpsell } from '../../../../utils/common-booking.utils';\nimport { SmpProduct } from '../product-list/product-list.component';\nimport { CartOrOrder } from '../../../../interfaces';\n\n@Component({\n selector: 'fin-included-products',\n templateUrl: './included-products.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IncludedProductsComponent implements OnInit, OnChanges {\n readonly ButtonMode = ButtonMode;\n readonly ButtonSize = ButtonSize;\n readonly ButtonTheme = ButtonTheme;\n readonly Category = Category;\n readonly IconPosition = IconPosition;\n readonly LoaderType = LoaderType;\n readonly SvgLibraryIcon = SvgLibraryIcon;\n readonly TabLayoutType = TabLayoutType;\n readonly TabTheme = TabTheme;\n\n @Input() booking: FinnairCart | FinnairOrder;\n\n @Input() bound: FinnairBoundItem | undefined;\n\n @Input() showHeading = true;\n\n @Input() showTickets = false;\n\n @Input() showModifyButtons = false;\n\n @Input() showInformationModal = false;\n\n @Input() useCabinClass = false;\n\n @Input() titleTranslationKey;\n\n @Input() showAdditionalTitle = false;\n\n @Input() expandOpen = false;\n\n @Input() headerContentTranslationKey?: string;\n\n @Input() servicesToShow: FinnairServiceItem[];\n\n @Input() showAsPending = false;\n\n @Input() upsellInModal$: Observable = NEVER;\n\n @Input() headingClasses = 'font-heading-4';\n\n @Input() showUpsell = false;\n\n @Input() displaySeatReassignMessage = false;\n\n @Input() includeSeatActionButtons = false;\n\n @Input() isCarrierConnect = false;\n\n @Input() showNonAYSeats = false;\n\n @Input() includeAssignAtAirportStatus = false;\n\n @Input() showClearPendingSeatsButton = false;\n\n @Input() isShoppingCart = false;\n\n @Input() groupServicesByBound = false;\n\n @Input() products$: Observable = of([]);\n\n @Input() removeInProgress$: Observable = of({ removeInProgress: false });\n\n @Output()\n continuePurchase: EventEmitter = new EventEmitter();\n\n @Output()\n removeProduct: EventEmitter = new EventEmitter();\n\n @Output()\n upsellClicked: EventEmitter = new EventEmitter();\n\n @Output()\n viewSeatmap: EventEmitter = new EventEmitter();\n\n @Output()\n clearPendingSeats: EventEmitter = new EventEmitter();\n\n servicesForBounds: BoundWithServices[];\n\n headerContents$: Observable;\n\n isShortHaulFlight: boolean;\n\n constructor(private languageService: LanguageService) {}\n\n ngOnInit(): void {\n this.updateServices();\n\n this.headerContents$ = this.headerContentTranslationKey\n ? this.languageService.translate(this.headerContentTranslationKey).pipe(\n map((content) => (Array.isArray(content) ? content : [content])),\n filter(Boolean),\n finShare()\n )\n : NEVER;\n\n this.isShortHaulFlight = this.isShortHaul(this.booking);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n !equals(changes['showUpsell']?.currentValue, changes['showUpsell']?.previousValue) ||\n !equals(changes['showUpsellPaymentButton']?.currentValue, changes['showUpsellPaymentButton']?.previousValue) ||\n !equals(changes['servicesToShow']?.currentValue, changes['servicesToShow']?.previousValue) ||\n !equals(changes['booking']?.currentValue, changes['booking']?.previousValue)\n ) {\n this.updateServices();\n }\n }\n\n private isShortHaul(booking: FinnairCart | FinnairOrder): boolean {\n const locations = Object.values(booking.locations);\n return isShortHaulFlight(locations[0], locations[1]);\n }\n\n private updateServices(): void {\n this.servicesForBounds = this.getServicesToShowForBounds(\n this.booking,\n this.showUpsell,\n this.servicesToShow,\n this.bound ? [this.bound] : this.booking.bounds,\n this.products$\n );\n }\n\n private getServicesToShowForBounds(\n cartOrOrder: CartOrOrder,\n showUpsell: boolean,\n servicesToShow: FinnairServiceItem[],\n bounds: FinnairBoundItem[],\n products$: Observable = of([])\n ): BoundWithServices[] {\n return bounds.map((bound) => {\n return {\n ...bound,\n services: getServicesForBoundWithUpsell(\n cartOrOrder,\n showUpsell,\n servicesToShow,\n cartOrOrder.services.servicesOrder,\n bound,\n cartOrOrder.serviceCatalog,\n products$\n ),\n } as BoundWithServices;\n });\n }\n\n onSelectProduct(serviceData: SelectedServiceData): void {\n this.upsellClicked.emit(serviceData);\n }\n\n onContinuePurchase(): void {\n this.continuePurchase.emit();\n }\n\n onRemoveProduct(event: RemovedServiceInfo, boundId: string): void {\n this.removeProduct.emit({\n ...event,\n boundId: boundId,\n });\n }\n}\n","export enum AncillaryLoaderStatus {\n OFF = 'off',\n REASSIGNING = 'reassigning',\n}\n","\n \n
\n

{{ message.teaserTitle }}

\n
\n
\n \n
\n
\n\n\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\n\nimport { IconLibrary } from '@finnairoyj/fcom-ui-styles/enums';\nimport { Observable } from 'rxjs';\n\nimport { CmsArticle } from '@fcom/core-api/';\nimport { FragmentService } from '@fcom/common/services';\nimport { ModalButtons } from '@fcom/ui-components';\n\n@Component({\n selector: 'fin-sustainability-trip-message',\n templateUrl: './sustainability-trip-message.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SustainabilityTripMessageComponent implements OnInit {\n @Input() fragmentKey: string;\n\n @Input() iconCategory: IconLibrary = IconLibrary.SVG_LIBRARY;\n\n @Input() linkText: string;\n\n modalOpen = false;\n\n tripMessage$: Observable;\n\n readonly ModalButtons = ModalButtons;\n\n constructor(private fragmentService: FragmentService) {}\n\n ngOnInit(): void {\n this.tripMessage$ = this.fragmentService.getFragment(this.fragmentKey);\n }\n\n openModal(): void {\n this.modalOpen = true;\n }\n\n closeModal(): void {\n this.modalOpen = false;\n }\n}\n"],"x_google_ignoreList":[]}