{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/Array.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/AviasalesInjectService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/Baggage.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/Card.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/Cookies.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/GoogleAnalyticsService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/Http.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/LogglyTracker.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/Object.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/Payment.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/Script.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/ScrollTo.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/String.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/TrackingService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/Support.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/index.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/utils/PixelsService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/directives/index.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/g2s.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/auth/AuthService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/auth/index.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/api/index.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/api/AccountService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/api/BestPriceService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/api/ContentService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/api/CouponService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/api/DestinationService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/api/FlightService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/api/ReservationService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/api/RetailRocket.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/api/SupportService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/api/UtilsService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/filters/index.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/node_modules/moment/locale sync [\\/\\\\](ru(\\.js)","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/payment/PaymentModel.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/payment/index.ts","webpack:///./js/src/views/about/template.html","webpack:///./js/src/views/account/bonuses/template.html","webpack:///./js/src/views/account/template.html","webpack:///./js/src/views/account/coupons/template.html","webpack:///./js/src/views/account/orders/template.html","webpack:///./js/src/views/account/corporate/template.html","webpack:///./js/src/views/account/profile/template.html","webpack:///./js/src/views/account/profile/email/template.html","webpack:///./js/src/views/account/profile/phone/template.html","webpack:///./js/src/views/account/settings/template.html","webpack:///./js/src/views/account/settings/password/template.html","webpack:///./js/src/views/account/settings/removal/template.html","webpack:///./js/src/views/account/welcome/template.html","webpack:///./js/src/views/account/welcome/password/template.html","webpack:///./js/src/views/account/products/buy/template.html","webpack:///./js/src/views/account/products/buy/order/template.html","webpack:///./js/src/views/account/unsubscribe/template.html","webpack:///./js/src/views/error404/template.html","webpack:///./js/src/components/flight/passenger-edit/template.html","webpack:///./js/src/views/flights/booking/passengers/template.html","webpack:///./js/src/views/flights/booking/payment/template.html","webpack:///./js/src/views/flights/booking/seats/train-coach-place-select/coach-schema/template.html","webpack:///./js/src/views/flights/booking/seats/train-coach-place-select/template.html","webpack:///./js/src/views/flights/booking/seats/template.html","webpack:///./js/src/views/flights/booking/services/template.html","webpack:///./js/src/components/payment/sbp-modal/template.html","webpack:///./js/src/views/flights/booking/template.html","webpack:///./js/src/views/flights/template.html","webpack:///./js/src/views/flights/search-results/template.html","webpack:///./js/src/views/home/template.html","webpack:///./js/src/views/order/booking/product/template.html","webpack:///./js/src/views/order/template.html","webpack:///./js/src/views/order/payment/template.html","webpack:///./js/src/views/order/service/template.html","webpack:///./js/src/views/order/view/template.html","webpack:///./js/src/views/partner/template.html","webpack:///./js/src/views/password/template.html","webpack:///./js/src/views/password/new/template.html","webpack:///./js/src/views/registration/template.html","webpack:///./js/src/views/rentalcars/template.html","webpack:///./js/src/views/signin/template.html","webpack:///./js/src/views/support/template.html","webpack:///./js/src/views/support/new/template.html","webpack:///./js/src/views/support/list/template.html","webpack:///./js/src/views/support/allrequests/template.html","webpack:///./js/src/views/terms/template.html","webpack:///./js/src/views/test/template.html","webpack:///./js/src/components/content/modal/template.html","webpack:///./js/src/components/content/text/template.html","webpack:///./js/src/components/custom-dialog/template.html","webpack:///./js/src/components/dialog-catch-up/template.html","webpack:///./js/src/components/dialog-app/template.html","webpack:///./js/src/components/navigation/drawer-menu/template.html","webpack:///./js/src/components/flight/card/template.html","webpack:///./js/src/components/full-screen-dialog/template.html","webpack:///./js/src/components/header-region-selector/template.html","webpack:///./js/src/components/language-switcher/template.html","webpack:///./js/src/components/flight/details/template.html","webpack:///./js/src/components/flight/search-form/template.html","webpack:///./js/src/components/flight/terms/template.html","webpack:///./js/src/components/flight/search-tabs/template.html","webpack:///./js/src/components/forms/mobile-input/template.html","webpack:///./js/src/components/payment/form/template.html","webpack:///./js/src/components/product/list/template.html","webpack:///./js/src/components/flight/seats-selection/template.html","webpack:///./js/src/components/product/not-package/template.html","webpack:///./js/src/components/product/package/template.html","webpack:///./js/src/components/product/online-registration/template.html","webpack:///./js/src/components/product/service-brands/template.html","webpack:///./js/src/components/product/advanced-service-brands/template.html","webpack:///./js/src/components/product/timer/template.html","webpack:///./js/src/components/flight/additional-baggage/template.html","webpack:///./js/src/template.html","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/store/modules/user.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/store/mutation-types.ts","webpack:///./js/src/store/modules/flightSearchParams.ts","webpack:///./js/src/store/index.ts","webpack:///./js/src/views/about/index.ts","webpack:///./js/src/views/account/bonuses/index.ts","webpack:///./js/src/views/account/index.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/store/action-types.ts","webpack:///./js/src/views/account/coupons/index.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/orders/OrderModel.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/orders/OrderService.ts","webpack:///./js/src/views/account/orders/index.ts","webpack:///./js/src/views/account/corporate/index.ts","webpack:///./js/src/views/account/profile/index.ts","webpack:///./js/src/views/account/profile/email/index.ts","webpack:///./js/src/views/account/profile/phone/index.ts","webpack:///./js/src/views/account/settings/index.ts","webpack:///./js/src/views/account/settings/password/index.ts","webpack:///./js/src/views/account/settings/removal/index.ts","webpack:///./js/src/views/account/welcome/index.ts","webpack:///./js/src/views/account/welcome/password/index.ts","webpack:///./js/src/views/account/products/buy/index.ts","webpack:///./js/src/views/account/products/buy/order/index.ts","webpack:///./js/src/views/account/unsubscribe/index.ts","webpack:///./js/src/views/error404/index.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/validators/index.ts","webpack:///./js/src/components/flight/passenger-edit/index.ts","webpack:///./js/src/views/flights/booking/passengers/index.ts","webpack:///./js/src/views/flights/booking/payment/index.ts","webpack:///./js/src/views/flights/booking/seats/train-coach-place-select/coach-schema/index.ts","webpack:///./js/src/views/flights/booking/seats/train-coach-place-select/index.ts","webpack:///./js/src/views/flights/booking/seats/index.ts","webpack:///./js/src/views/flights/booking/services/index.ts","webpack:///./js/src/components/payment/sbp-modal/index.ts","webpack:///./js/src/views/flights/booking/index.ts","webpack:///./js/src/views/flights/index.ts","webpack:///./js/src/views/flights/search-results/index.ts","webpack:///./js/src/store/mutation-types.ts","webpack:///./js/src/views/home/index.ts","webpack:///./js/src/views/order/booking/product/index.ts","webpack:///./js/src/views/order/index.ts","webpack:///./js/src/views/order/payment/index.ts","webpack:///./js/src/views/order/service/index.ts","webpack:///./js/src/views/order/view/index.ts","webpack:///./js/src/views/partner/index.ts","webpack:///./js/src/views/password/index.ts","webpack:///./js/src/views/password/new/index.ts","webpack:///./js/src/views/registration/index.ts","webpack:///./js/src/views/rentalcars/index.ts","webpack:///./js/src/views/signin/index.ts","webpack:///./js/src/views/support/index.ts","webpack:///./js/src/views/support/new/index.ts","webpack:///./js/src/views/support/list/index.ts","webpack:///./js/src/views/support/allrequests/index.ts","webpack:///./js/src/views/terms/index.ts","webpack:///./js/src/views/test/index.ts","webpack:///./js/src/router.ts","webpack:///./js/src/components/content/modal/index.ts","webpack:///./js/src/components/content/text/index.ts","webpack:///./js/src/components/custom-dialog/index.ts","webpack:///./js/src/components/dialog-catch-up/index.ts","webpack:///./js/src/components/dialog-app/index.ts","webpack:///./js/src/components/navigation/drawer-menu/index.ts","webpack:///./js/src/components/flight/card/index.ts","webpack:///./js/src/components/full-screen-dialog/index.ts","webpack:///./js/src/components/header-region-selector/index.ts","webpack:///./js/src/components/language-switcher/index.ts","webpack:///./js/src/components/flight/details/index.ts","webpack:///./js/src/components/flight/search-form/index.ts","webpack:///./js/src/components/flight/terms/index.ts","webpack:///./js/src/components/flight/search-tabs/index.ts","webpack:///./js/src/components/forms/mobile-input/index.ts","webpack:///./js/src/components/payment/form/index.ts","webpack:///./js/src/components/product/list/index.ts","webpack:///./js/src/components/flight/seats-selection/index.ts","webpack:///./js/src/components/product/not-package/index.ts","webpack:///./js/src/components/product/package/index.ts","webpack:///./js/src/components/product/online-registration/index.ts","webpack:///./js/src/components/product/service-brands/index.ts","webpack:///./js/src/components/product/advanced-service-brands/index.ts","webpack:///./js/src/components/product/timer/index.ts","webpack:///./js/src/components/flight/additional-baggage/index.ts","webpack:///./js/src/app.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/index.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/BookingClass.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/filters/AirlinesFilter.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/filters/AirportsFilter.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/filters/BaggageFilter.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/filters/ChangeRefundFilter.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/filters/FlightDurationFilter.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/filters/DepartureArrivalFilter.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/filters/FlightKindFilter.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/filters/PriceFilter.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/filters/StopCountFilter.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/filters/StopDurationFilter.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/FlightFilterService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/FlightNavigationService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/FlightModel.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/TrainModel.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/FlightSearchService.ts","webpack:///C:/TeamCity/buildAgent/work/92fefe9f8bc362e4/src/js/core/flights/ReservationModel.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","find","obj","predicate","TypeError","len","k","kValue","first","array","undefined","firstBy","func","opt","identity","v","ignoreCase","toLowerCase","tb","sourceFunc","sourceOpt","x","this","y","f","compareOpt","direction","v1","v2","makeCompareFunction","a","b","thenBy","last","cancelProductWithPackage","adultPassengersCount","childPassengersCount","infantPassengersCount","passengers","countries","getNumberOfPassengers","fill","externalUsers","console","log","forEach","externalUser","age","passenger","type","fillPassenger","docPeriodConstrains","validationConstraints","documentType","constraints","constrain","nameProperty","birthDate","birthday","format","lastName","firstName","gender","passNumber","documentNumber","passExpDate","documentValidTill","country","iataCode","citizenship","parseInt","uniqueId","ex","error","resetPassengers","setPassengers","getLabel","flightBaggage","isCabin","label","suffix","pieceWeight","pieces","i18next","nbsp","count","width","height","getValue","legOrSegment","baggageCabin","baggage","getBaggageValue","getBaggageCabinValue","hasFreeBaggage","flight","legs","number","cvc","defaultFormat","cards","pattern","cvcLength","luhn","formatCardNumber","groups","_ref","num","replace","numberIsValid","upperLength","card","global","match","join","exec","filter","cardFromNumber","test","luhnCheck","digit","odd","sum","digits","split","reverse","indexOf","gdprGet","cookie","gdprSet","set","path","expires","add","toDate","domain","config","cookieDomain","sameSite","isSecure","secure","getGaClientId","chanks","Length","getMarkerOwner","Cookies","getPartnerCookie","item","substring","getMarkerValue","setMarkerValue","markerValue","withConverter","write","encodeURIComponent","read","decodeURIComponent","themeMarker","toString","removePartnerCookie","partnerCookieStringToObject","cookieString","keyValue","keyAndVlue","partnerCookieObjectToString","cookieObject","getSkyScannerRedirectId","removeSkyScannerRedirectId","remove","getOrderOneTimeCookie","setOrderOneTimeCookie","cookieData","g2sFFDGet","g2sFFD","JSON","parse","err","setIsUserCancelSelectionLanguage","stringify","getIsUserCancelSelectionLanguage","g2sFFDSet","isDev","g2sFFDUpsert","upsertData","email","phone","passengersDiff","pop","passengerIndex","passengerToUpsert","middleName","documentValidTillEnabled","documentValidTillVisible","documentValidTillRequired","restoreReservationModelCookie","reservation","cd","e","contacts","index","saveReservationModelCookie","oldCookieData","g2scpnGet","uidGet","g2scpnSet","couponName","g2scpnDelete","omitPromoPopupGet","omitPromoPopupSet","getMarkerReferrer","getSplitTest","splitVersion","instance","getChoiceType","ct","isNaN","setChoiceType","affiliate","addFlightProduct","passengerCount","segmentFirst","segments","segmentLast","productId","departureDestination","arrivalDestination","validatingAirline","productName","bookingClass","ga","billingPrice","addProduct","product","id","externalId","adapter","price","priceType","addSearchParams","gaParams","searchParams","dimension4","roundtrip","dimension5","from","to","dimension6","class","dimension7","adults","children","infants","metric3","setAction","actionName","actionData","sendPageview","page","title","fields","nextKey","__gaClientID","api","getAffiliateInfo","then","reachGoal","params","sendEvent","category","action","getUrlParameter","url","location","href","results","RegExp","getUrlParameters","queryString","search","pair","redirect","method","requestParameters","document","createElement","input","paramValue","paramName","appendChild","body","setTimeout","submit","hiddenFrameWithPost","html","iframe","style","visibility","fDoc","contentDocument","contentWindow","close","_LTracker","LOGGLY_INPUT_PREFIX","protocol","LOGGLY_COLLECTOR_DOMAIN","LOGGLY_SESSION_KEY","LOGGLY_PROXY_DOMAIN","sendConsoleErrors","tag","useDomainProxy","useUtfEncoding","Math","random","setTag","tracker","setUtfEncoding","setSendConsoleError","onerror","msg","line","col","exception","message","lineno","colno","stack","arguments","setInputUrl","inputUrl","host","logglyCollectorDomain","setSession","sessionId","setCookie","readCookie","uuid","setKey","setDomainProxy","logglyKey","track","xmlHttp","XMLHttpRequest","open","setRequestHeader","send","clone","copy","Date","setTime","getTime","Array","attr","Error","cloneWithSpaces","calcMoneyWallPrice","amount","departureDate","loanContractEndDate","isAfter","round","loadScript","onLoadCallback","onErrorCallback","head","getElementsByTagName","script","src","onload","top","documentElement","scrollTop","element","containerSelector","elementSelector","smooth","container","querySelector","offset","offsetTop","clientHeight","speed","TrackEvent","currencySymbol","isEmail","normalizeCardHolder","wrongSymbolCallback","replaceRegex","regexIsMatch","toUpperCase","normalizeCoupon","normalizeMilesCard","normalizeNumber","disabledCyrillic","normalizePassengerName","allowCyrillic","allowSpaceSymbol","normalizePassengerLastName","normalizeDocumentNumber","normalizePhone","startsWith","sourceString","searchString","position","substr","trim","camelToKebab","map","letter","idx","Support","refundOptions","changeTicketOptions","changeInfoOptions","additionalServiceOptions","baggageOptions","categoryOptions","eventName","eventParams","eventMergeParams","_kmq","mixpanel","updateParamsFromSearch","trackParams","FlightType","FlightDirection","FlightClass","Passengers","PassengersAdult","PassengersChildren","PassengersInfant","updateParamsFromReservation","FlightPrice","selectedFlight","OrderAmount","getTotalPrice","Airline","FlightCount","flights","HasCustomBaggage","customBaggage","bookable","updateParamsFromReservationBeforeSubmit","PaymentAdapter","payment","selectedPaymentTypeId","BonusAmount","bonusAmount","CouponAmount","couponDiscountAmount","ProductsPrice","getTotalProductsPrice","CustomBaggagePrice","customBaggagePrice","CustomPlacesPrice","getTotalPlacesPrice","setPixelForHomepage","target","VK","Retargeting","Event","PixelsService","vkPriceListIdFlights","ProductEvent","setCriteoPixel","viewHome","setPixelForFlightBooking","productDates","departure","return","viewSearch","viewItem","viewBasket","buffer","u","async","sat","priceSeen","currency","paymentOption","environment","el","setPixelForFlightSearch","setPixelForOrderConfirmation","reservationInfo","reservationAmount","toFixed","diff","createdDate","orderOneTimeCookie","orderId","reservationNumber","execPixel","trackTransaction","bookingReference","markerOwner","unix","setPixelForPromotionRegistration","promotionId","pixelEvents","clientDevice","eval","focus","inserted","binding","blur","componentUpdated","modifiers","lazy","Boolean","oldValue","appConfig","G2S","desktopUrl","allowLogError","some","includes","init","locale","utils","level","userAgent","navigator","$http","defaults","baseURL","apiUrl","interceptors","request","use","d1ar","d2ar","FormData","append","marketCode","theme","currencyCode","dictionary","translation","localeDictionary","lng","resources","updateLocale","longDateFormat","LT","LTS","L","LL","LLL","LLLL","addResource","monthsShort","standalone","_locale","postformat","string","$i18","$g2s","$m","$window","$auth","auth","$ga","priceWithCurrency","directive","Directives","AviasalesInject","errorHandler","vm","componentName","$root","_isVue","$options","_componentTag","__file","logError","accountService","currentUser","authenticated","AuthService","isAuthCookie","confirm","token","Promise","resolve","reject","response","signInClientSide","catch","getRefundInfo","reservationPublicId","getRefundInfoWithWriteUs","reservationId","getSupportText","getProcessStartedText","checkVoidAvailability","ordersExists","createVoid","createVoidSupport","description","confirmEmail","deleteStart","deleteConfirm","signOutClientSide","exists","emailOrPhone","forgottenPassword","getBonusStatus","getCurrentUser","resetMarker","getCurrentUserWithBonuses","status","getCurrentUserAccount","bookingSessionId","getCurrentUserWithProfile","ordersList","GetActiveReservationPublicId","registration","password","setPassword","signIn","userAuthenticated","finally","signOut","sendOneTimePassword","signInByOneTimePassword","oneTimePassword","updateEmail","currentPassword","updatePassword","newPassword","updatePhone","updateProfile","user","routeAnonymousOnly","next","routeAuthenticatedOnly","query","fullPath","BaggageChoiceType","CoachTemplates","CustomBaggageFlightDirection","FlightNotificationIcon","FlightBrandChoiceType","FlightKind","SegmentFlags","FlightStopKind","PassengerType","ProductPopupPosition","ProductPopupType","ProductSaleType","ProductStatus","ProductChoiceType","ProductType","ProductDisplayType","NameConstraint","SegmentTransport","post","withCredentials","Locale","ReservationPublicId","getSubscriptions","subscriptions","dateOutward","dateReturn","subscribe","unsubscribe","getHygge","getText","getSupportContacts","check","listAvailable","list","iataCodes","lookup","lookupText","listCities","countryUniqueId","listCitiesByAlphabet","firstLetterOfCity","listRegions","listCountriesByAlphabet","regionUniqueId","firstLetterOfCountry","listAirportsByAlphabet","cityUniqueId","firstLetterOfAirport","agencyTerms","searchArchive","fareDetails","externalLink","bookProducts","updateBookingSession","updateBookingSessionProductPopup","updateBookingSessionNotEnoughMoneyPopup","cancelProduct","cancelProductAfterPopup","checkFlight","createOrRestartReservation","createPassengerCreateData","passengerWithSeatIndex","allowMidName","nameConstraint","allowPeriodOfDocument","passengerCreateData","cardAirlineId","chosenSeatId","values","selectedFlightSeats","trains","infant","trainPlaces","train","selectedPlaces","createReservationRequest","searchId","flightBookingDetails","selectedPaymentType","urlQuery","partnerCookie","partnerCookieAsObject","adapterData","timestamp","toJSON","flightId","paymentTypeId","passengersCreateData","contactEmail","contactPhone","confirmationPageUrlTemplate","gaClientID","products","couponGuid","brandChoiceType","baggageChoiceType","markerReferrer","hasBrandGroups","brandGroups","brandGroup","selectedFlightId","sort","calculatedCleanSelectedProducts","options","selectedOptions","choiceType","discountRuleId","popupSecondProduct","productPopups","popup","discountId","secondProductId","kind","isYandexPay","paymentMethod","creditCard","getCardWithEncryptedPacket","selectedFlightUniqueId","upgradedFromFlightId","CompleteStartedReservation","RejectStartedReservation","finishPreauth3ds","getFlightBookingDetails","getProductBookingDetails","getReservationPublicId","getReservationStatus","getPaymentTypes","isRefreshRequest","getReservationAndBillStatus","billPublicId","isNeedRemoveProducts","getReservationByBookingSession","yaCreatePayment","paymentData","YaPay","createPayment","pay","processBeforeBooking","reservationModel","reservationService","processedBeforeBooking","processBeforeFlightBooking","forwardKits","brandedProductKits","showPopups","pp","productPopupsDiscount","existerProduct","rawProducts","saveOpinion","checkFlightConfirm","pollPaymentQrStatus","ReservationService","needToStopSbpPolling","getPaymentQrStatus","paymentInfo","inPlace","succeed","skipCheckBookingOnFlightBookingDetails","RetailRocketCL","localStorage","flightKey","setFlightKey","concatRequest","addFlightKey","flightDetailsOpened","orderFormOpened","orderFormStepOpened","productSelected","reservationCreated","searchCompleted","headers","getReservationsSupportInformation","getReservationData","checkReservationEmail","getHistory","publicId","submitRefundInfo","affiliateText","bagsQuantity","bagsWeight","addPlus","thousand","precision","parsed","symbol","webpackContext","req","webpackContextResolve","code","keys","paymentType","commission","isDirectPayment","paymentTypeOptions","paymentMethods","selected","holder","expiry","merchant","order","env","PaymentEnv","Sandbox","version","countryCode","CountryCode","Ru","CurrencyCode","Rub","total","PaymentMethodType","Card","gateway","gatewayMerchantId","allowedAuthMethods","AllowedAuthMethod","PanOnly","allowedCardNetworks","AllowedCardNetwork","Visa","Mastercard","Mir","Maestro","VisaElectron","ypMerchantUrl","ypGateway","ypGatewayMerchantId","paymentTypes","CardModel","selectedPaymentTab","pt","PaymentTypeModel","initPaymentTab","preloadExternalScripts","getPaymentMethod","mCardExpiry","cardHolderName","cardNumber","cardExpMonth","cardExpYear","cardCvv","mobiMmUuid","mm","form","appendMobiFormInput","cryptogram","EncodeScript","makeCryptogram","packet","encryptedPacket","selectPayment","compareVersion","minVersion","comparable","minVersionComponent","Number","comComponent","max","curValue","comValue","tabCount","paymentTypeCard","paymentTypesEmoney","paymentTypeCredit","paymentTypePayLater","paymentTypeMoneywall","paymentTypeYandexPay","paymentTypeSbp","calculateAvailableBonuses","orderTotal","userBonuses","currentBalance","bonusMaxValue","bonusMaxPercentLimitPerOrder","bonusMaxLimitPerOrder","onSelectedPaymentTabChanged","setAttribute","paymentTypePartnerCash","ptc","mobiClientScript","state","coupons","getters","actions","context","commit","mutations","payload","flightSearchParams","newSearchParams","startOf","Economic","Store","strict","WithRender","mounted","loadModel","about","AboutComponent","model","bonuses","transfers","AccountBonusesComponent","$store","$nextTick","$route","hasPassword","fetchUserCouponsPromise","getCurrentUserPromise","userCoupons","dispatch","all","onSignOut","$refs","messageDialog","show","localizedMessage","AccountComponent","loadingInProggress","gotErrorAfterLoading","getExpiresLabel","coupon","expiryDate","getCouponUseUrl","gotoCouponUrl","origin","pathname","AccountCouponsComponent","convertToOrders","reservations","orders","currentOrder","refundInfo","clientText","headerText","youPaidText","weWillRefundText","termText","buttonAcceptText","buttonRejectText","refundSum","paidSum","refundSumCurrency","getOrderNumber","getSupportLink","onRefundClick","onClickSupport","onCancelClick","autoVoidPossible","dialog","onAcceptCancelingOrder","hide","messageText","ok","onClose","onOrderSelect","onRefundStatusesClick","AccountOrdersComponent","companyAccount","AccountCorporateComponent","city","submitted","onUserGenderChanged","val","Male","Female","localizedName","unshift","cities","allNextTripPurposes","onCountryChange","onCityChange","onGenderChange","getElementById","onSubmit","$v","$touch","$error","validations","minLength","AccountProfileComponent","required","AccountProfileEmailComponent","filters","onPhoneBlur","$event","$el","removeAttribute","onPhoneFocus","onPhoneInput","AccountProfilePhoneComponent","AccountSettingsComponent","AccountSettingsPasswordComponent","AccountSettingsRemovalComponent","AccountWelcomeComponent","AccountWelcomePasswordComponent","view","getOrderProductsUrl","AccountProductsBuyComponent","selectedProductIdsOnOrderPage","selectedProduct","cancelPossible","productReservationId","productsOnOrderPage","orderGuid","detailProductOnSale","modalProduct","AccountProductsBuyOrderComponent","selectedSubscriptionIds","unsubscriptionModal","formatDate","date","modalUnsubscription","subscriptionIds","AccountUnsubscribeComponent","history","goHome","Error404Component","validationEmail","validateEmailOrPhone","validationPassengersBirthday","orderFormNewDocumentNumberRuValidationEnabled","hasAdultPassenger","hasNoAdultPassenger","minDocumentValidTill","isSameOrAfter","validatePassengerName","parentVm","allowCyrillicName","regex","validatePassengerNameLast","lastNameConstraint","validatePhone","validateDocumentValidTill","isValid","isBefore","validateDocumentNumber","validateCertificateAge","validateCertificateSymbol","validateCertificateArmenia","validateDocumentForeign","validateBirthday","maxDateOfBirth","minDateOfBirth","validateBirthdayMin","isCitizenshipAccept","isCitizenIncludes","countriesCitizenshipConstrain","isRequiredCitizenshipConstrains","isCitizenshipFilled","validateExchangeDesiredDate","onlyOneUniqueCard","sameCards","cardAirlineIdRequiredIfCardNotEmpty","validateTrainSelectedPlaces","passengersWithSeatCount","passengerGender","passengerCitizenship","onPassengerGenderChanged","onPassengerCitizenshipChanged","countryCrossing","checkDocType","partnerAirlines","airline","hasOptions","passengerCardAirlineOptions","gaAlreadySubmitted","found","selectedAirlineName","onPassengerCitizenshipChange","$emit","modalCitizenshipError","onPassengerGenderChange","onPassengerDocumentNumberChanged","onPassengerDocumentValidTillChanged","onPassengerDocumentValidTillFocus","onLastNameBlur","onFirstNameBlur","onMiddleNameBlur","onGenderBlur","onBirthdayBlur","onCitizenshipBlur","goToSearch","getSearchResultsUrl","onCloseCitizenshipError","onDocumentNumberBlur","onDocumentValidTillBlur","onDocumentValidTillEnabledBlur","onPassengerCardBlur","onPassengerCardClick","modalPassengerCard","FlightPassengerEditComponent","signInModel","toolbarPriceClass","showFullFlightBrandDescription","prebookingTimeLimitMinutes","classLabel","productsNotGrouped","stepNumber","selectedFlightIdForProducts","brands","stepOnForm","kitTarget","$parent","$data","modalBrandChoiceShowedOnce","modalBrandChoice","validatePassengerByIndexAndUpsertFFDCookie","passengerIsFullfilled","vPassenger","$each","passengerIsValid","passengerElement","passengerInedx","getBaggageOptions","baggageItems","getPassengerLabelByIndex","getDestinationNameById","destination","destinations","destinationName","getBaggageLabel","getBaggageShortLabel","getSegmentBaggageLabelByCustomBaggageOption","customBaggageOption","foundedSegment","leg","reduce","memo","concat","segment","destinationFromUID","destinationToUID","getSegmentBaggageCabinLabelByCustomBaggageOption","getSegmentCustomBaggageLabelByCustomBaggageOptionIndex","perPassenger","passengersForBaggage","relativeCustomBaggageItemId","founedCustomBaggageItem","customBaggageItem","customBaggageItemId","getAvailableCustomBaggageItems","getSegmentCustomBaggageSummaryLabel","relativeCustomBaggageOption","getSegmentBaggageSummaryLabel","onPassengerChange","onBaggageChange","oldBaggageChoiceType","hasSelectedAnyCustomBaggage","manualAccepted","manualDenied","onBaggageOpen","modalBaggage","onBaggageClose","oldBaggagePrice","onSignIn","modalSignIn","onSignInSubmit","onContactsEmailBlur","onContactsPhoneBlur","maxLength","onCloseBrandChoiceModalClick","onBrandChoiceItemClick","brandSelectNum","selectedFlightBillingPrice","defaultFlight","manualDefault","manualUpgrade","onBrandGroupSelect","brandGroupIndex","brandChangeState","defaultFlightId","brandNum","onBrandShowMoreClick","$forceUpdate","onShowModalBrandChoiceClick","onProductDetails","onProductSelectionChange","onFlightTerms","components","FlightsBookingPassengersComponent","couponModel","couponCode","bonusAmountInputValue","pName","couponProduct","getMoneywallTotalPrice","leftToFirstUse","isMarkerOwner","g2scpn","onCouponSubmit","productsRocket","productsForPaymentStep","stepThreeBrands","brand","productByBrand","getCommissionLabel","onBonusAmountSubmit","availableBonuses","onOkCallback","modalBonuses","onBonuses","onCoupon","modalCoupon","couponProductAdd","couponId","guid","discountAmount","dimension9","couponProductId","couponDiscountAmountOld","res","couponDataActivate","couponDataExpiring","productModel","favorite","productCouponId","onCardNumberInputOnce","onGoBack","paymentFormError","paymentForm","validate","dimension1","selectedPayment","selectedPaymentMethod","onPrice","modalPrice","onTerms","modalTerms","onTermsAccept","onTermsContent","content","textContent","FlightsBookingPaymentComponent","selectedElementsQueue","tooltipShowTimer","coachPlaceElements","querySelectorAll","coach","selectedPlacesQueue","place","accordingPlaceElement","placeElement","placeNumber","placeType","freePlace","places","addEventListener","tooltipContent","clearTimeout","fare","classList","queuedPlaceElement","queuedPlace","selectedPlacesCount","CoachSchemaComponent","focusedTrainNumber","selectedTrainNumber","focusedCoachNumber","focusedPlaceNumber","tooltipIsShown","svgSchema","svgSchemaLoading","selectedTrain","selectedCoach","schemaId","schema","trainCoaches","getPlaceSelectionToBeDoneForTrainLabel","toBeDoneCount","onPlaceSelectionChange","onTrainFocus","onTrainBlur","onCoachFocus","onCoachBlur","onPlaceFocus","onPlaceBlur","onPlaceInput","onCoachSchemaShowTooltip","onCoachSchemaHideTooltip","TrainCoachPlaceSelectComponent","FlightsBookingSeatsComponent","productsForServicesStep","stepTwoBrands","onProductPackageSelectionChange","onServiceBrandChange","prevProduct","FlightsBookingServicesComponent","banks","opened","qrUrl","errorText","showBankCount","attemptsToSelect","bank","bankName","getRedirectUrl","param","URLSearchParams","onSelectBank","timeout","color","SbpModalComponent","zopa","formStep","bookingCompleted","formStepTransition","authToken","selectedProductId","disabledServiceButtons","alreadyInPackageModal","acceptCallback","refuseCallback","modalUpgradeBaggageContent","isCloseIconVisible","text","buttonText1","buttonText2","buttonText3","buttonAction1","buttonAction2","buttonAction3","buttonColor1","buttonColor2","buttonColor3","buttonIcon1","buttonIcon2","buttonIcon3","buttonStyle1","buttonStyle2","buttonStyle3","emTextColor","kitId","productIdToConfirm","modalConfirmProductContent","lastHistoryStateView","canGoBackOrForwardToPassengers","canGoBackOrForwardToPayment","canGoBackOrForwardToSeats","canGoBackOrForwardToServices","anyProductConfirmationWasShown","baggageQueryParamAlreadyHandled","mountedTimeStampMs","NO_BAGGAGE_GUID","showMeAccum","brandContent","brandsAccum","oldIndex","searchFrom2","searchTo2","searchDate2","getRoundtripParams","searchFrom","searchTo","searchDate","searchPassengers","searchClass","getOnewayParams","discount","couponCancelChecker","watchForSelectedFlightIdForProducts","selectedProductIds","productIdsNeedToSelect","needToSelect","currentRoute","meta","followWasMadeFromSearchPage","hasSelectedOutwardCustomBaggage","hasSelectedBothCustomBaggage","hasSelectedReturnCustomBaggage","replaceState","pushState","setLastHistoryStateView","onPopState","beforeDestroy","removeEventListener","event","tryToShowFlightDetails","hideLeavingDialog","hideFlightDetails","moveOnStep","onRouteChanged","onReservationSelectedFlightIdChanged","resetAllSelectedBaggage","resetAllSelectedSeats","handleBaggageQueryParam","onformStepChange","getBrandDescription","descriptionUI","innerHTML","momentInit","BookingInit","gaClientId","$getClientDevice","skipCheckBooking","metric9","duration","as","InitStartDuration","bookingPossible","checkFlightConfirmRequest","elapsedMsClient","dimension2","dimension3","allFlightAirlinesCode","dimension10","multiFRType","BookingStart","mailTrackingId","MailTrackingId","bookingChecked","checkFlightRequest","checkResult","update","showOutOfStockDialog","deleteOutOfStockFlight","hasBrands","surchargeInfo","surchargeAmount","cancel","onCancelOrHideCallback","notifications","BookingOutOfStock","ErrorReason","go","errorMessage","selectCustomBaggageByQueryParam","onBooking","createOrRestartReservationHandleResult","canRecursion","selectedProducts","BookingSuccess","errorCode","hasFlightService","airlineAmount","agencyAmount","agencyAmountCurrency","interpolation","escapeValue","airlineAmountCurrency","fullScreenDialog","firstBtnText","firstBtnFn","BookingSuccessRedirect","BookingSuccessPaid","exceptionMessage","BookingError","sbpModal","getPaymentQrStatusRequest","paymentId","pollResult","dialogMessage","finishRequest","modalError6200","secondBtnText","secondBtnFn","onBookingStateBack","BookingStepBack","Step","parseButtonLabel","getMaterialIconCodeByName","replaceKeys","currentPrice","futurePrice","productPrice","String","serveBrandConfirmation","confirmationData","services","sortOrder","modalBrandsPopup","closePopup","productPopupId","popupId","popupType","popupTypeNumber","isPopupOnForm","afterOrder","onConfirmProduct","serveProductConfirmation","reservationPriceText","wrap","toLocaleString","modalConfirmProduct","serveProductDiscountConfirmation","productDiscount","modalConfirmProductDiscount","serveBaggageUpgradeConfirmation","baggageData","modalBaggageUpgrade","onBookingStateSubmit","scrollTo","getConfirmationDataForUndonePopupByPosition","afterStep1","BookingStepSeats","BookingStepServices","afterStep2","BookingStepPayment","$model","paymentMethodOptions","BookingPayment","hasSeatMaps","flatSelectedSeats","optionsByDirection","customBaggageFlightDirection","getSelectedCustomBaggageIds","checkout","on","PaymentEventType","Process","complete","CompleteReason","Success","Abort","btnOkHandler","btnCloseHandler","getPackageRelatedProductsByExternalId","productToConfirm","confirmed","btnId","isLastPopup","nextTrick","waitTrick","discountConfirmIsActive","popupForPopupAccepted","confirmationAccepted","popupOnOrderFormAccepted","relatedProducts","relatedProduct","productToUnselect","criterion","modalProductAlreadyInPackage","tryToShowLeavingDialog","isGaAllow","leavingDialog","onLeavingToSearch","onLeavingToForm","onLeavingDismiss","utm_source","utm_medium","flightDetails","onFlightDismiss","onFlightBack","onFlightSubmit","onFlightResults","flightTerms","onPassengersChange","dialogParams","anyFlightToBook","onModalProductAdd","additionalProcessing","dialogCatchUp","btnOkLabel","persistent","btnOkColorClass","getProductPackageCheckPromiseCreator","packageExternalId","productPackageToCheck","productIsOneOfRelated","rp","finalCheck","package","displayType","grouped","service","needRollbackValue","insurance","productPackageExternlId","packageRelatedProducts","onPaymentWithService","onPaymentDeleteService","onModalProductRemove","onModalHide","brandAccum","FlyId","onUpgradeBaggageRefuseClick","cheapestBaggageUpgradeMethod","getCheapestBaggageUpgradeMethod","confirmationDefault","confirmationDenied","onUpgradeBaggageBuyClick","confirmationUpgrade","upgradeBaggage","step","transition","onPassengersStepClick","onSeatsStepClick","onServicesStepClick","onPaymentStepClick","tryToRestoreReservation","$router","getCloseIconVisible","onServiceBrandChangeInPopup","onServiceBrandConfirmInPopup","onSbpModalClose","has","deep","beforeRouteEnter","beforeRouteLeave","FlightsBookingComponent","historyItems","getHistoryItems","getClassName","classValue","onHistoryItemClick","onHistoryClean","deleteAllHistoryItems","onViewSearchHistoryClick","onSupportClick","FlightsComponent","filteringInProgress","filterAirportsValue","filterAirlines","filterStops","filterStopDuration","range","min","qHack","filterFlightDuration","filterDepartureArrival","filterPrice","flightSearch","flightData","promoDetails","imgUrl","resultsPageSize","resultsVisible","flightsToFilter","flightsToView","flightsVisibleCount","flightsVisibleParentCount","selectedParentFlightUniqueId","fakingLoading","cheapestFlight","fasterFlight","bestFlight","subscriptionModal","onlyFreeBaggage","onlyDirectFlight","showSubscriptionButton","visible","parentId","filteredSearchResults","airlines","items","showMoreResults","mo","getBoundingClientRect","bottom","innerHeight","selectedParentFlight","showFlightGroup","showFlightDetails","hideFlightGroup","setFirstFlights","getCheapestFlight","getFasterFlight","getBestFlight","onFilterStopsChanged","stopCount","clear","none","one","two","onFilterStopDurationInpit","onFilterStopDurationChange","stopDuration","rangeMin","rangeMax","onFilterFlightDurationInput","onFilterFlightDurationChange","flightDuration","onFilterDepartureArrivalInput","onFilterDepartureArrivalChange","departureArrival","onFilterAirportsInput","legIndex","destinationKind","airports","checked","onFilterAirlinesInput","onFilterAirlinesChanged","onFilterPriceInput","onFilterPriceChange","flightDurationLabel","durationFormat","departureArrivalTimeLabel","unixTime","utc","departureArrivalDayLabel","getMoreLabel","getSegmentLabel","segmentIndex","getFilterAirportsOptions","filterItems","FlightSearchStart","showPromoModal","addHistoryItem","searchPhrase","metric1","searchFilters","arrival","touched","metric2","FlightSearchResults","FlightSearchEmpty","FlightSearchError","onStopOptionsChange","externalPartner","routeData","sid","fid","pn","partnerName","promo_coupon_name","getBookingUrl","modalFlightGroup","showing","onFlightGroupDismiss","onFlightGroupBack","onFiltersApply","modalFilters","onFiltersReset","onModalFilters","totalPassengers","onSelectFlight","isWebview","onSelectFlightGroupFlight","cdnUrl","modalPromo","mins","legsHasDifferentAirlines","getLegsSegmentsAirlinesDistinct","sumFast","flightsForSort","flightsSortFast","flightFilters","localFlightFilters","resByTime","uid","priority","resByCost","swap","json","ret","rank","setRank","elems","prevValue","rankIndex","elem","time","cost","parseFloat","merge","updateFlightData","lastHistoryItem","openSubscriptionModal","getFlightDataGaLabel","modalSubscription","FlightsSearchResultsComponent","dialogApp","getFullYear","markets","market","getCurrencySymbol","onChangeMarket","subdomain","onFaqClick","HomeComponent","paymentModel","cancelProductRequestsInProgress","redirectUrl","redirectDomain","redirect_domain","productIds","parseIds","notSet","parentReservationPublicId","pollPaymentStatusRequest","pollPaymentStatus","handleSuccess","handleFail","redirectToOrderPage","ids","paymentInfoInPlace","OrderBookingProductComponent","orderNumber","orderContact","onOrderContactInput","OrderComponent","queryErrorText","queryErrorCode","bill","amountToPay","ErrorText","ErrorCode","getTotalLabel","onResultSuccess","onResultError","makePaymentRedirect","onFlightDetails","billInfo","billStatus","billType","paymentTypeByError","metric7","asDays","payment_status","handleFinishResponse","onTotalAmount","modalTotalAmount","OrderPaymentComponent","contentBody","toSupport","OrderServiceComponent","loading","attemptCount","isMaskedPersonalData","isWaitingSurcharge","pixelApplied","selectedPassengerId","selectedProductIdInOrder","cancelProductId","cancelProductIndex","loadingAfterPopup","modalProductInfo","passengerId","acc","orderPageAccepted","destroyed","applyPixels","isPayed","isTicketed","isStatusPending","reservedTillExpired","uiStatusType","refreshStatus","reservationStatus","showSurchargeModal","$set","saleType","success","firstButtonText","deleteProducts","arr","indexProd","$delete","applyDiscount","modalCancelProduct","onHide","onLoading","onPassengerInsurance","onPassengerTicket","getTicketUrl","onPassengerAllTickets","getAllTicketsUrl","onPassengerReceipt","getReceiptUrl","onPassengerDetails","modalPassenger","onSupportLink","modalProductInOrder","isTextStrikeNeeded","canceled","deleted","refunded","crutchName","newName","OrderViewComponent","errorHtml","processExternalLinkRequest","toLocaleLowerCase","pixelUrl","pixel","component","PartnerComponent","PasswordComponent","PasswordNewComponent","RegistrationComponent","RentalCarsComponent","otp","onSubmitWithPassword","onSubmitWithSms","onSubmitWithOtp","SigninComponent","onPhoneClick","SupportComponent","validateSubCategory","subCategory","exchangeDesiredDate","buttonWriteManuallyText","baggageAdditionalOptions","isVisibleAutovoid","autovoidTimeout","autovoidLabel","adviseText","accountText","acceptedFileTypes","selectedFiles","g","getAcceptedFileTypes","getDescriptionPlaceholder","formatFileSize","checkErrors","submitTicket","checkVisibleAutovoid","isAutoVoidAvailable","onChangeOrderNumber","onFilesAdd","files","click","onFilesClear","onFilesChange","onCategoryChange","orderExists","isSameEmail","SupportNewComponent","selectedReservationSupportInfo","reservationsSupportInfo","openStatus","info","ticketExist","modalStatus","SupportListComponent","tickets","expandedTicketIndexes","commentsHeadLength","isExpanded","ticketIndex","toggleComments","getComments","comments","SupportAllrequestsComponent","TermsComponent","TestComponent","router","routes","gaTitle","beforeEnter","props","route","contentId","afterEach","modalTextContent","makeRequest","onRetry","ContentModalComponent","ContentTextComponent","title_","message_","ok_","cancel_","clearData","onOk","Function","onCancel","onShow","CustomDialogComponent","contentClass","size","centerActions","btnCancelLabel","loadingStatus","btnCancelHandler","DialogCatchUpComponent","onApple","onGoogle","DialogAppComponent","getPathForMetrik","DrawerMenuComponent","getLegDurationTime","asHours","asMinutes","getSegmentDurationTime","connection","selectFlight","filterFlight","flightUniqueAirlinesLength","FlightCardComponent","FullScreenDialogComponent","selectedMarket","isUserCancelSelection","marketsTranslates","button","language","MarketCode","RegionSelectorComponent","currencyValue","languageValue","openLanguageModal","languageModal","setCurrency","newValue","changeCurrentMarket","isMenuAdditional","onApply","setLanguage","onOpenDropdow","SwitchLanguageComponent","hasBaggage","hasBaggageCabin","getStopLabel","stop","stopIndex","stopsCount","modalFlight","onFlightKind","flightKind","textContentFlightKind","onDismiss","onStopClick","nextSegmentStop","ByPassenger","default","FlightDetailsComponent","toSameAsFrom","departureMinDate","now","passengersTotal","infantsWithAdults","maxDate","destinationFrom","destinationTo","destinationLookupFrom","destinationLookupTo","isInputStarted","isDataWasSelected","searchType","modalDestinationMode","modalDateMode","onChangeDestinationLookupFrom","parentName","onChangeDestinationLookupTo","onChangeDestinationFrom","onChangeDestinationTo","listForSearch","days","startWeek","isoWeekday","week","monthStart","monthEnd","endOf","month","isYesterday","isSameOrBefore","isToday","isDeparture","isSame","isReturn","isCurrent","isActive","weekdaysShort","dateToUppercase","startedSearchInput","getDestinationViewModel","apiDestination","passengersFromUrl","onDestinationSwap","tmp","returnBeforeDate","flightNavigationService","onBeforeNavigation","onModalDestinationStart","modeUpper","onModalDestinationSelected","sublabel","stamp","onDestinationBlur","autocompliteRef","inputRef","modalDestination","destinationsConvert","onModalDateOpen","modalDate","dataWasSelected","onModalDateOpened","onModalDateSelect","getAttribute","selectedDate","onModalDateOneWay","onModalPassengersChange","onModalPassengersSubmit","modalPassengers","showDestinations","ref","setValue","inputDestinationTo","limit","searchDestinations","inputValue","callback","FlightSearchFormComponent","publicReservationId","modalFlightTerms","loadFlightTerms","isSuccess","onFlightTermsRetry","FlightTermsComponent","onModeChange","switchSortingMode","SearchTabsComponent","valueShadow","parseValue","focused","showPass","lastNotify","onValueChanged","floatLabel","labelIsAbove","placeholder","datePattern","delimiter","localeData","cleave","destroy","showToast","classes","onTogglePass","onInput","typeMode","onFocus","onBlur","getISOFormatDate","onClick","MobileInputComponent","requiredIfCard","cardCode","cvcIsValid","parceladoState","flagSmsPackage","productsOfYandex","onPaymentTabChange","yandexPaySms","bookingSms","onParceladoSelect","yandexSmsProduct","selectPaymentTab","tab","showMoreDetails","getMonthlyPaymentLabel","onCardNumberInput","openSbpFaq","PaymentFormComponent","ProductListComponent","currentPassengerId","currentFlightCode","selectedSeats","selectedSeatsPriceAmount","detectPassengersWithInfant","getTotalSeatsPrice","currentPassenger","pass","infantQuantity","adultQuantity","seatWithInfant","hasFlightSelectedSeats","flightCode","getSeatColor","getSeatIcon","seat","available","availableChild","withInfant","checkIsSeatAvaliableForPassenger","scrollToSelectedPassenger","passengersWrapper","left","behavior","scrollToSelectedSeat","row","seatsWrapper","parentElement","onChangePassenger","onAddSeat","modalSeatsSelection","openSeatMap","closeSeatMapsModal","onChangeSeat","SeatsSelectionComponent","internalProductIds","inPackage","ProductNotPackageComponent","ProductPackageComponent","isProductSelected","OnlineRegistrationComponent","accumIds","sortByOrder","notStandartChecker","nameGetter","priceGetter","getCurrentCode","selectChecker","productKit","onProductChoose","kit","onProductChooseStandart","resultPackage","productsAccum","productItem","flag","forwardFlag","ProductServiceBrandComponent","selectedProductIdValue","brandKit","triggerChangeOnClick","getName","getPrice","selectOrDeselect","onServiceBrandConfirm","AdvancedProductServiceBrandComponent","timer","seconds","padStart","watchForTime","stopTimer","startTimer","timerInterval","ProductTimerComponent","currentFlightDirection","dialogVisible","customBaggageOptions","currentPassengerIdByFlightDirection","flightDirection","onTimesClick","onAddServiceClick","openPopup","modalAdditionalBaggage","getPassengerLabel","getCheapestBaggageOptionInFlightDirection","weight","prices","weights","baggageOption","hasPassengersSelectedBaggageOptionsIyFlightDirection","ji","getPassengersWithBaggage","passengersWithBaggage","getCurrentPassengerByFlightDirection","getBaggageOptionDirectionLabelById","optionId","option","getBaggageOptionById","getBaggageIndex","selectedOptionId","findIndex","selectBaggage","baggageIndex","isLegBaggageLabelNeeded","legHasNotBaggage","legHasAnyBaggage","legBaggageIsUnknown","hasSelectedCustomOutwardBaggage","hasSelectedCustomReturnBaggage","AdditionalBaggageComponent","QAutocomplete","QBtn","QCard","QCarousel","QCarouselSlide","QCheckbox","QChip","QDialog","QInput","QInputFrame","QItem","QItemMain","QItemSide","QItemTile","QLayout","QLayoutDrawer","QLayoutFooter","QLayoutHeader","QList","QModal","QModalLayout","QPage","QPageContainer","QPopover","QRadio","QRange","QSelect","QSpinner","QTab","QTabPane","QTabs","QToggle","QToolbar","QToolbarTitle","QTooltip","QCollapsible","plugins","Notify","loadingBar","skipHijack","browser","$q","platform","is","colorDepth","screen","ipAddress","javaEnabled","screenHeight","screenWidth","timezone","getTimezoneOffset","windowHeight","windowWidth","innerWidth","clientWidth","mobile","root","store","drawerLeftState","Gender","BookingClass","Business","className","alliances","newItems","newAlliances","allianceKeys","AirlinesFilterItem","alliance","AirlinesFilterAlliance","getCheckedItemIds","getCheckedAlliances","checkedItems","checkedAlliances","AirportsFilterItem","sortByLocalizedNameCallback","getLegsWithCheckedItemIds","legWithCheckedItemIds","departureFilterItem","arrivalFilterItem","checkPassed","legsWithCheckedItemIds","legsWithCheckedItems","with","changable","refundable","exchangeRules","isAllowable","refundRules","FlightDurationFilterItem","durationMinutes","DepartureArrivalFilterItem","arrivalDate","FlightKindFilterItem","minVal","maxVal","minStop","maxStop","stopBeginTime","urlFilters","changeRefund","allowGroupping","filterFlights","childCount","sortFlights","groupFlights","potentialParentFlightFilter","potentialParentFlight","childrenFlightFilters","flightFilter","potentialChildFlight","childFlightFilter","getBookingUrlNotParsed","getParamsFromRequest","sections","babies","EconomicPremium","EconomicTourist","First","parseDate","parseBookingClass","nAdults","nChildren","nInfants","from2","to2","date2","stringToParse","isLeapYear","year","today","day","anotherAirport","anotherTerminal","destinationUID","arrivalDateLocal","departureDateLocal","aircraft","aircrafts","aircraftUID","displayName","airlineUID","arrivalDestinationUID","arrivalTerminal","departureDestinationUID","departureTerminal","segmentFlags","isNextDayArrival","Standard","operatingAirline","operatingAirlineUID","stops","segmentStop","transport","groupingId","baggageBySegments","arrivalDateUtc","departureDateUtc","curSegment","nextSegment","ConnectionModel","maintenanceStopCount","legTransportTypes","legTransportIconNames","transportIconName","basePrice","billingPricePerMonth","farePrice","fee","taxes","seatMaps","seatMap","bus","hasBusSegment","hasMaintenanceStop","area","flightFlags","charter","expanded","externalOffers","tfid","validatingCarrierUID","calculateStopDuration","additionalOfferKeys","allDestinations","Map","flightsTransportTypes","flightTransportIconNames","minStopLength","maxStopLength","getDestinationByUniqueId","getAvailableCustomBaggageItemsByFlightDirection","getAvailableCustomBaggageItemsByDestinationUIDs","isAirline","coachPlace","loyaltyCards","isTwoStorey","isCanChooseBedding","hasDynamicPricing","isPetsAllowed","isPetInCoachAllowed","electronicTicket","isBranded","beddingTariff","loyaltyCard","fareInfo","CoachPlaceModel","placesInfo","serviceClass","coaches","provider","isSuburban","CoachModel","searchHistoryKey","searchHistoryMaxItems","loadHistoryItems","saveHistoryItems","searchRequest","isRangeSearch","searchStarted","searchResult","processResults","banners","flightModel","airlinesCode","sourceProductPopup","backgroundColor","brandedKitId","markerText","targetProductId","userInteractionDone","crossedOutPrice","timerText","timerDuration","sourceSeatMap","columns","rows","rowsCount","seatBrands","segmentFlightCode","sourceProduct","selectedByDefault","acceptOrDenyRequired","PassengerValidationConstraints","constrainByDoc","docLastNameConstrains","documentLastNameVisible","documentLastNameRequired","reservationDesc","maxPopupAmount","maxPopupAmountOnOneStep","currentPopupAmount","needToSelectToGoToNextStep","termsAccepted","productExternalIdsForStep","additionalDocs","TKP_AAM","link","buildPassengers","adult","defaultCitizenshipId","buildPassengerConstraints","child","SeatMapModel","ProductPopupModel","flightIds","fg","brandGroupGuid","bg","selectedIds","resultId","localAdditionalDocs","flatDocsList","flat","Set","hasSegmentAvaliableSeatMaps","baggageOptionIndex","baggageItem","getBrandGroupsBillingPrice","getBrandGroupsBasePrice","nameUI","getBrandGroupsFee","resultArray","bookingForm","yandex","checkCustomBaggageSelection","selectedCustomBaggageIds","both","outward","getCustomBaggageOptionsByFlightDirection","passengersCount","getPassengersCount","internalProducts","cleanSelectedProducts","internalProduct","hasPaymentTypeById","getProductsForStep","hasSelectedCustomBaggageBySegment","hasSelectedCustomBaggageBySegmentsBunch","segmentsBunch","departureDestinationUniqueId","arrivalDestinationUniqueId","customBaggageItemIds","customBaggageItems","popupAmountBySteps","productPopupsWithUniqGroups","productPopup","groupedProductPopups","sortedProductPopups","truncatedProductPopups","pos","getOffset","popupForPosition","notDone","getProductConfirmationDataForBrand","getProductConfirmationDataForPopup","gift","getProductDiscountConfirmationDataForPopup","getBaggageConfirmationDataForPopup","secondProduct","wasShown","getCheapestCustomBaggageItemsWithSameParams","availableCustomBaggageItems","baggageOptionA","baggageOptionB","baggageOptionsWithSameParams","availableBaggageItem","baggageOptionWithSameParams","firstFlightWithBaggage","priceUpgradeWithBrand","baggageItemsWithSameParams","baggageParams","getConfirmBaggage","hasNoBaggage","cheapestUpgradeMethod","confirmBaggageData","getFlightBillingPrice","getFlightBasePrice","getFlightFee","getDiscountAmount","useCalculatedCleanSelectedProducts","getProductPrice","seatMapIndex","seats","getChepestSeatInFlight","getMoneywallPrice","getProductByExternalId","outOfStockFlightId","deleteFlightIndex","passengerType","reservationConstraints","allowCyrillicDocumentNumber","allowCyrillicPassengerName","middleNameRequired","mileCardVisible","lastFlightDate","requiredCitizenshipCountries","documentPassportForeign","documents","nameDocument","documentPassportRu","documentBirthCertificate","documentOtherDocument","isArray","citizenshipConstraints","countryId","maxAdultDateOfBirth","minAdultDateOfBirth","maxChildDateOfBirth","minChildDateOfBirth","maxInfantDateOfBirth","minInfantDateOfBirth","selectedOption","matchedBaggageOption","floor"],"mappings":"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2DAElB,QAEP,WACI,IAAIA,SAAS,mCAAoC,kBAK7E,EAhYA,GCrFA,qE,kBCAA,kxD,8HCAA,8gH,8HCAA,w5J,8HCAA,usE,8HCAA,46L,8HCAA,2uE,8HCAA,soK,8HCAA,qxF,8HCAA,6pE,8HCAA,k1D,8HCAA,onE,8HCAA,6uD,8HCAA,8hD,8HCAA,wqE,8HCAA,00F,8HCAA,y8H,8HCAA,o+F,8HCAA,goC,8HCAA,oyM,48FCAA,8zF,mgeCAA,ohf,64BCAA,mL,8HCAA,gU,u3HCAA,ikB,8HCAA,mnC,8HCAA,yhD,8HCAA,27C,gztBCAA,kd,4nECAA,8wO,ulgBCAA,6gB,m/FCAA,mgM,8HCAA,ulE,8HCAA,onK,8HCAA,uoD,8HCAA,ixQ,kqnBCAA,o4C,8HCAA,snE,8HCAA,mwE,8HCAA,8gH,8HCAA,+pC,8HCAA,mzG,8HCAA,ouG,8HCAA,gqY,8HCAA,s0E,8HCAA,2oE,8HCAA,wxB,8HCAA,q6D,8HCAA,omD,8HCAA,mjB,4RCAA,ujB,qoBCAA,0rC,8HCAA,qzD,8HCAA,iiB,0tFCAA,ywD,mwJCAA,q+B,8HCAA,8tC,8HCAA,goE,8HCAA,y5G,OAAA,uF,u3RCAA,slY,8HCAA,unE,8HCAA,m6E,8HCAA,6+B,gICAA,0ygB,6oDCAA,mL,g1BCAA,+pS,2nCCAA,wT,ykUCAA,81J,69KCAA,mtB,6cCAA,myE,8HCAA,4H,0qTCAA,uR,8HCAA,6gU,8HCAA,mV,wPCkDe,GACXyV,MAxCqB,CACrBC,aAAS94B,GAwCT+4B,QArCY,GAsCZC,UApCS,MACT,4BAAqBC,GACjB,OAAO,IAAIrpB,EAAA,GAAoBwZ,gBAAgBtZ,MAC3C,SAAChT,GACG,OAAIA,GAAUA,EAAOb,OAAS,GAC1Bg9B,EAAQC,OCtBI,mBDsBqBp8B,GAE1B8mB,QAAQC,QAAQ/mB,KAEvBm8B,EAAQC,OC1BI,mBD0BqB,IAE1BtV,QAAQC,QAAQ,QAG/B,SAAC9f,GAOG,OANIA,EAAMggB,SACN9hB,QAAQC,IAAI,aAAc6B,EAAMggB,SAASyB,OAAQzhB,EAAMggB,SAAStoB,MAEhEwG,QAAQC,IAAI,YAAa6B,EAAMy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","file":"app.prod.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/js/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([447,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export function find(obj, predicate) {\r\n if (obj == null) {\r\n throw new TypeError('obj is null or not defined');\r\n }\r\n\r\n const o = Object(obj);\r\n\r\n const len = o.length >>> 0;\r\n\r\n if (typeof predicate !== 'function') {\r\n throw new TypeError('predicate must be a function');\r\n }\r\n\r\n let k = 0;\r\n\r\n while (k < len) {\r\n const kValue = o[k];\r\n if (predicate.call(predicate, kValue, k, o)) {\r\n return kValue;\r\n }\r\n k++;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function first(array) {\r\n return (array != null && array.length)\r\n ? array[0]\r\n : undefined;\r\n}\r\n\r\n// Based on https://github.com/Teun/thenBy.js\r\nexport function firstBy(func, opt?) {\r\n function identity(v) { return v; }\r\n\r\n function ignoreCase(v) { return typeof (v) === 'string' ? v.toLowerCase() : v; }\r\n\r\n function makeCompareFunction(f, compareOpt) {\r\n compareOpt = typeof (compareOpt) === 'number' ? { direction: compareOpt } : compareOpt || {};\r\n if (typeof (f) != 'function') {\r\n const prop = f;\r\n // make unary function\r\n f = function (v1) { return v1[prop] ? v1[prop] : ''; };\r\n }\r\n if (f.length === 1) {\r\n // f is a unary function mapping a single item to its sort score\r\n const uf = f;\r\n const preprocess = compareOpt.ignoreCase ? ignoreCase : identity;\r\n f = function (v1, v2) { return preprocess(uf(v1)) < preprocess(uf(v2)) ? -1 : preprocess(uf(v1)) > preprocess(uf(v2)) ? 1 : 0; };\r\n }\r\n if (compareOpt.direction === -1) return function (v1, v2) { return -f(v1, v2); };\r\n return f;\r\n }\r\n\r\n function tb(sourceFunc, sourceOpt) {\r\n const x = typeof (this) == 'function' ? this : false;\r\n const y = makeCompareFunction(sourceFunc, sourceOpt);\r\n const f = x ? function (a, b) {\r\n return x(a, b) || y(a, b);\r\n }\r\n : y;\r\n f.thenBy = tb;\r\n return f;\r\n }\r\n\r\n return tb(func, opt);\r\n}\r\n\r\nexport function includes(array, item): boolean {\r\n return (array != null && array.length && item != null)\r\n ? array.indexOf(item) > -1\r\n : false;\r\n}\r\n\r\nexport function last(array) {\r\n const length = array == null ? 0 : array.length;\r\n return length ? array[length - 1] : undefined;\r\n}\r\n\r\n// Only non Symbol results of iteratee supported\r\nexport function max(array, iteratee) {\r\n let result;\r\n if (array == null) {\r\n return result;\r\n }\r\n for (const value of array) {\r\n let computed;\r\n const current = iteratee(value);\r\n\r\n if (current != null && (computed === undefined\r\n ? (current === current)\r\n : (current > computed)\r\n )) {\r\n computed = current;\r\n result = value;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n// Only non Symbol results of iteratee supported\r\nexport function min(array, iteratee) {\r\n let result;\r\n if (array == null) {\r\n return result;\r\n }\r\n for (const value of array) {\r\n let computed;\r\n const current = iteratee(value);\r\n\r\n if (current != null && (computed === undefined\r\n ? (current === current)\r\n : (current < computed)\r\n )) {\r\n computed = current;\r\n result = value;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nexport function uniqueArray(array: string[] | number[] = []) {\r\n const returnArray = [...array];\r\n return returnArray.filter((val, ind, arr) => arr.indexOf(val) === ind);\r\n}\r\n\r\nexport const cancelProductWithPackage = {\r\n 'MegoPackageOptimum': ['Go2SeeServiceFreeSupport'],\r\n 'MegoPackagePremium': ['Go2SeeRefund', 'Go2SeeNotification', 'Go2SeeServiceFreeSupport', 'MegoSmsTicket', 'MegoPackageSuperSms', 'MegoPackageAllInclusive'],\r\n 'MegoPackageAllInclusive': ['Go2SeeServiceFlightFlexBooking', 'Go2SeeRefund', 'Go2SeeNotification', 'MegoPackagePremium']\r\n};","import moment from 'moment';\r\nimport * as flights from '../flights';\r\nimport * as api from '../api';\r\nimport * as utils from '../utils';\r\n\r\nexport class AviasalesInjectService {\r\n private adultPassengersCount = 0;\r\n private childPassengersCount = 0;\r\n private infantPassengersCount = 0;\r\n\r\n private passengers: any[] = [];\r\n\r\n private countries: api.Destination[] = [];\r\n\r\n // Called by Aviasales application to detect if passengers form is available.\r\n public getNumberOfPassengers() {\r\n return [this.adultPassengersCount, this.childPassengersCount, this.infantPassengersCount];\r\n }\r\n\r\n // Called by Aviasales to send passengers data to our form. Reassigned in FlightBookingControl.\r\n // externalUsers = [{\r\n // \"birthDate\":\"28.06.1986\",\r\n // \"lastName\":\"IVANOV\",\r\n // \"passExpDate\":\"18.02.2014\", // passport expiry date\r\n // \"age\":\"adult\", // \"child\", \"infant\"\r\n // \"firstName\":\"IVAN\",\r\n // \"gender\":\"male\", // \"female\"\r\n // \"countryName\":\"Россия\",\r\n // \"passNumber\":\"92837456\",\r\n // \"country\":\"RU\" // ISO Alpha-2 country code\r\n //}, {...}]\r\n public fill(externalUsers) {\r\n console.log('AviasalesInject: processing passengers...');\r\n\r\n if (externalUsers && externalUsers.length > 0) {\r\n const sortedExternalUsers: any[] = [];\r\n\r\n // Sort according to our passenger order\r\n externalUsers.forEach((externalUser) => {\r\n if (externalUser.age === 'adult') {\r\n sortedExternalUsers.push(externalUser);\r\n }\r\n });\r\n externalUsers.forEach((externalUser) => {\r\n if (externalUser.age === 'child') {\r\n sortedExternalUsers.push(externalUser);\r\n }\r\n });\r\n externalUsers.forEach((externalUser) => {\r\n if (externalUser.age === 'infant') {\r\n sortedExternalUsers.push(externalUser);\r\n }\r\n });\r\n\r\n for (let i = 0; i < externalUsers.length; i++) {\r\n const externalUser = externalUsers[i];\r\n const passenger = this.passengers[i];\r\n\r\n if (passenger\r\n && externalUser.age === passenger.type) {\r\n this.fillPassenger(externalUser, passenger);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private fillPassenger(externalUser: any, passenger: flights.PassengerModel) {\r\n const docPeriodConstrains = passenger.validationConstraints[passenger.documentType].constraints\r\n .find((constrain) => constrain.nameProperty === 'ValidityPeriodOfDocument');\r\n\r\n try {\r\n if (externalUser.birthDate) passenger.birthday = moment(externalUser.birthDate, 'DD.MM.YYYY').format('YYYY-MM-DD');\r\n if (externalUser.lastName) passenger.lastName = externalUser.lastName;\r\n if (externalUser.firstName) passenger.firstName = externalUser.firstName;\r\n if (externalUser.gender) passenger.gender = externalUser.gender;\r\n if (externalUser.passNumber) passenger.documentNumber = externalUser.passNumber;\r\n if (externalUser.passExpDate && docPeriodConstrains) passenger.documentValidTill = moment(externalUser.passExpDate, 'DD.MM.YYYY').format('YYYY-MM-DD');\r\n if (externalUser.country && this.countries) {\r\n const country = utils.find(this.countries,\r\n (c: api.Destination) => {\r\n return c.iataCode === externalUser.country;\r\n });\r\n if (country) {\r\n passenger.citizenship = parseInt(country.uniqueId);\r\n }\r\n }\r\n } catch (ex) {\r\n console.error(ex);\r\n }\r\n }\r\n\r\n public resetPassengers() {\r\n this.passengers = [];\r\n this.adultPassengersCount = 0;\r\n this.childPassengersCount = 0;\r\n this.infantPassengersCount = 0;\r\n }\r\n\r\n // Set passenger count to notify externalo Aviasales script that users can be filled.\r\n public setPassengers(passengers: flights.PassengerModel[], countries: api.Destination[]) {\r\n this.passengers = passengers;\r\n\r\n this.countries = countries;\r\n\r\n this.adultPassengersCount = 0;\r\n this.childPassengersCount = 0;\r\n this.infantPassengersCount = 0;\r\n\r\n this.passengers.forEach((p: flights.PassengerModel) => {\r\n if (p.type === 'adult') {\r\n this.adultPassengersCount++;\r\n }\r\n else if (p.type === 'child') {\r\n this.childPassengersCount++;\r\n }\r\n else if (p.type === 'infant') {\r\n this.infantPassengersCount++;\r\n }\r\n });\r\n }\r\n}\r\n","import * as i18next from 'i18next';\r\nimport { G2S } from '../g2s';\r\nimport * as api from '../api';\r\nimport * as flights from '../flights';\r\n\r\nexport class Baggage {\r\n static getLabel(flightBaggage: api.FlightBaggage, isCabin: boolean, short = false): string {\r\n let label = '';\r\n const suffix = isCabin ? '_cabin' : '';\r\n\r\n if (flightBaggage) {\r\n if (flightBaggage.pieceWeight == 0 && flightBaggage.pieces == 0) {\r\n label = short\r\n ? i18next.t('label_baggage' + suffix + '_without_short')\r\n : i18next.t('label_baggage' + suffix + '_without');\r\n } else {\r\n if (flightBaggage.pieceWeight > 0) {\r\n label = flightBaggage.pieceWeight + G2S.nbsp + i18next.t('label_kg');\r\n\r\n if (flightBaggage.pieces > 1) {\r\n label = flightBaggage.pieces + G2S.nbsp + 'x' + G2S.nbsp + label;\r\n }\r\n } else {\r\n if (flightBaggage.pieces > 0) {\r\n label = i18next.t('numerous_baggage_piece', { count: flightBaggage.pieces });\r\n }\r\n }\r\n\r\n if (label && !short) {\r\n label = i18next.t('label_baggage' + suffix + '_value', { i: label });\r\n }\r\n\r\n if (flightBaggage.length && flightBaggage.width && flightBaggage.height && !short) {\r\n label = `${label}${G2S.nbsp}(${flightBaggage.length}x${flightBaggage.width}x${flightBaggage.height}${G2S.nbsp}${i18next.t('label_cm')})`;\r\n }\r\n }\r\n }\r\n\r\n if (!label) {\r\n label = i18next.t('label_baggage' + suffix + '_unknown');\r\n }\r\n\r\n return label;\r\n }\r\n\r\n static getValue(legOrSegment: flights.LegModel | flights.SegmentModel): string {\r\n let baggageCabin = '';\r\n let baggage = '';\r\n\r\n if (legOrSegment.baggage && (legOrSegment.baggage.pieceWeight === 0 && legOrSegment.baggage.pieces === 0)) {\r\n return i18next.t('label_baggage_without_short');\r\n }\r\n\r\n if (legOrSegment.baggageCabin) {\r\n if (legOrSegment.baggageCabin.pieceWeight > 0) {\r\n baggageCabin = legOrSegment.baggageCabin.pieceWeight + G2S.nbsp + i18next.t('label_kg');\r\n\r\n if (legOrSegment.baggageCabin.pieces > 1) {\r\n baggageCabin = legOrSegment.baggageCabin.pieces + G2S.nbsp + 'x' + G2S.nbsp + baggageCabin;\r\n }\r\n } else {\r\n if (legOrSegment.baggageCabin.pieces > 0) {\r\n baggageCabin = i18next.t('numerous_baggage_piece', { count: legOrSegment.baggageCabin.pieces });\r\n }\r\n }\r\n }\r\n\r\n if (legOrSegment.baggage) {\r\n if (legOrSegment.baggage.pieceWeight > 0) {\r\n baggage = legOrSegment.baggage.pieceWeight + G2S.nbsp + i18next.t('label_kg');\r\n\r\n if (legOrSegment.baggage.pieces > 1) {\r\n baggage = legOrSegment.baggage.pieces + G2S.nbsp + 'x' + G2S.nbsp + baggage;\r\n }\r\n } else {\r\n if (legOrSegment.baggage.pieces > 0) {\r\n baggage = i18next.t('numerous_baggage_piece', { count: legOrSegment.baggage.pieces });\r\n }\r\n }\r\n }\r\n\r\n if (baggageCabin || baggage) {\r\n if (baggage) {\r\n if (baggageCabin) {\r\n baggageCabin += G2S.nbsp + '+' + G2S.nbsp;\r\n }\r\n\r\n baggageCabin += baggage;\r\n }\r\n\r\n return baggageCabin;\r\n }\r\n\r\n return G2S.nbsp;\r\n }\r\n\r\n static getBaggageValue(legOrSegment: flights.LegModel | flights.SegmentModel): string {\r\n let baggage = '';\r\n\r\n if (legOrSegment.baggage && (legOrSegment.baggage.pieceWeight === 0 && legOrSegment.baggage.pieces === 0)) {\r\n return i18next.t('label_baggage_without_short');\r\n }\r\n\r\n if (legOrSegment.baggage) {\r\n if (legOrSegment.baggage.pieceWeight > 0) {\r\n baggage = legOrSegment.baggage.pieceWeight + G2S.nbsp + i18next.t('label_kg');\r\n\r\n if (legOrSegment.baggage.pieces > 1) {\r\n baggage = legOrSegment.baggage.pieces + G2S.nbsp + 'x' + G2S.nbsp + baggage;\r\n }\r\n } else {\r\n if (legOrSegment.baggage.pieces > 0) {\r\n baggage = i18next.t('numerous_baggage_piece', { count: legOrSegment.baggage.pieces });\r\n }\r\n }\r\n }\r\n\r\n return baggage;\r\n }\r\n\r\n static getBaggageCabinValue(legOrSegment: flights.LegModel | flights.SegmentModel): string {\r\n let baggageCabin = '';\r\n\r\n if (legOrSegment.baggageCabin && (legOrSegment.baggageCabin.pieceWeight === 0 && legOrSegment.baggageCabin.pieces === 0)) {\r\n return i18next.t('label_baggage_cabin_without_short');\r\n }\r\n\r\n if (legOrSegment.baggageCabin) {\r\n if (legOrSegment.baggageCabin.pieceWeight > 0) {\r\n baggageCabin = legOrSegment.baggageCabin.pieceWeight + G2S.nbsp + i18next.t('label_kg');\r\n\r\n if (legOrSegment.baggageCabin.pieces > 1) {\r\n baggageCabin = legOrSegment.baggageCabin.pieces + G2S.nbsp + 'x' + G2S.nbsp + baggageCabin;\r\n }\r\n } else {\r\n if (legOrSegment.baggageCabin.pieces > 0) {\r\n baggageCabin = i18next.t('numerous_baggage_piece', { count: legOrSegment.baggageCabin.pieces });\r\n }\r\n }\r\n }\r\n\r\n return baggageCabin;\r\n }\r\n\r\n static hasFreeBaggage(flight: flights.FlightModel): boolean {\r\n if (flight.legs[0].baggage\r\n && (flight.legs[0].baggage.pieceWeight > 0\r\n || flight.legs[0].baggage.pieces > 0\r\n )) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","export class Card {\r\n constructor(number: string, cvc: string) {\r\n this.number = number;\r\n this.cvc = cvc;\r\n if (this.number) {\r\n this.card = this.cardFromNumber(this.number);\r\n }\r\n }\r\n\r\n number: string;\r\n\r\n cvc: string;\r\n\r\n private card: any;\r\n\r\n private defaultFormat = /(\\d{1,4})/g;\r\n\r\n private cards = [\r\n {\r\n type: 'amex',\r\n pattern: /^3[47]/,\r\n format: /(\\d{1,4})(\\d{1,6})?(\\d{1,5})?/,\r\n length: [15],\r\n cvcLength: [4],\r\n luhn: true\r\n }, {\r\n type: 'dankort',\r\n pattern: /^5019/,\r\n format: this.defaultFormat,\r\n length: [16],\r\n cvcLength: [3],\r\n luhn: true\r\n }, {\r\n type: 'dinersclub',\r\n pattern: /^(36|38|30[0-5])/,\r\n format: /(\\d{1,4})(\\d{1,6})?(\\d{1,4})?/,\r\n length: [14],\r\n cvcLength: [3],\r\n luhn: true\r\n }, {\r\n type: 'discover',\r\n pattern: /^(6011|65|64[4-9]|622)/,\r\n format: this.defaultFormat,\r\n length: [16],\r\n cvcLength: [3],\r\n luhn: true\r\n }, {\r\n type: 'jcb',\r\n pattern: /^35/,\r\n format: this.defaultFormat,\r\n length: [16],\r\n cvcLength: [3],\r\n luhn: true\r\n }, {\r\n type: 'laser',\r\n pattern: /^(6706|6771|6709)/,\r\n format: this.defaultFormat,\r\n length: [16, 17, 18, 19],\r\n cvcLength: [3],\r\n luhn: true\r\n }, {\r\n type: 'maestro',\r\n pattern: /^(5018|502|503|506|56|58|639|6220|67)/,\r\n format: this.defaultFormat,\r\n length: [12, 13, 14, 15, 16, 17, 18, 19],\r\n cvcLength: [3],\r\n luhn: true\r\n }, {\r\n type: 'mastercard',\r\n pattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\\d{2}|27[0-1]\\d|2720)/,\r\n format: this.defaultFormat,\r\n length: [16],\r\n cvcLength: [3],\r\n luhn: true\r\n }, {\r\n type: 'unionpay',\r\n pattern: /^62/,\r\n format: this.defaultFormat,\r\n length: [16, 17, 18, 19],\r\n cvcLength: [3],\r\n luhn: false\r\n }, {\r\n type: 'visaelectron',\r\n pattern: /^4(026|17500|405|508|844|91[37])/,\r\n format: this.defaultFormat,\r\n length: [16],\r\n cvcLength: [3],\r\n luhn: true\r\n }, {\r\n type: 'elo',\r\n pattern: /^(4011|438935|45(1416|76|7393)|50(4175|6699|67|90[4-7])|63(6297|6368))/,\r\n format: this.defaultFormat,\r\n length: [16],\r\n cvcLength: [3],\r\n luhn: true\r\n }, {\r\n type: 'visa',\r\n pattern: /^4/,\r\n format: this.defaultFormat,\r\n length: [13, 16, 19],\r\n cvcLength: [3],\r\n luhn: true\r\n }, {\r\n type: 'mir',\r\n pattern: /^22/,\r\n format: this.defaultFormat,\r\n length: [16],\r\n cvcLength: [3],\r\n luhn: true\r\n }, {\r\n type: 'unknown',\r\n pattern: /\\d*/,\r\n format: this.defaultFormat,\r\n length: [12, 13, 14, 15, 16, 17, 18, 19],\r\n cvcLength: [3, 4],\r\n luhn: true\r\n }\r\n ];\r\n\r\n get cardType(): string | null {\r\n if (this.card) {\r\n return this.card.type;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n get numberIsValid(): boolean {\r\n const num = (this.number + '').replace(/\\s+|-/g, '');\r\n if (!/^\\d+$/.test(num)) {\r\n return false;\r\n }\r\n if (!this.card) {\r\n return false;\r\n }\r\n return (this.card.length.indexOf(num.length) >= 0) && (this.card.luhn === false || this.luhnCheck(num));\r\n }\r\n\r\n get cvcIsValid(): boolean {\r\n const cvc = this.cvc;\r\n if (!/^\\d+$/.test(cvc)) {\r\n return false;\r\n }\r\n if (this.card) {\r\n return this.card.cvcLength.indexOf(this.cvc.length) >= 0;\r\n } else {\r\n return cvc.length >= 3 && cvc.length <= 4;\r\n }\r\n }\r\n\r\n public formatCardNumber = function (): string | undefined {\r\n let groups;\r\n let _ref;\r\n let num = this.number.replace(/\\D/g, '');\r\n\r\n if (!this.numberIsValid) {\r\n return num;\r\n }\r\n\r\n const upperLength = this.card.length[this.card.length.length - 1];\r\n\r\n num = num.slice(0, upperLength);\r\n if (this.card.format.global) {\r\n return (_ref = num.match(this.card.format)) != null ? _ref.join(' ') : void 0;\r\n } else {\r\n groups = this.card.format.exec(num);\r\n if (groups == null) {\r\n return;\r\n }\r\n groups.shift();\r\n groups = groups.filter(function (n) {\r\n return n;\r\n });\r\n return groups.join(' ');\r\n }\r\n };\r\n\r\n private cardFromNumber = function (num) {\r\n let card, j, len;\r\n num = (num + '').replace(/\\D/g, '');\r\n for (j = 0, len = this.cards.length; j < len; j++) {\r\n card = this.cards[j];\r\n if (card.pattern.test(num)) {\r\n return card;\r\n }\r\n }\r\n };\r\n\r\n private luhnCheck = function (num) {\r\n let digit;\r\n let j;\r\n let len;\r\n let odd;\r\n let sum;\r\n\r\n odd = true;\r\n sum = 0;\r\n\r\n const digits = (num + '').split('').reverse();\r\n\r\n for (j = 0, len = digits.length; j < len; j++) {\r\n digit = digits[j];\r\n digit = parseInt(digit, 10);\r\n if ((odd = !odd)) {\r\n digit *= 2;\r\n }\r\n if (digit > 9) {\r\n digit -= 9;\r\n }\r\n sum += digit;\r\n }\r\n return sum % 10 === 0;\r\n };\r\n}\r\n","import Cookie from 'js-cookie';\r\nimport moment from 'moment';\r\nimport { G2S } from '../g2s';\r\nimport * as flights from '../flights';\r\nimport * as api from '../api';\r\n\r\n// eslint-disable-next-line @typescript-eslint/class-name-casing\r\ninterface g2sFFDCookiePassenger {\r\n firstName: string | null;\r\n middleName: string | null;\r\n lastName: string | null;\r\n birthday: string | null;\r\n gender: string | null;\r\n citizenship: number | null;\r\n documentNumber: string | null;\r\n documentValidTill: string | null;\r\n documentValidTillEnabled: boolean | null;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/class-name-casing\r\ninterface g2sFFDCookie {\r\n email: string | null;\r\n phone: string | null;\r\n passengers: (g2sFFDCookiePassenger | null)[];\r\n}\r\n\r\nexport class Cookies {\r\n static gdprGet(): boolean {\r\n const cookie = Cookie.get('g2sGDPR');\r\n\r\n if (cookie && cookie == '1') {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n static gdprSet() {\r\n Cookie.set(\r\n 'g2sGDPR',\r\n '1',\r\n {\r\n path: '/',\r\n expires: moment().add(2, 'years').toDate(),\r\n domain: G2S.config.cookieDomain,\r\n sameSite: G2S.isSecure ? 'none' : undefined, \r\n secure: G2S.isSecure\r\n });\r\n }\r\n\r\n static getGaClientId(): string {\r\n const cookie = Cookie.get('_ga');\r\n\r\n if (cookie) {\r\n const chanks = cookie.split('.');\r\n\r\n if (chanks.Length > 3) {\r\n return chanks[2] + '.' + chanks[3];\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n static getMarkerOwner(): string {\r\n const c = Cookies.getPartnerCookie();\r\n let result = ''; // Empty string is default value = direct traffic\r\n\r\n if (c) {\r\n c.split('&').forEach(function(item) {\r\n if (item.indexOf('mo=') === 0) {\r\n result = item.substring(3);\r\n }\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n static getMarkerValue(): string {\r\n const c = Cookies.getPartnerCookie();\r\n let result = '';\r\n\r\n if (c) {\r\n c.split('&').forEach(function(item) {\r\n if (item.indexOf('mv=') === 0) {\r\n result = item.substring(3);\r\n }\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n static setMarkerValue(markerValue: string) {\r\n const c = Cookies.getPartnerCookie();\r\n\r\n if (c && markerValue) {\r\n let result = '';\r\n\r\n c.split('&').forEach(function(item) {\r\n if (result) {\r\n result += '&';\r\n }\r\n\r\n if (item.indexOf('mv=') === 0) {\r\n result += 'mv=' + markerValue;\r\n } else {\r\n result += item;\r\n }\r\n });\r\n\r\n // Custom converter to pass russian letters\r\n // Default converter ignores cookie with russian letters\r\n Cookie.withConverter({\r\n write: function (value, name) {\r\n return encodeURIComponent(value)\r\n }\r\n }).set(\r\n 'g2sp',\r\n result,\r\n {\r\n domain: G2S.config.cookieDomain,\r\n expires: moment().add(30, 'days').toDate(),\r\n sameSite: G2S.isSecure ? 'none' : undefined,\r\n secure: G2S.isSecure\r\n });\r\n }\r\n }\r\n\r\n static getPartnerCookie(): string {\r\n // Custom converter to pass russian letters\r\n // Default converter ignores cookie with russian letters\r\n let c: string = Cookie.withConverter({\r\n read: function (value, name) {\r\n return decodeURIComponent(value);\r\n }\r\n }).get('g2sp');\r\n\r\n // Use site/theme marker if cookie empty\r\n if (!c && G2S.config.themeMarker && G2S.config.themeMarker > 0) {\r\n c = 'mo=' + G2S.config.themeMarker;\r\n }\r\n\r\n return c ? c.toString() : '';\r\n }\r\n\r\n static removePartnerCookie() {\r\n Cookie.set(\r\n 'g2sp',\r\n '',\r\n {\r\n path: '/',\r\n expires: moment().add(30, 'days').toDate(),\r\n domain: G2S.config.cookieDomain,\r\n sameSite: G2S.isSecure ? 'none' : undefined, \r\n secure: G2S.isSecure\r\n });\r\n }\r\n\r\n static partnerCookieStringToObject(cookieString: string) {\r\n const result = {};\r\n\r\n if (cookieString && cookieString.length) {\r\n cookieString.split('&').forEach((keyValue) => {\r\n const keyAndVlue = keyValue.split('=');\r\n\r\n result[keyAndVlue[0]] = keyAndVlue[1];\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n static partnerCookieObjectToString(cookieObject: object) {\r\n const result: string[] = [];\r\n\r\n for (const key in cookieObject) {\r\n result.push(`${key}=${cookieObject[key]}`);\r\n }\r\n\r\n return result.join('&');\r\n }\r\n\r\n static getSkyScannerRedirectId(): string {\r\n return Cookie.get('skyscanner_redirectid');\r\n }\r\n\r\n static removeSkyScannerRedirectId(): string {\r\n return Cookie.remove('skyscanner_redirectid');\r\n }\r\n\r\n static getOrderOneTimeCookie(): string {\r\n return Cookie.get('g2sOOT');\r\n }\r\n\r\n static setOrderOneTimeCookie(cookieData: string) {\r\n Cookie.set(\r\n 'g2sOOT',\r\n cookieData,\r\n {\r\n path: '/',\r\n expires: moment().add(30, 'days').toDate(),\r\n domain: G2S.config.cookieDomain,\r\n sameSite: G2S.isSecure ? 'none' : undefined, \r\n secure: G2S.isSecure\r\n });\r\n }\r\n\r\n static g2sFFDGet() {\r\n const g2sFFD = Cookie.get('g2sFFD');\r\n\r\n if (g2sFFD) {\r\n try {\r\n return JSON.parse(g2sFFD) as g2sFFDCookie;\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n // static setUserLanguage(cookieData: string){\r\n // Cookie.set(\r\n // 'userLanguage',\r\n // JSON.stringify(cookieData),\r\n // {\r\n // path: '/',\r\n // domain: G2S.config.cookieDomain,\r\n // });\r\n // }\r\n\r\n // static getUserLanguage() {\r\n // return JSON.parse(Cookie.get('userLanguage'));\r\n // }\r\n\r\n static setIsUserCancelSelectionLanguage(cookieData: string){\r\n Cookie.set(\r\n 'UserCancelSelectionLanguage',\r\n JSON.stringify(cookieData),\r\n {\r\n path: '/',\r\n domain: G2S.config.cookieDomain\r\n });\r\n }\r\n\r\n static getIsUserCancelSelectionLanguage() {\r\n return JSON.parse(Cookie.get('UserCancelSelectionLanguage'));\r\n }\r\n\r\n static g2sFFDSet(cookieData: g2sFFDCookie) {\r\n Cookie.set(\r\n 'g2sFFD',\r\n JSON.stringify(cookieData),\r\n {\r\n path: '/',\r\n expires: moment().add(G2S.isDev ? 600 : 30, 'minutes').toDate(),\r\n domain: G2S.config.cookieDomain,\r\n sameSite: G2S.isSecure ? 'none' : undefined,\r\n secure: G2S.isSecure\r\n });\r\n }\r\n\r\n static g2sFFDUpsert(upsertData: {\r\n email?: string | null;\r\n phone?: string | null;\r\n passengers?: (flights.PassengerModel | null)[];\r\n }) {\r\n let g2sFFD = this.g2sFFDGet();\r\n\r\n if (!g2sFFD) {\r\n g2sFFD = {\r\n email: null,\r\n phone: null,\r\n passengers: []\r\n };\r\n }\r\n\r\n if (upsertData.email) {\r\n g2sFFD.email = upsertData.email;\r\n }\r\n if (upsertData.phone) {\r\n g2sFFD.phone = upsertData.phone;\r\n }\r\n if (upsertData.passengers && upsertData.passengers.length) {\r\n if (!g2sFFD.passengers) {\r\n g2sFFD.passengers = [];\r\n }\r\n\r\n const passengersDiff = upsertData.passengers.length - g2sFFD.passengers.length;\r\n\r\n if (passengersDiff > 0) {\r\n for (let i = 0; i < passengersDiff; i++) {\r\n g2sFFD.passengers.push(null);\r\n }\r\n } else if (passengersDiff < 0) {\r\n for (let i = 0; i > passengersDiff; i--) {\r\n g2sFFD.passengers.pop();\r\n }\r\n }\r\n upsertData.passengers.forEach((passenger, passengerIndex) => {\r\n if (passenger) {\r\n const passengerToUpsert: g2sFFDCookiePassenger = {\r\n firstName: null,\r\n middleName: null,\r\n lastName: null,\r\n birthday: null,\r\n gender: null,\r\n citizenship: null,\r\n documentNumber: null,\r\n documentValidTill: null,\r\n documentValidTillEnabled: null\r\n };\r\n\r\n passengerToUpsert.firstName = passenger.firstName;\r\n if (!passenger.documentValidTillVisible) {\r\n passengerToUpsert.middleName = passenger.middleName;\r\n }\r\n passengerToUpsert.lastName = passenger.lastName;\r\n passengerToUpsert.birthday = passenger.birthday;\r\n passengerToUpsert.gender = passenger.gender;\r\n passengerToUpsert.citizenship = passenger.citizenship;\r\n passengerToUpsert.documentNumber = passenger.documentNumber;\r\n passengerToUpsert.documentValidTill = passenger.documentValidTill\r\n ? moment(passenger.documentValidTill).format('YYYY-MM-DD')\r\n : null;\r\n if (!passenger.documentValidTillRequired) {\r\n passengerToUpsert.documentValidTillEnabled = passenger.documentValidTillEnabled;\r\n }\r\n\r\n g2sFFD!.passengers![passengerIndex] = passengerToUpsert;\r\n }\r\n });\r\n }\r\n this.g2sFFDSet(g2sFFD);\r\n }\r\n\r\n static restoreReservationModelCookie(reservation: flights.ReservationModel) {\r\n if (!reservation) {\r\n return;\r\n }\r\n\r\n const cd = Cookie.get('g2sFFD');\r\n\r\n if (cd) {\r\n let cookieData: any = null;\r\n\r\n try {\r\n cookieData = JSON.parse(cd);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n if (cookieData) {\r\n if (cookieData.email) {\r\n reservation.contacts.email = cookieData.email;\r\n }\r\n if (cookieData.phone) {\r\n reservation.contacts.phone = cookieData.phone;\r\n }\r\n if (cookieData.passengers && cookieData.passengers.length) {\r\n cookieData.passengers.forEach((p, index) => {\r\n if (p && index < reservation.passengers.length) {\r\n const passenger = reservation.passengers[index];\r\n\r\n passenger.firstName = p.firstName;\r\n // if (!passenger.validationConstraints.documentValidTillVisible) {\r\n passenger.middleName = p.middleName;\r\n // }\r\n passenger.lastName = p.lastName;\r\n passenger.birthday = p.birthday;\r\n passenger.gender = p.gender;\r\n passenger.citizenship = p.citizenship;\r\n passenger.documentNumber = p.documentNumber;\r\n passenger.documentValidTill = p.documentValidTill ? moment(p.documentValidTill).format('YYYY-MM-DD') : '';\r\n // if (!passenger.validationConstraints.documentValidTillRequired) {\r\n passenger.documentValidTillEnabled = p.documentValidTillEnabled;\r\n // }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n static saveReservationModelCookie(reservation: flights.ReservationModel) {\r\n if (!reservation) {\r\n return;\r\n }\r\n\r\n const cookieData: g2sFFDCookie = {\r\n email: null,\r\n phone: null,\r\n passengers: []\r\n };\r\n\r\n // Load existed cookie as well as this method can be called on passengers step before contact details.\r\n const cd = Cookie.get('g2sFFD');\r\n if (cd) {\r\n let oldCookieData: g2sFFDCookie | null = null;\r\n\r\n try {\r\n oldCookieData = JSON.parse(cd) as g2sFFDCookie;\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n if (oldCookieData) {\r\n if (oldCookieData.email) {\r\n cookieData.email = oldCookieData.email;\r\n }\r\n if (oldCookieData.phone) {\r\n cookieData.phone = oldCookieData.phone;\r\n }\r\n }\r\n }\r\n\r\n if (reservation.contacts.email) {\r\n cookieData.email = reservation.contacts.email;\r\n }\r\n\r\n if (reservation.contacts.phone) {\r\n cookieData.phone = reservation.contacts.phone;\r\n }\r\n\r\n reservation.passengers.forEach(p => {\r\n cookieData.passengers.push({\r\n firstName: p.firstName,\r\n middleName: p.middleName,\r\n lastName: p.lastName,\r\n birthday: p.birthday,\r\n gender: p.gender,\r\n citizenship: p.citizenship,\r\n documentNumber: p.documentNumber,\r\n documentValidTill: p.documentValidTill,\r\n documentValidTillEnabled: p.documentValidTillEnabled\r\n });\r\n });\r\n\r\n Cookie.set(\r\n 'g2sFFD',\r\n JSON.stringify(cookieData),\r\n {\r\n path: '/',\r\n expires: moment().add(G2S.isDev ? 600 : 30, 'minutes').toDate(),\r\n domain: G2S.config.cookieDomain,\r\n sameSite: G2S.isSecure ? 'none' : undefined,\r\n secure: G2S.isSecure\r\n });\r\n }\r\n\r\n static g2scpnGet(): string {\r\n return Cookie.get('g2scpn');\r\n }\r\n static uidGet(): string {\r\n return Cookie.get('uid');\r\n }\r\n static g2scpnSet(couponName: string) {\r\n Cookie.set('g2scpn', couponName, {\r\n path: '/',\r\n expires: moment().add(1, 'days').toDate(),\r\n domain: G2S.config.cookieDomain,\r\n sameSite: G2S.isSecure ? 'none' : undefined,\r\n secure: G2S.isSecure\r\n });\r\n }\r\n static g2scpnDelete() {\r\n Cookie.set('g2scpn', '', {\r\n path: '/',\r\n expires: moment().add(G2S.isDev ? 600 : 30, 'minutes').toDate(),\r\n domain: G2S.config.cookieDomain,\r\n sameSite: G2S.isSecure ? 'none' : undefined,\r\n secure: G2S.isSecure\r\n });\r\n }\r\n\r\n static omitPromoPopupGet(value: string) {\r\n return Cookie.get(`g2sOmitPromoPopup_${value}`);\r\n }\r\n\r\n static omitPromoPopupSet(value: string, expires: string) {\r\n Cookie.set(\r\n `g2sOmitPromoPopup_${value}`,\r\n 'true',\r\n {\r\n path: '/',\r\n expires: moment(expires, 'DD.MM.YYYY').toDate(),\r\n domain: G2S.config.cookieDomain,\r\n sameSite: G2S.isSecure ? 'none' : undefined,\r\n secure: G2S.isSecure\r\n });\r\n }\r\n\r\n static getMarkerReferrer() {\r\n const markerReferrer = Cookie.get('g2sMR');\r\n\r\n if (markerReferrer) {\r\n return markerReferrer;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n static getSplitTest() {\r\n const splitVersion = Cookie.get('split_test_version');\r\n \r\n if (!G2S.config.instance) {\r\n G2S.config.instance = splitVersion;\r\n if (!splitVersion) {\r\n G2S.config.instance = 'frontend1';\r\n }\r\n }\r\n }\r\n\r\n static getChoiceType() {\r\n const ct = parseInt(Cookie.get('ct'));\r\n return isNaN(ct) ? null : ct;\r\n }\r\n\r\n static setChoiceType(ct: api.ProductChoiceType) {\r\n Cookie.set('ct', ct, {\r\n path: '/',\r\n expires: moment().add(1, 'days').toDate(),\r\n domain: G2S.config.cookieDomain,\r\n sameSite: G2S.isSecure ? 'none' : undefined,\r\n secure: G2S.isSecure\r\n });\r\n }\r\n}\r\n","import { G2S } from '../g2s';\r\nimport * as api from '../api';\r\nimport * as flights from '../flights';\r\nimport * as utils from '../utils';\r\n\r\ndeclare let ga: any;\r\n\r\nexport class GoogleAnalyticsService {\r\n private affiliate = '';\r\n\r\n addFlightProduct(flight: flights.FlightModel, passengerCount: number) {\r\n const segmentFirst = flight.legs[0].segments[0];\r\n const segmentLast = flight.legs[0].segments[flight.legs[0].segments.length - 1];\r\n const productId = 'A-' + segmentFirst.departureDestination.iataCode\r\n + '-' + segmentLast.arrivalDestination.iataCode\r\n + '-' + flight.validatingAirline.iataCode;\r\n const productName = 'AirTickets ' + segmentFirst.departureDestination.iataCode\r\n + (flight.legs.length == 1 ? '>' : '<>')\r\n + segmentLast.arrivalDestination.iataCode\r\n + ' Class-' + flight.bookingClass\r\n + ' Airline-' + flight.validatingAirline.iataCode;\r\n\r\n ga('ec:addProduct', {\r\n 'id': productId,\r\n 'name': productName,\r\n 'category': 'ticket.air',\r\n 'brand': flight.validatingAirline.iataCode,\r\n 'variant': flight.bookingClass,\r\n 'price': flight.billingPrice,\r\n 'quantity': passengerCount\r\n });\r\n }\r\n\r\n addProduct(product: flights.ProductModel, passengerCount: number) {\r\n const productId = 'P-' + product.product.type + '-' + product.product.id;\r\n const productName = 'Product.' + product.product.externalId + ' ID-' + product.product.id;\r\n\r\n ga('ec:addProduct', {\r\n 'id': productId,\r\n 'name': productName,\r\n 'category': 'product.' + product.product.type.toLowerCase(),\r\n 'brand': product.product.adapter ? product.product.adapter : 'Go2See',\r\n //'variant': '',\r\n 'price': product.product.price,\r\n 'quantity': product.product.priceType == 'PerPassenger' ? passengerCount : 1\r\n });\r\n }\r\n\r\n addSearchParams(gaParams: utils.GoogleAnalyticsParams, searchParams: flights.FlightSearchParams) {\r\n if (gaParams && searchParams) {\r\n gaParams.dimension4 = searchParams.roundtrip ? 'Round Trip' : 'One Way';\r\n gaParams.dimension5 = searchParams.from + '-' + searchParams.to;\r\n gaParams.dimension6 = searchParams.class;\r\n gaParams.dimension7 = searchParams.passengers.adults + '-' + searchParams.passengers.children + '-' + searchParams.passengers.infants;\r\n gaParams.metric3 = searchParams.passengers.adults + searchParams.passengers.children + searchParams.passengers.infants;\r\n }\r\n }\r\n\r\n setAction(actionName: string, actionData: any) {\r\n ga('ec:setAction', actionName, actionData);\r\n }\r\n\r\n sendPageview(page: string, title: string, fields?: GoogleAnalyticsParams) {\r\n if (ga) {\r\n const f: any = {};\r\n\r\n if (page) {\r\n f.page = page;\r\n }\r\n if (title) {\r\n f.title = title;\r\n }\r\n\r\n if (fields) {\r\n for (const nextKey in fields) {\r\n f[nextKey] = fields[nextKey];\r\n }\r\n }\r\n\r\n if (G2S.config.instance) {\r\n f['dimension12'] = G2S.config.instance;\r\n }\r\n\r\n if ((window).__gaClientID) {\r\n f['dimension14'] = (window).__gaClientID;\r\n }\r\n\r\n if (!this.affiliate\r\n && utils.Cookies.getPartnerCookie()) {\r\n // Request dimension8 affiliate value from server\r\n new api.UtilsService().getAffiliateInfo(utils.Cookies.getPartnerCookie()).then(\r\n (result: string) => {\r\n this.affiliate = result;\r\n\r\n if (this.affiliate) {\r\n f['dimension8'] = this.affiliate;\r\n }\r\n\r\n ga('send', 'pageview', f);\r\n\r\n if (G2S.isDev) {\r\n console.log('GA pageview ' + page + '.', f);\r\n }\r\n\r\n // Yandex metrica\r\n if (window['ym']\r\n && window['__ymCounterId']) {\r\n window['ym'](window['__ymCounterId'], 'hit', page, { title: title });\r\n if (G2S.isDev) {\r\n console.log('YM hit ' + page + '.', f);\r\n }\r\n }\r\n },\r\n () => {\r\n ga('send', 'pageview', f);\r\n\r\n if (G2S.isDev) {\r\n console.log('GA pageview ' + page + '.', f);\r\n }\r\n\r\n // Yandex metrica\r\n if (window['ym']\r\n && window['__ymCounterId']) {\r\n window['ym'](window['__ymCounterId'], 'hit', page, { title: title });\r\n if (G2S.isDev) {\r\n console.log('YM hit ' + page + '.', f);\r\n }\r\n }\r\n }\r\n );\r\n } else {\r\n if (this.affiliate) {\r\n f['dimension8'] = this.affiliate;\r\n }\r\n\r\n ga('send', 'pageview', f);\r\n\r\n if (G2S.isDev) {\r\n console.log('GA pageview ' + page + '.', f);\r\n }\r\n\r\n // Yandex metrica\r\n if (window['ym']\r\n && window['__ymCounterId']) {\r\n window['ym'](window['__ymCounterId'], 'hit', page, { title: title });\r\n if (G2S.isDev) {\r\n console.log('YM hit ' + page + '.', f);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n reachGoal(label: string, params?: (string | number | boolean)[]) {\r\n if (window['ym']\r\n && window['__ymCounterId']) {\r\n if (params) {\r\n window['ym'](window['__ymCounterId'], 'reachGoal', label, params);\r\n } else {\r\n window['ym'](window['__ymCounterId'], 'reachGoal', label);\r\n }\r\n }\r\n if (G2S.isDev) {\r\n console.log('YM reach goal ' + label);\r\n }\r\n }\r\n\r\n sendEvent(category: string, action: string, label: string, fields?: GoogleAnalyticsParams) {\r\n if (ga) {\r\n const f: any = {};\r\n\r\n if (fields) {\r\n for (const nextKey in fields) {\r\n f[nextKey] = fields[nextKey];\r\n }\r\n }\r\n\r\n // Affiliate will be initialized by first sendPageview, so there's no need to request it from server here\r\n if (this.affiliate) {\r\n f['dimension8'] = this.affiliate;\r\n }\r\n\r\n if (G2S.config.instance) {\r\n f['dimension12'] = G2S.config.instance;\r\n }\r\n\r\n if ((window).__gaClientID) {\r\n f['dimension14'] = (window).__gaClientID;\r\n }\r\n\r\n ga('send', 'event', category, action, label, f);\r\n\r\n if (G2S.isDev) {\r\n console.log('GA event ' + category + ' / ' + action + ' / ' + label + '.', f);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class GoogleAnalyticsParams {\r\n /**\r\n * Payment Adapter\r\n */\r\n dimension1?: string;\r\n /**\r\n * GDS Adapter\r\n */\r\n dimension2?: string;\r\n /**\r\n * Airline\r\n */\r\n dimension3?: string;\r\n /**\r\n * Flight Type\r\n */\r\n dimension4?: string;\r\n /**\r\n * Flight Direction\r\n */\r\n dimension5?: string;\r\n /**\r\n * Flight Class\r\n */\r\n dimension6?: string;\r\n /**\r\n * Flight Passengers\r\n */\r\n dimension7?: string;\r\n /**\r\n * Affiliate\r\n */\r\n dimension8?: string;\r\n /**\r\n * Coupon ID\r\n */\r\n dimension9?: string;\r\n /**\r\n * MultiFR\r\n */\r\n dimension10?: string;\r\n /**\r\n * Promotion ID\r\n */\r\n dimension11?: string;\r\n /**\r\n * a/b test\r\n */\r\n dimension12?: string;\r\n /**\r\n * Ga client ID\r\n */\r\n dimension14?: string;\r\n /**\r\n * Flights Search Duration\r\n */\r\n metric1?: number;\r\n /**\r\n * Flights Search Results Count\r\n */\r\n metric2?: number;\r\n /**\r\n * Passenger Count\r\n */\r\n metric3?: number;\r\n /**\r\n * Api Flight Search Count\r\n */\r\n metric4?: number;\r\n /**\r\n * GDS Search Count\r\n */\r\n metric5?: number;\r\n /**\r\n * Segment Count\r\n */\r\n metric6?: number;\r\n /**\r\n * Days to departure\r\n */\r\n metric7?: number;\r\n /**\r\n * Reservation opinion\r\n */\r\n metric8?: number;\r\n /**\r\n * Flight InitStart Duration\r\n */\r\n metric9?: number;\r\n}\r\n","import * as api from '../api';\r\n\r\nexport class Http {\r\n static getUrlParameter(name) {\r\n const url = window.location.href;\r\n const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');\r\n const results = regex.exec(url);\r\n\r\n // eslint-disable-next-line no-useless-escape\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n\r\n if (!results) return null;\r\n\r\n if (!results[2]) return '';\r\n\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n\r\n static getUrlParameters() {\r\n const queryString = decodeURIComponent(window.location.search.replace(/.*?\\?/, ''));\r\n const params = {};\r\n\r\n if (queryString.length) {\r\n const keyValPairs = queryString.split('&');\r\n\r\n keyValPairs.forEach((pair) => {\r\n const key = pair.split('=')[0];\r\n\r\n if (!key.length) {\r\n return;\r\n }\r\n params[key] = pair.split('=')[1];\r\n });\r\n }\r\n\r\n return params;\r\n }\r\n\r\n static redirect(d: api.PaymentInfoRedirect) {\r\n if (d.method.toLowerCase() === 'get' && d.requestParameters.length === 0) {\r\n window.location.href = d.url;\r\n }\r\n else {\r\n const form: HTMLFormElement = window.document.createElement('form');\r\n\r\n form.method = d.method;\r\n form.action = d.url;\r\n\r\n for (let i = 0; i < d.requestParameters.length; i++) {\r\n const p = d.requestParameters[i];\r\n const input = window.document.createElement('input');\r\n input.value = p.paramValue;\r\n input.name = p.paramName;\r\n input.type = 'hidden';\r\n form.appendChild(input);\r\n }\r\n\r\n window.document.body.appendChild(form);\r\n\r\n // Wait for DOM issues.\r\n setTimeout(() => {\r\n form.submit();\r\n }, 1000);\r\n }\r\n }\r\n\r\n static hiddenFrameWithPost(d: api.PaymentInfoRedirect) {\r\n let html = '
';\r\n\r\n if (d.requestParameters) {\r\n for (let i = 0; i < d.requestParameters.length; i++) {\r\n html += '';\r\n }\r\n }\r\n\r\n html += '
';\r\n\r\n const iframe: HTMLIFrameElement = window.document.createElement('iframe');\r\n iframe.style.visibility = 'hidden';\r\n\r\n window.document.body.appendChild(iframe);\r\n\r\n let fDoc = iframe.contentDocument || iframe.contentWindow?.document;\r\n if (fDoc) {\r\n fDoc.write(html);\r\n fDoc.close();\r\n }\r\n }\r\n}\r\n","import Cookie from 'js-cookie';\r\nimport { G2S } from '../g2s';\r\n\r\nclass LogglyTrackerClass {\r\n private LOGGLY_INPUT_PREFIX = 'http' + (('https:' === document.location.protocol ? 's' : '')) + '://';\r\n private LOGGLY_COLLECTOR_DOMAIN = 'logs-01.loggly.com';\r\n private LOGGLY_SESSION_KEY = 'logglytrackingsession';\r\n private LOGGLY_PROXY_DOMAIN = 'loggly';\r\n\r\n private key = false;\r\n private sendConsoleErrors = false;\r\n private tag = 'jslogger';\r\n private useDomainProxy = false;\r\n private useUtfEncoding = false;\r\n sessionId: any;\r\n inputUrl: string;\r\n logglyCollectorDomain: any;\r\n\r\n get uuid(): string {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n private setTag(tracker: any, tag: any) {\r\n tracker.tag = tag;\r\n }\r\n private setUtfEncoding(tracker: any, useUtfEncoding: any){\r\n tracker.useUtfEncoding = useUtfEncoding;\r\n }\r\n private setSendConsoleError(tracker: any, sendConsoleErrors: any) {\r\n tracker.sendConsoleErrors = sendConsoleErrors;\r\n\r\n if (tracker.sendConsoleErrors === true) {\r\n const _onerror = window.onerror;\r\n //send console error messages to Loggly\r\n window.onerror = function (msg, url, line, col, err){\r\n tracker.push({ \r\n category: 'BrowserJsException',\r\n exception: {\r\n message: msg,\r\n url: url,\r\n lineno: line,\r\n colno: col,\r\n stack: err ? err.stack : 'n/a'\r\n }\r\n });\r\n\r\n if (_onerror && typeof _onerror === 'function') {\r\n // eslint-disable-next-line prefer-rest-params\r\n _onerror.apply(window, arguments);\r\n }\r\n };\r\n }\r\n }\r\n private setInputUrl() {\r\n if (this.useDomainProxy == true) {\r\n this.inputUrl = this.LOGGLY_INPUT_PREFIX\r\n + window.location.host\r\n + '/'\r\n + this.LOGGLY_PROXY_DOMAIN\r\n + '/inputs/'\r\n + this.key\r\n + '/tag/'\r\n + this.tag;\r\n }\r\n else {\r\n this.inputUrl = this.LOGGLY_INPUT_PREFIX\r\n + (this.logglyCollectorDomain || this.LOGGLY_COLLECTOR_DOMAIN)\r\n + '/inputs/'\r\n + this.key\r\n + '/tag/'\r\n + this.tag;\r\n }\r\n }\r\n public setSession(sessionId?: any) {\r\n if (sessionId) {\r\n this.sessionId = sessionId;\r\n this.setCookie(this.sessionId);\r\n } else if (!this.sessionId) {\r\n this.sessionId = this.readCookie();\r\n if (!this.sessionId) {\r\n this.sessionId = this.uuid;\r\n this.setCookie(this.sessionId);\r\n }\r\n }\r\n }\r\n private setKey(key: any) {\r\n this.key = key;\r\n this.setSession();\r\n this.setInputUrl();\r\n }\r\n private setDomainProxy(useDomainProxy: any) {\r\n this.useDomainProxy = useDomainProxy;\r\n //refresh inputUrl value\r\n this.setInputUrl();\r\n }\r\n public push(data: any) {\r\n const type = typeof data;\r\n\r\n if (!data || !(type === 'object' || type === 'string')) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const self = this;\r\n\r\n\r\n if (type === 'string') {\r\n data = {\r\n 'text': data\r\n };\r\n } else {\r\n if (data.logglyCollectorDomain) {\r\n this.logglyCollectorDomain = data.logglyCollectorDomain;\r\n return;\r\n }\r\n\r\n if (data.sendConsoleErrors !== undefined) {\r\n this.setSendConsoleError(this, data.sendConsoleErrors);\r\n }\r\n\r\n if (data.tag) {\r\n this.setTag(this, data.tag);\r\n }\r\n\r\n if (data.useUtfEncoding !== undefined) {\r\n this.setUtfEncoding(this, data.useUtfEncoding);\r\n }\r\n\r\n if (data.useDomainProxy) {\r\n this.setDomainProxy(data.useDomainProxy);\r\n }\r\n\r\n if (data.logglyKey) {\r\n this.setKey(data.logglyKey);\r\n return;\r\n }\r\n\r\n if (data.sessionId) {\r\n self.setSession(data.sessionId);\r\n return;\r\n }\r\n }\r\n\r\n if (!self.key) {\r\n return;\r\n }\r\n\r\n self.track(data);\r\n }\r\n\r\n public track(data: any) {\r\n // inject session id\r\n data.sessionId = this.sessionId;\r\n\r\n try {\r\n //creating an asynchronous XMLHttpRequest\r\n const xmlHttp = new XMLHttpRequest();\r\n xmlHttp.open('POST', this.inputUrl, true); //true for asynchronous request\r\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\r\n if (this.useUtfEncoding === true) {\r\n xmlHttp.setRequestHeader('Content-Type', 'text/plain; charset=utf-8');\r\n } else {\r\n xmlHttp.setRequestHeader('Content-Type', 'text/plain');\r\n }\r\n xmlHttp.send(JSON.stringify(data));\r\n\r\n } catch (ex) {\r\n if (window && window.console && typeof window.console.log === 'function') {\r\n console.log('Failed to log to loggly because of this exception:\\n' + ex);\r\n console.log('Failed log data:', data);\r\n }\r\n }\r\n }\r\n public readCookie() {\r\n return Cookie.get('logglytrackingsession');\r\n }\r\n public setCookie(value: string) {\r\n Cookie.set(\r\n this.LOGGLY_SESSION_KEY,\r\n value,\r\n {\r\n path: '/',\r\n domain: G2S.config.cookieDomain,\r\n sameSite: G2S.isSecure ? 'none' : undefined, \r\n secure: G2S.isSecure\r\n });\r\n }\r\n}\r\n\r\nexport const _LTracker = new LogglyTrackerClass();","export function clone(obj) {\r\n let copy;\r\n\r\n // Handle the 3 simple types, and null or undefined\r\n if (null == obj || 'object' != typeof obj) return obj;\r\n\r\n // Handle Date\r\n if (obj instanceof Date) {\r\n copy = new Date();\r\n copy.setTime(obj.getTime());\r\n return copy;\r\n }\r\n\r\n // Handle Array\r\n if (obj instanceof Array) {\r\n copy = [];\r\n for (let i = 0, len = obj.length; i < len; i++) {\r\n copy[i] = clone(obj[i]);\r\n }\r\n return copy;\r\n }\r\n\r\n // Handle Object\r\n if (obj instanceof Object) {\r\n copy = {};\r\n for (const attr in obj) {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);\r\n }\r\n return copy;\r\n }\r\n\r\n throw new Error('Unable to copy obj! Its type isn\\'t supported.');\r\n}\r\n\r\n/**\r\n * Clones source object and adds spaces property names. { 'FooBar': 1; } > { 'Foo Bar': 1; }\r\n */\r\nexport function cloneWithSpaces(obj) {\r\n let copy;\r\n\r\n // Handle the 3 simple types, and null or undefined\r\n if (null == obj || 'object' != typeof obj) return obj;\r\n\r\n // Handle Object\r\n if (obj instanceof Object) {\r\n copy = {};\r\n for (const attr in obj) {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (obj.hasOwnProperty(attr)) copy[attr.replace(/([a-z](?=[A-Z]))/g, '$1 ')] = cloneWithSpaces(obj[attr]);\r\n }\r\n return copy;\r\n }\r\n\r\n throw new Error('Unable to copy obj! Its type isn\\'t supported.');\r\n}\r\n","import * as api from '../api';\r\nimport moment from 'moment';\r\n\r\nexport class Payment {\r\n static redirect(d: api.PaymentInfoRedirect) {\r\n if (d.method.toLowerCase() === 'get' && d.requestParameters.length === 0) {\r\n window.location.href = d.url;\r\n }\r\n else {\r\n const form: HTMLFormElement = window.document.createElement('form');\r\n\r\n form.method = d.method;\r\n form.action = d.url;\r\n\r\n for (let i = 0; i < d.requestParameters.length; i++) {\r\n const p = d.requestParameters[i];\r\n const input = window.document.createElement('input');\r\n input.value = p.paramValue;\r\n input.name = p.paramName;\r\n input.type = 'hidden';\r\n form.appendChild(input);\r\n }\r\n\r\n window.document.body.appendChild(form);\r\n\r\n // Wait for DOM issues.\r\n setTimeout(function () {\r\n form.submit();\r\n }, 1000);\r\n }\r\n }\r\n\r\n static calcMoneyWallPrice(amount: number, departureDate: moment.Moment) {\r\n const loanContractEndDate = moment().add(60, 'days');\r\n const k = departureDate.isAfter(loanContractEndDate)\r\n ? 1.1\r\n : 1.21;\r\n\r\n return Math.round((amount * k) / 3);\r\n }\r\n}\r\n","export function loadScript(url: string, onLoadCallback?: Function, onErrorCallback?: Function) {\r\n // Adding the script tag to the head as suggested before\r\n const head = document.getElementsByTagName('head')[0];\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = url;\r\n\r\n if (onLoadCallback) {\r\n (script).onload = onLoadCallback;\r\n }\r\n\r\n if (onErrorCallback) {\r\n (script).onerror = onErrorCallback;\r\n }\r\n\r\n // Fire the loading\r\n head.appendChild(script);\r\n}\r\n","export class ScrollTo {\r\n static top() {\r\n if (document.documentElement) {\r\n document.body.scrollTop = document.documentElement.scrollTop = 0;\r\n }\r\n }\r\n\r\n static element(containerSelector: string, elementSelector: string, smooth?: boolean) {\r\n const container = document.querySelector(containerSelector);\r\n const element: any = document.querySelector(elementSelector);\r\n\r\n if (container && element) {\r\n const offset = element.offsetTop - 50;\r\n\r\n if (offset > container.clientHeight / 2) {\r\n if (smooth) {\r\n const speed = 300;\r\n const movingFrequency = 15;\r\n\r\n const hopCount = speed / movingFrequency;\r\n const gap = offset / hopCount;\r\n\r\n for (let i = 1; i <= hopCount; i++) {\r\n (function () {\r\n setTimeout(function () { container!.scrollTop += gap; }, movingFrequency * i);\r\n })();\r\n }\r\n } else {\r\n container.scrollTop = offset;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { G2S } from '../g2s';\r\n\r\nexport class String {\r\n\r\n static currencySymbol(value: string): string {\r\n switch (value) {\r\n case 'RUB':\r\n case 'RUR':\r\n return '\\u20bd';\r\n case 'AED':\r\n return 'AED';\r\n case 'AUD':\r\n return 'AUD';\r\n case 'AZN':\r\n return '₼';\r\n case 'BRL':\r\n return 'BRL';\r\n case 'CAD':\r\n return 'C$';\r\n case 'EUR':\r\n return '€';\r\n case 'GBR':\r\n return '£';\r\n case 'ILS':\r\n return '₪';\r\n case 'INR':\r\n return '₹';\r\n case 'JPY':\r\n return '¥';\r\n case 'KZT':\r\n return '₸';\r\n case 'MXN':\r\n return 'MXN';\r\n case 'PLN':\r\n return 'PLN';\r\n case 'USD':\r\n return '$';\r\n default:\r\n return value;\r\n }\r\n }\r\n\r\n static isEmail(value: string): boolean {\r\n const re = /^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i;\r\n if (value) {\r\n return re.test(value);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n static normalizeCardHolder(value: string, wrongSymbolCallback?: Function): string {\r\n // eslint-disable-next-line no-useless-escape\r\n const replaceRegex = /[^a-z .\\'-]/gi;\r\n\r\n if (value) {\r\n const regexIsMatch = replaceRegex.test(value);\r\n\r\n value = value.toUpperCase();\r\n value = value.replace(/\\s{2,}/g, ' ');\r\n value = value.replace(replaceRegex, '');\r\n\r\n if (regexIsMatch && wrongSymbolCallback) {\r\n wrongSymbolCallback();\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n static normalizeCoupon(value: string): string {\r\n const replaceRegex = /[^a-zA-Z0-9]/gi;\r\n\r\n if (value) {\r\n value = value.toUpperCase();\r\n value = value.replace(/^\\s+|\\s+$/g, ''); // Trim\r\n value = value.replace(replaceRegex, '');\r\n }\r\n\r\n return value;\r\n }\r\n\r\n static normalizeMilesCard(value: string, wrongSymbolCallback?: Function): string {\r\n const replaceRegex = /[^a-zA-Z0-9]/gi;\r\n\r\n if (value) {\r\n const regexIsMatch = replaceRegex.test(value);\r\n\r\n value = value.toUpperCase();\r\n value = value.replace(/^\\s+|\\s+$/g, ''); // Trim\r\n value = value.replace(replaceRegex, '');\r\n\r\n if (regexIsMatch && wrongSymbolCallback) {\r\n wrongSymbolCallback();\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n static normalizeNumber(value: string): string {\r\n if (value) {\r\n value = value.replace(/[^\\d]/gi, '');\r\n }\r\n\r\n return value;\r\n }\r\n \r\n static disabledCyrillic(value: string, wrongSymbolCallback?: Function): string {\r\n const replaceRegex = /[^a-zA-Z0-9.@+-_]/gi;\r\n\r\n if (value) {\r\n const regexIsMatch = replaceRegex.test(value);\r\n\r\n value = value.replace(/^\\s+|\\s+$/g, ''); // Trim\r\n value = value.replace(replaceRegex, '');\r\n\r\n if (regexIsMatch && wrongSymbolCallback) {\r\n wrongSymbolCallback();\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n static normalizePassengerName(value: string, allowCyrillic: boolean, wrongSymbolCallback?: Function, allowSpaceSymbol?: boolean): string {\r\n let replaceRegex = allowCyrillic ? /[^а-яёА-ЯЁa-zA-Z]/gi : /[^a-zA-Z]/gi;\r\n\r\n if (allowSpaceSymbol) {\r\n replaceRegex = allowCyrillic ? /[^а-яёА-ЯЁa-zA-Z ]/gi : /[^a-zA-Z ]/gi;\r\n } else {\r\n replaceRegex = allowCyrillic ? /[^а-яёА-ЯЁa-zA-Z]/gi : /[^a-zA-Z]/gi;\r\n }\r\n\r\n if (value) {\r\n const regexIsMatch = replaceRegex.test(value);\r\n\r\n value = value.toUpperCase();\r\n // value = value.replace(/^\\s+|\\s+$/g, ''); // Trim\r\n value = value.replace(replaceRegex, '');\r\n\r\n if (regexIsMatch && wrongSymbolCallback) {\r\n wrongSymbolCallback();\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n static normalizePassengerLastName(value: string, allowCyrillic: boolean, wrongSymbolCallback?: Function): string {\r\n let replaceRegex = allowCyrillic ? /[^а-яёА-ЯЁa-zA-Z]/gi : /[^a-zA-Z]/gi;\r\n\r\n replaceRegex = allowCyrillic ? /[^а-яёА-ЯЁa-zA-Z]/gi : /[^a-zA-Z]/gi;\r\n\r\n if (value) {\r\n const regexIsMatch = replaceRegex.test(value);\r\n\r\n value = value.toUpperCase();\r\n // value = value.replace(/^\\s+|\\s+$/g, ''); // Trim\r\n value = value.replace(replaceRegex, '');\r\n\r\n if (regexIsMatch && wrongSymbolCallback) {\r\n wrongSymbolCallback();\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n static normalizeDocumentNumber(value: string, allowCyrillic: boolean, wrongSymbolCallback?: Function): string {\r\n const replaceRegex = allowCyrillic ? /[^а-яёА-ЯЁa-zA-Z0-9]/gi : /[^a-zA-Z0-9]/gi;\r\n\r\n if (value) {\r\n const regexIsMatch = replaceRegex.test(value);\r\n\r\n value = value.toUpperCase();\r\n value = value.replace(/^\\s+|\\s+$/g, ''); // Trim\r\n value = value.replace(replaceRegex, '');\r\n\r\n if (regexIsMatch && wrongSymbolCallback) {\r\n wrongSymbolCallback();\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n static normalizePhone(value: string): string {\r\n if (value) {\r\n value = value.replace(/^\\s+|\\s+$/g, ''); // Trim\r\n // eslint-disable-next-line no-useless-escape\r\n value = value.replace(/[^ \\d\\+\\-\\(\\)]/gi, '');\r\n }\r\n\r\n return value;\r\n }\r\n\r\n static startsWith(sourceString: string, searchString: string, position?: number): boolean {\r\n if (sourceString) {\r\n return sourceString.substr(position || 0, searchString.length) === searchString;\r\n }\r\n return false;\r\n }\r\n\r\n static trim(value: string): string {\r\n if (value) {\r\n value = value.replace(/^\\s+|\\s+$/g, '');\r\n }\r\n\r\n return value;\r\n }\r\n\r\n static camelToKebab(value: any): any {\r\n switch(typeof value) {\r\n case 'string':\r\n return value.split('').map((letter, idx) => {\r\n return letter.toUpperCase() === letter\r\n ? `${idx !== 0 ? '-' : ''}${letter.toLowerCase()}`\r\n : letter;\r\n }).join('');\r\n break;\r\n case 'number':\r\n return value.toString();\r\n break;\r\n default:\r\n return value;\r\n break;\r\n }\r\n }\r\n}\r\n","import { G2S } from '../g2s';\r\nimport * as api from '../api';\r\nimport * as flights from '../flights';\r\nimport * as utils from '../utils';\r\n\r\nexport class TrackingService {\r\n /**\r\n * Tracks event in external systems.\r\n * @param eventName - name of the event.\r\n * @param eventParams - event parameters.\r\n * @param eventMergeParams - additional event parameters to merge with eventParams. eventParams will not be changed.\r\n */\r\n public static track(eventName: TrackEvent, eventParams: TrackParams, eventMergeParams?: TrackParams) {\r\n const p = utils.cloneWithSpaces(eventParams);\r\n\r\n if (eventMergeParams) {\r\n for (const attr in eventMergeParams) {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (eventMergeParams.hasOwnProperty(attr)) p[attr.replace(/([a-z](?=[A-Z]))/g, '$1 ')] = eventMergeParams[attr];\r\n }\r\n }\r\n\r\n if ((window)._kmq) {\r\n (window)._kmq.push(['record', eventName, p]);\r\n }\r\n\r\n if ((window).mixpanel) {\r\n (window).mixpanel.track(eventName, p);\r\n }\r\n\r\n if (G2S.isDev) {\r\n console.log('Track [' + eventName + ']', p);\r\n }\r\n }\r\n\r\n public static updateParamsFromSearch(trackParams: TrackParams, searchParams: flights.FlightSearchParams) {\r\n trackParams.FlightType = searchParams.roundtrip ? 'Round Trip' : 'One Way';\r\n trackParams.FlightDirection = searchParams.from + '-' + searchParams.to;\r\n trackParams.FlightClass = searchParams.class;\r\n trackParams.Passengers = searchParams.passengers.adults + searchParams.passengers.children + searchParams.passengers.infants;\r\n trackParams.PassengersAdult = searchParams.passengers.adults;\r\n trackParams.PassengersChildren = searchParams.passengers.children;\r\n trackParams.PassengersInfant = searchParams.passengers.infants;\r\n }\r\n\r\n public static updateParamsFromReservation(trackParams: TrackParams, reservation: flights.ReservationModel) {\r\n trackParams.FlightPrice = reservation.selectedFlight?.billingPrice;\r\n trackParams.OrderAmount = reservation.getTotalPrice();\r\n trackParams.Airline = reservation.selectedFlight!.validatingAirline.iataCode;\r\n trackParams.FlightCount = reservation.flights.length;\r\n trackParams.HasCustomBaggage = (reservation.selectedFlight && reservation.selectedFlight.customBaggage && reservation.selectedFlight.customBaggage.bookable) || false;\r\n }\r\n\r\n public static updateParamsFromReservationBeforeSubmit(trackParams: TrackParams, reservation: flights.ReservationModel) {\r\n trackParams.OrderAmount = reservation.getTotalPrice();\r\n trackParams.PaymentAdapter = reservation.payment!.selectedPaymentTypeId;\r\n trackParams.BonusAmount = reservation.payment!.bonusAmount;\r\n trackParams.CouponAmount = reservation.couponDiscountAmount;\r\n trackParams.ProductsPrice = reservation.getTotalProductsPrice();\r\n trackParams.CustomBaggagePrice = reservation.customBaggagePrice;\r\n trackParams.CustomPlacesPrice = reservation.getTotalPlacesPrice();\r\n }\r\n}\r\n\r\nexport class TrackParams {\r\n Affiliate?: string;\r\n Airline?: string;\r\n BonusAmount?: number;\r\n CouponId?: string;\r\n CouponAmount?: number;\r\n CustomBaggagePrice?: number;\r\n CustomPlacesPrice?: number;\r\n DaysToDeparture?: number;\r\n ErrorReason?: string;\r\n FlightCount?: number; // How many flights in search results or on booking form\r\n FlightClass?: string;\r\n FlightDirection?: string;\r\n FlightPrice?: number;\r\n FlightSearchDuration?: number;\r\n FlightType?: string; // Round Trip or One Way\r\n GdsAdapter?: string;\r\n HasCustomBaggage?: boolean;\r\n InitStartDuration?: number;\r\n Passengers?: number;\r\n PassengersAdult?: number;\r\n PassengersChildren?: number;\r\n PassengersInfant?: number;\r\n PaymentAdapter?: string;\r\n ProductsPrice?: number;\r\n PromotionId?: string;\r\n OrderAmount?: number;\r\n OrderOpinion?: number;\r\n Step?: string;\r\n}\r\n\r\nexport enum TrackEvent {\r\n BookingError = 'Booking Error',\r\n BookingInit = 'Booking Init',\r\n BookingOutOfStock = 'Booking Out of Stock',\r\n BookingPayment = 'Booking Payment',\r\n BookingStart = 'Booking Start',\r\n BookingStepBack = 'Booking Step Back',\r\n BookingStepPayment = 'Booking Step Payment',\r\n BookingStepSeats = 'Booking Step Seats',\r\n BookingStepServices = 'Booking Step Services',\r\n BookingSuccess = 'Booking Success',\r\n BookingSuccessLater = 'Booking Success Later',\r\n BookingSuccessPaid = 'Booking Success Paid',\r\n BookingSuccessRedirect = 'Booking Success Redirect',\r\n FlightSearchEmpty = 'Flight Search Empty',\r\n FlightSearchError = 'Flight Search Error',\r\n FlightSearchResults = 'Flight Search Results',\r\n FlightSearchStart = 'Flight Search Start',\r\n}","import * as i18next from 'i18next';\r\nimport { G2S } from 'core/g2s';\r\n\r\nexport interface SupportCategoryOption {\r\n label: string;\r\n value: string | null;\r\n}\r\n\r\nclass SupportClass {\r\n public refundOptions (): SupportCategoryOption[] {\r\n let refundOptions: SupportCategoryOption[] = [\r\n {\r\n label: '',\r\n value: null\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_personal'),\r\n value: 'clarification_personal_reasons',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_light_rescheldue'),\r\n value: 'clarification_flight_rescheldue',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_flight_cancellation'),\r\n value: 'clarification_flight_cancellation',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_passenger_sickness'),\r\n value: 'clarification_passenger_sickness',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_entry_ban'),\r\n value: 'clarification_entry_ban',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_refusal_visa'),\r\n value: 'clarification_refusal_visa',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_death_or_sickness'),\r\n value: 'clarification_death_or_sickness',\r\n },\r\n ]\r\n return refundOptions; \r\n }\r\n\r\n public changeTicketOptions(): SupportCategoryOption[] {\r\n const changeOptions: SupportCategoryOption[] = [\r\n {\r\n label: '',\r\n value: null,\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_personal'),\r\n value: 'clarification_personal_reasons',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_light_rescheldue'),\r\n value: 'clarification_flight_rescheldue',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_flight_cancellation'),\r\n value: 'clarification_flight_cancellation',\r\n },\r\n ]\r\n return changeOptions;\r\n }\r\n\r\n public changeInfoOptions(): SupportCategoryOption[] {\r\n const defaultCategory: SupportCategoryOption[] = [\r\n {\r\n label: '',\r\n value: null,\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_birthday'),\r\n value: 'clarification_birthday',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_passport_details'),\r\n value: 'clarification_info_details',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_full_name'),\r\n value: 'clarification_info_name',\r\n },\r\n ]\r\n return defaultCategory;\r\n }\r\n\r\n public additionalServiceOptions (): SupportCategoryOption[] {\r\n const additionalServiceOptions: SupportCategoryOption[] = [\r\n {\r\n label: '',\r\n value: null,\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_cancel_service'),\r\n value: 'clarification_service_cancel',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_add_service'),\r\n value: 'clarification_service_add',\r\n },\r\n ]\r\n return additionalServiceOptions;\r\n }\r\n\r\n public baggageOptions(): SupportCategoryOption[] {\r\n const defaultCategory: SupportCategoryOption[] = [\r\n {\r\n label: '',\r\n value: null\r\n }, \r\n {\r\n label: i18next.t('label_support_sub_category_baggage_buy_additional'),\r\n value: 'baggage_buy_additional',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_baggage_clarify_weight'),\r\n value: 'baggage_clarify_weight',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_baggage_error'),\r\n value: 'baggage_error',\r\n },\r\n {\r\n label: i18next.t('label_support_sub_category_baggage_non_standard'),\r\n value: 'baggage_non_standard',\r\n },\r\n {\r\n label: i18next.t('label_support_category_other'),\r\n value: 'another'\r\n },\r\n ]\r\n return defaultCategory;\r\n }\r\n \r\n public categoryOptions(): SupportCategoryOption[] {\r\n const defaultCategory: SupportCategoryOption[] = [\r\n {\r\n label: '',\r\n value: null\r\n },\r\n {\r\n label: i18next.t('label_support_category_itinerary'),\r\n value: 'itinerary'\r\n },\r\n {\r\n label: i18next.t('label_support_category_flight_refund'),\r\n value: 'flight_refund'\r\n },\r\n {\r\n label: i18next.t('label_support_category_flight_change'),\r\n value: 'flight_change'\r\n },\r\n {\r\n label: i18next.t('label_support_category_cancel_same_day'),\r\n value: 'cancel_same_day'\r\n },\r\n {\r\n label: i18next.t('label_support_category_changes'),\r\n value: 'changes'\r\n },\r\n {\r\n label: i18next.t('label_support_category_baggage'),\r\n value: 'baggage'\r\n },\r\n {\r\n label: i18next.t('label_support_category_kid_ticket'),\r\n value: 'kid_ticket'\r\n },\r\n {\r\n label: i18next.t('label_support_category_pet_ticket'),\r\n value: 'pet_ticket'\r\n },\r\n {\r\n label: i18next.t('label_support_category_add_services'),\r\n value: 'add_services'\r\n },\r\n {\r\n label: i18next.t('label_support_category_error'),\r\n value: 'error'\r\n },\r\n \r\n {\r\n label: i18next.t('label_support_category_timetable'),\r\n value: 'timetable'\r\n },\r\n {\r\n label: i18next.t('label_support_category_bonuses'),\r\n value: 'bonuses'\r\n },\r\n {\r\n label: i18next.t('label_support_category_other'),\r\n value: 'other'\r\n }\r\n ];\r\n // if (G2S.config.theme !== 'aviasales') {\r\n // defaultCategory = [\r\n // ...defaultCategory,\r\n // {\r\n // label: i18next.t('label_support_category_bonuses'),\r\n // value: 'bonuses'\r\n // },\r\n // // {\r\n // // label: i18next.t('label_support_category_corporate'),\r\n // // value: 'corporate'\r\n // // }\r\n // ];\r\n // }\r\n\r\n return defaultCategory;\r\n }\r\n}\r\n\r\nexport const Support = new SupportClass();","export * from './Array';\r\nexport * from './AviasalesInjectService';\r\nexport * from './Baggage';\r\nexport * from './Card';\r\nexport * from './Cookies';\r\nexport * from './GoogleAnalyticsService';\r\nexport * from './Http';\r\nexport * from './LogglyTracker';\r\nexport * from './Object';\r\nexport * from './Payment';\r\nexport * from './PixelsService';\r\nexport * from './Script';\r\nexport * from './ScrollTo';\r\nexport * from './String';\r\nexport * from './Support';\r\nexport * from './TrackingService';\r\n","import moment from 'moment';\r\nimport { G2S } from '../g2s';\r\nimport * as api from '../api';\r\nimport * as flights from '../flights';\r\nimport * as utils from '../utils';\r\n\r\n// Global var for skyscanner tag\r\ndeclare let sat: any;\r\n// Global var for VK retargeting\r\ndeclare let VK: any;\r\n\r\n/**\r\n * Generates pixels for partners.\r\n */\r\nexport class PixelsService {\r\n static vkPriceListIdFlights: number | null = null;//1791;\r\n\r\n static setPixelForHomepage(target: HTMLElement) {\r\n const markerValue = utils.Cookies.getMarkerValue();\r\n\r\n // VK\r\n if (typeof VK !== 'undefined' && VK) {\r\n VK.Retargeting.Event('view_home');\r\n\r\n if (PixelsService.vkPriceListIdFlights) {\r\n VK.Retargeting.ProductEvent(PixelsService.vkPriceListIdFlights, 'view_home', markerValue ? {'products':[{'id':markerValue}]} : {});\r\n }\r\n }\r\n\r\n // Criteo\r\n this.setCriteoPixel(\r\n target,\r\n {\r\n viewHome: true\r\n }\r\n );\r\n }\r\n\r\n static setPixelForFlightBooking(target: HTMLElement, searchParams: flights.FlightSearchParams, billingPrice: number) {\r\n const productId = searchParams.from + '_' + searchParams.to;\r\n let productDates = 'checkin_date: \"' + moment(searchParams.departure!).format('YYYY-MM-DD') + '\"';\r\n if (searchParams.roundtrip) {\r\n productDates += ',checkout_date: \"' + moment(searchParams.return!).format('YYYY-MM-DD') + '\"';\r\n }\r\n const markerValue = utils.Cookies.getMarkerValue();\r\n\r\n // Criteo\r\n this.setCriteoPixel(\r\n target,\r\n {\r\n viewSearch: productDates,\r\n viewItem: '\"' + productId + '\"',\r\n viewBasket: '[ { id: \"' + productId + '\", price:' + Math.round(billingPrice) + ', quantity:' + (searchParams.passengers.adults + searchParams.passengers.children + searchParams.passengers.infants) + '} ]'\r\n }\r\n );\r\n\r\n // Skyscanner\r\n const skyScannerRedirectId = utils.Cookies.getSkyScannerRedirectId();\r\n if (skyScannerRedirectId) {\r\n const w: any = window;\r\n\r\n w['SkyscannerAnalyticsTag'] = 'sat';\r\n // eslint-disable-next-line prefer-rest-params\r\n w['sat'] = w['sat'] || function () { (w['sat'].buffer = w['sat'].buffer || []).push(arguments); };\r\n w['sat'].u = 'https://analytics.skyscanner.net';\r\n const l = document.createElement('script');\r\n l.src = 'https://analytics.skyscanner.net/tag.js';\r\n l.async = true;\r\n const h = document.getElementsByTagName('head')[0];\r\n h.appendChild(l);\r\n\r\n // Call new skyscanner tag\r\n sat('init', 'SAT-578300-1');\r\n sat('send', 'landing', {\r\n priceSeen: `${Math.round(billingPrice)}`,\r\n currency: G2S.config.currencySymbol,\r\n paymentOption: 'Card'\r\n });\r\n\r\n utils.Cookies.removeSkyScannerRedirectId();\r\n }\r\n\r\n // VK\r\n if (typeof VK !== 'undefined' && VK) {\r\n VK.Retargeting.Event('init_checkout');\r\n\r\n if (PixelsService.vkPriceListIdFlights) {\r\n VK.Retargeting.ProductEvent(PixelsService.vkPriceListIdFlights, 'init_checkout', markerValue ? {'products':[{'id':markerValue}]} : {});\r\n }\r\n }\r\n\r\n // Zendesk: display widget only on booking form\r\n if (G2S.config.environment === 'Production') {\r\n const el = document.createElement('script');\r\n el.type = 'text/javascript';\r\n el.async = true;\r\n el.id = 'ze-snippet';\r\n el.src = 'https://static.zdassets.com/ekr/snippet.js?key=881a11b2-3b26-4e80-905c-4807c5966f22';\r\n target.appendChild(el);\r\n }\r\n }\r\n\r\n static setPixelForFlightSearch(target: HTMLElement, searchParams: flights.FlightSearchParams) {\r\n const productId = searchParams.from + '_' + searchParams.to;\r\n let productDates = 'checkin_date: \"' + moment(searchParams.departure!).format('YYYY-MM-DD') + '\"';\r\n if (searchParams.roundtrip) {\r\n productDates += ',checkout_date: \"' + moment(searchParams.return!).format('YYYY-MM-DD') + '\"';\r\n }\r\n const markerValue = utils.Cookies.getMarkerValue();\r\n\r\n // Criteo\r\n this.setCriteoPixel(\r\n target,\r\n {\r\n viewSearch: productDates,\r\n viewItem: '\"' + productId + '\"'\r\n }\r\n );\r\n\r\n // VK\r\n if (typeof VK !== 'undefined' && VK) {\r\n VK.Retargeting.Event('view_search');\r\n\r\n if (PixelsService.vkPriceListIdFlights) {\r\n VK.Retargeting.ProductEvent(PixelsService.vkPriceListIdFlights, 'view_search', markerValue ? {'products':[{'id':markerValue}]} : {});\r\n }\r\n }\r\n }\r\n\r\n static setPixelForOrderConfirmation(target: HTMLElement, reservationInfo: api.ReservationInfo, flight: flights.FlightModel | null) {\r\n const reservationAmount = reservationInfo.amount.toFixed(2);\r\n\r\n // One-time pixles\r\n if (moment().diff(moment(reservationInfo.createdDate), 'hours') <= 24) {\r\n const orderOneTimeCookie = utils.Cookies.getOrderOneTimeCookie();\r\n const orderId = '[' + reservationInfo.reservationNumber + ']';\r\n let execPixel = true;\r\n\r\n if (orderOneTimeCookie\r\n && orderOneTimeCookie.indexOf(orderId) >= 0) {\r\n execPixel = false;\r\n }\r\n\r\n if (execPixel) {\r\n utils.Cookies.setOrderOneTimeCookie((orderOneTimeCookie ? orderOneTimeCookie : '') + orderId);\r\n\r\n const markerValue = utils.Cookies.getMarkerValue();\r\n\r\n if (flight) {\r\n const productId = flight.legs[0].departureDestination.iataCode + '_' + flight.legs[0].arrivalDestination.iataCode;\r\n let productDates = 'checkin_date: \"' + moment(flight.legs[0].departureDate).format('YYYY-MM-DD') + '\"';\r\n if (flight.legs.length > 1) {\r\n productDates += ',checkout_date: \"' + moment(flight.legs[1].departureDate).format('YYYY-MM-DD') + '\"';\r\n }\r\n\r\n // Criteo\r\n this.setCriteoPixel(\r\n target,\r\n {\r\n viewSearch: productDates,\r\n trackTransaction: 'id: \"' + reservationInfo.reservationNumber + '\", item: [ { id: \"' + productId + '\", price: ' + reservationInfo.amount + ', quantity: ' + reservationInfo.passengers.length + '} ]'\r\n }\r\n );\r\n }\r\n\r\n // VK\r\n if (typeof VK !== 'undefined' && VK) {\r\n VK.Retargeting.Event('purchase');\r\n\r\n if (PixelsService.vkPriceListIdFlights) {\r\n VK.Retargeting.ProductEvent(PixelsService.vkPriceListIdFlights, 'purchase',\r\n {\r\n 'products': markerValue ? [{'id':markerValue}] : [],\r\n 'total_price' : reservationInfo.amount\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Skyscanner\r\n const skyScannerRedirectId = utils.Cookies.getSkyScannerRedirectId();\r\n if (skyScannerRedirectId) {\r\n const w: any = window;\r\n\r\n w['SkyscannerAnalyticsTag'] = 'sat';\r\n // eslint-disable-next-line prefer-rest-params\r\n w['sat'] = w['sat'] || function () { (w['sat'].buffer = w['sat'].buffer || []).push(arguments); };\r\n w['sat'].u = 'https://analytics.skyscanner.net';\r\n const l = document.createElement('script');\r\n l.src = 'https://analytics.skyscanner.net/tag.js';\r\n l.async = true;\r\n const h = document.getElementsByTagName('head')[0];\r\n h.appendChild(l);\r\n\r\n // Call new skyscanner tag\r\n sat('init', 'SAT-578300-1');\r\n sat('send', 'conversion', {\r\n bookingReference: reservationInfo.reservationNumber\r\n });\r\n\r\n utils.Cookies.removeSkyScannerRedirectId();\r\n }\r\n\r\n // Kayak\r\n if (reservationInfo.markerOwner\r\n && reservationInfo.markerOwner.id === 2207\r\n && reservationInfo.markerOwner.value) {\r\n const el = document.createElement('img');\r\n el.src = 'https://www.kayak.com/s/kayakpixel/confirm/go2see?'\r\n + 'kayakclickid=' + reservationInfo.markerOwner.value\r\n + '&price=' + reservationAmount\r\n + '¤cy=' + G2S.config.currencySymbol\r\n + '&confirmation=' + reservationInfo.reservationNumber\r\n + '&rand=' + moment().unix();\r\n target.appendChild(el);\r\n }\r\n }\r\n\r\n static setPixelForPromotionRegistration(promotionId: string) {\r\n // VK\r\n if (typeof VK !== 'undefined' && VK) {\r\n VK.Retargeting.Event('promotion.' + promotionId + '.registration');\r\n }\r\n }\r\n\r\n private static setCriteoPixel(target: HTMLElement, pixelEvents: any) {\r\n const el = document.createElement('script');\r\n el.type = 'text/javascript';\r\n el.async = true;\r\n el.src = '//static.criteo.net/js/ld/ld.js';\r\n target.appendChild(el);\r\n\r\n let script = 'window.criteo_q = window.criteo_q || [];'\r\n + 'window.criteo_q.push('\r\n + '{ event: \"setAccount\", account: 56402 }'\r\n + ',{ event: \"setSiteType\", type: \"' + (G2S.config.clientDevice.type === 'mobile' ? 'm' : 'd') + '\" }'\r\n + ',{ event: \"viewSearch\", ' + pixelEvents.viewSearch + ' }';\r\n\r\n if (pixelEvents.viewItem) {\r\n script += ',{ event: \"viewItem\", item: ' + pixelEvents.viewItem + ' }';\r\n }\r\n\r\n if (pixelEvents.viewBasket) {\r\n script += ',{ event: \"viewBasket\", item: ' + pixelEvents.viewBasket + ' }';\r\n }\r\n\r\n if (pixelEvents.trackTransaction) {\r\n script += ',{ event: \"trackTransaction\", ' + pixelEvents.trackTransaction + ' }';\r\n }\r\n\r\n if (pixelEvents.viewHome) {\r\n script += ',{ event: \"viewHome\" }';\r\n }\r\n\r\n script += ');';\r\n\r\n try {\r\n eval(script);\r\n }\r\n catch {\r\n console.error('setCriteoPixel script error:', script);\r\n }\r\n }\r\n}\r\n","export class Directives {\r\n static focus = {\r\n inserted: function(el, binding) {\r\n if (binding.value) el.focus();\r\n else el.blur();\r\n },\r\n\r\n componentUpdated: function(el, binding) {\r\n if (binding.modifiers.lazy) {\r\n if (Boolean(binding.value) === Boolean(binding.oldValue)) {\r\n return;\r\n }\r\n }\r\n\r\n if (binding.value) el.focus();\r\n else el.blur();\r\n }\r\n }\r\n}\r\n","import axios, { AxiosInstance } from 'axios';\r\nimport Vue from 'vue';\r\nimport moment from 'moment';\r\nimport 'moment-duration-format';\r\nimport * as i18next from 'i18next';\r\nimport * as api from './api';\r\nimport * as auth from './auth';\r\nimport * as utils from './utils';\r\nimport { Filters } from './filters';\r\nimport { Directives } from './directives';\r\n\r\nexport interface AppConfig {\r\n apiUrl: string;\r\n cdnUrl: string;\r\n clientDevice: api.ClientDevice;\r\n cookieDomain: string;\r\n currencyCode: string;\r\n currencySymbol: string;\r\n markets: any;\r\n marketCode: string;\r\n mobileUrl: string;\r\n mobileRedirectAllowed: boolean;\r\n desktopUrl: string;\r\n environment: string;\r\n host: string;\r\n instance: string;\r\n locale: string;\r\n localeDictionary: any;\r\n staticPathsWithHash: any;\r\n theme: string;\r\n themeMarker: number;\r\n support: {\r\n phone: string;\r\n telegram: string;\r\n };\r\n}\r\n\r\ntype ErrorLevel = 'WARNING' | 'ERROR' | 'INFO';\r\n\r\n// appConfig is defined in /Views/Shared/_Scripts.cshtml\r\ndeclare let appConfig: AppConfig;\r\n\r\nexport class G2S {\r\n static get config(): AppConfig {\r\n return appConfig;\r\n }\r\n\r\n static get isDev(): boolean {\r\n return G2S.config.environment === 'Dev';\r\n }\r\n\r\n static get isSecure(): boolean {\r\n return G2S.config.desktopUrl.indexOf('https') === 0;\r\n }\r\n\r\n static get nbsp(): string {\r\n return '\\xA0';\r\n }\r\n\r\n static $http: AxiosInstance;\r\n\r\n static allowLogError(message: string) {\r\n const disallowMsg = [\r\n '__ybro.readability.runDetection'\r\n ];\r\n return !disallowMsg.some((msg) => message.includes(msg));\r\n }\r\n\r\n static init() {\r\n console.log('G2S.init: environment=' + G2S.config.environment\r\n + ', secure=' + G2S.isSecure\r\n + ', locale=' + G2S.config.locale);\r\n\r\n if (G2S.config.environment === 'Production') {\r\n utils._LTracker.push({\r\n 'logglyKey': '4407a3a2-9237-41a4-a613-7d4ba91da62a'\r\n });\r\n\r\n const _onerror = window.onerror;\r\n\r\n window.onerror = function(msg: string, url, line, col, err) {\r\n if (\r\n G2S.allowLogError(msg)\r\n && msg != 'ResizeObserver loop limit exceeded'\r\n && msg != 'Script error.' // It's JS error in external script which can't not be access by out code\r\n ) {\r\n utils._LTracker.push({\r\n category: 'WindowJsError',\r\n level: 'ERROR',\r\n message: msg,\r\n line: line,\r\n col: col,\r\n stack: err ? err.stack : 'n/a',\r\n url: window.location.href,\r\n userAgent: navigator.userAgent\r\n });\r\n }\r\n\r\n if (_onerror && typeof _onerror === 'function') {\r\n // eslint-disable-next-line prefer-rest-params\r\n _onerror.apply(window, arguments);\r\n }\r\n };\r\n }\r\n\r\n // Init global axios client\r\n G2S.$http = axios.create();\r\n G2S.$http.defaults.baseURL = G2S.config.apiUrl;\r\n G2S.$http.interceptors.request.use((config) => {\r\n const d1 = 'pp', d2 = 'ecr';\r\n const d1ar = ['C', '5', 'E', '2', '3', 'A', '9', 'A', '5', '8', 'F', '2', 'C', '1', 'E', '9', 'C', 'A', '7', 'B', '0', 'F', '5', '9', '4', '8', '1', '3', '7', '1', '9', 'C', '0', '4', '5', '8', 'E', 'F', '0', '8'];\r\n const d2ar = ['A', 'D', '7', '3', '6', '8', '1', 'B', 'C', '7', '4', '1', 'F', 'D', 'E', 'D', 'F', '3', '8', '8', 'E', 'F', '7', '3', '3', '2', '5', '4', '6', 'D', 'C', 'C', '1', '7', '0', '0', '1', 'C', '5', '5', '0', '0', 'C', 'C', '2', 'E', '9', '9', '6', '0', '8', 'B', '7', '6', 'B', 'A', '9', 'B', 'D', '6', '2', '6', 'D', '2'];\r\n // Don't remove ершы condition\r\n if (config.data instanceof FormData) {\r\n config.data.append('locale', G2S.config.locale);\r\n config.data.append('marketCode', G2S.config.marketCode);\r\n config.data.append('theme', G2S.config.theme);\r\n config.data.append('host', G2S.config.host);\r\n config.data.append('instance', G2S.config.instance);\r\n config.data.append('a' + d1 + 'Id', d1ar.join(''));\r\n config.data.append('a' + d1 + 'S' + d2 + 'et', d2ar.join(''));\r\n } else {\r\n // Check if it's IApiRequest\r\n if (config.data) {\r\n config.data['a' + d1 + 'Id'] = d1ar.join('');\r\n config.data['a' + d1 + 'S' + d2 + 'et'] = d2ar.join('');\r\n }\r\n utils.Cookies.getSplitTest();\r\n \r\n config.data = {\r\n ...config.data,\r\n currencyCode: G2S.config.currencyCode,\r\n locale: G2S.config.locale,\r\n theme: G2S.config.theme,\r\n host: G2S.config.host,\r\n instance: G2S.config.instance,\r\n marketCode: G2S.config.marketCode\r\n };\r\n }\r\n return config;\r\n });\r\n\r\n // Init i18next\r\n const dictionary = {};\r\n\r\n dictionary[G2S.config.locale] = {\r\n translation: G2S.config.localeDictionary\r\n };\r\n\r\n i18next.init({\r\n lng: G2S.config.locale,\r\n resources: dictionary\r\n });\r\n\r\n // Init moment.js\r\n moment.locale(G2S.config.locale); // Moment locale has been packed by Webpack\r\n\r\n // Fix moment localization\r\n switch(G2S.config.marketCode) {\r\n case 'en':\r\n moment.updateLocale(G2S.config.marketCode, {\r\n longDateFormat : {\r\n LT: 'HH:mm',\r\n LTS: 'HH:mm:ss',\r\n L: 'DD.MM.YYYY',\r\n LL: 'D MMMM YYYY',\r\n LLL: 'D MMMM YYYY HH:mm',\r\n LLLL: 'dddd D MMMM YYYY HH:mm'\r\n }\r\n });\r\n i18next.default.addResource(G2S.config.locale, 'translation', 'label_date_format', 'DD.MM.YYYY');\r\n break;\r\n\r\n case 'ru':\r\n moment.updateLocale(G2S.config.marketCode, {\r\n longDateFormat: {\r\n LT: 'HH:mm',\r\n LTS: 'LT:ss',\r\n L: 'DD.MM.YYYY',\r\n LL: 'D MMMM YYYY',\r\n LLL: 'D MMMM YYYY, LT',\r\n LLLL: 'dddd, D MMMM YYYY, LT'\r\n },\r\n\r\n monthsShort: {\r\n format: 'янв_фев_мар_апр_мая_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\r\n standalone: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_')\r\n }\r\n });\r\n break;\r\n\r\n case 'ae':\r\n case 'il':\r\n moment.updateLocale(G2S.config.marketCode, {\r\n longDateFormat : {\r\n LT: 'HH:mm',\r\n LTS: 'HH:mm:ss',\r\n L: 'DD/MM/YYYY',\r\n LL: 'D MMMM YYYY',\r\n LLL: 'D MMMM YYYY HH:mm',\r\n LLLL: 'dddd D MMMM YYYY HH:mm'\r\n }\r\n });\r\n i18next.default.addResource(G2S.config.locale, 'translation', 'label_date_format', 'DD/MM/YYYY');\r\n break;\r\n\r\n case 'dk':\r\n case 'in':\r\n case 'my':\r\n moment.updateLocale(G2S.config.marketCode, {\r\n longDateFormat : {\r\n LT: 'HH:mm',\r\n LTS: 'HH:mm:ss',\r\n L: 'DD-MM-YYYY',\r\n LL: 'D MMMM YYYY',\r\n LLL: 'D MMMM YYYY HH:mm',\r\n LLLL: 'dddd D MMMM YYYY HH:mm'\r\n }\r\n });\r\n i18next.default.addResource(G2S.config.locale, 'translation', 'label_date_format', 'DD-MM-YYYY');\r\n break;\r\n }\r\n\r\n if ('my_ar'.split('_').includes(G2S.config.locale)) {\r\n (moment())._locale.postformat = function (string) { return string; };\r\n }\r\n\r\n // Init Vue.js\r\n (Vue).prototype.$i18 = i18next;\r\n (Vue).prototype.$g2s = G2S.config;\r\n (Vue).prototype.$m = moment;\r\n (Vue).prototype.$window = window;\r\n (Vue).prototype.$auth = new auth.AuthService();\r\n (Vue).prototype.$ga = new utils.GoogleAnalyticsService();\r\n Vue.filter('baggage', Filters.baggage);\r\n Vue.filter('customBaggage', Filters.customBaggage);\r\n Vue.filter('number', Filters.number);\r\n Vue.filter('phone', Filters.phone);\r\n Vue.filter('price', Filters.price);\r\n Vue.filter('priceWithCurrency', Filters.priceWithCurrency);\r\n Vue.directive('focus', Directives.focus);\r\n\r\n // Init AviasalesInject service to receive passengers from Aviasales mobile app\r\n (window).AviasalesInject = new utils.AviasalesInjectService();\r\n\r\n if (G2S.config.environment === 'Production') {\r\n Vue.config.errorHandler = function (error, vm: any) {\r\n let componentName = '';\r\n\r\n if (vm.$root === vm) {\r\n componentName = 'root instance';\r\n } else {\r\n const name = vm._isVue ? vm.$options.name || vm.$options._componentTag : vm.name;\r\n\r\n componentName = name ? 'component <' + name + '>' : 'anonymous component';\r\n componentName += vm._isVue && vm.$options.__file ? ' at ' + vm.$options.__file : '';\r\n }\r\n utils._LTracker.push({\r\n category: 'VueJsError',\r\n level: 'ERROR',\r\n componentName: componentName,\r\n message: error.message,\r\n stack: error.stack ? error.stack : 'n/a',\r\n url: window.location.href,\r\n userAgent: navigator.userAgent\r\n });\r\n\r\n // Output error anyway\r\n console.error(error);\r\n };\r\n }\r\n }\r\n \r\n static logError(message: string, level?: ErrorLevel) {\r\n if (G2S.config.environment === 'Production' && G2S.allowLogError(message)) {\r\n utils._LTracker.push({ \r\n category: 'CustomJsError',\r\n level: level ?? 'ERROR',\r\n message: message,\r\n url: window.location.href,\r\n userAgent: navigator.userAgent\r\n });\r\n }\r\n\r\n console.error(message);\r\n }\r\n}\r\n","import Cookie from 'js-cookie';\r\nimport moment from 'moment';\r\nimport * as api from '../api';\r\nimport * as utils from '../utils';\r\nimport { G2S } from '../g2s';\r\n\r\nexport class AuthService {\r\n private accountService = new api.AccountService();\r\n\r\n public currentUser: api.UserWithBonuses | null = null;\r\n\r\n public authenticated = false;\r\n\r\n constructor() {\r\n this.accountService = new api.AccountService();\r\n\r\n this.authenticated = AuthService.isAuthCookie();\r\n }\r\n \r\n public confirm(token: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.accountService.confirm(token)\r\n .then((response: api.User) => {\r\n new utils.GoogleAnalyticsService().sendPageview('/registration/confirmation', 'Registration / Confirmation');\r\n\r\n this.signInClientSide();\r\n\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n public getRefundInfo(locale: string, reservationPublicId?: string): Promise {\r\n return this.accountService.getRefundInfo(locale, reservationPublicId);\r\n }\r\n\r\n public getRefundInfoWithWriteUs(locale: string, reservationId?: string): Promise {\r\n return this.accountService.getRefundInfoWithWriteUs(locale, reservationId);\r\n }\r\n\r\n public getSupportText(locale: string): Promise {\r\n return this.accountService.getSupportText(locale);\r\n }\r\n\r\n public getProcessStartedText(locale: string): Promise{\r\n return this.accountService.getProcessStartedText(locale);\r\n }\r\n\r\n public checkVoidAvailability(reservationId: string): Promise {\r\n return this.accountService.checkVoidAvailability(reservationId);\r\n }\r\n\r\n public ordersExists(reservationId: string) {\r\n return this.accountService.ordersExists(reservationId);\r\n }\r\n\r\n public createVoid(reservationPublicId: string): Promise {\r\n return this.accountService.createVoid(reservationPublicId);\r\n }\r\n\r\n public createVoidSupport(reservationId: string, email: string, description: string | null): Promise {\r\n return this.accountService.createVoidSupport(reservationId, email, description);\r\n }\r\n\r\n public confirmEmail(token: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.accountService.confirmEmail(token)\r\n .then((response: boolean) => {\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n public deleteStart(): Promise {\r\n return this.accountService.deleteStart();\r\n }\r\n\r\n public deleteConfirm(token: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.accountService.deleteConfirm(token)\r\n .then((response: boolean) => {\r\n new utils.GoogleAnalyticsService().sendPageview('/account/delete/confirm', 'Account / Delete / Confirm');\r\n\r\n this.signOutClientSide();\r\n\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n public exists(emailOrPhone: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.accountService.exists(emailOrPhone)\r\n .then((response: boolean) => {\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n public forgottenPassword(email: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.accountService.forgottenPassword(email)\r\n .then((response: boolean) => {\r\n new utils.GoogleAnalyticsService().sendPageview('/password/forgotten/submitted', 'Password / Forgotten / Submitted');\r\n\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n public getBonusStatus(): Promise {\r\n return this.accountService.getBonusStatus();\r\n }\r\n\r\n public getCurrentUser(): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (this.currentUser) {\r\n if (this.currentUser.resetMarker) {\r\n utils.Cookies.removePartnerCookie();\r\n }\r\n // use cached\r\n resolve(this.currentUser);\r\n } else {\r\n this.accountService.getCurrentUserWithBonuses()\r\n .then((response: api.UserWithBonuses) => {\r\n if (response.resetMarker) {\r\n utils.Cookies.removePartnerCookie();\r\n }\r\n this.currentUser = response;\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n if (error.response && (error.response.status == 401 || error.response.status == 403)) {\r\n this.signOutClientSide();\r\n }\r\n reject(error);\r\n });\r\n }\r\n });\r\n }\r\n\r\n public getCurrentUserAccount(): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.accountService.getCurrentUserAccount()\r\n .then((response: api.UserAccount) => {\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n if (error.response && (error.response.status == 401 || error.response.status == 403)) {\r\n this.signOutClientSide();\r\n }\r\n\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n public getCurrentUserWithBonuses(bookingSessionId?: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.accountService.getCurrentUserWithBonuses(bookingSessionId)\r\n .then((response: api.UserWithBonuses) => {\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n if (error.response && (error.response.status == 401 || error.response.status == 403)) {\r\n this.signOutClientSide();\r\n }\r\n\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n public getCurrentUserWithProfile(): Promise {\r\n return this.accountService.getCurrentUserWithProfile();\r\n }\r\n\r\n public ordersList(): Promise {\r\n return this.accountService.ordersList();\r\n }\r\n\r\n public GetActiveReservationPublicId(): Promise{\r\n return this.accountService.GetActiveReservationPublicId();\r\n }\r\n\r\n public registration(email: string, password: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.accountService.registration(email, password)\r\n .then((response: boolean) => {\r\n new utils.GoogleAnalyticsService().sendPageview('/registration/submitted', 'Registration / Submitted');\r\n\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n public setPassword(token: string, password: string): Promise {\r\n return this.accountService.setPassword(token, password);\r\n }\r\n\r\n public signIn(emailOrPhone: string, password: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.accountService.signIn(emailOrPhone, password)\r\n .then((response: api.User) => {\r\n const retailRocket = new api.RetailRocket();\r\n retailRocket.userAuthenticated({}).finally(() => {\r\n this.signInClientSide();\r\n\r\n new utils.GoogleAnalyticsService().sendPageview('/signin/success', 'Signin / Success');\r\n\r\n resolve(response);\r\n });\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n public signInClientSide() {\r\n // It's ok. Let's set the cookie to prevent unessesary requests.\r\n Cookie.set('g2sATKN', true, { \r\n path: '/',\r\n expires: moment().add(1, 'year').toDate(),\r\n domain: G2S.config.cookieDomain,\r\n sameSite: G2S.isSecure ? 'none' : undefined,\r\n secure: G2S.isSecure\r\n });\r\n\r\n this.authenticated = true;\r\n }\r\n\r\n public signOut(): Promise {\r\n this.signOutClientSide();\r\n\r\n new utils.GoogleAnalyticsService().sendPageview('/signout', 'Signout');\r\n\r\n // Sign out server-side\r\n return new Promise((resolve, reject) => {\r\n this.accountService.signOut()\r\n .then((response: boolean) => {\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n public sendOneTimePassword(email: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.accountService.sendOneTimePassword(email)\r\n .then((response: boolean) => {\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n public signInByOneTimePassword(email: string, oneTimePassword: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.accountService.signInByOneTimePassword(email, oneTimePassword)\r\n .then((response: boolean) => {\r\n this.signInClientSide();\r\n this.signInClientSide();\r\n\r\n new utils.GoogleAnalyticsService().sendPageview('/signin/success', 'Signin / Success');\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n public signOutClientSide() {\r\n Cookie.remove('g2sATKN', {\r\n path: '/',\r\n domain: G2S.config.cookieDomain,\r\n sameSite: G2S.isSecure ? 'none' : undefined,\r\n secure: G2S.isSecure\r\n });\r\n\r\n this.authenticated = false;\r\n this.currentUser = null;\r\n }\r\n\r\n public updateEmail(email: string, currentPassword: string): Promise {\r\n return this.accountService.updateEmail(email, currentPassword);\r\n }\r\n\r\n public updatePassword(newPassword: string, currentPassword: string): Promise {\r\n return this.accountService.updatePassword(newPassword, currentPassword);\r\n }\r\n\r\n public updatePhone(phone: string, currentPassword: string): Promise {\r\n return this.accountService.updatePhone(phone.replace(/[^\\d]/gi, ''), currentPassword);\r\n }\r\n\r\n public updateProfile(user: api.User): Promise {\r\n return this.accountService.updateProfile(user);\r\n }\r\n\r\n private static isAuthCookie(): boolean {\r\n if (Cookie.get('g2sATKN')) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n // Static method to use in vue router\r\n public static routeAnonymousOnly(to, from, next) {\r\n if (AuthService.isAuthCookie()) {\r\n next({\r\n path: '/account'\r\n });\r\n } else {\r\n next();\r\n }\r\n }\r\n\r\n // Static method to use in vue router\r\n public static routeAuthenticatedOnly(to, from, next) {\r\n if (!AuthService.isAuthCookie()) {\r\n if (G2S.config.clientDevice.type === 'desktop') {\r\n next({\r\n path: '/'\r\n });\r\n } else {\r\n next({\r\n path: '/signin',\r\n query: { redirect: to.fullPath }\r\n });\r\n }\r\n } else {\r\n next();\r\n }\r\n }\r\n\r\n}\r\n","export * from './AuthService';\r\n","import * as flights from '../flights';\r\n\r\nexport * from './AccountService';\r\nexport * from './BannerService';\r\nexport * from './BestPriceService';\r\nexport * from './ContentService';\r\nexport * from './CouponService';\r\nexport * from './DestinationService';\r\nexport * from './FlightService';\r\nexport * from './PromotionService';\r\nexport * from './ReservationService';\r\nexport * from './RetailRocket';\r\nexport * from './SupportService';\r\nexport * from './UtilsService';\r\n\r\nexport interface Aircraft {\r\n uniqueId: string;\r\n iataCode: string;\r\n manufacturer: string;\r\n model: string;\r\n displayName: string;\r\n}\r\n\r\nexport interface Airline {\r\n uniqueId: string;\r\n iataCode: string;\r\n name: string;\r\n shortName: string;\r\n alliance: string;\r\n}\r\n\r\nexport interface Animals {\r\n type: string;\r\n weight: number;\r\n containerDimensions: Dimensions;\r\n}\r\n\r\nexport interface ApiRequest {\r\n currencyCode?: string;\r\n locale?: string;\r\n theme?: string;\r\n host?: string;\r\n instance?: string;\r\n marketCode?: string;\r\n}\r\n\r\nexport enum BaggageChoiceType {\r\n notSet,\r\n manualAccepted,\r\n manualDenied,\r\n confirmationAccepted,\r\n confirmationDenied\r\n}\r\n\r\nexport interface Banner {\r\n id: number;\r\n content: string;\r\n}\r\n\r\nexport interface BannerRequest extends ApiRequest {\r\n displayArea: string;\r\n departureDestinationId?: number;\r\n arrivalDestinationId?: number;\r\n validatingAirlineId?: number;\r\n}\r\n\r\nexport interface BillInfo {\r\n id: number;\r\n paymentTypeId: string;\r\n amount: number;\r\n billStatus: string;\r\n billType: string;\r\n billTypeName: string;\r\n paymentError: string;\r\n publicId: string;\r\n}\r\n\r\nexport interface BonusStatus {\r\n creditTotal: number;\r\n debitTotal: number;\r\n currentBalance: number;\r\n canBeUsed: boolean;\r\n leftToFirstUse: number;\r\n transfers: BonusTransfer[];\r\n}\r\n\r\nexport interface BonusTransfer {\r\n id: number;\r\n userId: number;\r\n bonusAmount: number;\r\n transferType: string;\r\n transferReason: string;\r\n uiReason: string;\r\n date: string;\r\n reservation: ReservationListModel;\r\n}\r\n\r\nexport interface BookProductsRequest extends ApiRequest {\r\n parentReservationPublicId: string;\r\n paymentTypeId: string;\r\n productIds: number[];\r\n confirmationPageUrlTemplate: string;\r\n gaClientID: string;\r\n creditCard?: CreditCard;\r\n bonusAmount?: number;\r\n clientDevice: ClientDevice;\r\n choiceType: ProductChoiceType;\r\n redirectDomain?: string;\r\n}\r\n\r\nexport interface BookProductsResponse {\r\n reservationPublicId: string;\r\n parentReservationPublicId: string;\r\n paymentInfo: PaymentInfo;\r\n}\r\n\r\nexport interface CancelProductRequest extends ApiRequest {\r\n productReservationId: number;\r\n}\r\n\r\nexport interface CancelProductAfterPopupRequest extends CancelProductRequest {\r\n applyDiscount: boolean;\r\n}\r\n\r\nexport interface CheckFlightRequest extends ApiRequest {\r\n searchId: string;\r\n flightId: string;\r\n bookingSessionId?: number;\r\n}\r\n\r\nexport interface CheckFlightResponse {\r\n flight: Flight;\r\n}\r\n\r\nexport interface CheckFlightConfirmRequest extends ApiRequest {\r\n bookingSessionId: number;\r\n elapsedMsClient: number;\r\n flightId: string;\r\n searchId: string;\r\n}\r\n\r\nexport interface ClientDevice {\r\n browser: string;\r\n colorDepth: number;\r\n ipAddress: string;\r\n javaEnabled: boolean;\r\n language: string;\r\n platform: string;\r\n screenHeight: number;\r\n screenWidth: number;\r\n timezone: number;\r\n type: string;\r\n userAgent: string;\r\n windowHeight: number;\r\n windowWidth: number;\r\n}\r\n\r\nexport interface Coach {\r\n schemaId: string;\r\n number: string;\r\n type: string;\r\n isTwoStorey: boolean;\r\n isCanChooseBedding: boolean;\r\n hasDynamicPricing: boolean;\r\n isPetsAllowed: boolean;\r\n isPetInCoachAllowed: boolean;\r\n electronicTicket: boolean;\r\n isBranded: boolean;\r\n beddingTariff: null;\r\n loyaltyCards: string[] | null;\r\n fareInfo: null;\r\n places: CoachPlace[];\r\n placesInfo: {\r\n lowerSide: null;\r\n upperSide: null;\r\n upperCoupe: number;\r\n lowerCoupe: number;\r\n total: null;\r\n };\r\n serviceClass: {\r\n code: string;\r\n name: string;\r\n description: string;\r\n };\r\n}\r\n\r\nexport interface CoachPlace {\r\n number: number;\r\n gender: 'None';\r\n placeType: 'Lower';\r\n fare: {\r\n amount: number;\r\n currency: string;\r\n };\r\n}\r\n\r\n/**\r\n * Coach schemaId according to coach *.svg file name.\r\n * Files located in Js/Core/coach-chemas.\r\n * */\r\nexport enum CoachTemplates {\r\n 'FPK_2/4_V1' = 'FPK_2-4_V1',\r\n 'FPK_3/4_V1' = 'FPK_3-4_V1'\r\n}\r\n\r\nexport interface CorporateAccount {\r\n status: 'Blocked' | 'Active' | 'InProgress';\r\n currentBalance: number;\r\n overdraftLimit: number;\r\n creditTotal: number;\r\n debitTotal: number;\r\n canBeUsed: boolean;\r\n}\r\n\r\nexport interface ContentText {\r\n id: string;\r\n body: string;\r\n}\r\n\r\nexport interface ContentTextRequest extends ApiRequest {\r\n id: string;\r\n}\r\n\r\nexport interface CouponCheckModel {\r\n id: number;\r\n guid: string;\r\n name: string;\r\n expiryDate: string; // string used because of timezone problems with Date\r\n discountAmount: number;\r\n discountAmountBase: number;\r\n productId: number;\r\n product?: any;\r\n}\r\n\r\nexport interface CouponCheckRequest extends ApiRequest {\r\n code: string;\r\n searchId: string;\r\n email: string;\r\n flightId: string;\r\n partnerCookie: string;\r\n passengers: PassengerCreateData[];\r\n}\r\n\r\nexport interface CouponListModel {\r\n guid: string;\r\n name: string;\r\n amount: number;\r\n expiryDate: string; // string used because of timezone problems with Date\r\n isUsed: boolean;\r\n}\r\n\r\nexport interface CreateReservationRequest extends ApiRequest {\r\n paymentMethod?: any;\r\n adapterData?: string;\r\n animals?: Animals;\r\n baggageChoiceType: BaggageChoiceType;\r\n bonusAmount?: number;\r\n bookingSessionId: number;\r\n brandChoiceType: FlightBrandChoiceType;\r\n clientDevice: ClientDevice;\r\n confirmationPageUrlTemplate: string;\r\n couponGuid: string;\r\n creditCard?: CreditCard;\r\n flightId: string;\r\n gaClientID: string;\r\n markerReferrer: string | null;\r\n partnerCookie: string;\r\n passengersCreateData: PassengersCreateData;\r\n paymentTypeId: string;\r\n products: ProductBookingInfo[];\r\n searchId: string;\r\n timestamp: string;\r\n upgradedFromFlightId?: string;\r\n baggageOptions: string[];\r\n queryString: string;\r\n}\r\n\r\nexport interface CreateReservationResult {\r\n paymentInfo: PaymentInfo;\r\n reservationInfo: ReservationInfo;\r\n authToken: string;\r\n}\r\n\r\nexport interface StartedReservation{\r\n reservationPublicId: string;\r\n}\r\n\r\nexport interface CreditCard {\r\n cardHolderName: string;\r\n cardNumber: string;\r\n cardCvv: string;\r\n cardExpMonth: number;\r\n cardExpYear: number; // Short format - YY\r\n encryptedPacket?: string;\r\n}\r\n\r\nexport enum CustomBaggageFlightDirection {\r\n both = 'Both',\r\n outward = 'Outward',\r\n return = 'Return'\r\n}\r\n\r\nexport interface CustomBaggage {\r\n bookable: boolean;\r\n options: CustomBaggageOption[] | null;\r\n}\r\n\r\nexport interface CustomBaggageOption {\r\n baggageOptions: CustomBaggageItem[];\r\n customBaggageFlightDirection: CustomBaggageFlightDirection;\r\n destinationFromUID: string;\r\n destinationToUID: string;\r\n}\r\n\r\nexport interface CustomBaggageItem {\r\n bagsQuantity: number;\r\n bagsWeight: string;\r\n currency: string;\r\n id: string;\r\n perPassenger: boolean;\r\n price: number;\r\n selected: boolean;\r\n}\r\n\r\nexport interface CustomBaggageReservationDetails {\r\n options: CustomBaggageOptionReservationDetails[];\r\n totalPrice: number;\r\n}\r\n\r\nexport interface CustomBaggageOptionReservationDetails {\r\n baggageOptions: CustomBaggageItemReservationDetails[];\r\n customBaggageFlightDirection: CustomBaggageFlightDirection;\r\n destinationFromUID: string;\r\n destinationToUID: string;\r\n}\r\n\r\nexport interface CustomBaggageItemReservationDetails {\r\n bagsQuantity: number;\r\n bagsWeight: string;\r\n currency: string;\r\n passengerId: number;\r\n perPassenger: boolean;\r\n price: number;\r\n}\r\n\r\nexport interface Destination {\r\n address: string | null;\r\n city: Destination;\r\n country: Destination;\r\n iataCode: string;\r\n localizedName: string;\r\n name: string;\r\n type: string;\r\n uniqueId: number;\r\n}\r\n\r\nexport interface Dimensions {\r\n length: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface ExternalLinkRequest extends ApiRequest {\r\n searchId: string;\r\n flightId: string;\r\n externalPartnerId?: string;\r\n externalSearchId?: string;\r\n externalFlightId?: string;\r\n externalFlightBillingPrice?: string;\r\n}\r\n\r\nexport interface ExternalLinkResponse {\r\n method: 'GET' | 'POST';\r\n url: string;\r\n pixelUrl: string;\r\n params?: { [key: string]: string };\r\n}\r\n\r\nexport interface FareDetailsRequest extends ApiRequest {\r\n searchId: string;\r\n flightId: string;\r\n publicReservationId: string;\r\n}\r\n\r\nexport interface FareDetailsResponse {\r\n isSuccess: boolean;\r\n agencyFareDetails?: string;\r\n gdsFareDetails?: string;\r\n gdsFareDetailsLocale?: string;\r\n}\r\n\r\nexport interface FinishPreauth3dsRequest extends ApiRequest {\r\n reservationPublicId: string;\r\n billPublicId: string;\r\n paymentId: number;\r\n}\r\n\r\nexport interface FlightBrand {\r\n brandGroupGuid: string;\r\n code: string;\r\n descriptionUI: string;\r\n descriptionUIShort: string;\r\n name: string;\r\n nameUI: string;\r\n url: string;\r\n}\r\n\r\nexport interface Flight {\r\n adapter: string;\r\n adapterData: string; // Adapter specific data to pass to createOrRestartReservation\r\n area: string;\r\n basePrice: number;\r\n billingPrice: number;\r\n billingPricePerMonth: number;\r\n bookingClass: string;\r\n bookingChecked: boolean;\r\n bookingPossible: boolean;\r\n brand: FlightBrand;\r\n currencyCode?: string;\r\n customBaggage: CustomBaggage;\r\n exchangeRules: FlightModifyRules;\r\n externalOffers: FlightSearchExternalOffer[];\r\n externalPartner: FlightSearchPartner;\r\n farePrice: number;\r\n flightFlags: SegmentFlags[];\r\n flightKind: FlightKind;\r\n legs: Leg[];\r\n seatMaps: SeatMap[];\r\n multiFRType: number;\r\n priority: number;\r\n promo_coupon_name: string;\r\n refundRules: FlightModifyRules;\r\n regularBaggage: string;\r\n fee: number;\r\n taxes: number;\r\n tfid: number | null;\r\n uniqueId: string;\r\n validatingCarrierUID: string;\r\n additionalOfferKeys: string[];\r\n}\r\n\r\nexport interface FlightBaggage {\r\n pieces: number;\r\n pieceWeight: number;\r\n length: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport enum FlightNotificationIcon {\r\n Info,\r\n Warn,\r\n Error\r\n}\r\n\r\nexport interface FlightNotification {\r\n htmlText: string;\r\n icon: FlightNotificationIcon;\r\n}\r\n\r\nexport interface SurchargeInfo {\r\n type: string;\r\n surchargeAmount: number;\r\n surchargeAmountCurrency: string;\r\n clientText: string;\r\n buttonAcceptText: string;\r\n buttonRejectText: string;\r\n}\r\n\r\nexport interface FlightBookingDetails extends FlightDictionaries {\r\n partnerAirlines: Airline[];\r\n bookingSessionId: number;\r\n bookingPossible: boolean;\r\n surchargeInfo: SurchargeInfo;\r\n changeRefundFee: Price;\r\n constraints: ReservationConstraints;\r\n countryCrossing: string;\r\n countries: Destination[];\r\n defaultCitizenshipId: number;\r\n flights: Flight[];\r\n notifications: [];\r\n trains: Train[];\r\n trainCoaches: { [schemaId: string]: string };\r\n paymentTypes: PaymentTypeDesc[];\r\n products: Product[];\r\n productPopups: ProductPopup[];\r\n productPopupsDiscount: ProductPopup[];\r\n search: FlightSearchRequest;\r\n selectedFlightUniqueId: string;\r\n showPopups: boolean; // #4998\r\n prebookingTimeLimitMinutes?: number | null;\r\n brandedProductKits?: ProductBrand[];\r\n additionalOfferKeys: string[];\r\n}\r\n\r\nexport enum FlightBrandChoiceType {\r\n notSet,\r\n manualDefault,\r\n manualUpgrade,\r\n confirmationDefault,\r\n confirmationUpgrade\r\n}\r\n\r\nexport interface FlightDictionaries {\r\n aircrafts: { [uniqueId: string]: Aircraft };\r\n airlines: { [uniqueId: string]: Airline };\r\n destinations: { [uniqueId: string]: Destination };\r\n}\r\n\r\nexport enum FlightKind {\r\n regular = 'Regular',\r\n charter = 'Charter',\r\n lowcost = 'Lowcost',\r\n regularSpecial = 'RegularSpecial',\r\n multi = 'Multi'\r\n}\r\n\r\nexport enum SegmentFlags {\r\n nightTransfer = 'NightTransfer',\r\n changeAeroport = 'ChangeAeroport',\r\n longLayover = 'LongLayover'\r\n}\r\n\r\nexport interface FlightModifyRules {\r\n isAllowable: boolean;\r\n fee: number;\r\n}\r\n\r\nexport interface FlightSearchExternalOffer {\r\n billingPrice: number;\r\n externalFlightId: string;\r\n externalSearchId: string;\r\n partnerId: number;\r\n partnerName: string;\r\n}\r\n\r\nexport interface FlightSearchIdRequest extends ApiRequest {\r\n searchId: string;\r\n}\r\n\r\nexport interface FlightSearchPartner {\r\n id: number;\r\n name: string;\r\n}\r\n\r\nexport interface FlightSearchRequest extends ApiRequest {\r\n sections: FlightSearchSection[];\r\n adults: number;\r\n children: number;\r\n babies: number;\r\n bookingClass: string;\r\n isRangeSearch: boolean;\r\n partner?: string; // = cookie g2sP\r\n partnerCookie: string; // = cookie g2sP\r\n}\r\n\r\nexport interface FlightSearchResult extends FlightDictionaries {\r\n searchId: string;\r\n flights: Flight[];\r\n banners: Banner[];\r\n}\r\n\r\nexport interface FlightSearchArchiveResult extends FlightSearchResult {\r\n searchRequest: FlightSearchRequest;\r\n}\r\n\r\nexport interface FlightSearchSection {\r\n to: string;\r\n from: string;\r\n date: string;\r\n}\r\n\r\nexport enum FlightStopKind {\r\n Standard,\r\n ByPassenger\r\n}\r\n\r\nexport interface FlightTermsRequest extends ApiRequest {\r\n searchId: string;\r\n flightId: string;\r\n}\r\n\r\nexport interface GetFlightBookingDetailsRequest extends ApiRequest {\r\n baggage: string; // for url query param stats\r\n clientDevice: ClientDevice;\r\n flightId: string;\r\n gaClientId: string;\r\n partnerCookie: string;\r\n searchId: string;\r\n skipCheckBooking: boolean;\r\n markerReferrer: string | null;\r\n queryString: string;\r\n}\r\n\r\nexport interface GetReservationPublicIdRequest {\r\n reservationNumber: string;\r\n emailOrPhone: string;\r\n}\r\n\r\nexport interface GetReservationPublicIdResponse {\r\n reservationPublicId: string;\r\n}\r\n\r\nexport interface GetReservationStatusResult extends FlightDictionaries {\r\n reservationInfo: ReservationInfo;\r\n flight: Flight;\r\n billInfo: BillInfo;\r\n paymentTypes: PaymentTypeDesc[];\r\n changeRefundFee: number;\r\n changeRefundFeeCurrency: string;\r\n isMaskedPersonalData?: boolean;\r\n redirectUrl: string | null;\r\n}\r\n\r\ninterface RetailRocket {\r\n sessionId: string;\r\n timestamp: string;\r\n}\r\n\r\nexport interface RRUserAuthenticated {\r\n userId?: number;\r\n}\r\n\r\nexport interface RRFlightDetailsOpened {\r\n flightId: string;\r\n searchId: string;\r\n}\r\n\r\nexport interface RROrderFormOpened {\r\n flightId: string;\r\n searchId: string;\r\n products: Product[];\r\n mailTrackingId?: string;\r\n}\r\n\r\nexport interface RROrderFormStepOpened {\r\n stepNumber: number;\r\n flightKey: string;\r\n products: Product[];\r\n bookingSessionId: number;\r\n email: string;\r\n}\r\n\r\nexport interface RRProductSelected {\r\n productId: number;\r\n flightKey: string;\r\n bookingSessionId?: number;\r\n}\r\n\r\nexport interface RRReservationCreated {\r\n reservationId: number;\r\n flightKey: string;\r\n products: Product[];\r\n}\r\n\r\nexport interface RRSearchCompleted {\r\n searchId: string;\r\n searchPhrase: string;\r\n mailTrackingId?: string;\r\n}\r\n\r\nexport interface HyggeDetailsModel {\r\n id: string;\r\n hyggeId: string;\r\n details: string;\r\n paid: boolean;\r\n airlineCode: string;\r\n airlineName: string;\r\n}\r\n\r\nexport interface HyggeModel {\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface HyggeResult {\r\n hyggies: { [id: string]: HyggeModel[] };\r\n items: HyggeDetailsModel[];\r\n}\r\n\r\nexport interface InsurancePolicy {\r\n id: number;\r\n externalId: string;\r\n productId: number;\r\n providerId: string;\r\n url: string;\r\n}\r\n\r\nexport interface Leg {\r\n baggageBySegments: boolean;\r\n bookingClass: string;\r\n flightKind: FlightKind;\r\n groupingId: string;\r\n segments: Segment[];\r\n}\r\n\r\nexport interface Seat {\r\n available: boolean;\r\n availableChild: string;\r\n column: number;\r\n currency: string;\r\n id: string;\r\n letter: string;\r\n number: string;\r\n price: number;\r\n row: number;\r\n type: number | null;\r\n withInfant: boolean;\r\n selected: boolean;\r\n}\r\n\r\nexport interface SeatMap {\r\n columns: number;\r\n flightCode: string;\r\n rows: any;\r\n rowsCount: number;\r\n seatBrands: SeatBrand[];\r\n segmentFlightCode: string;\r\n}\r\n\r\nexport interface MarkerOwner {\r\n id: number;\r\n value: string;\r\n}\r\n\r\nexport interface NextTripPurpose {\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface PassengersCreateData {\r\n contactEmail: string;\r\n contactPhone: string;\r\n passengers: PassengerCreateData[];\r\n}\r\n\r\nexport interface PassengerCreateData {\r\n firstName: string;\r\n middleName: string;\r\n lastName: string;\r\n birthday: string;\r\n gender: string;\r\n card: string;\r\n cardAirlineId: string;\r\n chosenSeatId: string[] | null;\r\n citizenship: number;\r\n documentNumber: string;\r\n documentValidTill: string;\r\n baggageOptions: string[];\r\n trainPlaces?: TrainPlace[];\r\n type: PassengerType | null;\r\n}\r\n\r\nexport interface PassengerInfo {\r\n passengerId: number;\r\n firstName: string;\r\n middleName: string;\r\n lastName: string;\r\n birthday: string; // string used because of timezone problems with Date\r\n gender: string;\r\n card: string;\r\n citizenship: string;\r\n documentNumber: string;\r\n documentValidTill: string; // string used because of timezone problems with Date\r\n ticketNumber: string;\r\n insurances: InsurancePolicy[];\r\n}\r\n\r\nexport enum PassengerType {\r\n adult = 'adult',\r\n child = 'child',\r\n infant = 'infant'\r\n}\r\n\r\nexport interface PaymentInfo {\r\n redirect: PaymentInfoRedirect;\r\n inPlace: PaymentInfoInPlace;\r\n billPublicId: string;\r\n paymentId: number;\r\n errorCode?: number;\r\n split?: {\r\n agencyAmount: number;\r\n agencyAmountCurrency: string;\r\n airlineAmount: number;\r\n airlineAmountCurrency: string;\r\n };\r\n}\r\n\r\nexport interface PaymentInfoRedirect {\r\n requestParameters: RequestParam[];\r\n url: string;\r\n method: string;\r\n}\r\n\r\nexport interface PaymentInfoInPlace {\r\n succeed: boolean;\r\n status: string;\r\n errorMessage: string;\r\n exceptionMessage?: string;\r\n}\r\n\r\nexport interface PaymentTypeDesc {\r\n paymentTypeId: string;\r\n price: number;\r\n displayPrice?: number;\r\n commission: number;\r\n template: string;\r\n kind: string;\r\n name: string;\r\n farePrice: number;\r\n taxes: number;\r\n serviceFee: number;\r\n discount: number;\r\n basePrice: number;\r\n insurancePackagePrice: number;\r\n servicePackagePrice: number;\r\n customBaggageCost: number;\r\n paymentMethods?: any;\r\n payed: number;\r\n isDirectPayment: boolean;\r\n paymentTypeOptions: any;\r\n}\r\n\r\nexport interface PayReservationRequest extends ApiRequest {\r\n billPublicId?: string;\r\n bonusAmount?: number;\r\n clientDevice: ClientDevice;\r\n confirmationPageUrlTemplate: string;\r\n creditCard?: CreditCard;\r\n paymentTypeId: string;\r\n reservationPublicId: string;\r\n}\r\n\r\nexport interface Price {\r\n value: number;\r\n currency: string;\r\n}\r\n\r\nexport interface Product {\r\n acceptOrDenyRequired: boolean;\r\n adapter: string;\r\n additionalProcessing?: boolean | null;\r\n backgroundColor?: string;\r\n billingPrice: number;\r\n buttonAccept: string;\r\n cancelPossible: boolean;\r\n cancelUnavailabilityReason?: string | null;\r\n currencyCode?: string;\r\n couponDiscountAmount?: number;\r\n description: string;\r\n descriptionConfirm: string;\r\n descriptionShort: string;\r\n details: any;\r\n discountRuleId: number;\r\n displayType: string;\r\n externalId: string;\r\n hint: any;\r\n id: number;\r\n kitId?: number;\r\n labelAccept: string;\r\n labelDeny: string;\r\n name: string;\r\n price: number;\r\n priceCurrency: number;\r\n priceType: string;\r\n priority: number;\r\n productId: number;\r\n productReservationId: number;\r\n saleType: ProductSaleType;\r\n selectedByDefault: boolean;\r\n status: ProductStatus;\r\n stepNumber: number;\r\n type: string;\r\n sortOrder: number;\r\n flightId?: any;\r\n internalProducts?: any;\r\n internalProductIds?: any;\r\n crossedOutPrice?: number | null;\r\n timerText?: string | null;\r\n timerDuration?: number | null;\r\n tagText: string | null;\r\n tagColor: string | null;\r\n prefixText: string | null;\r\n contents?: string[];\r\n}\r\n\r\nexport interface ProductPopup {\r\n backgroundColor: number;\r\n brandedKitId: number | null;\r\n buttonAction1: string;\r\n buttonAction2: string;\r\n buttonAction3: string;\r\n buttonText1: string;\r\n buttonText2: string;\r\n buttonText3: string;\r\n buttonColor1: string;\r\n buttonColor2: string;\r\n buttonColor3: string;\r\n buttonIcon1?: string;\r\n buttonIcon2?: string;\r\n buttonIcon3?: string;\r\n buttonStyle1: string;\r\n buttonStyle2: string;\r\n buttonStyle3: string;\r\n discountId?: number;\r\n displayType?: any;\r\n emTextColor?: string;\r\n isCloseIconVisible: boolean;\r\n kitId: number;\r\n markerText: string;\r\n popupId: number;\r\n position: ProductPopupPosition;\r\n productId: number;\r\n productName?: string | null;\r\n reverse?: boolean;\r\n reservationPriceText?: string | null;\r\n secondProductId?: number;\r\n targetProductId: number;\r\n text: string;\r\n type: ProductPopupType;\r\n popupTypeNumber: number;\r\n firstButtonText?: string;\r\n crossedOutPrice?: number | null;\r\n timerText?: string | null;\r\n timerDuration?: number | null;\r\n}\r\n\r\nexport interface ProductBrand {\r\n acceptOrDenyRequired: boolean;\r\n contents: [];\r\n kitId: number;\r\n kitTarget: string;\r\n products: Product[];\r\n stepOnForm: number;\r\n topText: string;\r\n style: string;\r\n needToSelect: boolean;\r\n}\r\nexport interface ProductBranded {\r\n backgroundColor: string;\r\n buttonAcceptColor: string;\r\n buttonAcceptStyle: string;\r\n buttonAcceptText: string;\r\n contents: any;\r\n contentsColor: string;\r\n displayType: string;\r\n hint?: any;\r\n hintColor: string;\r\n kitId: number;\r\n priceTextColor: string;\r\n productId: number;\r\n productName: string;\r\n sortOrder: number;\r\n type: string;\r\n}\r\n\r\nexport interface BrandedProductKits {\r\n contents: string[];\r\n kitId: number;\r\n kitTarget: string;\r\n products: ProductBranded[];\r\n stepOnForm: number;\r\n style: string;\r\n subText: string;\r\n topText: string;\r\n}\r\n\r\nexport interface CancelProductResponse {\r\n message: string;\r\n localizedMessage: string;\r\n success: boolean;\r\n productReservationId: number;\r\n popup: ProductPopup;\r\n product: Product;\r\n}\r\n\r\nexport enum ProductPopupPosition {\r\n afterOrder = 'AfterOrder',\r\n afterStep1 = 'AfterStep1',\r\n afterStep2 = 'AfterStep2'\r\n}\r\n\r\nexport enum ProductPopupType {\r\n product = 'Product',\r\n flightBaggage = 'FlightBaggage',\r\n discount = 'Discount',\r\n gift = 'Gift'\r\n}\r\n\r\nexport enum ProductSaleType {\r\n bookingForm = 'BookingForm',\r\n popup = 'Popup',\r\n yandex = 'YandexPayButton'\r\n}\r\n\r\nexport enum ProductStatus {\r\n /** Забронирован. */\r\n booked = 'Booked',\r\n /** Выписан. */\r\n issued = 'Issued',\r\n /** Возвращен */\r\n refunded = 'Refunded',\r\n /** Отменен */\r\n canceled = 'Canceled',\r\n /** Удален. (Храним PR в базе, но в коде отсекаем такие PR, чтобы не поехали отчеты и т.п) */\r\n deleted = 'Deleted'\r\n}\r\n\r\nexport interface ProductBookingDetails {\r\n paymentTypes: PaymentTypeDesc[];\r\n products: Product[];\r\n reservationInfo: ReservationInfo;\r\n redirectUrl: string | null;\r\n}\r\n\r\nexport interface ProductBookingDetailsRequest extends ApiRequest {\r\n reservationPublicId: string;\r\n productId?: number;\r\n productIds?: number[];\r\n choiceType?: ProductChoiceType;\r\n redirectDomain?: string;\r\n}\r\n\r\nexport interface ProductBookingInfo {\r\n id: number;\r\n options: string[];\r\n choiceType: ProductChoiceType;\r\n}\r\n\r\nexport enum ProductChoiceType {\r\n // Значение по-умолчанию.\r\n notSet = 0,\r\n\r\n // Выбран вручную (на ФЗ).\r\n manualAccepted = 1,\r\n\r\n // Отказался вручную (на ФЗ).\r\n manualDenied = 2,\r\n\r\n // Согласился в догонялке.\r\n confirmationAccepted = 3,\r\n\r\n // Отказался в догонялке.\r\n confirmationDenied = 4,\r\n\r\n // Согласился в догонялке к догонялке (ДКД).\r\n popupForPopupAccepted = 5,\r\n\r\n // Отказался в догонялке к догонялке (ДКД).\r\n popupForPopupDenied = 6,\r\n\r\n // Согласился на странице заказа.\r\n orderPageAccepted = 7,\r\n\r\n // Отказался на странице заказа.\r\n orderPageDenied = 8,\r\n\r\n // Согласился на странице заказа, но перешел на нее из бота в телеграмме.\r\n telegramBotAccepted = 9,\r\n\r\n // Отказался на странице заказа, но перешел на нее из бота в телеграмме.\r\n telegramBotDenied = 10,\r\n\r\n // Согласился в транзакционном (допродажном) письме.\r\n transactionEmailAccepted = 11,\r\n\r\n // Отказался в транзакционном (допродажном) письме.\r\n transactionEmailDenied = 12,\r\n\r\n // Согласился в системном (например письмо с билетом) письме.\r\n systemEmailAccepted = 13,\r\n\r\n // Отказался в системном (например письмо с билетом) письме.\r\n systemEmailDenied = 14,\r\n\r\n // Согласился и оформил услугу через \"Службу Заботы\".\r\n customerCareServiceAccepted = 15,\r\n\r\n // Отказался и оформил услугу через \"Службу Заботы\".\r\n customerCareServiceDenied = 16,\r\n\r\n // Согласился в письме отправленным компанией RetailRocket.\r\n retailEmailAccepted = 17,\r\n\r\n // Отказался в письме отправленным компанией RetailRocket.\r\n retailEmailDenied = 18,\r\n\r\n // Согласился в догонялке на ФЗ.\r\n popupOnOrderFormAccepted = 19,\r\n\r\n // Отказался в догонялке на ФЗ.\r\n popupOnOrderFormDenied = 20,\r\n\r\n // Услуга выбрана через i-api b2b Aviasales.\r\n integrationApiAccepted = 21,\r\n\r\n // Услуга отказана через i-api b2b Aviasales.\r\n integrationApiDenied = 22,\r\n}\r\n\r\nexport enum ProductType {\r\n insurance = 'Insurance',\r\n service = 'Service',\r\n package = 'Package',\r\n}\r\n\r\nexport enum ProductDisplayType {\r\n grouped = 'Grouped'\r\n}\r\n\r\nexport interface PromotionMemberCreateRequest extends ApiRequest {\r\n promotionId: number;\r\n email: string;\r\n name: string;\r\n phone: string;\r\n}\r\n\r\nexport interface PromotionMemberCreateResult {\r\n success: boolean;\r\n user: User;\r\n}\r\n\r\nexport interface RequestParam {\r\n paramName: string;\r\n paramValue: string;\r\n}\r\n\r\nexport enum NameConstraint {\r\n notAllowed = 'NotAllowed',\r\n required = 'Required',\r\n optional = 'Optional',\r\n}\r\n\r\nexport interface ReservationDocumentsConstrains {\r\n nameProperty: string;\r\n nameConstraint: NameConstraint;\r\n typeConstraint: number;\r\n}\r\n\r\nexport interface ReservationDocuments {\r\n nameDocument: string;\r\n typeIdentityDocument: string;\r\n constraints: ReservationDocumentsConstrains;\r\n}\r\n\r\nexport interface ConstraintsReasonText {\r\n reason: string;\r\n text: string;\r\n}\r\n\r\nexport interface CitizenshipConstraint {\r\n airlineId: number;\r\n countryId: number;\r\n reason: string;\r\n type: string;\r\n}\r\n\r\nexport interface SurchargeInfo {\r\n buttonAcceptText: string;\r\n buttonRejectText: string;\r\n clientText: string;\r\n surchargeAmount: number;\r\n surchargeAmountCurrency: string;\r\n type: string;\r\n}\r\n\r\nexport interface ReservationConstraints {\r\n allowCyrillicDocumentNumber: boolean;\r\n allowCyrillicPassengerName: boolean;\r\n citizenshipConstraints: CitizenshipConstraint[];\r\n documentValidTillRequired: boolean;\r\n documentValidTillVisible: boolean;\r\n documents?: any[];\r\n documentPassportForeign?: ReservationDocuments | null;\r\n documentPassportRu?: ReservationDocuments | null;\r\n documentBirthCertificate?: ReservationDocuments | null;\r\n documentOtherDocument?: ReservationDocuments | null;\r\n orderFormNewDocumentNumberRuValidationEnabled: boolean;\r\n lastFlightDate: string;\r\n maxAdultDateOfBirth: string;\r\n maxChildDateOfBirth: string;\r\n maxInfantDateOfBirth: string;\r\n middleNameRequired: boolean;\r\n mileCardVisible: boolean;\r\n minAdultDateOfBirth: string;\r\n minChildDateOfBirth: string;\r\n minInfantDateOfBirth: string;\r\n reasonText: ConstraintsReasonText[];\r\n requiredCitizenshipCountries: number[];\r\n}\r\n\r\nexport interface ReservationInfo {\r\n amount: number;\r\n bookingClass: string;\r\n contactEmail: string;\r\n contactPhone: string;\r\n couponDiscountAmount: number;\r\n createdDate: string;\r\n currencyCode?: string;\r\n customBaggage: CustomBaggageReservationDetails;\r\n discountOrFee?: number;\r\n isChangeRefundPossible: boolean;\r\n isPayed: boolean;\r\n isPaymentPossible: boolean;\r\n autoVoidPossible: boolean;\r\n isStatusPending: boolean;\r\n isTicketed: boolean;\r\n markerOwner: MarkerOwner;\r\n offer: number;\r\n passengers: PassengerInfo[];\r\n pnr: string;\r\n products: Product[];\r\n productsOnOrderPage: {\r\n grouping: string;\r\n products: Product[];\r\n };\r\n parentReservationPublicId: string;\r\n reservationNumber: string;\r\n reservationPublicId: string;\r\n reservationStatus: string;\r\n reservedTill: string;\r\n reservedTillExpired: boolean;\r\n surchargeInfo: SurchargeInfo;\r\n uiStatus: string;\r\n uiStatusDetails: string;\r\n uiStatusDetailsType: string;\r\n uiStatusType: string;\r\n}\r\n\r\nexport interface AutovoidSupportText {\r\n adviseText: string;\r\n accountText: string;\r\n}\r\n\r\nexport interface AutovoidStartedText {\r\n headerText: string;\r\n messageText: string;\r\n buttonAcceptText: string;\r\n}\r\n\r\nexport interface CheckAutoVoidAvailable {\r\n isAutoVoidAvailable: boolean;\r\n}\r\n\r\nexport interface OrdersExists {\r\n orderExists?: boolean;\r\n message?: string;\r\n}\r\n\r\nexport interface RefundInfo {\r\n clientText: string;\r\n headerText: string;\r\n youPaidText: string;\r\n weWillRefundText: string;\r\n termText: string;\r\n buttonAcceptText: string;\r\n buttonRejectText: string;\r\n buttonWriteManuallyText?: string;\r\n refundSum: number;\r\n paidSum: number;\r\n refundSumCurrency: string;\r\n}\r\n\r\nexport interface ReservationListModel {\r\n id: number;\r\n publicId: string;\r\n userId: number;\r\n statusId: number;\r\n reservationDate: string;\r\n lastModifiedDate: string;\r\n}\r\n\r\nexport interface ReservationStatusResult extends FlightDictionaries {\r\n reservationInfo: ReservationInfo;\r\n flight: Flight;\r\n billInfo: BillInfo;\r\n paymentTypes: PaymentTypeDesc[];\r\n changeRefundFee: number;\r\n changeRefundFeeCurrency: string;\r\n}\r\n\r\nexport interface SaveReservationOpinionRequest {\r\n reservationPublicId: string;\r\n opinion: number;\r\n}\r\n\r\nexport interface Segment {\r\n aircraftUID: string;\r\n airlineUID: string; // Validating airline\r\n arrivalDate: string;\r\n arrivalDateLocal: string;\r\n arrivalDestinationUID: string;\r\n arrivalTerminal: string;\r\n baggage: FlightBaggage;\r\n baggageCabin: FlightBaggage;\r\n departureDate: string;\r\n departureDateLocal: string;\r\n departureDestinationUID: string;\r\n departureTerminal: string;\r\n exchangeRules: FlightModifyRules;\r\n segmentFlags: SegmentFlags[];\r\n flightCode: string;\r\n nextSegmentStop: FlightStopKind;\r\n operatingAirlineUID: string; // Operating airline\r\n refundRules: FlightModifyRules;\r\n stops: SegmentStop[];\r\n supplierPnr: string;\r\n transport: SegmentTransport;\r\n}\r\n\r\nexport interface SegmentStop {\r\n aircraftUID: string;\r\n arrivalDate: string;\r\n arrivalDateLocal: string;\r\n departureDate: string;\r\n departureDateLocal: string;\r\n destinationUID: string;\r\n}\r\n\r\nexport enum SegmentTransport {\r\n air = 'Air',\r\n bus = 'Bus',\r\n train = 'Train'\r\n}\r\n\r\nexport interface SupportContacts {\r\n skype: string;\r\n phones: string[];\r\n workingHours: SupportWorkingHours;\r\n weekendWorkingHours: SupportWorkingHours;\r\n}\r\n\r\nexport interface SupportCreateRequest extends ApiRequest {\r\n orderNumber: string;\r\n email: string;\r\n category: string;\r\n description: string;\r\n}\r\n\r\nexport interface SupportCreateResult {\r\n success: boolean;\r\n message: string;\r\n}\r\n\r\nexport interface ReservationSupportInfo {\r\n reservationId: number;\r\n reservationCreateDate: string;\r\n reservationInfo: string;\r\n reservationStatus: string;\r\n ticketStatus: string;\r\n ticketExist: boolean;\r\n}\r\n\r\nexport interface SupportGetReservationsSupportInformationResult {\r\n reservationsSupportInfo: ReservationSupportInfo[];\r\n}\r\n\r\nexport interface SupportTicketComment {\r\n createdAt: string;\r\n author: string;\r\n message: string;\r\n}\r\n\r\nexport interface SupportTicket {\r\n reservationId: number;\r\n status: string;\r\n topic: string;\r\n comments: SupportTicketComment[];\r\n}\r\n\r\nexport interface SupportGetHistoryResult {\r\n tickets: SupportTicket[];\r\n}\r\n\r\nexport interface SupportWorkingHours {\r\n from: string;\r\n to: string;\r\n}\r\n\r\nexport interface SbpRefundBank {\r\n id: number;\r\n name: string;\r\n}\r\n\r\nexport interface SbpRefundInfo {\r\n refundSum: number;\r\n currency: string;\r\n banks: SbpRefundBank[];\r\n message: string;\r\n}\r\n\r\nexport interface SubmitSbpRefundRequest {\r\n publicId: string;\r\n viewedFrom: number; // 0 - Unknown, 1 - Sms, 2 - Email\r\n phoneNumber: string;\r\n refundBankId: number;\r\n clientIp: string;\r\n refundBankName: string;\r\n}\r\n\r\nexport interface Train {\r\n number: string;\r\n name: string | null;\r\n provider: string;\r\n isSuburban: boolean;\r\n direction: 'Outward' | 'Return' | 'Both';\r\n coaches: Coach[];\r\n}\r\n\r\nexport interface TrainPlace {\r\n train: string;\r\n coach: string;\r\n place: string;\r\n placeType: string;\r\n gender: string;\r\n}\r\n\r\nexport interface SeatBrand {\r\n description: string;\r\n id: number;\r\n title: string;\r\n}\r\n\r\nexport interface UpdateBookingSessionRequest extends ApiRequest {\r\n bookingSessionId: number;\r\n email: string;\r\n phone: string;\r\n}\r\n\r\nexport interface UpdateBookingSessionProductPopupRequest extends ApiRequest {\r\n bookingSessionId: number;\r\n productPopupId: number;\r\n popupType: number;\r\n isPopupOnForm: boolean;\r\n}\r\n\r\nexport interface UpdateBookingSessionNotEnoughMoneyPopupRequest extends ApiRequest {\r\n bookingSessionId?: number;\r\n reservationPublicId?: string;\r\n}\r\n\r\nexport interface Subscription {\r\n id: number;\r\n departureDestination: string;\r\n arrivalDestination: string;\r\n dateOutward: Date;\r\n dateReturn: Date | null;\r\n}\r\n\r\nexport interface BestPriceGetSubscriptionsRequest {\r\n email: string;\r\n}\r\n\r\nexport interface BestPriceGetSubscriptionsResult {\r\n subscriptions: Subscription[];\r\n}\r\n\r\nexport interface BestPriceSubscribeRequest {\r\n searchId: string;\r\n email: string;\r\n onlyFreeBaggage: boolean;\r\n onlyDirectFlight: boolean;\r\n}\r\n\r\nexport interface BestPriceSubscribeResult {\r\n subscriptionId: number;\r\n}\r\n\r\nexport interface BestPriceUnsubscribeRequest {\r\n email: string;\r\n subscriptionIds: number[];\r\n}\r\n\r\nexport interface ActiveReservationPublicId {\r\n id: string | null;\r\n}\r\n\r\nexport interface User {\r\n city: Destination | null;\r\n country: Destination | null;\r\n email: string | null;\r\n firstName: string;\r\n lastName: string;\r\n phone: string | null;\r\n birthday: string; // string used because of timezone problems with Date\r\n gender: string;\r\n hasPassword: boolean;\r\n nextTripPurposes: string[];\r\n roles: number | null;\r\n resetMarker?: boolean;\r\n}\r\n\r\nexport interface UserAccount extends User {\r\n bonuses: UserBonuses;\r\n companyAccount: CorporateAccount;\r\n countries: Destination[];\r\n cities: Destination[];\r\n allNextTripPurposes: NextTripPurpose[];\r\n orderChangeVisible: boolean;\r\n orderReturnVisible: boolean;\r\n passwordChangeVisible: boolean;\r\n}\r\n\r\nexport interface UserBonuses {\r\n enabled: boolean;\r\n status: UserBonusStatus;\r\n bonusMaxLimitPerOrder: number;\r\n bonusMaxPercentLimitPerOrder: number;\r\n reservationMinPrice: number;\r\n}\r\n\r\nexport interface UserBonusStatus {\r\n creditTotal: number;\r\n debitTotal: number;\r\n currentBalance: number;\r\n canBeUsed: boolean;\r\n leftToFirstUse: number;\r\n transfers: UserBonusTransfer[];\r\n}\r\n\r\nexport interface UserBonusTransfer {\r\n id: number;\r\n userId: number;\r\n bonusAmount: number;\r\n transferType: string;\r\n transferReason: string;\r\n date: string;\r\n reservation: ReservationListModel;\r\n}\r\n\r\nexport interface UserWithBonuses extends User {\r\n bonuses: UserBonuses;\r\n companyAccount: CorporateAccount;\r\n}\r\n\r\nexport interface UserWithProfile extends User {\r\n countries: Destination[];\r\n cities: Destination[];\r\n allNextTripPurposes: NextTripPurpose[];\r\n}\r\n","import { G2S } from '../g2s';\r\nimport * as api from '../api';\r\n\r\nexport class AccountService {\r\n confirm(token: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/Confirm',\r\n {\r\n token: token\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getRefundInfo(locale: string, reservationPublicId?: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n 'api/Voids/getclientformtext',\r\n {\r\n Locale: locale,\r\n ReservationPublicId: reservationPublicId\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getRefundInfoWithWriteUs(locale: string, reservationPublicId?: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n 'api/Voids/getclientformtextwithwriteus',\r\n {\r\n locale: locale,\r\n reservationId: reservationPublicId\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getSupportText(locale: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n 'api/Voids/getsupportadvisetext',\r\n {\r\n Locale: locale\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getProcessStartedText(locale: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n 'api/Voids/getprocessstartedformtext',\r\n {\r\n Locale: locale\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n checkVoidAvailability(reservationId: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n 'api/Voids/checkavailability',\r\n {\r\n reservationId\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n createVoid(reservationPublicId: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n 'api/Voids/Create',\r\n {\r\n reservationPublicId\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function () {\r\n resolve(true);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n createVoidSupport(reservationId: string, email?: string, description?: string | null): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n 'api/Voids/Create',\r\n {\r\n reservationId,\r\n email,\r\n description\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function () {\r\n resolve(true);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n \r\n confirmEmail(token: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/Email/Confirm',\r\n {\r\n token: token\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n deleteStart(): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/Delete/Start',\r\n {},\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n deleteConfirm(token: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/Delete/Confirm',\r\n {\r\n token: token\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n exists(emailOrPhone: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/Exists',\r\n {\r\n emailOrPhone: emailOrPhone\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n forgottenPassword(email: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/ForgottenPassword',\r\n {\r\n email: email\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getBonusStatus(): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/BonusStatus',\r\n {},\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getCurrentUser(): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/CurrentUser',\r\n null,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getCurrentUserAccount(): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/CurrentUserAccount',\r\n {},\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getCurrentUserWithProfile(): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/CurrentUserWithProfile',\r\n {},\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getCurrentUserWithBonuses(bookingSessionId?: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/CurrentUserWithBonuses',\r\n {\r\n bookingSessionId\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n ordersList(): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/Orders/List',\r\n {},\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n ordersExists(reservationId: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/Orders/Exists',\r\n {\r\n reservationId\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n GetActiveReservationPublicId(): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n 'api/GetActiveReservationPublicId',\r\n {},\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) { \r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n registration(email: string, password: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/Registration',\r\n {\r\n email: email,\r\n password: password\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n setPassword(token: string, password: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/SetPassword',\r\n {\r\n token: token,\r\n password: password\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n signIn(emailOrPhone: string, password: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/SignIn',\r\n {\r\n emailOrPhone: emailOrPhone,\r\n password: password\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n signOut(): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/SignOut',\r\n null,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function () {\r\n resolve(true);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n updateEmail(email: string, currentPassword: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/UpdateEmail',\r\n {\r\n email: email,\r\n currentPassword: currentPassword\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n updatePassword(newPassword: string, currentPassword: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/UpdatePassword',\r\n {\r\n currentPassword: currentPassword,\r\n newPassword: newPassword\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n updatePhone(phone: string, currentPassword: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/UpdatePhone',\r\n {\r\n phone: phone,\r\n currentPassword: currentPassword\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n updateProfile(user: api.User): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n '/api/Account/UpdateProfile',\r\n {\r\n user: user\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n sendOneTimePassword(email: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n 'api/Account/SendOneTimePassword',\r\n {\r\n email: email\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function () {\r\n resolve(true);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n signInByOneTimePassword(email: string, oneTimePassword: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S.$http\r\n .post(\r\n 'api/Account/SignInByOneTimePassword',\r\n {\r\n email: email,\r\n oneTimePassword: oneTimePassword\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n}\r\n","import { G2S } from '../g2s';\r\nimport * as api from '../api';\r\n\r\nexport class BestPriceService {\r\n getSubscriptions(request: api.BestPriceGetSubscriptionsRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/BestPrice/GetSubscriptions',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n response.data.subscriptions = response.data.subscriptions.map(s => {\r\n s.dateOutward = new Date(s.dateOutward);\r\n s.dateReturn = s.dateReturn && new Date(s.dateReturn);\r\n return s;\r\n });\r\n\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n subscribe(request: api.BestPriceSubscribeRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/BestPrice/Subscribe',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n unsubscribe(request: api.BestPriceUnsubscribeRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/BestPrice/Unsubscribe',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function () {\r\n resolve();\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\n","import { G2S } from '../g2s';\r\nimport * as api from '../api';\r\n\r\nexport class ContentService {\r\n getHygge(): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Content/Hygge',\r\n {}\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getText(id: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Content/Text',\r\n {\r\n id: id\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getSupportContacts(): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Content/SupportContacts',\r\n {}\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\n","import { G2S } from '../g2s';\r\nimport * as api from '../api';\r\n\r\nexport class CouponService {\r\n check(request: api.CouponCheckRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Coupon/Check',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n listAvailable(): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Coupon/ListAvailable',\r\n {},\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\n","import { G2S } from '../g2s';\r\nimport * as api from '../api';\r\n\r\nexport class DestinationService {\r\n list(iataCodes: string[]): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Destination/List',\r\n {\r\n iataCodes: iataCodes\r\n })\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n lookup(lookupText: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Destination/Lookup',\r\n {\r\n lookupText: lookupText\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n listCities(countryUniqueId: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Destination/ListCities',\r\n {\r\n countryUniqueId: countryUniqueId\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n listCitiesByAlphabet(request: { countryUniqueId?: number; firstLetterOfCity?: string }) {\r\n return new Promise<{ letter: string; destinations: api.Destination[] }[]>((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Destination/ListCitiesByAlphabet ',\r\n {\r\n countryUniqueId: request.countryUniqueId,\r\n firstLetterOfCity: request.firstLetterOfCity\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n listRegions() {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Destination/ListRegions',\r\n {}\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n listCountriesByAlphabet(request: { regionUniqueId?: number; firstLetterOfCountry?: string}) {\r\n return new Promise<{ letter: string; destinations: api.Destination[] }[]>((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Destination/ListCountriesByAlphabet',\r\n {\r\n regionUniqueId: request.regionUniqueId,\r\n firstLetterOfCountry: request.firstLetterOfCountry\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n listAirportsByAlphabet(request: { cityUniqueId?: number; firstLetterOfAirport?: string }) {\r\n return new Promise<{ letter: string; destinations: api.Destination[] }[]>((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Destination/ListAirportsByAlphabet',\r\n {\r\n cityUniqueId: request.cityUniqueId,\r\n firstLetterOfAirport: request.firstLetterOfAirport\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\n","import { G2S } from '../g2s';\r\nimport * as api from '../api';\r\n\r\nexport class FlightService {\r\n agencyTerms(request: api.FlightTermsRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Flight/AgencyTerms',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n search(request: api.FlightSearchRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Flight/Search',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function(response) {\r\n resolve(response.data);\r\n })\r\n .catch(function(error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n searchArchive(request: api.FlightSearchIdRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Flight/Results',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n fareDetails(request: api.FareDetailsRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Flight/FareDetails',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n externalLink(request: api.ExternalLinkRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Flight/ExternalLink',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport { G2S } from '../g2s';\r\nimport * as api from '../api';\r\nimport * as flights from '../flights';\r\nimport * as utils from '../utils';\r\nimport { ProductPopupModel } from '../flights';\r\n\r\nexport class ReservationService {\r\n // Defines if checkbooking should be skipped on getFlightBookingDetails request.\r\n public static skipCheckBookingOnFlightBookingDetails = false;\r\n public static needToStopSbpPolling = false;\r\n\r\n bookProducts(request: api.BookProductsRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/BookProducts',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n updateBookingSession(request: api.UpdateBookingSessionRequest) {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/UpdateBookingSession',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n updateBookingSessionProductPopup(request: api.UpdateBookingSessionProductPopupRequest) {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/UpdateBookingSessionProductPopup',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n updateBookingSessionNotEnoughMoneyPopup(request: api.UpdateBookingSessionNotEnoughMoneyPopupRequest) {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/UpdateBookingSessionNotEnoughMoneyPopup',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n cancelProduct(request: api.CancelProductRequest) {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/CancelProduct',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n cancelProductAfterPopup(request: any) {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/CancelProductAfterPopup',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n checkFlight(request: api.CheckFlightRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/CheckFlight',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n createOrRestartReservation(request: api.CreateReservationRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/CreateOrRestartReservation',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n createPassengerCreateData(reservation: flights.ReservationModel): api.PassengerCreateData[] {\r\n const result: api.PassengerCreateData[] = [];\r\n let passengerWithSeatIndex = 0;\r\n\r\n reservation.passengers.forEach((p, i) => {\r\n const allowMidName = p.validationConstraints[p.documentType].constraints\r\n .find((constrain) => constrain.nameProperty === 'LastName').nameConstraint !== 'NotAllowed';\r\n const allowPeriodOfDocument = p.validationConstraints[p.documentType].constraints\r\n .find((constrain) => constrain.nameProperty === 'ValidityPeriodOfDocument').nameConstraint !== 'NotAllowed';\r\n \r\n const passengerCreateData: api.PassengerCreateData = {\r\n type: p.type,\r\n firstName: p.firstName ? p.firstName.toUpperCase() : '',\r\n middleName: allowMidName && p.middleName \r\n ? p.middleName.toUpperCase() \r\n : '',\r\n lastName: p.lastName ? p.lastName.toUpperCase() : '',\r\n birthday: p.birthday ? moment(p.birthday).format('YYYY-MM-DD') : '',\r\n gender: p.gender,\r\n card: p.card,\r\n cardAirlineId: p.cardAirlineId,\r\n chosenSeatId: Object.values(p.selectedFlightSeats).map((s: any) => s.id),\r\n citizenship: p.citizenship,\r\n documentNumber: p.documentNumber,\r\n documentValidTill: allowPeriodOfDocument && p.documentValidTill\r\n ? moment(p.documentValidTill).format('YYYY-MM-DD')\r\n : '',\r\n baggageOptions: p.baggageOptions\r\n };\r\n\r\n if (reservation.trains.length && p.type != api.PassengerType.infant) {\r\n passengerCreateData.trainPlaces = reservation.trains.map(train => train.selectedPlaces[passengerWithSeatIndex]);\r\n passengerWithSeatIndex++;\r\n }\r\n console.log(passengerCreateData);\r\n result.push(passengerCreateData);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n createReservationRequest(\r\n searchId: string,\r\n reservation: flights.ReservationModel,\r\n flightBookingDetails: api.FlightBookingDetails,\r\n clientDevice: api.ClientDevice\r\n ): api.CreateReservationRequest {\r\n const selectedPaymentType = reservation.payment!.selectedPaymentType;\r\n const urlQuery = utils.Http.getUrlParameters();\r\n let partnerCookie = utils.Cookies.getPartnerCookie();\r\n const partnerCookieAsObject = utils.Cookies.partnerCookieStringToObject(partnerCookie);\r\n\r\n // Rewrite partner cookie value with URL params marker to fix browser tabs issue\r\n if (urlQuery['MarkerOwner'] && urlQuery['MarkerOwner'].length) {\r\n partnerCookieAsObject['mo'] = urlQuery['MarkerOwner'];\r\n\r\n if ((urlQuery['MarkerValue'] && urlQuery['MarkerValue'].length)\r\n || (urlQuery['Marker'] && urlQuery['Marker'].length)) {\r\n partnerCookieAsObject['mv'] = urlQuery['MarkerValue'] || urlQuery['Marker'];\r\n }\r\n\r\n partnerCookie = utils.Cookies.partnerCookieObjectToString(partnerCookieAsObject);\r\n }\r\n else if (urlQuery['mo'] && urlQuery['mo'].length) {\r\n partnerCookieAsObject['mo'] = urlQuery['mo'];\r\n\r\n if (urlQuery['mv'] && urlQuery['mv'].length) {\r\n partnerCookieAsObject['mv'] = urlQuery['mv'];\r\n }\r\n\r\n partnerCookie = utils.Cookies.partnerCookieObjectToString(partnerCookieAsObject);\r\n }\r\n\r\n const request: api.CreateReservationRequest =\r\n {\r\n adapterData: reservation.selectedFlight!.adapterData,\r\n timestamp: moment().toJSON(),\r\n searchId: searchId,\r\n flightId: reservation.selectedFlight!.uniqueId,\r\n bookingSessionId: flightBookingDetails.bookingSessionId,\r\n paymentTypeId: selectedPaymentType.paymentTypeId,\r\n passengersCreateData: {\r\n contactEmail: reservation.contacts.email,\r\n contactPhone: reservation.contacts.phone,\r\n passengers: this.createPassengerCreateData(reservation)\r\n },\r\n confirmationPageUrlTemplate: G2S.config.desktopUrl + '/go/order/payment/_reservationPublicId_/_billPublicId_',\r\n partnerCookie: partnerCookie,\r\n gaClientID: (window).__gaClientID,\r\n products: [],\r\n bonusAmount: selectedPaymentType.paymentTypeId !== 'PayLater'\r\n ? reservation!.payment!.bonusAmount\r\n : 0,\r\n clientDevice: clientDevice,\r\n couponGuid: reservation.couponGuid!,\r\n baggageOptions: reservation.baggageOptions,\r\n brandChoiceType: reservation.brandChoiceType,\r\n baggageChoiceType: reservation.baggageChoiceType,\r\n markerReferrer: utils.Cookies.getMarkerReferrer(),\r\n queryString: window.location.search.toString()\r\n };\r\n\r\n // Override flightId for miltiFR brands.\r\n if (reservation.hasBrandGroups\r\n && reservation.brandGroups.length > 1) {\r\n const flightId: number[] = [];\r\n\r\n reservation.brandGroups.forEach((brandGroup) => {\r\n flightId.push(parseInt(brandGroup.selectedFlightId));\r\n });\r\n\r\n // Sorting is required\r\n flightId.sort();\r\n\r\n request.flightId = flightId.join('_');\r\n }\r\n\r\n reservation.calculatedCleanSelectedProducts.forEach(p => {\r\n const o: {\r\n id: number;\r\n options: any;\r\n choiceType: api.ProductChoiceType;\r\n discountRuleId?: number;\r\n secondProductId?: number;\r\n } = {\r\n id: p.product.id,\r\n options: p.selectedOptions,\r\n choiceType: p.choiceType\r\n };\r\n if (p.product.discountRuleId) {\r\n o.discountRuleId = p.product.discountRuleId;\r\n\r\n const popupSecondProduct = reservation.productPopups.find(\r\n popup =>\r\n popup.discountId === p.product.discountRuleId\r\n && popup.secondProductId\r\n );\r\n if (popupSecondProduct) o.secondProductId = popupSecondProduct.secondProductId;\r\n }\r\n\r\n request.products.push(o);\r\n });\r\n \r\n if (selectedPaymentType.kind === 'CreditCardInplace'\r\n && !selectedPaymentType.isYandexPay) {\r\n request.creditCard = reservation.payment!.getCardWithEncryptedPacket() || undefined;\r\n } else if (selectedPaymentType.isYandexPay) {\r\n request.paymentMethod = reservation.payment!.paymentMethod;\r\n }\r\n\r\n if (request.flightId !== flightBookingDetails.selectedFlightUniqueId) {\r\n request.upgradedFromFlightId = flightBookingDetails.selectedFlightUniqueId;\r\n }\r\n\r\n return request;\r\n }\r\n\r\n CompleteStartedReservation(request: any): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/CompleteStartedReservation',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n RejectStartedReservation(request: any): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/RejectStartedReservation',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n finishPreauth3ds(request: api.FinishPreauth3dsRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/FinishPreauth3ds',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getFlightBookingDetails(request: api.GetFlightBookingDetailsRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/GetFlightBookingDetails',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getProductBookingDetails(request: api.ProductBookingDetailsRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/GetProductBookingDetails',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getReservationPublicId(request: api.GetReservationPublicIdRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/GetReservationPublicId',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getReservationStatus(reservationPublicId: string, getPaymentTypes: boolean, isRefreshRequest: boolean): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/GetReservationStatus',\r\n {\r\n reservationPublicId: reservationPublicId,\r\n getPaymentTypes: getPaymentTypes,\r\n isRefreshRequest: isRefreshRequest\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getReservationAndBillStatus(reservationPublicId: string, billPublicId: string, isNeedRemoveProducts?: boolean): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/GetReservationAndBillStatus',\r\n {\r\n reservationPublicId: reservationPublicId,\r\n billPublicId: billPublicId,\r\n isNeedRemoveProducts: isNeedRemoveProducts\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getReservationByBookingSession(bookingSessionId: number) {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/GetReservationByBookingSession',\r\n {\r\n bookingSessionId: bookingSessionId\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n yaCreatePayment(paymentData): Promise {\r\n return new Promise((resolve, reject) => {\r\n (window).YaPay.createPayment(paymentData)\r\n .then(function (payment) { \r\n resolve(payment);\r\n })\r\n .catch(function (err) { \r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n pay(request: api.PayReservationRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/Pay',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n processBeforeBooking(searchId: string, flightBookingDetails: api.FlightBookingDetails, reservationModel: flights.ReservationModel): Promise {\r\n const reservationService = new api.ReservationService();\r\n\r\n const request: api.CreateReservationRequest = reservationService.createReservationRequest(\r\n searchId,\r\n reservationModel,\r\n flightBookingDetails!,\r\n G2S.config.clientDevice\r\n );\r\n\r\n return new Promise((resolve, reject) => {\r\n // We should process before booking only once!\r\n if (reservationModel.processedBeforeBooking) {\r\n resolve(false);\r\n } else {\r\n reservationModel.processedBeforeBooking = true;\r\n\r\n reservationService.processBeforeFlightBooking(request).then(\r\n (result: api.FlightBookingDetails) => {\r\n // #4998\r\n reservationModel.forwardKits = result.brandedProductKits ?? [];\r\n if (!result.showPopups) {\r\n reservationModel.productPopups = [];\r\n\r\n console.log('Force no popups.');\r\n\r\n resolve(false);\r\n } else {\r\n if (result.productPopups && result.productPopups.length > 0) {\r\n // reservationModel.productPopups = [];\r\n\r\n if (!reservationModel.productPopups) {\r\n reservationModel.productPopups = [];\r\n }\r\n\r\n result.productPopups.forEach(pp => {\r\n reservationModel.productPopups.push(new ProductPopupModel(pp));\r\n\r\n if (!utils.find(reservationModel.products,\r\n (p: flights.ProductModel) => {\r\n return p.product.id === pp.productId;\r\n })) {\r\n }\r\n });\r\n result.productPopups.forEach(pp => {\r\n if (pp.type === 'Discount') {\r\n reservationModel.productPopupsDiscount.push(new ProductPopupModel(pp));\r\n }\r\n });\r\n\r\n // Process products as well as there can be new one\r\n result.products.forEach(p => {\r\n if (!reservationModel.products.find(existerProduct => existerProduct.product.id === p.id) || p.discountRuleId) {\r\n console.log('New product found: ' + p.id);\r\n reservationModel.rawProducts.push(new flights.ProductModel(p));\r\n }\r\n });\r\n\r\n resolve(true);\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n }\r\n },\r\n (error) => {\r\n resolve(false);\r\n }\r\n );\r\n }\r\n });\r\n }\r\n\r\n processBeforeFlightBooking(request: api.CreateReservationRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/ProcessBeforeFlightBooking',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n saveOpinion(request: api.SaveReservationOpinionRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/SaveOpinion',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(() => {\r\n resolve(true);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n checkFlightConfirm(request: api.CheckFlightConfirmRequest) {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/CheckFlightConfirm',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(() => {\r\n resolve(true);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n async pollPaymentQrStatus(request: api.FinishPreauth3dsRequest): Promise {\r\n ReservationService.needToStopSbpPolling = false;\r\n\r\n const executePoll = async (resolve, reject) => {\r\n this.getPaymentQrStatus(request)\r\n .then((result: api.CreateReservationResult) => {\r\n if (result.paymentInfo?.inPlace?.succeed) {\r\n return resolve(result);\r\n }\r\n\r\n if (ReservationService.needToStopSbpPolling) {\r\n return reject();\r\n }\r\n\r\n setTimeout(executePoll, 1000, resolve, reject);\r\n }, (error) => {\r\n console.error('Payment error (SBP): '+ error.message);\r\n setTimeout(executePoll, 1000, resolve, reject);\r\n });\r\n };\r\n\r\n return new Promise(executePoll);\r\n }\r\n \r\n async getPaymentQrStatus(request: api.FinishPreauth3dsRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Reservation/GetPaymentQrStatus',\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\n","import { G2S } from '../g2s';\r\nimport * as api from '../api';\r\nimport moment from 'moment';\r\n\r\nclass RetailRocketIds {\r\n sessionId: string;\r\n flightKey: string;\r\n constructor() {\r\n const sessionId = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n \r\n if (window.localStorage) {\r\n if (window.localStorage['rrApiKey']) {\r\n this.sessionId = window.localStorage['rrApiKey'];\r\n } else {\r\n window.localStorage['rrApiKey'] = sessionId;\r\n this.sessionId = sessionId;\r\n }\r\n }\r\n }\r\n\r\n get getFlightKey() {\r\n return this.flightKey;\r\n }\r\n\r\n get getSessionId() {\r\n return this.sessionId;\r\n }\r\n\r\n setFlightKey(flightKey: any) {\r\n this.flightKey = flightKey;\r\n }\r\n}\r\n\r\nexport const RetailRocketCL = new RetailRocketIds();\r\n\r\nexport class RetailRocket {\r\n concatRequest(request: any, addFlightKey?: boolean) {\r\n if (addFlightKey && RetailRocketCL.flightKey) {\r\n request.flightKey = RetailRocketCL.flightKey;\r\n }\r\n return {\r\n ...request,\r\n sessionId: RetailRocketCL.sessionId,\r\n timestamp: moment().format()\r\n };\r\n }\r\n\r\n userAuthenticated(request: api.RRUserAuthenticated): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Tracking/UserAuthenticated',\r\n {\r\n ...this.concatRequest(request)\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n flightDetailsOpened(request: api.RRFlightDetailsOpened): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Tracking/FlightDetailsOpened',\r\n {\r\n ...this.concatRequest(request)\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n console.log(RetailRocketCL.setFlightKey);\r\n \r\n RetailRocketCL.setFlightKey(response.data);\r\n \r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n orderFormOpened(request: api.RROrderFormOpened): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Tracking/OrderFormOpened',\r\n {\r\n ...this.concatRequest(request)\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n RetailRocketCL.setFlightKey(response.data);\r\n\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n orderFormStepOpened(request: api.RROrderFormStepOpened): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Tracking/OrderFormStepOpened',\r\n {\r\n ...this.concatRequest(request, true)\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n RetailRocketCL.setFlightKey(response.data);\r\n\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n productSelected(request: api.RRProductSelected): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Tracking/ProductSelected',\r\n {\r\n ...this.concatRequest(request, true)\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n reservationCreated(request: api.RRReservationCreated): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Tracking/ReservationCreated',\r\n {\r\n ...this.concatRequest(request, true)\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n searchCompleted(request: api.RRSearchCompleted): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Tracking/SearchCompleted',\r\n {\r\n ...this.concatRequest(request, true)\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\n","import { G2S } from '../g2s';\r\nimport * as api from '../api';\r\n\r\nexport class SupportService {\r\n create(request: FormData): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Support/Create',\r\n request,\r\n {\r\n withCredentials: true,\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n }\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getReservationsSupportInformation(marketCode: string, locale: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Support/GetReservationsSupportInformation',\r\n {\r\n marketCode,\r\n locale\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getReservationData(reservationId: string): any {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .get(\r\n `/api/support/GetReservationData?reservationId=${reservationId}`,\r\n // {\r\n // reservationId: reservationId,\r\n // },\r\n // {\r\n // withCredentials: true,\r\n // headers: {\r\n // 'ticketForm': 'new',\r\n // }\r\n // },\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n checkReservationEmail(reservationId: string, email: string): Promise<{isSameEmail: boolean}> {\r\n return new Promise<{isSameEmail: boolean}>((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Support/CheckReservationEmail',\r\n {\r\n reservationId,\r\n email\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(<{isSameEmail: boolean}>response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getHistory(marketCode: string, locale: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/Support/GetHistory',\r\n {\r\n marketCode,\r\n locale\r\n },\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n getRefundInfo(publicId: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .get(\r\n `/api/PaymentRefundApproval/${publicId}`,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n \r\n submitRefundInfo(request: api.SubmitSbpRefundRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n `/api/PaymentRefundApproval/`,\r\n request,\r\n {\r\n withCredentials: true\r\n }\r\n )\r\n .then((response) => {\r\n resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\n","import { G2S } from '../g2s';\r\n\r\nexport class UtilsService {\r\n getAffiliateInfo(partnerCookie: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n G2S\r\n .$http\r\n .post(\r\n '/api/InternalTools/GetAffiliateInfo',\r\n {\r\n partnerCookie: partnerCookie\r\n })\r\n .then(function (response) {\r\n resolve(response.data.affiliateText);\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\n","import * as accounting from 'accounting';\r\nimport * as api from '../api';\r\nimport * as i18next from 'i18next';\r\nimport * as utils from 'core/utils';\r\nimport { G2S } from '../g2s';\r\n\r\nexport class Filters {\r\n static baggage(value: api.FlightBaggage): string {\r\n if (!value) { return ''; }\r\n\r\n if (value.pieceWeight == 0 && value.pieces == 0) {\r\n return i18next.t('label_baggage_without_short');\r\n }\r\n\r\n if (value.pieceWeight > 0) {\r\n let result = value.pieceWeight + i18next.t('label_kg');\r\n\r\n if (value.pieces > 1) {\r\n result = value.pieces + G2S.nbsp + 'x' + G2S.nbsp + result;\r\n }\r\n\r\n return result;\r\n } else {\r\n if (value.pieces > 0) {\r\n return i18next.t('numerous_baggage_piece', { count: value.pieces });\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n static customBaggage(value: api.CustomBaggageItem): string {\r\n if (!value) { return ''; }\r\n\r\n if (value.bagsQuantity === 0) {\r\n return i18next.t('label_baggage_without');\r\n } else {\r\n let result = i18next.t('numerous_baggage_piece_long', { count: value.bagsQuantity });\r\n\r\n if (value.bagsWeight && value.bagsWeight != '0') {\r\n result += ' ('\r\n + value.bagsWeight\r\n + i18next.t('label_kg')\r\n + ')';\r\n }\r\n\r\n return result;\r\n }\r\n }\r\n\r\n static number(value: any, addPlus: boolean): string {\r\n if (!value) { value = 0; }\r\n\r\n value = Math.round(value);\r\n\r\n return (addPlus ? '+ ' : '') + accounting.formatNumber(value,\r\n {\r\n thousand: ' ',\r\n precision: 0\r\n })\r\n .replace(/ /g, '\\xA0');\r\n }\r\n\r\n static phone(value: any): string {\r\n if (!value) { return ''; }\r\n\r\n const parsed = value.toString().trim().replace(/^\\+/, '');\r\n\r\n if (parsed.match(/[^0-9]/)) {\r\n return value;\r\n }\r\n\r\n if (parsed.length == 11 && parsed[0] == 7) {\r\n return ('+7' +\r\n ' ' + parsed.substring(1, 4) + ' ' +\r\n parsed.substring(4, 7) + '-' +\r\n parsed.substring(7, 9) + '-' +\r\n parsed.substring(9)\r\n ).trim();\r\n }\r\n\r\n return value;\r\n }\r\n\r\n static price(value: any, addPlus: boolean, symbol?: string): string {\r\n if (!value) { value = 0; }\r\n \r\n value = G2S.config.locale === 'ru' ? Math.round(value) : Math.round(value * 100) / 100;\r\n\r\n return (addPlus && value > 0 ? '+ ' : '') + accounting.formatMoney(value,\r\n {\r\n symbol: symbol ? utils.String.currencySymbol(symbol) : G2S.config.currencySymbol,\r\n thousand: (symbol || G2S.config.currencyCode) === 'USD' ? ',' : ' ',\r\n precision: G2S.config.locale === 'ru' ? 0 : 2,\r\n format: (symbol || G2S.config.currencyCode) === 'USD' ? '%s%v' : '%v %s'\r\n })\r\n .replace(/ /g, '\\xA0');\r\n }\r\n\r\n static priceWithCurrency(value: any, currency: string, addPlus: boolean): string {\r\n if (!value) { value = 0; }\r\n\r\n value = Math.round(value);\r\n\r\n return (addPlus && value > 0 ? '+ ' : '') + accounting.formatMoney(value,\r\n {\r\n symbol: currency,\r\n thousand: ' ',\r\n precision: 0,\r\n format: '%v %s'\r\n })\r\n .replace(/ /g, '\\xA0');\r\n }\r\n}\r\n","var map = {\n\t\"./ar\": 169,\n\t\"./ar.js\": 169,\n\t\"./az\": 170,\n\t\"./az.js\": 170,\n\t\"./de\": 171,\n\t\"./de.js\": 171,\n\t\"./el\": 172,\n\t\"./el.js\": 172,\n\t\"./es\": 173,\n\t\"./es.js\": 173,\n\t\"./fr\": 174,\n\t\"./fr.js\": 174,\n\t\"./hu\": 175,\n\t\"./hu.js\": 175,\n\t\"./id\": 176,\n\t\"./id.js\": 176,\n\t\"./it\": 177,\n\t\"./it.js\": 177,\n\t\"./ms\": 178,\n\t\"./ms.js\": 178,\n\t\"./nl\": 179,\n\t\"./nl.js\": 179,\n\t\"./pl\": 180,\n\t\"./pl.js\": 180,\n\t\"./pt\": 181,\n\t\"./pt.js\": 181,\n\t\"./ro\": 182,\n\t\"./ro.js\": 182,\n\t\"./ru\": 183,\n\t\"./ru.js\": 183,\n\t\"./sv\": 184,\n\t\"./sv.js\": 184,\n\t\"./tr\": 185,\n\t\"./tr.js\": 185\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 449;","import moment from 'moment';\r\nimport * as i18next from 'i18next';\r\nimport { G2S } from '../g2s';\r\nimport * as api from '../api';\r\nimport * as utils from '../utils';\r\n\r\nexport class PaymentTypeModel {\r\n paymentTypeId: string;\r\n kind: string;\r\n commission: number;\r\n isDirectPayment: boolean;\r\n paymentTypeOptions: any;\r\n paymentMethod?: any;\r\n paymentMethods?: any;\r\n selected: boolean;\r\n isYandexPay?: boolean;\r\n\r\n constructor(paymentType: api.PaymentTypeDesc) {\r\n this.paymentTypeId = paymentType.paymentTypeId;\r\n this.kind = paymentType.kind;\r\n this.commission = paymentType.commission;\r\n this.isDirectPayment = paymentType.isDirectPayment;\r\n this.paymentTypeOptions = paymentType.paymentTypeOptions;\r\n this.paymentMethods = paymentType.paymentMethods;\r\n this.selected = false;\r\n }\r\n}\r\n\r\nexport class CardModel {\r\n holder = '';\r\n number = '';\r\n expiry = ''; // string used because of timezone problems with Date\r\n code = '';\r\n}\r\n\r\nexport class YandexPaymentData {\r\n env = G2S.config.environment !== 'Production' ? (window).YaPay.PaymentEnv.Sandbox : '';\r\n version = 2;\r\n countryCode = (window).YaPay?.CountryCode.Ru;\r\n currencyCode = (window).YaPay?.CurrencyCode.Rub;\r\n merchant = {\r\n id: '',\r\n name: '',\r\n url: ''\r\n };\r\n order = {\r\n id: '',\r\n total: {\r\n amount: ''\r\n }\r\n };\r\n paymentMethods = [\r\n {\r\n type: (window).YaPay.PaymentMethodType.Card,\r\n gateway: '',\r\n gatewayMerchantId: '',\r\n allowedAuthMethods: [(window).YaPay.AllowedAuthMethod.PanOnly],\r\n allowedCardNetworks: [\r\n (window).YaPay.AllowedCardNetwork.Visa,\r\n (window).YaPay.AllowedCardNetwork.Mastercard,\r\n (window).YaPay.AllowedCardNetwork.Mir,\r\n (window).YaPay.AllowedCardNetwork.Maestro,\r\n (window).YaPay.AllowedCardNetwork.VisaElectron\r\n ]\r\n }\r\n ];\r\n constructor(merchant: any, order: any, bookingSessionId: number) {\r\n this.merchant = {\r\n // id: merchant.ypMerchantId,\r\n id: 'fc143448-b787-4aa1-819f-1baf06e85cf4',\r\n // name: merchant.ypMerchantName,\r\n name: 'mego_travel_plus',\r\n url: merchant.ypMerchantUrl\r\n };\r\n this.paymentMethods[0].gateway = merchant.ypGateway;\r\n this.paymentMethods[0].gatewayMerchantId = merchant.ypGatewayMerchantId.toString();\r\n this.order = {\r\n id: bookingSessionId.toString(),\r\n total: { amount: Math.round(order).toString() }\r\n };\r\n console.log(this.order.total.amount);\r\n \r\n }\r\n}\r\n\r\nexport class PaymentModel {\r\n bonusAmount = 0;\r\n\r\n card: CardModel = new CardModel();\r\n\r\n paymentTypes: PaymentTypeModel[] = [];\r\n\r\n paymentMethod: any;\r\n\r\n selectedPaymentTab = '';\r\n\r\n selectedPaymentTypeId = '';\r\n\r\n constructor(paymentTypes: api.PaymentTypeDesc[]) {\r\n paymentTypes.forEach(pt => {\r\n this.paymentTypes.push(new PaymentTypeModel(pt));\r\n });\r\n\r\n this.initPaymentTab();\r\n\r\n this.preloadExternalScripts();\r\n }\r\n\r\n getPaymentMethod() {\r\n return true;\r\n }\r\n\r\n getCardWithEncryptedPacket(): api.CreditCard | null {\r\n const mCardExpiry = moment(this.card.expiry);\r\n\r\n const result: api.CreditCard = {\r\n cardHolderName: this.card.holder,\r\n cardNumber: this.card.number,\r\n cardExpMonth: parseInt(mCardExpiry.format('MM')),\r\n cardExpYear: parseInt(mCardExpiry.format('YY')),\r\n cardCvv: this.card.code\r\n };\r\n\r\n // Skip encrypted packet for test cards\r\n const n = utils.String.normalizeNumber(this.card.number);\r\n if (n === '4111111111111111'\r\n || n === '5105105105105122'\r\n || n === '4111111111111115'\r\n || n === '4111111111111116'\r\n || n === '4111111111111117'\r\n || n === '4111111111111118'\r\n || n === '4111111111111119'\r\n || n === '4222222222222221'\r\n || n === '4222222222222220'\r\n || n === '5555555555554444'\r\n || n === '5105105105105100') {\r\n return result;\r\n }\r\n\r\n if (this.selectedPaymentType\r\n && this.selectedPaymentType.paymentTypeOptions != null\r\n && this.selectedPaymentType.paymentTypeOptions.mobiMmUuid != null\r\n && this.selectedPaymentType.paymentTypeId !== 'MobiMoneySbp'\r\n ) {\r\n if ((window).mm) {\r\n const form: HTMLFormElement = window.document.createElement('form');\r\n\r\n this.appendMobiFormInput(form, 'cardNumber', this.card.number);\r\n this.appendMobiFormInput(form, 'name', this.card.holder);\r\n this.appendMobiFormInput(form, 'expDateMonth', mCardExpiry.format('MM'));\r\n this.appendMobiFormInput(form, 'expDateYear', mCardExpiry.format('YYYY'));\r\n this.appendMobiFormInput(form, 'cvv', this.card.code);\r\n\r\n try {\r\n const cryptogram = new (window).mm.EncodeScript(this.selectedPaymentType.paymentTypeOptions.mobiMmUuid, form).makeCryptogram();\r\n\r\n if (cryptogram && cryptogram.packet) {\r\n result.encryptedPacket = cryptogram.packet;\r\n } else {\r\n // MobiMoney cryptogram required!\r\n return null;\r\n }\r\n }\r\n catch (error) {\r\n G2S.logError(error.message);\r\n\r\n return null;\r\n }\r\n }\r\n else {\r\n // MobiMoney script not loaded - error! MobiMoney cryptogram is required!\r\n return null;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get selectedPaymentType(): PaymentTypeModel {\r\n let selectPayment = utils.find(this.paymentTypes,\r\n (item: PaymentTypeModel) => {\r\n return item.paymentTypeId === this.selectedPaymentTypeId;\r\n });\r\n // crutch for yandexPay\r\n if (this.selectedPaymentTab === 'yandexpay') {\r\n selectPayment = { ...selectPayment, isYandexPay: true, paymentMethod: {} };\r\n }\r\n return selectPayment;\r\n }\r\n\r\n get selectedPaymentMethod(): any | null {\r\n if (this.selectedPaymentType.paymentMethods && this.selectedPaymentType.paymentMethods.length) {\r\n return this.selectedPaymentType.paymentMethods[0];\r\n }\r\n return null;\r\n }\r\n\r\n get paymentButtonLabel(): string {\r\n switch (this.selectedPaymentTab) {\r\n case 'later':\r\n return i18next.t('button_book');\r\n case 'credit':\r\n return i18next.t('button_buy');\r\n default:\r\n return i18next.t('button_pay');\r\n }\r\n }\r\n\r\n get paymentTypeCard(): PaymentTypeModel | null {\r\n if (this.paymentTypes) {\r\n return utils.find(this.paymentTypes, (item: PaymentTypeModel) => {\r\n return item.kind === 'CreditCard' || item.kind === 'CreditCardInplace';\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n compareVersion(minVersion: string, comparable: string): boolean {\r\n const minVersionComponent = minVersion.split('.').map(Number);\r\n const comComponent = comparable.split('.').map(Number);\r\n\r\n if (minVersionComponent.length < 3) {\r\n return Number(minVersion) <= Number(comComponent);\r\n } else {\r\n for (let i = 0; i < Math.max(minVersionComponent.length, comComponent.length); i++) {\r\n const curValue = minVersionComponent[i] || 0;\r\n const comValue = comComponent[i] || 0;\r\n \r\n if (curValue < comValue) {\r\n return true;\r\n } else if (curValue > comValue) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n get paymentTypeSbp(): PaymentTypeModel | null {\r\n console.log('paymentTypeSbp');\r\n const urlQuery = utils.Http.getUrlParameters();\r\n \r\n if ((urlQuery['mobile'] !== 'android' && urlQuery['mobile'] !== 'iphone' && !!this.paymentTypes)\r\n || (urlQuery['mobile'] == 'android' && urlQuery['appVersion'] && this.compareVersion('5.43.0', urlQuery['appVersion']))\r\n || (urlQuery['mobile'] == 'iphone' && urlQuery['appVersion'] && this.compareVersion('7.42.0', urlQuery['appVersion']))) {\r\n return utils.find(this.paymentTypes, (item: PaymentTypeModel) => {\r\n return item.paymentTypeId === 'MobiMoneySbp';\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n get paymentTypeCredit(): PaymentTypeModel | null {\r\n if (this.paymentTypes) {\r\n return utils.find(this.paymentTypes, (item: PaymentTypeModel) => {\r\n return item.kind === 'Credit';\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n get paymentTypesEmoney(): PaymentTypeModel[] {\r\n if (this.paymentTypes) {\r\n return this.paymentTypes.filter((item: PaymentTypeModel) => {\r\n return item.kind === 'EMoney';\r\n });\r\n }\r\n\r\n return [];\r\n }\r\n\r\n get paymentTypePartnerCash(): PaymentTypeModel | null {\r\n if (this.paymentTypes) {\r\n return utils.find(this.paymentTypes, (item: PaymentTypeModel) => {\r\n return item.paymentTypeId === 'PartnerCash';\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n get paymentTypePayLater(): PaymentTypeModel | null {\r\n if (this.paymentTypes) {\r\n return utils.find(this.paymentTypes, (item: PaymentTypeModel) => {\r\n return item.kind === 'PayLater';\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n get paymentTypeMoneywall(): PaymentTypeModel | null {\r\n if (this.paymentTypes) {\r\n return utils.find(this.paymentTypes, (item: PaymentTypeModel) => {\r\n return item.paymentTypeId === 'Moneywall';\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n get paymentTypeYandexPay(): PaymentTypeModel | null {\r\n if (this.paymentTypes) {\r\n return utils.find(this.paymentTypes, (item: PaymentTypeModel) => {\r\n return item.paymentTypeId === 'MobiMoneyCard' && item.paymentMethods && item.paymentMethods!.length > 0 && window['YaPay'];\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n get showPaymentTabs(): boolean {\r\n let tabCount = 1; // Вернуть 0, если попросят скрывать панель выбора оплаты\r\n\r\n if (this.paymentTypes) {\r\n if (this.paymentTypeCard) {\r\n tabCount++;\r\n }\r\n\r\n if (this.paymentTypesEmoney.length > 0) {\r\n tabCount++;\r\n }\r\n\r\n if (this.paymentTypeCredit) {\r\n tabCount++;\r\n }\r\n\r\n if (this.paymentTypePayLater) {\r\n tabCount++;\r\n }\r\n\r\n if (this.paymentTypeMoneywall) {\r\n tabCount++;\r\n }\r\n\r\n if (this.paymentTypeYandexPay) {\r\n tabCount++;\r\n }\r\n\r\n if (this.paymentTypeSbp) {\r\n tabCount++;\r\n }\r\n }\r\n\r\n return tabCount > 1;\r\n }\r\n\r\n public calculateAvailableBonuses(orderTotal: number, userBonuses: api.UserBonuses): number {\r\n let result = userBonuses.status.currentBalance;\r\n const bonusMaxValue = Math.round(orderTotal * userBonuses.bonusMaxPercentLimitPerOrder / 100);\r\n\r\n if (result > bonusMaxValue) {\r\n result = bonusMaxValue;\r\n }\r\n\r\n if (result > userBonuses.bonusMaxLimitPerOrder) {\r\n result = userBonuses.bonusMaxLimitPerOrder;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public onSelectedPaymentTabChanged() {\r\n switch (this.selectedPaymentTab) {\r\n case 'card':\r\n this.selectedPaymentTypeId = this.paymentTypeCard!.paymentTypeId;\r\n break;\r\n case 'credit':\r\n this.selectedPaymentTypeId = this.paymentTypeCredit!.paymentTypeId;\r\n break;\r\n case 'emoney':\r\n this.selectedPaymentTypeId = this.paymentTypesEmoney[0].paymentTypeId;\r\n break;\r\n case 'later':\r\n this.selectedPaymentTypeId = this.paymentTypePayLater!.paymentTypeId;\r\n break;\r\n case 'moneywall':\r\n this.selectedPaymentTypeId = this.paymentTypeMoneywall!.paymentTypeId;\r\n break;\r\n case 'yandexpay':\r\n this.selectedPaymentTypeId = this.paymentTypeYandexPay!.paymentTypeId;\r\n break;\r\n case 'sbp':\r\n this.selectedPaymentTypeId = this.paymentTypeSbp!.paymentTypeId;\r\n break;\r\n }\r\n }\r\n\r\n private appendMobiFormInput(form: HTMLFormElement, attr: string, value: any) {\r\n const input: HTMLInputElement = window.document.createElement('input');\r\n input.setAttribute('value', value);\r\n input.setAttribute('data-mm', attr);\r\n form.appendChild(input);\r\n }\r\n\r\n private initPaymentTab() {\r\n if (this.paymentTypeCard) {\r\n this.selectedPaymentTab = 'card';\r\n this.selectedPaymentTypeId = this.paymentTypeCard.paymentTypeId;\r\n }\r\n\r\n if (!this.selectedPaymentTab\r\n && this.paymentTypesEmoney.length > 0) {\r\n this.selectedPaymentTab = 'emoney';\r\n this.selectedPaymentTypeId = this.paymentTypesEmoney[0].paymentTypeId;\r\n }\r\n\r\n if (!this.selectedPaymentTab\r\n && this.paymentTypeSbp) {\r\n this.selectedPaymentTab = 'sbp';\r\n this.selectedPaymentTypeId = this.paymentTypeSbp.paymentTypeId;\r\n }\r\n\r\n if (!this.selectedPaymentTab\r\n && this.paymentTypeCredit) {\r\n this.selectedPaymentTab = 'credit';\r\n this.selectedPaymentTypeId = this.paymentTypeCredit.paymentTypeId;\r\n }\r\n\r\n if (!this.selectedPaymentTab\r\n && this.paymentTypePartnerCash) {\r\n this.selectedPaymentTab = 'partner';\r\n this.selectedPaymentTypeId = this.paymentTypePartnerCash.paymentTypeId;\r\n }\r\n\r\n if (!this.selectedPaymentTab\r\n && this.paymentTypePayLater) {\r\n this.selectedPaymentTab = 'later';\r\n this.selectedPaymentTypeId = this.paymentTypePayLater.paymentTypeId;\r\n }\r\n }\r\n\r\n private preloadExternalScripts() {\r\n const ptc = this.paymentTypeCard;\r\n\r\n if (ptc\r\n && ptc.paymentTypeOptions != null\r\n && ptc.paymentTypeOptions.mobiClientScript != null) {\r\n utils.loadScript(\r\n ptc.paymentTypeOptions.mobiClientScript,\r\n function () {\r\n setTimeout(function () {\r\n if (!(window).mm) {\r\n G2S.logError('mobiClientScript: external script not initialized #1.');\r\n }\r\n }, 500);\r\n },\r\n function () {\r\n G2S.logError('mobiClientScript load failed #1. Trying again...', 'WARNING');\r\n\r\n utils.loadScript(\r\n ptc!.paymentTypeOptions.mobiClientScript,\r\n function () {\r\n setTimeout(function () {\r\n if (!(window).mm) {\r\n G2S.logError('mobiClientScript: external script not initialized #2.');\r\n }\r\n }, 500);\r\n },\r\n function () {\r\n G2S.logError('mobiClientScript load failed #2.', 'WARNING');\r\n });\r\n });\r\n }\r\n }\r\n}\r\n","export * from './PaymentModel';\r\n"," {{$i18.t('title_about_company')}} "," {{$i18.t('title_bonuses')}} "," {{$i18.t('title_account')}} "," {{$i18.t('title_coupons_personal')}} "," {{$i18.t('title_orders')}}

"," {{$i18.t('title_corporate_account')}} "," {{$i18.t('title_profile')}} "," {{$i18.t('label_email')}} "," {{$i18.t('label_email')}} "," {{$i18.t('title_settings')}} "," {{$i18.t('label_password_new')}} "," {{$i18.t('label_removal')}} "," {{$i18.t('title_account')}} "," {{$i18.t('title_account')}} "," {{ $i18.t('title_orders') }} "," {{ $i18.t('title_order') }} {{ orderNumber }} {{ selectedProduct.tagText }} ({{ $i18.t('label_product_status_' + selectedProduct.status.toLowerCase()) }})

{{ selectedProduct.name }}

{{ selectedProduct.couponDiscountAmount ? selectedProduct.price - selectedProduct.couponDiscountAmount : selectedProduct.price | price(false, selectedProduct.currencyCode) }}
{{ $i18.t('label_product_pricetype_perorder') }}
{{ $i18.t('label_product_pricetype_perpassenger') }}
"," {{ $i18.t('title_subscriptions') }}
"," {{$i18.t('title_oops')}}
{{$i18.t('error_404_notfound_details')}}
{{$i18.t('button_go_home')}}
","
{{passenger.index + 1}}. {{$i18.t('label_passenger_type_' + passenger.type)}}
{{$i18.t('label_frequent_flyer_card')}}
{{$i18.t('button_ok')}}
","
{{searchParams.from}} {{searchParams.roundtrip ? '' : ''}} {{searchParams.to}} {{toolbarPrice | price(false, reservation.selectedFlight.currencyCode)}}
{{$m(searchParams.departure).format('D MMM')}} — {{$m(searchParams.return).format('D MMM')}}, {{$i18.t('numerous_passenger', {count: totalPassengers})}}, {{bookingClassName}}
{{$i18.t('label_flight_fare')}}
{{$i18.t('label_flight_fare_details')}}
{{toolbarPrice | price(false, reservation.flights ? reservation.flights[0].currencyCode : '')}} {{$i18.t('label_product_pricetype_perorder')}}
{{$i18.t('button_next')}}
option.isFake)\" id=modalBaggage ref=modalBaggage content-classes=\"modal-sm bg-light\"> {{$i18.t('label_baggage')}}
{{$i18.t('label_baggage_details_full')}}
{{$i18.t('button_ok')}}
{{$i18.t('title_account_signin')}}
{{$i18.t('button_sign_in')}}
{{$i18.t('button_sign_in')}} {{$i18.t('label_customer')}}
{{$i18.t('label_passengers_data')}}
{{$i18.t('button_continue')}}
","
{{$i18.t('label_payment')}}
{{totalPerMonthLabel}}
{{totalMoneywallLabel}}
{{totalLabel}}
{{totalLabelRu}} 0\" class=bad> {{ fullPrice | price(false, reservation.selectedFlight ? reservation.selectedFlight.currencyCode : '') }} {{reservation.getTotalPrice(true) | price(false, reservation.selectedFlight ? reservation.selectedFlight.currencyCode : '')}}
{{$i18.t('label_terms_accept_order')}}
{{$i18.t('label_payment_multiple')}}
{{ paymentButtonPrice | price(false, reservation.selectedFlight.currencyCode) }} {{$i18.t('label_product_pricetype_perorder')}}
{{reservation.payment.paymentButtonLabel}}
{{$i18.t('title_coupon_entry')}}
{{$i18.t('button_apply')}}
{{$i18.t('label_bonuses_payment')}}
{{$i18.t('label_order_amount')}}
{{reservation.getTotalPrice() | price}}
{{$i18.t('label_bonuses_accumulated')}}
{{currentUser.bonuses.status.currentBalance | number}}
availableBonuses\" class=\"q-item q-item-link transparent\">
{{$i18.t('label_bonuses_available_for_payment')}}
{{availableBonuses | number}}
{{$i18.t('button_apply')}}
{{$i18.t('label_price_details')}}
0\"> 0\"> 0\" class=bg-secondary> 0\" class=bg-secondary>
{{$i18.t('label_flight_tickets')}}
  • {{$i18.t('numerous_passenger', {count: reservation.passengers.length})}}
  • {{$i18.t('label_flight_price_parts')}}
{{reservation.selectedFlightBasePrice | price(false, reservation.selectedFlight.currencyCode)}}
{{$i18.t(reservation.selectedFlightFee > 0 ? 'label_service_fee' : 'label_discount')}} {{reservation.selectedFlightFee | price(false, reservation.selectedFlight.currencyCode)}}
{{$i18.t('label_baggage')}} {{reservation.customBaggagePrice | price(false, reservation.selectedFlight.currencyCode)}}
{{$i18.t('label_seat_selection')}} {{reservation.getTotalSeatsPrice() | price(false, reservation.selectedFlight.currencyCode)}}
{{product.product.name}} {{reservation.getProductPrice(product) | price(false, reservation.selectedFlight.currencyCode)}}
{{$i18.t('label_payment_commission')}} {{reservation.selectedPaymentType.commission | price(false, reservation.selectedFlight.currencyCode)}}
{{$i18.t('title_bonuses')}} -{{reservation.bonusAmount | number}}
{{$i18.t('label_coupon')}} -{{reservation.couponDiscountAmount | price(false, reservation.selectedFlight.currencyCode)}}
{{$i18.t('button_ok')}}

{{$i18.t('label_terms')}}

{{$i18.t('label_terms_accept_order')}}

{{$i18.t('label_flight_terms')}} {{$i18.t('label_terms_of_service')}} {{$i18.t('label_terms_iata')}} {{$i18.t('label_terms_insurance')}} {{$i18.t('label_terms_provision_of_services')}} {{$i18.t('label_terms_license_agreement')}}
{{$i18.t('button_accept')}}
","
","
{{$i18.t('label_train')}}:
{{$i18.t('label_train')}} {{train.number}} ({{getPlaceSelectionToBeDoneForTrainLabel(train).toLowerCase()}})
{{$i18.t('label_coach')}} {{train.selectedCoach.number}} {{$i18.t('label_seat')}} {{place.number}}
","
{{$i18.t('button_next')}}
","
{{$i18.t('button_next_payment')}}
","

Выберите банк для подтверждения оплаты

{{ errorText }}
"," {{searchParams.from}} {{searchParams.roundtrip ? '' : ''}} {{searchParams.to}} {{toolbarPrice | price(false, reservation.selectedFlight.currencyCode)}}
{{$m(searchParams.departure).format('D MMM')}} — {{$m(searchParams.return).format('D MMM')}}, {{$i18.t('numerous_passenger', {count: totalPassengers})}}, {{bookingClassName}}
{{$i18.t('question_return_to_search_results')}}
{{$i18.t('label_search')}} {{$i18.t('label_order')}}
0\">

{{selectedProduct.product.name}}

{{ selectedProduct.product.tagText }}
{{selectedProduct.product.price | price(false, selectedProduct.product.currencyCode)}}
{{$i18.t('label_product_pricetype_perorder')}}
{{$i18.t('label_product_pricetype_perpassenger')}}
{{$i18.t('button_add')}} {{$i18.t('button_product_remove')}}
{{$i18.t('button_yes')}}
{{$i18.t('button_no')}}
{{ modalConfirmProductContent.buttonText1 }}
{{ modalConfirmProductContent.buttonText2 }}
{{ modalConfirmProductContent.buttonText3 }}
{{$i18.t('label_baggage')}} {{modalUpgradeBaggageContent.markerText}}
{{modalUpgradeBaggageContent.buttonText1}}
{{modalUpgradeBaggageContent.buttonText2}}
{{modalUpgradeBaggageContent.buttonText3}}
{{ modalConfirmProductContent.productName || productToConfirm.product.name }} {{modalConfirmProductContent.markerText}}
{{ modalConfirmProductContent.crossedOutPrice | price(false, productToConfirm.product.currencyCode) }} {{ productToConfirm.product.price | price(false, productToConfirm.product.currencyCode) }} {{ $i18.t('label_product_pricetype_perorder') }} {{ $i18.t('label_product_pricetype_perpassenger') }}

{{modalConfirmProductContent.buttonText1}}
{{modalConfirmProductContent.buttonText2}}
{{modalConfirmProductContent.buttonText3}}

0\" class=mb-4>
  • {{product.product.name}}, {{product.product.billingPrice - (product.product.couponDiscountAmount || 0) | price(false, product.product.currencyCode)}}
{{ $i18.t('button_leave_service') }} {{ $i18.t('button_try_with_service') }}
"," = new Date(new Date().getFullYear(), 11, 7) || new Date() <= new Date(new Date().getFullYear(), 0, 14)\" src=/themes/mego/i/mego-pink-ny.svg>
{{ $i18.t('title_order_my') }} {{ $i18.t('button_sign_in') }} {{ $i18.t('title_profile') }}

{{ $i18.t('label_website_promo') }}

","
{{searchParams.from}} {{searchParams.roundtrip ? '' : ''}} {{searchParams.to}}
{{$m(searchParams.departure).format('D MMM')}} — {{$m(searchParams.return).format('D MMM')}}, {{$i18.t('numerous_passenger', {count: totalPassengers})}}, {{className}}
{{promoDetails.title}}
{{$i18.t('button_buy_tickets')}}
"," = new Date(new Date().getFullYear(), 11, 7) || new Date() <= new Date(new Date().getFullYear(), 0, 14)\" src=/themes/mego/i/mego-pink-ny.svg>
{{ $i18.t('title_order_my') }} 1\" v-bind:markets=$g2s.markets> {{ $i18.t('button_sign_in') }} {{ $i18.t('title_profile') }}

{{ $i18.t('label_website_promo') }}

","
{{$i18.t('label_order_with_number', { i: model.reservation.reservationNumber })}}
{{model.title}}
"," {{$i18.t('title_order_my')}}
{{$i18.t('button_order_find')}}
","
{{$i18.t('label_order_with_number', { i: model.reservation.reservationNumber })}}
{{model.title}}

0\" class=mb-4>
  • {{product.name}}, {{product.billingPrice | price(false, product.currencyCode)}}
{{ $i18.t('button_leave_service') }} {{ $i18.t('button_try_with_service') }}
"," {{$i18.t('label_change_or_refund')}} "," {{model.title}}
","
{{redirectLabel}}
{{$i18.t('button_ok')}}
"," {{$i18.t('label_password_recovery')}} "," {{$i18.t('label_password_new')}} "," {{$i18.t('title_registration')}} "," {{$i18.t('title_car_rent')}} "," {{$i18.t('title_account_signin')}}
{{$i18.t('button_sign_in')}}
{{$i18.t('question_forgot_password')}} {{$i18.t('question_not_registered')}}
"," {{$i18.t('title_support')}}
{{$i18.t('title_faq')}} {{$i18.t('button_send_request')}} {{$i18.t('button_send_request')}} \"\" {{$i18.t('button_telegram_bot')}}
"," {{$i18.t('title_support')}}

Внимание! Срок обработки запросов увеличен

Сейчас Служба Заботы перегружена из-за массовой отмены рейсов.

  • Если ваш вылет в ближайшие сутки, мы ответим в течение дня.
  • На запросы по вылетам в течение ближайших двух недель, ответим не позднее чем за сутки до вылета.
  • На остальные запросы наши эксперты ответят в течение 14-40 дней, но обязательно до вашего вылета.
  • Пожалуйста, не волнуйтесь и не создавайте повторных заявок — это замедляет процесс обработки.
  • Сроки возврата сейчас также увеличены и зависят от авиакомпании — в среднем от 30 дней

Приносим свои извинения за временные неудобства.

  • В ответ на запрос мы вышлем предварительный расчет суммы к возврату.
  • Возврат будет осуществлен после подтверждения вами предварительного расчета.
  • Авиакомпания вправе удержать штраф и дополнительные сборы, согласно условиям тарифа. Дополнительно взымается сервисный сбор за оформление возврата.
  • Подробнее
  • В ответ на запрос мы вышлем варианты обмена с предварительным расчетом доплаты за обмен.
  • Обмен будет осуществлен после подтверждения вами предварительного расчета.
  • Доплата за обмен рассчитывается согласно условиям тарифа авиакомпании. Дополнительно взымается сервисный сбор за оформление обмена.
  • Подробнее
  • Отмена оплаченного заказа в день оформления при наличии технической возможности.
  • Отмена возможна при отправке запроса до 20:00 по московскому времени.
  • Вопросы, связанные с использованием Мего-ваучера.
  • Пожалуйста, по вопросам о ваучерах авиакомпаний обращайтесь непосредственно в авиакомпанию.
  • Актуальный вес багажа для вашего перелета рекомендуем уточнить на сайта авиакомпании.
  • С актуальными нормами провоза багажа рекомендуем ознакомиться на сайте авиакомпании.
  • Исправление ошибок в данных пассажира: имя, фамилия, номер документа, дата рождения.
  • Возможность внесения изменений определяется правилами авиакомпании.
  • Проблемы с получением маршрутной квитанции на электронную почту.
  • Уточнение данных в маршрутной квитанции.
  • Вопросы, связанные с получением уведомления об изменениях в расписании.
  • Вопросы, возникающие в процессе бронирования, касающиеся заполнения данных, доступности мест, правил применения тарифов и условий возврата.
  • Выбирайте эту тему, если в процессе оформления заказа или его оплаты вы получили ошибку.
  • Выбирайте эту тему, если остальные не подходят.
{{ autovoidLabel.adviseText }} {{ autovoidLabel.accountText }}
0 }\"> {{$i18.t('label_attach_files')}} 0\" color=secondary flat class=\"btn q-mb-sm full-width text-weight-regular\" v-on:click=onFilesClear()> {{$i18.t('button_clear')}}
{{file.name}}, {{formatFileSize(file.size)}}
{{$i18.t('button_send')}}

"," {{ $i18.t('title_support') }} {{ $i18.t('button_status') }}
"," {{ $i18.t('title_support_allrequests') }} "," {{$i18.t('label_terms')}} "," Test
bg-primary-lighter
bg-primary-light
bg-primary-main
bg-primary-dark
bg-primary-darker

Lowcost
Charter
RegularSpecial
Sale

Button Button
Button
","

{{title}}

{{$i18.t('button_close')}}
","
","
","
","
В приложении
удобнее!
apple-logo
Загрузите в
App Store
apple-logo
Доступно в
Google Play
","
= new Date(new Date().getFullYear(), 11, 7) || new Date() <= new Date(new Date().getFullYear(), 0, 14)\" src=/themes/mego/i/mego-ny.svg> {{$i18.t('title_flight_tickets')}} {{$i18.t('title_order_my')}} {{$i18.t('title_account')}} {{$i18.t('title_faq')}} {{$i18.t('title_support')}} {{$i18.t('title_about_company')}} {{$i18.t('title_site_fullversion_short')}}
","
{{ $i18.t('label_flight_kind_best') }}
{{ $i18.t('label_flight_kind_cheapest') }}
{{ $i18.t('label_flight_kind_fasters') }}
{{$i18.t('label_flight_kind_' + flight.flightKind.toLowerCase())}}
{{flight.promo_coupon_name}}
0\r\n }\r\n ]\" v-bind:data-mego-adapter=flight.adapter v-bind:data-mego-tfid=flight.tfid v-bind:data-mego-airlines=flight.airlinesCode>
{{flight.externalPartner.name}} {{flight.billingPrice | price(false, flight.currencyCode)}}
{{leg.departureDate.format('HH:mm')}} {{leg.departureDestination.iataCode}}
{{leg.arrivalDate.format('HH:mm')}} +1 {{leg.arrivalDestination.iataCode}}
{{$i18.t('label_travel_time_short')}} {{getLegDurationTime(leg)}}
1\" class=\"result-flight-card__segments q-mt-xs full-width text-sm\">
","
{{ options.firstBtnText }}
{{ options.secondBtnText }}
","
1 && selectedMarket\" class=\"language-selector-wrapper d-flex align-items-center\" v-bind:class=\"[$g2s.locale == 'ar'? 'language-selector-wrapper__ae' : '']\">
{{ selectedMarketTranslate.text }}
{{ selectedMarketTranslate.button }}
","
{{currentMarket.nameNative}}

{{$i18.t('label_region_setting')}}

\"\"
{{ market.nameNative }}
{{ market.currencySymbol }}
"," {{ flight.detailsLabel }}
{{$i18.t('label_flight_kind_' + flight.flightKind.toLowerCase())}}
{{$i18.t('label_flight_direction_forwards')}} {{$i18.t('label_flight_direction_backwards')}}
{{leg.departureDestination.iataCode}} {{leg.arrivalDestination.iataCode}}
{{$i18.t('label_flight_class_' + leg.bookingClass.toLowerCase())}} {{leg.duration.format($i18.t('format_duration'))}}
 {{getBaggageLabel(leg.baggageCabin, true)}}  {{getBaggageLabel(leg.baggage, false)}}
0\"> {{$i18.t('label_flight_stop_maintenance')}}
{{$i18.t('label_flight_time_local')}}
{{flight.billingPrice | price(false, flight.currencyCode)}}
{{$i18.t('numerous_passenger_for', {count: passengerCount})}}
{{submitLabel}}
","
{{model.params.from}}
{{model.params.to}}
{{$i18.t('label_flight_departure_when')}}
{{dateToUppercase($m(model.params.departure).format($i18.t('format_date_lg_wd')))}}
{{$i18.t('label_flight_date_return')}}
{{ dateToUppercase($m(model.params.return).format($i18.t('format_date_lg_wd'))) }}
{{$i18.t('label_passengers_and_class')}}
{{$i18.t('label_passengers')}} {{totalPassengers}}, {{classLabel}}
{{$i18.t('label_passengers_type_adult')}}
{{$i18.t('label_passengers_type_adult_details')}}
{{model.params.passengers.adults}}
{{$i18.t('label_passengers_type_children')}}
{{$i18.t('label_passengers_type_children_details')}}
{{model.params.passengers.children}}
{{$i18.t('label_passengers_type_infants')}}
{{$i18.t('label_passengers_type_infants_details')}}
{{model.params.passengers.infants}}
{{$i18.t('label_flight_class_business_class')}}
{{$i18.t('button_close')}}
{{$i18.t('button_find')}}
{{$i18.t('label_flight_departure_date')}}
{{$i18.t('label_flight_return_date')}}
{{$i18.t('label_flight_departure_when')}}
{{dateToUppercase($m(model.params.departure).format($i18.t('format_date_lg_wd')))}}
{{$i18.t('label_flight_date_return')}}
{{dateToUppercase($m(model.params.return).format($i18.t('format_date_lg_wd')))}}
{{month.date.format('MMMM YYYY')}}
{{day}}
{{ monthDay.number }}
{{$i18.t('label_flight_oneway')}}
","

{{$i18.t('label_flight_terms')}}

{{$i18.t('button_close')}}
","
{{$i18.t('label_tabs_cheap')}}
{{$i18.t('label_tabs_from')}} {{cheapestFlight.billingPrice | price }} ~{{leg.durationMinutes / 60 | number}} {{$i18.t('label_tabs_hours')}} {{index ? $i18.t('label_flight_direction_backwards') : $i18.t('label_flight_direction_forwards')}}
{{$i18.t('label_tabs_fast')}}
{{$i18.t('label_tabs_from')}} {{fasterFlight.billingPrice | price }} ~{{leg.durationMinutes / 60 | number}} {{$i18.t('label_tabs_hours')}} {{index ? $i18.t('label_flight_direction_backwards') : $i18.t('label_flight_direction_forwards')}}
{{$i18.t('label_tabs_best')}}
{{$i18.t('label_tabs_from')}} {{bestFlight.billingPrice | price }} ~{{leg.durationMinutes / 60 | number}} {{$i18.t('label_tabs_hours')}} {{index ? $i18.t('label_flight_direction_backwards') : $i18.t('label_flight_direction_forwards')}}
"," {{showPass ? '' : ''}} ","

{{$i18.t('select_payment_type')}}

{{ $i18.t('button_payment_type_card') }}
mastercard maestro visa electron mir
СБП
Система быстрых платежей (СБП) — сервис Банка России, позволяющий осуществлять быстрые и безопасные платежи через ваш мобильный банк. Вводить данные карты не требуется.
На устройстве должно быть установлено приложение вашего банка.
sbp
Parcelado Mensalmente {{getMonthlyPaymentLabel() + reservation.couponDiscountAmount | price(false, reservation.selectedFlight.currencyCode)}} em 6 meses
\"ya
{{ $i18.t('button_payment_type_fast_with') }}
\"Оплата
0\" v-model=paymentModel.selectedPaymentTab val=emoney slot=label class=\"payment-methods-item q-px-sm\">
marker
{{ $i18.t('button_payment_type_online') }}
{{ $i18.t('button_payment_type_credit') }}
{{ $i18.t('button_payment_type_in_parts') }}
{{ $i18.t('button_payment_type_later') }}

{{ $i18.t('label_card_enter_details') }}

{{$i18.t('label_card_enter_subdetail')}}
Analisamos a possibilidade de pagamento parcelado Desculpe, para este voo a opção do pagamento parcelado não está disponível
Рagar com cartão de crédito

Yandex Pay – быстрый и удобный способ оплаты от Яндекса.

Пакет \"Супер SMS\"
Комплект самых удобных услуг: Билет по SMS +Уведомление об отмене/переносе рейса по SMS/e-mail
  • Моментальное получение кода бронирования и номера билета по SMS
  • Все важные сведения о поездке всегда под рукой
  • Оперативное уведомление об изменениях в вашем заказе
  • Вы не пропустите свой рейс из-за изменений
Вы получаете услуги:
  1. Билет по SMS

    Поиск информации о коде бронирования и номере билета в распечатанном документе может быть неудобным и раздражающим. Выбирая услугу “Билет по SMS”:

    • вы получаете быстрый и удобный доступ к необходимым сведениям о путешествии на вашем мобильном устройстве.
    • вы поступаете экологично, так как экономите бумагу и бережёте лес.

    Вы получите SMS-уведомление с информацией о вашем заказе. В нем будут указаны код бронирования и номер билета.

    Чтобы воспользоваться услугой «Билет по SMS”, правильно введите номер мобильного телефона, который вы возьмете с собой в поездку!

    Заказывая услугу “Билет по SMS”, вы соглашаетесь с Правилами использования и предоставления услуги “Билет по SMS”, указанными в публичной оферте.

  2. Уведомление об отмене/переносе рейса

    по SMS или электронной почте.

    • Оперативное уведомление с помощью SMS или по электронной почте об изменениях в заказе и перелетах.
    • Не пропустите свой рейс и будьте в курсе всех изменений благодаря услуге SMS-уведомления.
    • Отправка SMS или электронного письма осуществляются при получении агентством соответствующего уведомления от авиакомпании или поставщика информационных услуг (системы бронирования).

Как оплатить заказ через СБП:

  1. Убедитесь, что у вас на телефоне установлено приложение банка — оно нужно для оплаты.
  2. Нажмите «Оплатить» и выберите ваш банк из списка.
  3. Оплатите услугу и возвращайтесь сюда. Так вы точно убедитесь, что оплата прошла, и сможете посмотреть обновлённый заказ.
{{getCommissionLabel(paymentType.commission)}}
{{$i18.t('button_details')}}
  • Три равных платежа по {{ moneyWallPrice | price }} в месяц.
  • Для оформления заявки вам потребуется фотография паспорта и банковская карта.
  • Услуга предоставляется сервисом оплаты частями Moneywall.
  • В случае возврата заказа после оплаты с помощью Moneywall денежные средства будут перечислены в компанию Moneywall.
{{$i18.t('button_details')}}
","
","
{{$i18.t('label_seat_selection_full')}}
{{$i18.t('label_product_type_service')}}
{{$i18.t('label_choose_seet_for_flight')}}
1\" class=\"seats-selection-passengers full-width q-pb-sm\">
{{$i18.t('label_selected')}} {{ currentFlightSeatsPriceAmount | price(false, reservation.selectedFlight ? reservation.selectedFlight.currencyCode : '')}}
{{$i18.t('label_not_available_for_selection')}}
{{$i18.t('label_suitable_for_passenger_with_infant')}}
{{$i18.t('label_suitable_for_adult_and_children')}}
{{$i18.t('button_add')}}
","
","

{{product.product.name}}

{{ product.product.tagText }}
{{product.product.price | price(false, product.product.currencyCode)}}
{{$i18.t('label_product_pricetype_perorder')}}
{{$i18.t('label_product_pricetype_perpassenger')}}
{{$i18.t('button_add_service')}} {{$i18.t('button_product_service_remove')}}
","
{{ $i18.t('label_product_type_service') }}
Онлайн-регистрация на рейс
Пройдём регистрацию за вас и отправим посадочный талон на электронную почту за сутки до вылета.
Да, я хочу сэкономить время с онлайн-регистрацией Нет, зарегистрируюсь самостоятельно
","
{{ productKit.topText }}

{{ nameGetter(brand.productId) || $i18.t('label_service_standart') }}

+{{ priceGetter(brand.productId) | price(false, getCurrentCode(brand.productId)) }}
{{brand.hint}}
{{brand.buttonAcceptText}}
{{$i18.t('button_select')}}
{{ text }}
","
{{ brandKit.topText }}
p.hint)\r\n }\">
{{ $i18.t('button_select_package') }} «{{ getName(selectedProduct.productId) || $i18.t('label_service_standart') }}»
","
{{ text }}
{{ timerText }}
","
{{ $i18.t('label_additional_baggage') }}
{{ reservation.customBaggagePrice | price(false, reservation.selectedFlight ? reservation.selectedFlight.currencyCode : '') }} - {{$i18.t('label_for_selected_extra_baggage').toLowerCase()}}

{{$i18.t('label_additional_baggage')}}

{{ $i18.t('label_additional_baggage_subtitle') }}
{{ reservation.customBaggagePrice | price(false, reservation.selectedFlight ? reservation.selectedFlight.currencyCode : '') }} {{$i18.t('label_product_pricetype_perorder')}}
{{$i18.t('button_add_service')}}
","
","import { ActionContext } from 'vuex';\r\n//import { RootState as DesktopRootState } from '../../../../Apps/Frontend.Desktop/js/src/store';\r\nimport { RootState as MobileRootState } from '../../../../Apps/Frontend.Mobile/js/src/store';\r\nimport { FETCH_USER_COUPONS } from 'core/store/action-types';\r\nimport { SET_USER_COUPONS } from 'core/store/mutation-types';\r\nimport * as api from 'core/api';\r\n\r\nexport interface UserState {\r\n coupons?: api.CouponListModel[];\r\n}\r\n\r\nconst state: UserState = {\r\n coupons: undefined\r\n};\r\n\r\nconst getters = {};\r\n\r\nconst actions = {\r\n [FETCH_USER_COUPONS](context: ActionContext) {\r\n return new api.CouponService().listAvailable().then(\r\n (result: api.CouponListModel[]) => {\r\n if (result && result.length > 0) {\r\n context.commit(SET_USER_COUPONS, result);\r\n\r\n return Promise.resolve(result);\r\n } else {\r\n context.commit(SET_USER_COUPONS, []);\r\n\r\n return Promise.resolve([]);\r\n }\r\n },\r\n (error) => {\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n\r\n return Promise.reject(error);\r\n }\r\n );\r\n }\r\n};\r\n\r\nconst mutations = {\r\n [SET_USER_COUPONS](state: UserState, payload: api.CouponListModel[]) {\r\n state.coupons = payload;\r\n }\r\n};\r\n\r\nexport default {\r\n state,\r\n getters,\r\n actions,\r\n mutations\r\n};\r\n","export const SET_USER_COUPONS = 'SET_USER_COUPONS';\r\n","import moment from 'moment';\r\nimport * as flights from 'core/flights';\r\nimport * as types from '../mutation-types';\r\n\r\nexport interface FlightSearchParamsState {\r\n params?: flights.FlightSearchParams;\r\n}\r\n\r\n// initial state\r\nconst state: FlightSearchParamsState = {\r\n params: undefined\r\n};\r\n\r\n// getters\r\nconst getters = {\r\n flightSearchParams: state => state.params\r\n};\r\n\r\n// actions\r\nconst actions = {};\r\n\r\n// mutations\r\nconst mutations = {\r\n [types.SEARCH_FLIGHTS](state, newSearchParams: flights.FlightSearchParams) {\r\n if (!state.params) {\r\n state.params = {\r\n from: '',\r\n to: '',\r\n departure: moment().add(7, 'days').startOf('day').toDate(),\r\n return: moment().add(14, 'days').startOf('day').toDate(),\r\n roundtrip: true,\r\n class: flights.BookingClass.Economic,\r\n passengers: {\r\n adults: 1,\r\n children: 0,\r\n infants: 0\r\n }\r\n };\r\n }\r\n\r\n if (newSearchParams) {\r\n state.params.from = newSearchParams.from;\r\n state.params.to = newSearchParams.to;\r\n state.params.departure = newSearchParams.departure;\r\n state.params.return = newSearchParams.return;\r\n state.params.roundtrip = newSearchParams.roundtrip;\r\n state.params.class = newSearchParams.class;\r\n state.params.passengers.adults = newSearchParams.passengers.adults;\r\n state.params.passengers.children = newSearchParams.passengers.children;\r\n state.params.passengers.infants = newSearchParams.passengers.infants;\r\n }\r\n }\r\n};\r\n\r\nexport default {\r\n state,\r\n getters,\r\n actions,\r\n mutations\r\n};\r\n","import Vue from 'vue';\r\nimport Vuex from 'vuex';\r\nimport user from 'core/store/modules/user';\r\nimport flightSearchParams from './modules/flightSearchParams';\r\nimport { UserState } from 'core/store/modules/user';\r\nimport { FlightSearchParamsState } from './modules/flightSearchParams';\r\n\r\nexport interface RootState {\r\n user: UserState;\r\n flightSearchParams: FlightSearchParamsState;\r\n}\r\n\r\nVue.use(Vuex);\r\n\r\nexport default new Vuex.Store({\r\n modules: {\r\n user,\r\n flightSearchParams\r\n },\r\n strict: true\r\n});\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class AboutComponent extends Vue {\r\n about: string;\r\n\r\n state: string = 'loading';\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_about_company');\r\n\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n new api.ContentService().getText('about').then(\r\n (result: api.ContentText) => {\r\n this.about = result.body;\r\n this.state = 'success';\r\n },\r\n (error) => {\r\n this.state = 'failed';\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface AccountBonusesComponentModel {\r\n state: string;\r\n bonuses: api.BonusStatus | null;\r\n}\r\n\r\n@WithRender\r\n@Component\r\nexport default class AccountBonusesComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: AccountBonusesComponentModel = {\r\n state: 'loading',\r\n bonuses: null\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_bonuses');\r\n\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n this.model.state = 'loading';\r\n\r\n this.$auth.getBonusStatus().then(\r\n (result: api.BonusStatus) => {\r\n if (result && result.transfers.length > 0) {\r\n this.model.state = 'results';\r\n this.model.bonuses = result;\r\n } else {\r\n this.model.state = 'empty';\r\n }\r\n },\r\n (error) => {\r\n this.model.state = 'error';\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\nimport { UserState } from 'core/store/modules/user';\r\nimport { FETCH_USER_COUPONS } from 'core/store/action-types';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface AccountComponentModel {\r\n state: string;\r\n user: api.User | null;\r\n}\r\n\r\n@WithRender\r\n@Component\r\nexport default class AccountComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n get userCoupons(): api.CouponListModel[] | undefined {\r\n return (this.$store.state.user).coupons;\r\n }\r\n\r\n model: AccountComponentModel = {\r\n state: 'loading',\r\n user: null\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_account');\r\n\r\n if (this.$auth.authenticated) {\r\n this.loadModel();\r\n } else {\r\n this.$nextTick(function () {\r\n if (this.$route.query.token) {\r\n // If token in url the try to confirm user\r\n this.$auth.confirm(this.$route.query.token as string).then(\r\n (user: api.User) => {\r\n if (user.hasPassword) {\r\n window.location.href = '/account';\r\n }\r\n else {\r\n window.location.href = '/account/welcome/password';\r\n }\r\n },\r\n () => {\r\n window.location.href = '/account';\r\n }\r\n );\r\n } else {\r\n router.push('/signin');\r\n }\r\n });\r\n }\r\n }\r\n\r\n loadModel() {\r\n this.model.state = 'loading';\r\n\r\n const getCurrentUserPromise = this.$auth.getCurrentUser()\r\n .then((result: api.User) => {\r\n if (result.hasPassword) {\r\n this.model.user = result;\r\n }\r\n else {\r\n router.push('/account/welcome/password');\r\n }\r\n }).catch(() => {\r\n router.push('/signin');\r\n\r\n return 'error';\r\n });\r\n let fetchUserCouponsPromise;\r\n\r\n if (this.userCoupons == null) {\r\n fetchUserCouponsPromise = this.$store.dispatch(FETCH_USER_COUPONS)\r\n .catch(() => {\r\n return 'error';\r\n });\r\n } else {\r\n fetchUserCouponsPromise = Promise.resolve();\r\n }\r\n\r\n Promise.all([getCurrentUserPromise, fetchUserCouponsPromise])\r\n .then((result) => {\r\n if (result[0] == 'error') {\r\n this.model.state = 'error';\r\n } else {\r\n this.model.state = 'view';\r\n }\r\n });\r\n }\r\n\r\n onSignOut() {\r\n this.$auth.signOut().then(\r\n (response: boolean) => {\r\n (this).$ga.sendEvent('signout', 'success', 'signout.success');\r\n\r\n location.href = '/';\r\n },\r\n (error) => {\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.localizedMessage ? error.response.data.localizedMessage : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n \r\n }\r\n}\r\n","export const FETCH_USER_COUPONS = 'FETCH_USER_COUPONS';\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport moment from 'moment';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\nimport { UserState } from 'core/store/modules/user';\r\nimport { FETCH_USER_COUPONS } from 'core/store/action-types';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class AccountCouponsComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n get viewState(): string {\r\n if (this.loadingInProggress) {\r\n return 'loading';\r\n }\r\n if (this.userCoupons && this.userCoupons.length > 0) {\r\n return 'result';\r\n }\r\n if (this.userCoupons && this.userCoupons.length == 0) {\r\n return 'empty';\r\n }\r\n if (this.gotErrorAfterLoading) {\r\n return 'error';\r\n }\r\n return '';\r\n }\r\n\r\n get userCoupons(): api.CouponListModel[] | undefined {\r\n return (this.$store.state.user).coupons;\r\n }\r\n\r\n loadingInProggress: boolean = false;\r\n gotErrorAfterLoading: boolean = false;\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_coupons');\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n if (this.userCoupons == null) {\r\n this.loadingInProggress = true;\r\n this.gotErrorAfterLoading = false;\r\n this.$store.dispatch(FETCH_USER_COUPONS)\r\n .then(() => {\r\n this.loadingInProggress = false;\r\n })\r\n .catch(() => {\r\n this.loadingInProggress = false;\r\n this.gotErrorAfterLoading = true;\r\n });\r\n }\r\n }\r\n\r\n // TODO: Это вынести бы в геттеры в store\r\n getExpiresLabel(coupon: api.CouponListModel): string {\r\n return i18next.t('label_coupon_expires',\r\n { i: moment(coupon.expiryDate).format(i18next.t('format_date_md')) }\r\n );\r\n }\r\n\r\n // TODO: Это вынести бы в геттеры в store\r\n getCouponUseUrl(coupon: api.CouponListModel): string {\r\n return '/go/coupon/' + coupon.name;\r\n }\r\n\r\n gotoCouponUrl(coupon: api.CouponListModel): void {\r\n const origin = location.origin.replace('-m.', '.');\r\n const pathname = this.getCouponUseUrl(coupon);\r\n location.href = origin + pathname;\r\n }\r\n}\r\n","import * as api from '../api';\r\nimport * as flights from '../flights';\r\n\r\nexport class OrderModel {\r\n reservationInfo: api.ReservationInfo;\r\n flight: flights.FlightModel;\r\n\r\n constructor(reservation: api.ReservationStatusResult) {\r\n this.reservationInfo = reservation.reservationInfo;\r\n this.flight = new flights.FlightModel(reservation.flight, reservation);\r\n }\r\n}\r\n","import * as orders from '../orders';\r\nimport * as api from '../api';\r\n\r\nexport class OrderService {\r\n convertToOrders(reservations: api.ReservationStatusResult[]): orders.OrderModel[] {\r\n const result: orders.OrderModel[] = [];\r\n\r\n reservations.forEach(function (r) {\r\n result.push(new orders.OrderModel(r));\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\nimport * as orders from 'core/orders';\r\nimport * as utils from 'core/utils';\r\nimport { G2S } from 'core/g2s';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface AccountOrdersComponentModel {\r\n state: string;\r\n orders: orders.OrderModel[];\r\n user: api.UserAccount | null;\r\n}\r\n\r\n@WithRender\r\n@Component\r\nexport default class AccountOrdersComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: AccountOrdersComponentModel = {\r\n state: 'loading',\r\n orders: [],\r\n user: null\r\n }\r\n currentOrder: api.ReservationStatusResult | any = {\r\n reservationInfo: {\r\n billingPrice: 0\r\n },\r\n flight: {\r\n currencyCode: ''\r\n }\r\n };\r\n\r\n gaParams: utils.GoogleAnalyticsParams = new utils.GoogleAnalyticsParams();\r\n\r\n refundInfo: api.RefundInfo = {\r\n clientText: '',\r\n headerText: '',\r\n youPaidText: '',\r\n weWillRefundText: '',\r\n termText: '',\r\n buttonAcceptText: '',\r\n buttonRejectText: '',\r\n refundSum: 0,\r\n paidSum: 0,\r\n refundSumCurrency: ''\r\n };\r\n locale: string = 'ru';\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_orders');\r\n\r\n this.loadModel();\r\n }\r\n\r\n getOrderNumber(order: api.ReservationStatusResult): string {\r\n return i18next.t('label_order_with_number',\r\n { i: order.reservationInfo.reservationNumber }\r\n );\r\n }\r\n\r\n getSupportLink(order: api.ReservationStatusResult, value: string): string {\r\n return `/support/new/`;\r\n }\r\n\r\n loadModel() {\r\n this.model.state = 'loading';\r\n\r\n this.$auth.getCurrentUserAccount().then(\r\n (result: api.UserAccount) => {\r\n this.model.user = result;\r\n },\r\n () => {\r\n router.push('/signin');\r\n }\r\n );\r\n\r\n this.$auth.ordersList().then(\r\n (result: api.ReservationStatusResult[]) => {\r\n if (result && result.length > 0) {\r\n this.model.state = 'results';\r\n\r\n this.model.orders = new orders.OrderService().convertToOrders(result);\r\n } else {\r\n this.model.state = 'empty';\r\n }\r\n },\r\n (error) => {\r\n this.model.state = 'error';\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n\r\n onRefundClick(order: api.ReservationStatusResult) {\r\n (this).$ga.sendEvent('refund.tickets', 'click', 'refund.tickets.click.account', this.gaParams);\r\n (this).$ga.sendEvent('support.new', 'click', 'support.new.click');\r\n (this).$ga.reachGoal('support.new.click');\r\n (this).$ga.reachGoal('support.new.click.account');\r\n router.push(this.getSupportLink(order, 'flight_refund'));\r\n }\r\n\r\n onClickSupport(order: api.ReservationStatusResult) {\r\n (this).$ga.sendEvent('support.new', 'click', 'support.new.click');\r\n (this).$ga.reachGoal('support.new.click');\r\n (this).$ga.reachGoal('support.new.click.account');\r\n router.push(this.getSupportLink(order, 'flight_change'));\r\n }\r\n\r\n onCancelClick(order: api.ReservationStatusResult) {\r\n if (order.reservationInfo.autoVoidPossible) {\r\n this.currentOrder = order;\r\n this.$auth.getRefundInfo(this.locale, order.reservationInfo.reservationPublicId).then(\r\n (result)=>{\r\n this.refundInfo = result;\r\n (this.$refs).dialog.show();\r\n },\r\n (error)=>{\r\n location.href = '/account';\r\n }\r\n );\r\n } else {\r\n location.href = '/account';\r\n }\r\n }\r\n\r\n onAcceptCancelingOrder() {\r\n const reservationPublicId = this.currentOrder.reservationInfo.reservationPublicId;\r\n \r\n this.$auth.createVoid(reservationPublicId).then(\r\n (response) => {\r\n this.loadModel();\r\n this.$auth.getProcessStartedText(G2S.config.locale).then(\r\n (result) => {\r\n (this.$refs).dialog.hide();\r\n (this.$root).$refs.messageDialog.show({\r\n title: result.headerText,\r\n message: result.messageText,\r\n ok: result.buttonAcceptText\r\n });\r\n },\r\n (error) => {\r\n (this.$refs).dialog.hide();\r\n (this.$root).$refs.messageDialog.show({\r\n message: (error.response.data && error.response.data.localizedMessage) ? error.response.data.localizedMessage : i18next.t('error_server_tryagain')\r\n });\r\n }\r\n );\r\n },\r\n (error) => {\r\n (this.$refs).dialog.hide();\r\n (this.$root.$refs).messageDialog.show({\r\n message: (error.response.data && error.response.data.localizedMessage) ? error.response.data.localizedMessage : i18next.t('error_server_tryagain')\r\n });\r\n }\r\n );\r\n }\r\n\r\n onClose() {\r\n (this.$refs).dialog.hide();\r\n }\r\n\r\n onOrderSelect(order: orders.OrderModel) {\r\n router.push('/order/' + order.reservationInfo.reservationPublicId);\r\n }\r\n\r\n onRefundStatusesClick() {\r\n (this).$ga.sendEvent('account', 'btn.click', 'btn.click.refund.status', this.gaParams);\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface AccountCorporateComponentModel {\r\n state: 'loading' | 'results';\r\n companyAccount: api.CorporateAccount | null;\r\n}\r\n\r\n@WithRender\r\n@Component\r\nexport default class AccountCorporateComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: AccountCorporateComponentModel = {\r\n state: 'loading',\r\n companyAccount: null\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_corporate_account');\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n this.model.state = 'loading';\r\n\r\n this.$auth.getCurrentUserAccount()\r\n .then((result: api.UserAccount) => {\r\n this.model.state = 'results';\r\n this.model.companyAccount = result.companyAccount;\r\n }).catch(() => {\r\n router.push('/signin');\r\n\r\n return 'error';\r\n });\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Watch } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport { minLength } from 'vuelidate/lib/validators';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n model: {\r\n firstName: { minLength: minLength(1) },\r\n lastName: { minLength: minLength(1) },\r\n birthday: {},\r\n gender: {},\r\n country: {},\r\n city: {}\r\n }\r\n }\r\n})\r\nexport default class AccountProfileComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n @Watch('user.gender')\r\n onUserGenderChanged(val: string) {\r\n if (val) {\r\n if (val.toLowerCase() === 'male') {\r\n this.gender = flights.Gender.Male;\r\n }\r\n else if (val.toLowerCase() === 'female') {\r\n this.gender = flights.Gender.Female;\r\n }\r\n }\r\n }\r\n\r\n user: api.UserWithProfile | null = null;\r\n\r\n gender: flights.Gender | null = null;\r\n\r\n country: string | null = null;\r\n\r\n city: string | null = null;\r\n\r\n submitted: boolean = false;\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_profile');\r\n\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n this.$auth.getCurrentUserWithProfile().then(\r\n (result: api.UserWithProfile) => {\r\n this.user = result;\r\n\r\n this.gender = flights.Gender[this.user.gender];\r\n\r\n if (this.user.country) {\r\n this.country = this.user.country.uniqueId.toString();\r\n }\r\n if (this.user.city) {\r\n this.city = this.user.city.uniqueId.toString();\r\n }\r\n },\r\n () => {\r\n router.push('/signin');\r\n }\r\n );\r\n }\r\n\r\n get genderOptions() {\r\n return [\r\n {\r\n label: i18next.t('label_gender_' + flights.Gender[flights.Gender.Male].toLowerCase()),\r\n value: flights.Gender.Male\r\n },\r\n {\r\n label: i18next.t('label_gender_' + flights.Gender[flights.Gender.Female].toLowerCase()),\r\n value: flights.Gender.Female\r\n }\r\n ];\r\n }\r\n\r\n get selectCountries() {\r\n const result: any = this.user!.countries.map((country) => {\r\n return {\r\n label: country.localizedName,\r\n value: country.uniqueId\r\n };\r\n });\r\n\r\n if (result.length > 0) {\r\n result.unshift({label: '', value: null});\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get selectCities() {\r\n const result = this.user!.cities.map((city) => {\r\n return {\r\n label: city.localizedName,\r\n value: city.uniqueId\r\n };\r\n });\r\n\r\n result.unshift({ label: '', value: 0 });\r\n\r\n return result;\r\n }\r\n\r\n get selectNextTripPurposes() {\r\n return this.user!.allNextTripPurposes.map((item) => {\r\n return {\r\n label: item.name,\r\n value: item.id\r\n };\r\n });\r\n }\r\n\r\n onCountryChange() {\r\n this.city = null;\r\n this.user!.city = null;\r\n\r\n if (this.country) {\r\n this.user!.country = this.user!.countries.find(c => c.uniqueId == parseInt(this.country!)) || null;\r\n\r\n new api.DestinationService().listCities(this.country).then(\r\n (result: api.Destination[]) => {\r\n this.user!.cities = result;\r\n },\r\n () => {}\r\n );\r\n } else {\r\n this.user!.country = null;\r\n this.user!.cities = [];\r\n }\r\n }\r\n\r\n onCityChange() {\r\n if (this.city) {\r\n this.user!.city = this.user!.cities.find(c => c.uniqueId == parseInt(this.city!)) || null;\r\n } else {\r\n this.user!.city = null;\r\n }\r\n }\r\n\r\n onGenderChange() {\r\n this.user!.gender = flights.Gender[this.gender!];\r\n\r\n if (!this.user!.birthday) {\r\n document.getElementById('birthday')!.focus();\r\n }\r\n }\r\n\r\n onSubmit() {\r\n this.$v.model!.$touch();\r\n\r\n if (this.$v.model!.$error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_fields')\r\n });\r\n } else {\r\n this.submitted = true;\r\n\r\n this.$auth.updateProfile(this.user!).then(\r\n () => {\r\n this.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('label_profile_updated')\r\n });\r\n },\r\n (error) => {\r\n this.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.message ? error.response.data.message : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport { required, minLength, email } from 'vuelidate/lib/validators';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface AccountProfileEmailComponentModel {\r\n state: string;\r\n user: api.User | null;\r\n email: string;\r\n password: string;\r\n submitted: boolean;\r\n}\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n model: {\r\n email: { required, email },\r\n password: { required, minLength: minLength(6) }\r\n }\r\n }\r\n})\r\nexport default class AccountProfileEmailComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: AccountProfileEmailComponentModel = {\r\n state: 'form',\r\n user: null,\r\n email: '',\r\n password: '',\r\n submitted: false\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('label_email');\r\n\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n this.$auth.getCurrentUser().then(\r\n (result: api.User) => {\r\n this.model.user = result;\r\n this.model.email = this.model.user.email!;\r\n },\r\n () => {\r\n router.push('/signin');\r\n }\r\n );\r\n }\r\n\r\n onSubmit() {\r\n this.$v.model!.$touch();\r\n\r\n if (this.$v.model!.$error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_fields')\r\n });\r\n } else {\r\n this.model.submitted = true;\r\n\r\n this.$auth.updateEmail(this.model.email, this.model.password).then(\r\n () => {\r\n this.model.submitted = false;\r\n\r\n this.model.state = 'result';\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.message ? error.response.data.message : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport { required, minLength } from 'vuelidate/lib/validators';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface AccountProfilePhoneComponentModel {\r\n user: api.User | null;\r\n phone: string;\r\n password: string;\r\n submitted: boolean;\r\n}\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n model: {\r\n phone: { required, minLength: minLength(5) },\r\n password: { required, minLength: minLength(6) }\r\n }\r\n }\r\n})\r\nexport default class AccountProfilePhoneComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: AccountProfilePhoneComponentModel = {\r\n user: null,\r\n phone: '',\r\n password: '',\r\n submitted: false\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('label_phone_mobile');\r\n\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n this.$auth.getCurrentUser().then(\r\n (result: api.User) => {\r\n this.model.user = result;\r\n this.model.phone = this.$options.filters!.phone(this.model.user.phone);\r\n },\r\n () => {\r\n router.push('/signin');\r\n }\r\n );\r\n }\r\n\r\n onPhoneBlur($event) {\r\n this.$el.removeAttribute('placeholder');\r\n\r\n const v = this.$options.filters!.phone($event.target.value);\r\n\r\n if (v !== $event.target.value) {\r\n $event.target.value = this.$options.filters!.phone($event.target.value);\r\n this.model.phone = $event.target.value;\r\n }\r\n\r\n this.$v.model!.phone!.$touch();\r\n }\r\n\r\n onPhoneFocus() {\r\n this.$el.setAttribute('placeholder', '+7');\r\n }\r\n\r\n onPhoneInput($event) {\r\n $event.target.value = utils.String.normalizePhone($event.target.value);\r\n this.model.phone = $event.target.value;\r\n }\r\n\r\n onSubmit() {\r\n this.$v.model!.$touch();\r\n\r\n if (this.$v.model!.$error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_fields')\r\n });\r\n } else {\r\n this.model.submitted = true;\r\n\r\n this.$auth.updatePhone(this.model.phone, this.model.password).then(\r\n () => {\r\n this.model.submitted = false;\r\n\r\n router.push('/account/profile');\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.message ? error.response.data.message : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface AccountSettingsComponentModel {\r\n user: api.UserAccount | null;\r\n}\r\n\r\n@WithRender\r\n@Component\r\nexport default class AccountSettingsComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: AccountSettingsComponentModel = {\r\n user: null\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_settings');\r\n\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n this.$auth.getCurrentUserAccount().then(\r\n (result: api.UserAccount) => {\r\n this.model.user = result;\r\n },\r\n () => {\r\n router.push('/signin');\r\n }\r\n );\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport { required, minLength } from 'vuelidate/lib/validators';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface AccountSettingsPasswordComponentModel {\r\n user: api.User | null;\r\n newPassword: string;\r\n password: string;\r\n submitted: boolean;\r\n}\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n model: {\r\n newPassword: { required, minLength: minLength(6) },\r\n password: { required, minLength: minLength(6) }\r\n }\r\n }\r\n})\r\nexport default class AccountSettingsPasswordComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: AccountSettingsPasswordComponentModel = {\r\n user: null,\r\n newPassword: '',\r\n password: '',\r\n submitted: false\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('label_password_new');\r\n\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n this.$auth.getCurrentUser().then(\r\n (result: api.User) => {\r\n this.model.user = result;\r\n },\r\n () => {\r\n router.push('/signin');\r\n }\r\n );\r\n }\r\n\r\n onSubmit() {\r\n this.$v.model!.$touch();\r\n\r\n if (this.$v.model!.$error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_fields')\r\n });\r\n } else {\r\n this.model.submitted = true;\r\n\r\n this.$auth.updatePassword(this.model.newPassword, this.model.password).then(\r\n () => {\r\n this.model.submitted = false;\r\n\r\n router.push('/account/settings');\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.localizedMessage ? error.response.data.localizedMessage : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface AccountSettingsRemovalComponentModel {\r\n state: string;\r\n user: api.User | null;\r\n submitted: boolean;\r\n}\r\n\r\n@WithRender\r\n@Component\r\nexport default class AccountSettingsRemovalComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: AccountSettingsRemovalComponentModel = {\r\n state: 'form',\r\n user: null,\r\n submitted: false\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('label_removal');\r\n\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n this.$auth.getCurrentUser().then(\r\n (result: api.User) => {\r\n this.model.user = result;\r\n },\r\n () => {\r\n router.push('/signin');\r\n }\r\n );\r\n }\r\n\r\n onSubmit() {\r\n this.model.submitted = true;\r\n\r\n this.$auth.deleteStart().then(\r\n () => {\r\n this.model.submitted = false;\r\n\r\n this.model.state = 'result';\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.localizedMessage ? error.response.data.localizedMessage : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface AccountWelcomeComponentModel {\r\n user: api.User | null;\r\n}\r\n\r\n@WithRender\r\n@Component\r\nexport default class AccountWelcomeComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: AccountWelcomeComponentModel = {\r\n user: null\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_welcome');\r\n\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n this.$auth.getCurrentUser().then(\r\n (result: api.User) => {\r\n if (result.hasPassword) {\r\n this.model.user = result;\r\n }\r\n else {\r\n router.push('/account/welcome/password');\r\n }\r\n },\r\n () => {\r\n router.push('/signin');\r\n }\r\n );\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport { required, minLength } from 'vuelidate/lib/validators';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface AccountWelcomePasswordComponentModel {\r\n user: api.User | null;\r\n newPassword: string;\r\n submitted: boolean;\r\n}\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n model: {\r\n newPassword: { required, minLength: minLength(6) }\r\n }\r\n }\r\n})\r\nexport default class AccountWelcomePasswordComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: AccountWelcomePasswordComponentModel = {\r\n user: null,\r\n newPassword: '',\r\n submitted: false\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_account');\r\n\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n this.$auth.getCurrentUser().then(\r\n (result: api.User) => {\r\n if (result.hasPassword) {\r\n router.push('/account');\r\n }\r\n else {\r\n this.model.user = result;\r\n }\r\n },\r\n () => {\r\n router.push('/signin');\r\n }\r\n );\r\n }\r\n\r\n onSubmit() {\r\n this.$v.model!.$touch();\r\n\r\n if (this.$v.model!.$error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_fields')\r\n });\r\n } else {\r\n this.model.submitted = true;\r\n\r\n this.$auth.updatePassword(this.model.newPassword, '').then(\r\n () => {\r\n this.model.submitted = false;\r\n\r\n router.push('/account');\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.localizedMessage ? error.response.data.localizedMessage : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\nimport * as orders from 'core/orders';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class AccountProductsBuyComponent extends Vue {\r\n $auth: auth.AuthService;\r\n\r\n view = 'loading';\r\n\r\n orders: orders.OrderModel[] = [];\r\n\r\n mounted() {\r\n this.$auth.ordersList().then(\r\n (result: api.ReservationStatusResult[]) => {\r\n if (result?.length > 0) {\r\n this.orders = new orders.OrderService().convertToOrders(result);\r\n }\r\n\r\n this.view = 'view';\r\n },\r\n (error) => {\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n\r\n getOrderNumber(order: api.ReservationStatusResult) {\r\n return i18next.t('label_with_number', { i: order.reservationInfo.reservationNumber });\r\n }\r\n\r\n getOrderProductsUrl(order: api.ReservationStatusResult) {\r\n return '/account/products/buy/' + order.reservationInfo.reservationPublicId;\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class AccountProductsBuyOrderComponent extends Vue {\r\n @Prop()\r\n orderGuid: string;\r\n\r\n view = 'loading';\r\n\r\n reservation: api.ReservationInfo | null = null;\r\n\r\n selectedProductIdsOnOrderPage: number[] = [];\r\n\r\n selectedProduct: api.Product | any = {\r\n adapter: '',\r\n id: 0,\r\n name: '',\r\n description: '',\r\n cancelPossible: false,\r\n productReservationId: 0,\r\n type: '',\r\n status: ''\r\n };\r\n\r\n get orderNumber() {\r\n if (this.reservation) {\r\n return i18next.t('label_with_number', { i: this.reservation.reservationNumber }); \r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n get totalCostOnOrderPage() {\r\n let total = 0;\r\n \r\n for (const id of this.selectedProductIdsOnOrderPage) {\r\n const product = this.reservation!.productsOnOrderPage.products.find(p => p.id === id)!;\r\n total += product.price;\r\n }\r\n\r\n return total;\r\n }\r\n\r\n mounted() {\r\n new api.ReservationService().getReservationStatus(this.orderGuid, true, false).then(\r\n (result: api.GetReservationStatusResult) => {\r\n this.reservation = result.reservationInfo;\r\n\r\n this.view = 'view';\r\n },\r\n (error) => {\r\n console.error(error);\r\n }\r\n );\r\n }\r\n\r\n detailProductOnSale(index: number) {\r\n this.selectedProduct = this.reservation!.productsOnOrderPage.products[index];\r\n (this.$refs).modalProduct.show();\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport moment from 'moment';\r\nimport * as api from 'core/api';\r\nimport * as auth from 'core/auth';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class AccountUnsubscribeComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n view = 'loading';\r\n\r\n email: string | null = null;\r\n subscriptions: api.Subscription[] = [];\r\n selectedSubscriptionIds: number[] = [];\r\n\r\n unsubscriptionModal = {\r\n view: 'loading'\r\n }\r\n\r\n mounted() {\r\n this.email = this.$route.query.email || null;\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n if (this.email) {\r\n new api.BestPriceService().getSubscriptions({ email: this.email }).then(\r\n (result) => {\r\n this.subscriptions = result.subscriptions;\r\n \r\n this.view = 'view';\r\n },\r\n (error) => {\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n formatDate(date: Date) {\r\n return moment(date).format('DD.MM.YY');\r\n }\r\n\r\n unsubscribe() {\r\n this.unsubscriptionModal.view = 'loading';\r\n (this.$refs).modalUnsubscription.show();\r\n\r\n new api.BestPriceService().unsubscribe({\r\n email: this.email!,\r\n subscriptionIds: this.selectedSubscriptionIds\r\n }).then(\r\n () => {\r\n this.selectedSubscriptionIds = [];\r\n this.unsubscriptionModal.view = 'success';\r\n this.loadModel();\r\n },\r\n (error) => {\r\n this.unsubscriptionModal.view = 'error';\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class Error404Component extends Vue {\r\n mounted() {\r\n window.document.title = i18next.t('error_404_notfound');\r\n }\r\n get canGoBack() {\r\n return window.history.length > 1;\r\n }\r\n goHome() {\r\n router.push('/');\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport * as flights from '../flights';\r\nimport * as utils from '../utils';\r\nimport * as api from '../api';\r\nimport { G2S } from '../g2s';\r\n\r\n/**\r\n * Custom validator for vuelidate.\r\n */\r\nexport function validateChecked(value): boolean {\r\n return value === true;\r\n}\r\n\r\nexport function validationEmail(value: string): boolean {\r\n return utils.String.isEmail(value);\r\n}\r\n\r\n/**\r\n * Custom validator for email or phone input.\r\n */\r\nexport function validateEmailOrPhone(value): boolean {\r\n if (value != undefined && value) {\r\n if (!utils.String.isEmail(value)) {\r\n const replaceRegex = /[^0-9+]/gi;\r\n const v = value.replace(/[^\\d+]/gi, '');\r\n\r\n if (replaceRegex.test(value) || v.length < 11) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function validationPassengersBirthday(passengers): boolean {\r\n if (!passengers[0].validationConstraints.orderFormNewDocumentNumberRuValidationEnabled) {\r\n return true;\r\n }\r\n\r\n let hasAdultPassenger = false, hasNoAdultPassenger = false;\r\n\r\n passengers.forEach((passenger) => {\r\n if (passenger.type !== 'adult') {\r\n hasNoAdultPassenger = true;\r\n }\r\n if (passenger.validationConstraints.minDocumentValidTill.isSameOrAfter(moment(passenger.birthday).add(18, 'years'))) {\r\n hasAdultPassenger = true;\r\n }\r\n });\r\n\r\n return hasAdultPassenger || !hasNoAdultPassenger;\r\n}\r\n\r\n/**\r\n * Custom validator for vuelidate.\r\n */\r\nexport function validatePassengerName(value, parentVm: flights.PassengerModel): boolean {\r\n const allowCyrillic = parentVm.allowCyrillicName;\r\n\r\n // Min length\r\n if (value != undefined && value && value.length < 2) {\r\n return false;\r\n }\r\n\r\n // Name should have only letters\r\n let regex = new RegExp(allowCyrillic ? '^[а-яёА-ЯЁa-zA-Z ]{2,}$' : '^[a-zA-Z ]{2,}$', 'gi');\r\n if (value != undefined && value && !regex.test(value)) {\r\n return false;\r\n }\r\n\r\n // Name should have vowels\r\n regex = new RegExp(allowCyrillic ? '^((?![aeijouyаоэиуыеёюя]).)*$' : '^((?![aeijouy]).)*$', 'gi');\r\n if (value != undefined && value && regex.test(value)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Custom validator for vuelidate.\r\n */\r\nexport function validatePassengerNameLast(value, parentVm: flights.PassengerModel): boolean {\r\n const lastNameConstraint = parentVm.validationConstraints[parentVm.documentType].constraints\r\n .find((constrain) => constrain.nameProperty === 'LastName');\r\n if (!value && lastNameConstraint.nameConstraint === 'Required') {\r\n return false;\r\n } \r\n\r\n if (lastNameConstraint.nameConstraint !== 'NotAllowed') {\r\n const allowCyrillic = parentVm.allowCyrillicName;\r\n // Min length\r\n if (value != undefined && value && value.length < 2) {\r\n return false;\r\n }\r\n\r\n // Name should have only letters\r\n let regex = new RegExp(allowCyrillic ? '^[а-яёА-ЯЁa-zA-Z]{2,}$' : '^[a-zA-Z]{2,}$', 'gi');\r\n if (value != undefined && value && !regex.test(value)) {\r\n return false;\r\n }\r\n\r\n regex = new RegExp(allowCyrillic ? '^((?![aeijouyаоэиуыеёюя]).)*$' : '^((?![aeijouy]).)*$', 'gi');\r\n if (value != undefined && value && regex.test(value)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Custom validator for mobile phone number.\r\n */\r\nexport function validatePhone(value): boolean {\r\n // Min length of numbers only\r\n if (value != undefined && value) {\r\n const v = value.toString().replace(/[^\\d]/gi, '');\r\n \r\n if (!v || v.length < 11 || v.length > 16) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Custom validator for mobile phone number.\r\n */\r\nexport function isValidDate(value): boolean {\r\n if (value === 'Invalid date') {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Custom validator for vuelidate.\r\n */\r\nexport function validateDocumentValidTill(value, parentVm): boolean {\r\n const docPeriodConstrains = parentVm.validationConstraints[parentVm.documentType].constraints\r\n .find((constrain) => constrain.nameProperty === 'ValidityPeriodOfDocument');\r\n // parentVm is Passenger\r\n if (docPeriodConstrains.nameConstraint !== 'NotAllowed') {\r\n \r\n if (value) {\r\n const d = moment(value);\r\n\r\n if (d.isValid()) {\r\n if (d.isBefore(parentVm.validationConstraints.minDocumentValidTill)) {\r\n return false;\r\n }\r\n }\r\n } else {\r\n if (docPeriodConstrains.nameConstraint === 'Required') {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function validateDocumentNumber(value, parentVm: flights.PassengerModel): boolean {\r\n if (!parentVm.validationConstraints.orderFormNewDocumentNumberRuValidationEnabled\r\n || parentVm.citizenship !== 168) {\r\n return true;\r\n }\r\n if ((parentVm.validationConstraints.minDocumentValidTill.isSameOrAfter(moment(parentVm.birthday).add(14, 'y').add(3, 'M')) || !parentVm.validationConstraints['documentBirthCertificate'] || parentVm.documentType !== 'documentBirthCertificate') && !(/^\\d+$/).test(value)) {\r\n return false;\r\n } else if (parentVm.documentType === 'documentBirthCertificate' && !(/[0-9IVX]{1,4}[а-яА-Я]{2}[0-9]{6}$/).test(value)) {\r\n return false;\r\n }\r\n\r\n if (parentVm.documentType === 'documentPassportRu' && (parentVm.validationConstraints.minDocumentValidTill.isBefore(moment(parentVm.birthday).add(14, 'y')) || value.length !== 10)) {\r\n return false;\r\n }\r\n\r\n if (parentVm.documentType === 'documentPassportForeign' && value.length !== 9 && (/[0-9]$/).test(value)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function validateCertificateAge(value: any, parentVm: flights.PassengerModel): boolean {\r\n if (!parentVm.validationConstraints.orderFormNewDocumentNumberRuValidationEnabled\r\n || parentVm.citizenship !== 168\r\n || G2S.config.marketCode !== 'ru') {\r\n return true;\r\n }\r\n\r\n if (parentVm.validationConstraints.minDocumentValidTill.isSameOrAfter(moment(parentVm.birthday).add(14, 'y').add(3, 'M'))\r\n && ((/[0-9IVX]{1,4}[а-яА-Я]{2}[0-9]{6}$/).test(value) || (/^[a-zA-Zа-яА-Я]{2}[0-9]{6}$/).test(value))) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function validateCertificateSymbol(value, parentVm: flights.PassengerModel): boolean {\r\n if (!parentVm.validationConstraints.orderFormNewDocumentNumberRuValidationEnabled\r\n || parentVm.citizenship !== 168) {\r\n return true;\r\n }\r\n // only < 14 year 3 month\r\n if (parentVm.validationConstraints['documentBirthCertificate']) {\r\n if ((((/^[0-9]{6}$/).test(value) || (/[a-zA-Zа-яА-Я][0-9]{6}$/).test(value)) && !(/^[0-9IVX]{1,4}[а-яА-Я]{2}[0-9]{6}$/).test(value))\r\n && parentVm.validationConstraints.minDocumentValidTill.isBefore(moment(parentVm.birthday).add(14, 'y').add(3, 'M'))) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function validateCertificateArmenia(value, parentVm: flights.PassengerModel): boolean {\r\n if (!parentVm.validationConstraints.orderFormNewDocumentNumberRuValidationEnabled\r\n || parentVm.citizenship !== 168) {\r\n return true;\r\n }\r\n\r\n if (!parentVm.validationConstraints['documentBirthCertificate'] && parentVm.validationConstraints['documentPassportRu']) {\r\n if (parentVm.validationConstraints.minDocumentValidTill.isSameOrAfter(moment(parentVm.birthday).add(14, 'y'))\r\n && (/^[0-9IVX]{1,4}[а-яА-Я]{2}[0-9]{6}$/).test(value)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function validateDocumentForeign(value, parentVm: flights.PassengerModel): boolean {\r\n if (!parentVm.validationConstraints.orderFormNewDocumentNumberRuValidationEnabled\r\n || parentVm.citizenship !== 168\r\n || G2S.config.marketCode !== 'ru') {\r\n return true;\r\n }\r\n\r\n if (!parentVm.validationConstraints['documentPassportRu']) {\r\n if (value.length !== 9 || !(/^\\d+$/).test(value)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Custom validator for vuelidate.\r\n */\r\nexport function validateBirthday(value, parentVm: flights.PassengerModel): boolean {\r\n if (value) {\r\n const d = moment(value);\r\n\r\n if (d.isValid()) {\r\n if (d.isAfter(parentVm.validationConstraints.maxDateOfBirth) || d.isBefore(parentVm.validationConstraints.minDateOfBirth)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Custom validator for vuelidate.\r\n */\r\nexport function validateBirthdayMin(value, parentVm: flights.PassengerModel): boolean {\r\n if (value) {\r\n const d = moment(value);\r\n\r\n if (d.isValid()) {\r\n if (d.isBefore(parentVm.validationConstraints.minDateOfBirth)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Custom validator for vuelidate.\r\n */\r\nexport function isCitizenshipAccept(value, parentVm: flights.PassengerModel): boolean {\r\n if (value != undefined && value) {\r\n const isCitizenIncludes = parentVm.validationConstraints.countriesCitizenshipConstrain.includes(value);\r\n \r\n return parentVm.validationConstraints.isRequiredCitizenshipConstrains ? isCitizenIncludes : !isCitizenIncludes;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Custom validator for vuelidate.\r\n */\r\nexport function isCitizenshipFilled(value: any): boolean {\r\n return Boolean(value);\r\n}\r\n\r\n/**\r\n * Custom validator for vuelidate.\r\n */\r\nexport function validateExchangeDesiredDate(value, parentVm): boolean {\r\n return parentVm.category == 'flight_change' && G2S.config.marketCode == 'ru' ? moment(value, 'YYYY-MM-DD').isAfter(moment()) : true;\r\n}\r\n\r\n/**\r\n * Custom validator for vuelidate.\r\n */\r\nexport function onlyOneUniqueCard(value: any) {\r\n if (value === null || value === '') {\r\n return true;\r\n }\r\n\r\n const cards = (this.reservation).passengers.map(x => x.card);\r\n const sameCards = cards.filter(x => x == value);\r\n\r\n if (sameCards && sameCards.length > 1) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Custom validator for vuelidate.\r\n */\r\nexport function cardAirlineIdRequiredIfCardNotEmpty(value: any, passenger: flights.PassengerModel) {\r\n if (passenger.card === null || passenger.card === '') {\r\n return true;\r\n }\r\n\r\n if (passenger.card && (value === null || value === '')) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nexport function validateTrainSelectedPlaces(value: api.TrainPlace[]) {\r\n if (value.length === this.reservation.passengersWithSeatCount) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\nimport * as api from 'core/api';\r\nimport moment from 'moment';\r\nimport * as utils from 'core/utils';\r\nimport router from 'src/router';\r\nimport * as flights from 'core/flights';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class FlightPassengerEditComponent extends Vue {\r\n @Prop()\r\n flightBookingDetails: api.FlightBookingDetails;\r\n\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n countries: api.Destination[];\r\n\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n @Prop()\r\n gaAlreadySubmitted: string[];\r\n\r\n @Prop()\r\n passenger: flights.PassengerModel;\r\n \r\n @Prop()\r\n searchParams: flights.FlightSearchParams;\r\n\r\n @Prop()\r\n v: any;\r\n\r\n @Watch('passenger.gender')\r\n onPassengerGenderChanged(val: string) {\r\n if (val) {\r\n if (val.toLowerCase() === 'male') {\r\n this.passengerGender = flights.Gender.Male;\r\n }\r\n else if (val.toLowerCase() === 'female') {\r\n this.passengerGender = flights.Gender.Female;\r\n }\r\n }\r\n }\r\n\r\n @Watch('passenger.citizenship')\r\n onPassengerCitizenshipChanged(val: string) {\r\n if (val) {\r\n this.passengerCitizenship = val.toString();\r\n }\r\n }\r\n\r\n passengerGender: flights.Gender | null = null;\r\n\r\n passengerCitizenship: string | null = null;\r\n\r\n mounted() {\r\n this.passengerGender = this.passenger.gender ? flights.Gender[this.passenger.gender] : null;\r\n this.passengerCitizenship = this.passenger.citizenship.toString();\r\n\r\n \r\n if (this.flightBookingDetails.countryCrossing) {\r\n this.passenger.checkDocType(this.flightBookingDetails.countryCrossing, this.passenger.citizenship, this.passenger.type);\r\n }\r\n }\r\n\r\n get genderOptions() {\r\n return [\r\n {\r\n label: i18next.t('label_gender_' + flights.Gender[flights.Gender.Male].toLowerCase()),\r\n value: flights.Gender.Male\r\n },\r\n {\r\n label: i18next.t('label_gender_' + flights.Gender[flights.Gender.Female].toLowerCase()),\r\n value: flights.Gender.Female\r\n }\r\n ];\r\n }\r\n\r\n get selectCountries() {\r\n return this.countries.map((country) => {\r\n return {\r\n label: country.localizedName,\r\n value: country.uniqueId\r\n };\r\n });\r\n }\r\n\r\n get passengerNamePlaceholder() {\r\n if (!this.passenger.allowCyrillicName) {\r\n return i18next.t('label_name_placeholder_latin_only');\r\n }\r\n return null;\r\n }\r\n\r\n get passengerCardAirlineOptions() {\r\n if (this.flightBookingDetails\r\n && this.flightBookingDetails.partnerAirlines\r\n && this.flightBookingDetails.partnerAirlines.length) {\r\n return this.flightBookingDetails.partnerAirlines\r\n .map(airline => {\r\n return {\r\n label: airline.name,\r\n value: airline.uniqueId\r\n };\r\n });\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n get hasPassengerCardAirlineOptions() {\r\n const hasOptions = this.passengerCardAirlineOptions && this.passengerCardAirlineOptions.length;\r\n if (!this.gaAlreadySubmitted.includes('flights.booking.step1.card.miles.display') && hasOptions) {\r\n (this).$ga.sendEvent('flights.booking',\r\n `step1.card.miles.display`,\r\n `flights.booking.step1.card.miles.display`,\r\n this.gaParams\r\n );\r\n this.gaAlreadySubmitted.push('flights.booking.step1.card.miles.display');\r\n }\r\n return hasOptions;\r\n }\r\n\r\n get selectedAirlineName() {\r\n if (this.passenger.cardAirlineId) {\r\n const found = this.flightBookingDetails.partnerAirlines\r\n .find(airline => airline.uniqueId == this.passenger.cardAirlineId);\r\n\r\n if (found && found.name) {\r\n return found.name;\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n get passengerCardFloatingLabel() {\r\n return i18next.t('label_frequent_flyer_card') +\r\n (this.selectedAirlineName ? ' ' + this.selectedAirlineName : '');\r\n }\r\n\r\n onPassengerCitizenshipChange() {\r\n (this).$emit('change');\r\n this.passenger.citizenship = this.passengerCitizenship ? parseInt(this.passengerCitizenship) : 0;\r\n\r\n if (!this.passenger.documentNumber) {\r\n document.getElementById('documentNumber' + this.passenger.index)!.focus();\r\n }\r\n\r\n this.passenger.checkDocType(this.flightBookingDetails.countryCrossing, this.passenger.citizenship, this.passenger.type);\r\n\r\n if (!this.v.citizenship.isCitizenshipAccept) {\r\n (this).$ga.sendEvent('flights.booking', 'msg.not.nationality', 'flights.booking.msg.not.nationality', this.gaParams);\r\n (this.$refs).modalCitizenshipError.show();\r\n }\r\n }\r\n\r\n onPassengerGenderChange() {\r\n (this).$emit('change');\r\n this.passenger.gender = flights.Gender[this.passengerGender!];\r\n\r\n if (!this.passenger.birthday) {\r\n this.$nextTick(() => {\r\n document.getElementById('birthday' + this.passenger.index)!.focus();\r\n });\r\n }\r\n }\r\n\r\n onPassengerDocumentNumberChanged() {\r\n (this).$emit('change');\r\n\r\n this.passenger.checkDocType(this.flightBookingDetails.countryCrossing, this.passenger.citizenship, this.passenger.type);\r\n }\r\n\r\n onPassengerDocumentValidTillChanged() {\r\n if (!this.passenger.documentValidTillEnabled) {\r\n this.passenger.documentValidTill = '';\r\n }\r\n }\r\n\r\n onPassengerDocumentValidTillFocus() {\r\n if (!this.passenger.documentValidTillRequired) {\r\n this.passenger.documentValidTillEnabled = true;\r\n }\r\n }\r\n\r\n onLastNameBlur() {\r\n this.v.lastName.$touch();\r\n this.$emit('passenger-form-blur');\r\n }\r\n\r\n onFirstNameBlur() {\r\n this.v.firstName.$touch();\r\n this.$emit('passenger-form-blur');\r\n }\r\n\r\n onMiddleNameBlur() {\r\n this.v.middleName.$touch();\r\n this.$emit('passenger-form-blur');\r\n }\r\n\r\n onGenderBlur() {\r\n this.$emit('passenger-form-blur');\r\n }\r\n\r\n onBirthdayBlur() {\r\n this.v.birthday.$touch();\r\n this.$emit('passenger-form-blur');\r\n }\r\n\r\n onCitizenshipBlur() {\r\n this.$emit('passenger-form-blur');\r\n }\r\n\r\n goToSearch() {\r\n (this).$ga.sendEvent('flights.booking', 'msg.not.nationality', 'flights.booking.msg.not.nationality.search', this.gaParams);\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams));\r\n }\r\n\r\n onCloseCitizenshipError() {\r\n (this.$refs).modalCitizenshipError.hide();\r\n (this).$ga.sendEvent('flights.booking', 'msg.not.nationality', 'flights.booking.msg.not.nationality.x', this.gaParams);\r\n }\r\n\r\n onDocumentNumberBlur() {\r\n this.v.documentNumber.$touch();\r\n this.$emit('passenger-form-blur');\r\n }\r\n\r\n onDocumentValidTillBlur() {\r\n this.v.documentValidTill.$touch();\r\n this.$emit('passenger-form-blur');\r\n }\r\n\r\n onDocumentValidTillEnabledBlur() {\r\n this.$emit('passenger-form-blur');\r\n }\r\n\r\n onPassengerCardBlur() {\r\n this.$emit('passenger-form-blur');\r\n }\r\n\r\n onPassengerCardClick() {\r\n (this.$refs).modalPassengerCard.show();\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\nimport { FlightPassengerEditComponent } from 'src/components/flight/passenger-edit';\r\nimport { required, minLength } from 'vuelidate/lib/validators';\r\nimport { SegmentModel } from 'core/flights';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport function returnBeforeDate(value) {\r\n console.log('value=' + value);\r\n return false;\r\n}\r\n\r\n@WithRender\r\n@Component({\r\n components: {\r\n 'passenger-edit': FlightPassengerEditComponent\r\n },\r\n validations: {\r\n signInModel: {\r\n email: { required, minLength: minLength(5) },\r\n password: { required, minLength: minLength(6) }\r\n }\r\n }\r\n})\r\nexport class FlightsBookingPassengersComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n flightBookingDetails: api.FlightBookingDetails;\r\n\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n @Prop()\r\n gaAlreadySubmitted: string[];\r\n\r\n @Prop()\r\n searchParams: flights.FlightSearchParams;\r\n\r\n @Prop()\r\n toolbarPrice: number;\r\n\r\n @Prop()\r\n v: any;\r\n\r\n signInModel = {\r\n email: '',\r\n password: '',\r\n submitted: false\r\n }\r\n\r\n toolbarPriceClass: string = '';\r\n\r\n showFullFlightBrandDescription: boolean[] = [];\r\n\r\n get freezePlace(): string {\r\n if (this.flightBookingDetails && this.flightBookingDetails?.prebookingTimeLimitMinutes\r\n && !this.gaAlreadySubmitted.includes('flights.booking.info.freeze.place')) {\r\n (this).$ga.sendEvent('flights.booking', 'info.freeze.place', 'flights.booking.info.freeze.place', this.gaParams);\r\n\r\n this.gaAlreadySubmitted.push('flights.booking.info.freeze.place');\r\n }\r\n return i18next.t('label_freeze_place', { i: this.flightBookingDetails ? this.flightBookingDetails?.prebookingTimeLimitMinutes : 0 });\r\n }\r\n\r\n get hasFreeBaggage(): boolean {\r\n return utils.Baggage.hasFreeBaggage(this.reservation.selectedFlight!);\r\n }\r\n\r\n get customBaggageLable(): string {\r\n if (this.reservation.customBaggagePrice > 0) {\r\n return `${i18next.t('label_additional_baggage')}: ${this.$options.filters!.price(this.reservation.customBaggagePrice)}`;\r\n } else {\r\n return i18next.t('label_baggage_select');\r\n }\r\n }\r\n\r\n get totalPassengers() {\r\n return this.searchParams.passengers.adults\r\n + this.searchParams.passengers.children\r\n + this.searchParams.passengers.infants;\r\n }\r\n\r\n get bookingClassName() {\r\n return flights.BookingClass.classLabel(this.searchParams.class);\r\n }\r\n\r\n get productsForPassengersStep() {\r\n return this.reservation.productsNotGrouped.filter(({ product }) =>\r\n product.stepNumber === 1 && (product.flightId == this.reservation.selectedFlightIdForProducts || product.flightId == null)\r\n );\r\n }\r\n\r\n get stepOneBrands(){\r\n if(this.reservation.brandedProductKits){\r\n return this.reservation.brandedProductKits.find((brands) =>\r\n brands.stepOnForm === 1 && brands.kitTarget !== 'AdditionalPopup'\r\n );\r\n }\r\n }\r\n\r\n get seatsLeftWarning() {\r\n return i18next.t('label_seats_left_warning', { i: i18next.t('numerous_seat', { count: this.reservation.passengers.length }) });\r\n }\r\n\r\n mounted() {\r\n this.reservation.flights.forEach(() => {\r\n this.showFullFlightBrandDescription.push(false);\r\n });\r\n if (this.reservation.flights && this.reservation.flights.length > 1 && !this.$parent.$data.modalBrandChoiceShowedOnce) {\r\n this.$parent.$data.modalBrandChoiceShowedOnce = true;\r\n (this.$refs).modalBrandChoice.show();\r\n }\r\n }\r\n\r\n validatePassengerByIndexAndUpsertFFDCookie(index: number) {\r\n const passenger = this.reservation.passengers[index];\r\n let passengerIsFullfilled = !!passenger.gender\r\n && !!passenger.lastName\r\n && !!passenger.firstName\r\n && !!passenger.birthday\r\n && !!passenger.documentNumber;\r\n\r\n if (!passenger.documentValidTillVisible) {\r\n passengerIsFullfilled = passengerIsFullfilled && !!passenger.middleName;\r\n }\r\n if (passenger.documentValidTillVisible) {\r\n passengerIsFullfilled = passengerIsFullfilled && !!passenger.documentValidTill;\r\n }\r\n if (passengerIsFullfilled) {\r\n const vPassenger = this.v.passengers.$each[index];\r\n\r\n let passengerIsValid = !vPassenger.gender.$error\r\n && !vPassenger.lastName.$error\r\n && !vPassenger.firstName.$error\r\n && !vPassenger.birthday.$error\r\n && !vPassenger.documentNumber.$error;\r\n\r\n if (!passenger.documentValidTillVisible) {\r\n passengerIsValid = passengerIsValid && !vPassenger.middleName.$error;\r\n }\r\n if (passenger.documentValidTillVisible) {\r\n passengerIsValid = passengerIsValid && !vPassenger.documentValidTill.$error;\r\n }\r\n if (passengerIsValid) {\r\n const passengers: (flights.PassengerModel | null)[] = [];\r\n\r\n this.reservation.passengers.forEach((passengerElement, passengerInedx) => {\r\n if (index == passengerInedx) {\r\n passengers.push(passengerElement);\r\n } else {\r\n passengers.push(null);\r\n }\r\n });\r\n utils.Cookies.g2sFFDUpsert({ passengers });\r\n }\r\n }\r\n }\r\n\r\n getBaggageOptions(baggageItems: api.CustomBaggageItem[]): any {\r\n const result: {\r\n label: string;\r\n value: string;\r\n }[] = [];\r\n\r\n baggageItems.forEach((baggage: api.CustomBaggageItem) => {\r\n const item: {\r\n label: string;\r\n value: string;\r\n } = {\r\n label: i18next.t('label_baggage_without_additional'),\r\n value: baggage.id\r\n };\r\n\r\n if (baggage.bagsQuantity > 0) {\r\n item.label = i18next.t('numerous_baggage_piece', { count: baggage.bagsQuantity });\r\n if (baggage.bagsWeight && baggage.bagsWeight != '0') {\r\n item.label += ' (' + baggage.bagsWeight + ' ' + i18next.t('label_kg') + ')';\r\n }\r\n if (baggage.price > 0) {\r\n item.label += ': ' + (this.$options.filters).price(baggage.price);\r\n } else {\r\n item.label += ': ' + i18next.t('label_price_free');\r\n }\r\n }\r\n\r\n result.push(item);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n getPassengerLabelByIndex(index: number) {\r\n if (this.reservation.passengers[index].firstName\r\n || this.reservation.passengers[index].middleName\r\n || this.reservation.passengers[index].lastName) {\r\n return this.reservation.passengers[index].middleName\r\n ? `${this.reservation.passengers[index].firstName} ${this.reservation.passengers[index].middleName} ${this.reservation.passengers[index].lastName}`\r\n : `${this.reservation.passengers[index].firstName} ${this.reservation.passengers[index].lastName}`;\r\n } else {\r\n return i18next.t('label_passenger_with_number', { i: index + 1 });\r\n }\r\n }\r\n\r\n getDestinationNameById(id) {\r\n const destination = this.flightBookingDetails.destinations[id];\r\n let destinationName = '';\r\n\r\n if (destination && destination.city && destination.city.localizedName) {\r\n destinationName = destination.city.localizedName;\r\n }\r\n\r\n if (destinationName) {\r\n return destinationName;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n getBaggageLabel(flight: flights.FlightModel) {\r\n return utils.Baggage.getLabel(flight.legs[0].baggage, false);\r\n }\r\n\r\n getBaggageShortLabel(flightBaggage: api.FlightBaggage, isCabin: boolean): string {\r\n let label = utils.Baggage.getLabel(flightBaggage, isCabin);\r\n\r\n if (label == i18next.t('label_baggage_without')) {\r\n label = i18next.t('label_baggage_without_short');\r\n }\r\n if (label == i18next.t('label_baggage_cabin_without')) {\r\n label = i18next.t('label_baggage_cabin_without_short');\r\n }\r\n\r\n return label;\r\n }\r\n\r\n getSegmentBaggageLabelByCustomBaggageOption(customBaggageOption: api.CustomBaggageOption) {\r\n if (this.reservation.selectedFlight) {\r\n const foundedSegment = this.reservation.selectedFlight.legs\r\n .map(leg => leg.segments)\r\n .reduce((memo, value) => memo.concat(value), [])\r\n .find(segment =>\r\n segment.departureDestination.uniqueId == Number(customBaggageOption.destinationFromUID)\r\n && segment.arrivalDestination.uniqueId == Number(customBaggageOption.destinationToUID));\r\n\r\n if (foundedSegment) {\r\n if (utils.Baggage.getBaggageValue(foundedSegment) == i18next.t('label_baggage_without_short')) {\r\n return `${utils.Baggage.getBaggageValue(foundedSegment)}`;\r\n } else {\r\n return `${utils.Baggage.getBaggageValue(foundedSegment)} ${i18next.t('label_baggage_on_passenger').toLowerCase()}`;\r\n }\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n getSegmentBaggageCabinLabelByCustomBaggageOption(customBaggageOption: api.CustomBaggageOption) {\r\n if (this.reservation.selectedFlight) {\r\n const foundedSegment = this.reservation.selectedFlight.legs\r\n .map(leg => leg.segments)\r\n .reduce((memo, value) => memo.concat(value), [])\r\n .find(segment =>\r\n segment.departureDestination.uniqueId == Number(customBaggageOption.destinationFromUID)\r\n && segment.arrivalDestination.uniqueId == Number(customBaggageOption.destinationToUID));\r\n\r\n if (foundedSegment) {\r\n if (utils.Baggage.getBaggageCabinValue(foundedSegment) == i18next.t('label_baggage_cabin_without_short')) {\r\n return `${utils.Baggage.getBaggageCabinValue(foundedSegment)}`;\r\n } else {\r\n return `${utils.Baggage.getBaggageCabinValue(foundedSegment)} ${i18next.t('label_baggage_on_passenger').toLowerCase()}`;\r\n }\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n getSegmentCustomBaggageLabelByCustomBaggageOptionIndex(index: number) {\r\n if (this.reservation.selectedFlight\r\n && this.reservation.selectedFlight.customBaggage.options\r\n && this.reservation.selectedFlight.customBaggage.options.length) {\r\n const currentCustomBaggageOption = this.reservation.selectedFlight.customBaggage.options[index];\r\n\r\n if (currentCustomBaggageOption.baggageOptions\r\n && currentCustomBaggageOption.baggageOptions.length) {\r\n let result = 0;\r\n\r\n if (currentCustomBaggageOption.baggageOptions[0].perPassenger) {\r\n this.reservation.passengersForBaggage.forEach(passenger => {\r\n const relativeCustomBaggageItemId = passenger.baggageOptions[index];\r\n const founedCustomBaggageItem = currentCustomBaggageOption.baggageOptions.find(\r\n customBaggageItem => customBaggageItem.id == relativeCustomBaggageItemId\r\n );\r\n\r\n if (founedCustomBaggageItem\r\n && founedCustomBaggageItem.bagsQuantity\r\n && founedCustomBaggageItem.bagsWeight) {\r\n result += founedCustomBaggageItem.bagsQuantity * Number(founedCustomBaggageItem.bagsWeight);\r\n }\r\n });\r\n } else {\r\n this.reservation.baggageOptions.forEach(customBaggageItemId => {\r\n const founedCustomBaggageItem = this.reservation.getAvailableCustomBaggageItems()\r\n .find(customBaggageItem => customBaggageItem.id == customBaggageItemId);\r\n\r\n if (founedCustomBaggageItem\r\n && founedCustomBaggageItem.bagsQuantity\r\n && founedCustomBaggageItem.bagsWeight) {\r\n result += founedCustomBaggageItem.bagsQuantity * Number(founedCustomBaggageItem.bagsWeight);\r\n }\r\n });\r\n }\r\n return result;\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n getSegmentCustomBaggageSummaryLabel(segmentFirst: flights.SegmentModel, segmentLast: flights.SegmentModel) {\r\n if (this.reservation.selectedFlight\r\n && this.reservation.selectedFlight.customBaggage\r\n && this.reservation.selectedFlight.customBaggage.options\r\n && this.reservation.selectedFlight.customBaggage.options.length) {\r\n const relativeCustomBaggageOption = this.reservation.selectedFlight.customBaggage.options.find(\r\n customBaggageOption =>\r\n Number(customBaggageOption.destinationFromUID) == segmentFirst.departureDestination.uniqueId\r\n && Number(customBaggageOption.destinationToUID) == segmentLast.arrivalDestination.uniqueId\r\n );\r\n\r\n if (relativeCustomBaggageOption) {\r\n return this.getSegmentCustomBaggageLabelByCustomBaggageOptionIndex(\r\n this.reservation.selectedFlight.customBaggage.options.indexOf(relativeCustomBaggageOption)\r\n );\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n getSegmentBaggageSummaryLabel(segment: flights.SegmentModel) {\r\n return utils.Baggage.getBaggageValue(segment);\r\n }\r\n\r\n onPassengerChange() {\r\n this.$emit('change');\r\n }\r\n\r\n onBaggageChange() {\r\n const oldBaggageChoiceType = this.reservation.baggageChoiceType;\r\n\r\n if (this.reservation.hasSelectedAnyCustomBaggage) {\r\n this.reservation.baggageChoiceType = api.BaggageChoiceType.manualAccepted;\r\n } else {\r\n this.reservation.baggageChoiceType = api.BaggageChoiceType.manualDenied;\r\n }\r\n\r\n console.log('baggageChoiceType ' + oldBaggageChoiceType + ' > ' + this.reservation.baggageChoiceType);\r\n }\r\n\r\n onBaggageOpen() {\r\n (this.$refs).modalBaggage.show();\r\n }\r\n\r\n onBaggageClose() {\r\n const oldBaggagePrice = this.reservation.customBaggagePrice;\r\n\r\n (this.$refs).modalBaggage.hide();\r\n\r\n if (oldBaggagePrice != this.reservation.customBaggagePrice) {\r\n if (this.gaAlreadySubmitted.indexOf('flights.booking.baggage.changed') < 0) {\r\n (this).$ga.sendEvent('flights.booking', 'baggage.changed', 'flights.booking.baggage.changed', this.gaParams);\r\n\r\n this.gaAlreadySubmitted.push('flights.booking.baggage.changed');\r\n }\r\n }\r\n }\r\n\r\n onSignIn() {\r\n (this.$refs).modalSignIn.show();\r\n\r\n if (this.gaAlreadySubmitted.indexOf('flights.booking.user.signin.click') < 0) {\r\n (this).$ga.sendEvent('flights.booking', 'user.signin.click', 'flights.booking.user.signin.click', this.gaParams);\r\n\r\n this.gaAlreadySubmitted.push('flights.booking.user.signin.click');\r\n }\r\n }\r\n\r\n onSignInSubmit() {\r\n if (this.signInModel.submitted) {\r\n return;\r\n }\r\n\r\n this.$v.signInModel!.$touch();\r\n\r\n if (this.$v.signInModel!.$error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_fields')\r\n });\r\n (this).$ga.sendEvent('flights.booking', 'user.signin.error', 'flights.booking.user.signin.error', this.gaParams);\r\n } else {\r\n this.signInModel.submitted = true;\r\n\r\n this.$auth.signIn(this.signInModel.email, this.signInModel.password).then(\r\n (result: api.User) => {\r\n this.signInModel.submitted = false;\r\n\r\n if (!this.reservation.contacts.email) {\r\n this.reservation.contacts.email = result.email!;\r\n }\r\n if (!this.reservation.contacts.phone) {\r\n this.reservation.contacts.phone = result.phone!;\r\n }\r\n\r\n this.$emit('signin');\r\n\r\n (this.$refs).modalSignIn.hide();\r\n\r\n if (this.gaAlreadySubmitted.indexOf('flights.booking.user.signin.success') < 0) {\r\n (this).$ga.sendEvent('flights.booking', 'user.signin.success', 'flights.booking.user.signin.success', this.gaParams);\r\n\r\n this.gaAlreadySubmitted.push('flights.booking.user.signin.success');\r\n }\r\n },\r\n (error) => {\r\n this.signInModel.submitted = false;\r\n\r\n (this).$ga.sendEvent('flights.booking', 'user.signin.error', 'flights.booking.user.signin.error', this.gaParams);\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.localizedMessage ? error.response.data.localizedMessage : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n onContactsEmailBlur() {\r\n this.v.contacts.email.$touch();\r\n if (this.reservation.contacts.email) {\r\n if (!this.v.contacts.email.$error) {\r\n utils.Cookies.g2sFFDUpsert({ email: this.reservation.contacts.email });\r\n }\r\n }\r\n }\r\n\r\n onContactsPhoneBlur() {\r\n this.v.contacts.phone.$touch();\r\n if (this.reservation.contacts.phone) {\r\n if (!this.v.contacts.phone.$error) {\r\n utils.Cookies.g2sFFDUpsert({ phone: this.reservation.contacts.phone });\r\n }\r\n }\r\n }\r\n\r\n onSubmit() {\r\n this.v.passengers.$touch();\r\n this.v.contacts.$touch();\r\n\r\n let title: any = i18next.t('error');\r\n let error = '';\r\n\r\n if (this.v.passengers.$error || this.v.contacts.$error) {\r\n if (!error\r\n && !this.v.contacts.email.required) {\r\n error = i18next.t('error_email_empty');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.email.error', 'flights.booking.step1.email.error', this.gaParams);\r\n }\r\n }\r\n\r\n if (!error\r\n && !this.v.contacts.email.email) {\r\n error = i18next.t('error_email_wrong');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.email.error', 'flights.booking.step1.email.error', this.gaParams);\r\n }\r\n }\r\n\r\n if (!error\r\n && !this.v.contacts.phone.required) {\r\n error = i18next.t('error_phone_empty');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.phone.error', 'flights.booking.phone.error', this.gaParams);\r\n }\r\n }\r\n\r\n if (!error\r\n && !this.v.contacts.phone.validatePhone) {\r\n error = i18next.t('error_phone_wrong');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.phone.error', 'flights.booking.phone.error', this.gaParams);\r\n }\r\n }\r\n\r\n this.reservation.passengers.forEach((passenger, index) => {\r\n if (!error) {\r\n if (!error\r\n && !this.v.passengers.$each[index].lastName.validatePassengerName) {\r\n error = i18next.t('error_name_last_wrong');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.surname.error', 'flights.booking.step1.surname.error', this.gaParams);\r\n }\r\n }\r\n if (!error\r\n && this.v.passengers.$each[index].lastName.$error) {\r\n error = i18next.t('error_name_last_wrong');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.surname.error', 'flights.booking.step1.surname.error', this.gaParams);\r\n }\r\n }\r\n if (!error\r\n && !this.v.passengers.$each[index].firstName.validatePassengerName) {\r\n error = i18next.t('error_name_first_wrong');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.name.error', 'flights.booking.step1.name.error', this.gaParams);\r\n }\r\n }\r\n if (!error\r\n && this.v.passengers.$each[index].firstName.$error) {\r\n error = i18next.t('error_name_first_wrong');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.name.error', 'flights.booking.step1.name.error', this.gaParams);\r\n }\r\n }\r\n if (!error) {\r\n if (!this.v.passengers.$each[index].middleName.validatePassengerNameLast) {\r\n error = i18next.t('error_name_middle_required');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.patronymic.error', 'flights.booking.step1.patronymic.error', this.gaParams);\r\n }\r\n }\r\n if (!error\r\n && this.v.passengers.$each[index].middleName.$error) {\r\n error = i18next.t('error_name_middle_wrong');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.patronymic.error', 'flights.booking.step1.patronymic.error', this.gaParams);\r\n }\r\n }\r\n }\r\n if(!error\r\n && this.v.passengers.$each[index].gender.$error) {\r\n error = i18next.t('error_gender_not_selected');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.gender.error', 'flights.booking.step1.gender.error', this.gaParams);\r\n }\r\n }\r\n \r\n if (!error\r\n && !this.v.passengers.$each[index].birthday.validateBirthday) {\r\n if (passenger.type === 'adult') {\r\n if (!this.v.passengers.$each[index].birthday.validateBirthdayMin) {\r\n error = i18next.t('error_birthday_adult_old');\r\n } else {\r\n error = i18next.t('error_birthday_adult_wrong');\r\n }\r\n }\r\n else if (passenger.type === 'child') {\r\n error = i18next.t('error_birthday_child_wrong');\r\n }\r\n else if (passenger.type === 'infant') {\r\n error = i18next.t('error_birthday_infant_wrong');\r\n }\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.date.birth.error', 'flights.booking.step1.date.birth.error', this.gaParams);\r\n }\r\n }\r\n if (!error\r\n && this.v.passengers.$each[index].birthday.$error) {\r\n error = i18next.t('error_birthday_empty');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.date.birth.error', 'flights.booking.step1.date.birth.error', this.gaParams);\r\n }\r\n }\r\n if (!error) {\r\n if (!this.v.passengers.$each[index].citizenship.isCitizenshipAccept) {\r\n error = i18next.t('error_citizenship_wrong_fare');\r\n }\r\n if (!error\r\n && this.v.passengers.$each[index].citizenship.$error\r\n || !this.v.passengers.$each[index].citizenship.isCitizenshipFilled) {\r\n error = i18next.t('error_citizenship_empty');\r\n (this).$ga.sendEvent('flights.booking', 'step1.citizenship.error', 'flights.booking.step1.citizenship.error', this.gaParams);\r\n }\r\n }\r\n if (!error\r\n && this.v.passengers.$each[index].documentNumber.$error) {\r\n if (!error\r\n && !this.v.passengers.$each[index].documentNumber.required) {\r\n error = i18next.t('error_document_number_empty');\r\n }\r\n if (!error\r\n && !this.v.passengers.$each[index].documentNumber.minLength) {\r\n error = i18next.t('error_document_number_too_short');\r\n }\r\n if (!error\r\n && !this.v.passengers.$each[index].documentNumber.maxLength) {\r\n error = i18next.t('error_document_number_too_long');\r\n }\r\n if (!error\r\n && !this.v.passengers.$each[index].documentNumber.validateCertificateArmenia) {\r\n error = 'Оформление билетов возможно только по заграничному паспорту.';\r\n }\r\n if (!error\r\n && !this.v.passengers.$each[index].documentNumber.validateCertificateAge) {\r\n error = 'Cтарше 14 лет. Введите серию, номер российского паспорта или заграничного паспорта РФ.';\r\n }\r\n if (!error\r\n && !this.v.passengers.$each[index].documentNumber.validateDocumentForeign) {\r\n error = 'Для заграничного паспорта РФ введите 9 цифр или выберите другое гражданство.';\r\n }\r\n if (!error\r\n && !this.v.passengers.$each[index].documentNumber.validateCertificateSymbol) {\r\n error = i18next.t('error_document_certificate_notvalid');\r\n }\r\n if (!error\r\n && !this.v.passengers.$each[index].documentNumber.validateDocumentNumber) {\r\n error = i18next.t('error_document_number_notvalid');\r\n }\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.passport.error', 'flights.booking.step1.passport.error', this.gaParams);\r\n }\r\n }\r\n if (!error\r\n && !this.v.passengers.$each[index].documentValidTill.validateDocumentValidTill) {\r\n error = i18next.t('error_document_valid_till_wrong', { i: passenger.validationConstraints.minDocumentValidTill.format('L') });\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.passport.date.error', 'flights.booking.step1.passport.date.error', this.gaParams);\r\n }\r\n }\r\n if (!error\r\n && this.v.passengers.$each[index].cardAirlineId.$error) {\r\n error = i18next.t('error_passenger_card_airline_id_required');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.card.miles.error', 'flights.booking.step1.card.miles.error', this.gaParams);\r\n }\r\n }\r\n if (!error\r\n && this.v.passengers.$each[index].card.$error) {\r\n if (!this.v.passengers.$each[index].card.maxLength) {\r\n error = i18next.t('error_passenger_card_maxlength');\r\n } else if (!this.v.passengers.$each[index].card.onlyOneUniqueCard) {\r\n error = i18next.t('error_passenger_card_used_more_than_once');\r\n }\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.card.miles.error', 'flights.booking.step1.card.miles.error', this.gaParams);\r\n }\r\n }\r\n\r\n if (error) {\r\n error = i18next.t('label_passenger_with_number', { i: index + 1 }) + ': ' + error;\r\n }\r\n }\r\n });\r\n\r\n if (!error\r\n && !this.v.passengers.validationPassengersBirthday) {\r\n error = i18next.t('error_has_adult_wrong');\r\n if (this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.passengers.error', 'flights.booking.passengers.error', this.gaParams);\r\n }\r\n }\r\n\r\n if (!error) {\r\n title = undefined; // Hide title\r\n error = i18next.t('error_fields');\r\n }\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n title: title,\r\n message: error\r\n });\r\n\r\n if (this.gaAlreadySubmitted.indexOf('flights.booking.step1.error') < 0) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.error', 'flights.booking.step1.error', this.gaParams);\r\n (this).$ga.reachGoal('flights.booking.step1.error');\r\n\r\n this.gaAlreadySubmitted.push('flights.booking.step1.error');\r\n }\r\n } else {\r\n this.$emit('submit');\r\n }\r\n }\r\n\r\n onCloseBrandChoiceModalClick(action: string) {\r\n if(action) {\r\n (this).$ga.sendEvent('flights.booking', `btn.brands.${action}`, `flights.booking.btn.brands.${action}`, this.gaParams);\r\n }\r\n\r\n (this.$refs).modalBrandChoice.hide();\r\n }\r\n\r\n onBrandChoiceItemClick(flight: flights.FlightModel, index: number) {\r\n this.$emit('brand-accum', index, flight.uniqueId);\r\n const brandSelectNum = this.gaAlreadySubmitted.includes('flights.booking.btn.brands') ? '2' : '';\r\n if (flight.billingPrice > this.reservation.selectedFlightBillingPrice) {\r\n this.$emit('brand-change', 'upgrade' + brandSelectNum);\r\n } else if (flight.billingPrice < this.reservation.selectedFlightBillingPrice) {\r\n this.$emit('brand-change', 'downgrade' + brandSelectNum);\r\n }\r\n\r\n this.toolbarPriceClass = '';\r\n this.reservation.selectedFlightId = flight.uniqueId;\r\n\r\n setTimeout(() => {\r\n this.toolbarPriceClass = 'bounce-in';\r\n }, 0);\r\n\r\n if (this.reservation.defaultFlight\r\n && this.reservation.defaultFlight.uniqueId == flight.uniqueId) {\r\n this.reservation.brandChoiceType = api.FlightBrandChoiceType.manualDefault;\r\n } else {\r\n this.reservation.brandChoiceType = api.FlightBrandChoiceType.manualUpgrade;\r\n }\r\n }\r\n onBrandGroupSelect(brandGroupIndex: number, flight: flights.FlightModel) {\r\n const brandSelectNum = this.gaAlreadySubmitted.includes('flights.booking.btn.brands') ? '2' : '';\r\n if (flight.billingPrice > this.reservation.brandGroups[brandGroupIndex].selectedFlight!.billingPrice) {\r\n this.reservation.brandGroups[brandGroupIndex].brandChangeState = 'upgrade' + brandSelectNum;\r\n } else if (flight.billingPrice < this.reservation.brandGroups[brandGroupIndex].selectedFlight!.billingPrice) {\r\n this.reservation.brandGroups[brandGroupIndex].brandChangeState = 'downgrade' + brandSelectNum;\r\n }\r\n\r\n this.toolbarPriceClass = '';\r\n this.reservation.brandGroups[brandGroupIndex].selectedFlightId = flight.uniqueId;\r\n\r\n setTimeout(() => {\r\n this.toolbarPriceClass = 'bounce-in';\r\n }, 0);\r\n\r\n if (this.reservation.brandGroups[brandGroupIndex].defaultFlightId === flight.uniqueId) {\r\n this.reservation.brandChoiceType = api.FlightBrandChoiceType.manualDefault;\r\n } else {\r\n this.reservation.brandChoiceType = api.FlightBrandChoiceType.manualUpgrade;\r\n }\r\n\r\n if (this.reservation.flights.length > 1\r\n && this.reservation.brandGroups[brandGroupIndex].selectedFlightId !== this.reservation.brandGroups[brandGroupIndex].defaultFlightId) {\r\n const brandNum = this.gaAlreadySubmitted.includes('flights.booking.btn.brands') ? '2' : '';\r\n if (!this.gaAlreadySubmitted.includes('flights.booking.brands.changed' + brandNum + brandGroupIndex)) {\r\n (this).$ga.sendEvent('flights.booking', 'brands.changed' + brandNum, 'flights.booking.brands.changed' + brandNum, this.gaParams);\r\n this.gaAlreadySubmitted.push('flights.booking.brands.changed' + brandNum + brandGroupIndex);\r\n }\r\n }\r\n }\r\n\r\n onBrandShowMoreClick(index: number) {\r\n this.showFullFlightBrandDescription[index] = !this.showFullFlightBrandDescription[index];\r\n this.$forceUpdate();\r\n }\r\n\r\n onShowModalBrandChoiceClick() {\r\n if (this.reservation.flights && this.reservation.flights.length > 1) {\r\n if(!this.gaAlreadySubmitted.includes('flights.booking.btn.brands')) {\r\n (this).$ga.sendEvent('flights.booking', 'btn.brands', 'flights.booking.btn.brands', this.gaParams);\r\n this.gaAlreadySubmitted.push('flights.booking.btn.brands');\r\n }\r\n (this.$refs).modalBrandChoice.show();\r\n }\r\n }\r\n\r\n onProductDetails(product: flights.ProductModel) {\r\n this.$emit('product-details', product);\r\n }\r\n\r\n onProductSelectionChange(product: flights.ProductModel, value: boolean) {\r\n this.$emit('product-selection-change', product, value);\r\n }\r\n\r\n onFlightTerms() {\r\n if (this.reservation.selectedFlight) {\r\n this.$emit('flight-terms', this.reservation.selectedFlight.uniqueId);\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\nimport { required } from 'vuelidate/lib/validators';\r\nimport { G2S } from 'core/g2s';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\nimport { ProductModel } from 'core/flights';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n couponModel: {\r\n couponCode: { required }\r\n }\r\n }\r\n})\r\nexport class FlightsBookingPaymentComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n @Prop()\r\n gaAlreadySubmitted: string[];\r\n\r\n @Prop()\r\n v: any;\r\n\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n flightBookingDetails: api.FlightBookingDetails;\r\n\r\n @Prop()\r\n currentUser: api.UserWithBonuses;\r\n\r\n @Prop()\r\n paymentButtonPrice: number;\r\n\r\n @Prop()\r\n searchId: string;\r\n\r\n productModel: ProductModel;\r\n couponModel: any = {\r\n couponCode: '',\r\n submitted: false\r\n }\r\n\r\n bonusAmountInputValue: number = 0;\r\n\r\n get availableBonuses() {\r\n return this.reservation.payment.calculateAvailableBonuses(this.reservation.getTotalPrice(), this.currentUser.bonuses);\r\n }\r\n\r\n get bonusAmountLabel() {\r\n return i18next.t('label_bonuses_used', { i: (this.$options.filters).number(this.reservation.payment!.bonusAmount) });\r\n }\r\n\r\n get couponAppliedLabel() {\r\n return i18next.t('label_coupon_applied_long_mobile', {\r\n pName: this.reservation.couponProduct ? 'на услугу ' + this.reservation.couponProduct.product.name : 'на весь заказ!',\r\n currency: G2S.config.currencySymbol,\r\n coupon: this.couponModel.couponCode.toUpperCase()\r\n });\r\n }\r\n\r\n get couponAppliedDiscountLabel() {\r\n return i18next.t('label_coupon_applied_discount', {\r\n i: (this.$options.filters).number(this.reservation.couponDiscountAmount),\r\n currency: G2S.config.currencySymbol\r\n });\r\n }\r\n\r\n get totalLabel() {\r\n return i18next.t(\r\n 'label_price_total',\r\n {\r\n i: (this.$options.filters).price(\r\n this.reservation.getTotalPrice(),\r\n false,\r\n this.reservation.selectedFlight?.currencyCode\r\n )\r\n });\r\n }\r\n get totalLabelRu() {\r\n return i18next.t(\r\n 'label_price_total');\r\n }\r\n\r\n get fullPrice() {\r\n return this.reservation.getTotalPrice() + this.reservation.couponDiscountAmount;\r\n }\r\n\r\n get totalMoneywallLabel() {\r\n return i18next.t(\r\n 'label_price_total',\r\n {\r\n i: (this.$options.filters).price(\r\n this.reservation.getMoneywallTotalPrice()\r\n )\r\n }\r\n );\r\n }\r\n\r\n get totalPerMonthLabel() {\r\n return i18next.t('button_payment_type_in_parts') + ' ' +\r\n (this.$options.filters).price(\r\n utils.Payment.calcMoneyWallPrice(\r\n this.reservation.getTotalPrice(),\r\n this.reservation.selectedFlight!.legs[0].segments[0].departureDate\r\n )\r\n ) + ' в месяц';\r\n }\r\n\r\n get totalBonusesLabel() {\r\n if (this.currentUser) {\r\n return i18next.t('label_bonuses_current_balance', { i: (this.$options.filters).number(this.currentUser.bonuses.status.currentBalance) });\r\n }\r\n return i18next.t('label_bonuses_current_balance', { i: 0 });\r\n }\r\n\r\n get totalBonusesWithLeftLabel() {\r\n if (this.currentUser) {\r\n return i18next.t('label_bonuses_current_balance_with_left', {\r\n i: (this.$options.filters).number(this.currentUser.bonuses.status.currentBalance),\r\n j: (this.$options.filters).number(this.currentUser.bonuses.status.leftToFirstUse)\r\n });\r\n }\r\n return i18next.t('label_bonuses_current_balance', { i: 0 });\r\n }\r\n\r\n get productsForPaymentStep() {\r\n return this.reservation.products.filter(({ product }) =>\r\n product.stepNumber === 3 && product.flightId == this.reservation.selectedFlightIdForProducts || product.stepNumber === 3 && product.flightId == null\r\n );\r\n }\r\n\r\n get stepThreeBrands(){\r\n return this.reservation.brandedProductKits && this.reservation.brandedProductKits.find((brands) =>\r\n brands.stepOnForm === 3 && brands.kitTarget !== 'AdditionalPopup'\r\n );\r\n }\r\n\r\n isMarkerOwner(markerOwner: string): boolean {\r\n return utils.Cookies.getMarkerOwner() === markerOwner;\r\n }\r\n\r\n mounted() {\r\n const g2scpn = utils.Cookies.g2scpnGet();\r\n\r\n if (g2scpn) {\r\n this.couponModel.couponCode = g2scpn;\r\n }\r\n\r\n setTimeout(()=> {\r\n if(this.couponModel.couponCode.length > 0 && !this.reservation.couponDiscountAmount) {\r\n this.onCouponSubmit();\r\n utils.Cookies.g2scpnDelete();\r\n }\r\n }, 500);\r\n \r\n const productsRocket = [...this.productsForPaymentStep.map((product) => product.product)];\r\n if (this.stepThreeBrands && this.stepThreeBrands.products.length) {\r\n this.stepThreeBrands.products.forEach((brand) => {\r\n const productByBrand = this.reservation.products.find((product) => brand.id && product.product.id === brand.id);\r\n if (productByBrand) {\r\n productsRocket.push(productByBrand.product);\r\n }\r\n });\r\n }\r\n new api.RetailRocket().orderFormStepOpened({\r\n flightKey: api.RetailRocketCL.flightKey,\r\n stepNumber: 3,\r\n products: productsRocket,\r\n bookingSessionId: this.flightBookingDetails.bookingSessionId,\r\n email: this.reservation.contacts.email\r\n });\r\n }\r\n\r\n getCommissionLabel(v: number): string {\r\n return i18next.t('label_payment_commission_withvalue', { i: (this.$options.filters).price(v) });\r\n }\r\n\r\n onBonusAmountSubmit() {\r\n if (this.bonusAmountInputValue > 0) {\r\n const availableBonuses = this.availableBonuses;\r\n\r\n if (this.bonusAmountInputValue > availableBonuses) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_bonuses_payment_limit', {\r\n i: (this.$options.filters).number(availableBonuses)\r\n }),\r\n onOkCallback: () => {\r\n this.bonusAmountInputValue = availableBonuses;\r\n }\r\n });\r\n } else {\r\n this.reservation.payment!.bonusAmount = this.bonusAmountInputValue;\r\n\r\n (this.$refs).modalBonuses.hide();\r\n }\r\n } else {\r\n this.reservation.payment!.bonusAmount = 0;\r\n\r\n (this.$refs).modalBonuses.hide();\r\n }\r\n }\r\n\r\n onBonuses() {\r\n this.bonusAmountInputValue = 0;\r\n\r\n if (this.reservation.payment) {\r\n this.bonusAmountInputValue = this.reservation.payment.bonusAmount;\r\n }\r\n\r\n (this.$refs).modalBonuses.show();\r\n }\r\n\r\n onCoupon() {\r\n (this.$refs).modalCoupon.show();\r\n\r\n this.$nextTick(function() {\r\n (this.$refs).couponCode.focus();\r\n });\r\n }\r\n\r\n onCouponSubmit() {\r\n (this).$ga.sendEvent('flight.booking', 'coupon.submit', 'flight.booking.coupon.submit', this.gaParams);\r\n\r\n if (this.couponModel.couponCode) {\r\n this.$v.couponModel!.$touch();\r\n\r\n if (!this.$v.couponModel!.$error) {\r\n this.couponModel.submitted = true;\r\n\r\n const request: api.CouponCheckRequest = {\r\n email: this.reservation.contacts.email,\r\n partnerCookie: utils.Cookies.getPartnerCookie(),\r\n code: utils.String.normalizeCoupon(this.couponModel.couponCode),\r\n searchId: this.searchId,\r\n flightId: this.reservation.selectedFlightId,\r\n passengers: new api.ReservationService().createPassengerCreateData(this.reservation)\r\n };\r\n\r\n new api.CouponService().check(request).then(\r\n (result: api.CouponCheckModel) => {\r\n this.couponModel.submitted = false;\r\n this.reservation.couponProductAdd = result.product;\r\n this.reservation.couponId = result.id;\r\n this.reservation.couponGuid = result.guid;\r\n this.reservation.couponDiscountAmount = result.discountAmount;\r\n\r\n this.gaParams.dimension9 = this.reservation.couponId.toString();\r\n\r\n this.reservation.couponProductId = result.productId;\r\n this.reservation.couponDiscountAmountOld = result.discountAmount;\r\n\r\n const res = this.reservation.products.find(item => item.product.id == result.productId);\r\n if (res) {\r\n res.selected = true;\r\n }\r\n this.reservation.couponDataActivate = new Date();\r\n this.reservation.couponDataExpiring = result.expiryDate;\r\n this.reservation.products ? this.reservation.couponProduct = this.reservation.products.find(item => item.product.id == result.productId) : null;\r\n\r\n if (this.reservation.couponProduct) {\r\n this.reservation.couponProduct.choiceType = api.ProductChoiceType.manualAccepted;\r\n }\r\n\r\n if (this.reservation.couponProductId !== null && this.reservation.couponProduct == null) {\r\n this.productModel = new flights.ProductModel(this.reservation.couponProductAdd);\r\n this.productModel.selected = true;\r\n this.productModel.choiceType = api.ProductChoiceType.manualAccepted;\r\n this.productModel.favorite = false;\r\n\r\n localStorage.productCouponId = JSON.stringify(this.reservation.couponProductAdd.id);\r\n this.reservation.rawProducts.push(this.productModel);\r\n this.reservation.couponProduct = this.productModel;\r\n (this.$refs).modalCoupon.hide();\r\n } else {\r\n (this.$refs).modalCoupon.hide();\r\n (this).$ga.sendEvent('flight.booking', 'coupon.applied', 'flight.booking.coupon.applied', this.gaParams);\r\n }\r\n },\r\n (error) => {\r\n this.couponModel.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('error'),\r\n message: error?.response?.data?.localizedMessage\r\n ? error.response.data.localizedMessage\r\n : i18next.t('error_server_tryagain')\r\n });\r\n\r\n (this).$ga.sendEvent('flight.booking', 'coupon.failed', 'flight.booking.coupon.failed', this.gaParams);\r\n }\r\n );\r\n }\r\n } else {\r\n // Delete coupon\r\n this.reservation.couponDiscountAmount = 0;\r\n this.reservation.couponId = null;\r\n this.reservation.couponGuid = null;\r\n this.gaParams.dimension9 = undefined;\r\n\r\n const res = this.reservation.products.find(item => {\r\n return item.product == this.reservation.couponProductAdd;\r\n });\r\n if (res) {\r\n res.selected = false;\r\n }\r\n }\r\n }\r\n\r\n onCardNumberInputOnce() {\r\n (this).$ga.sendEvent('flights.booking', 'card.input.started', 'flights.booking.card.input.started', this.gaParams);\r\n (this).$ga.sendPageview('/flights/booking/payment/card/inputstart', 'Flights / Booking / Payment / Card / Inputstart', this.gaParams);\r\n }\r\n\r\n onGoBack() {\r\n this.$emit('back');\r\n }\r\n\r\n onSubmit() {\r\n this.v.contacts.$touch();\r\n const paymentFormError = (this.$refs).paymentForm.validate();\r\n\r\n const g = utils.clone(this.gaParams);\r\n g.dimension1 = this.reservation.payment!.selectedPaymentTypeId;\r\n const selectedPayment = this.reservation.payment!.selectedPaymentType;\r\n const selectedPaymentMethod = selectedPayment.isYandexPay ? this.reservation.payment!.selectedPaymentMethod : '';\r\n\r\n (this).$ga.sendPageview('/flights/booking/submit', 'Flights / Booking / Submit', this.gaParams);\r\n\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '.' + selectedPaymentMethod.type : ''}.submit`.toLowerCase(),\r\n `flights.booking.payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '.' + selectedPaymentMethod.type : ''}.submit`.toLowerCase(),\r\n this.gaParams\r\n );\r\n\r\n if (this.v.contacts.$error\r\n || paymentFormError) {\r\n let title: any = i18next.t('error');\r\n let error = null;\r\n\r\n if (!error\r\n && paymentFormError\r\n && paymentFormError !== i18next.t('error_fields')) {\r\n error = paymentFormError;\r\n }\r\n\r\n if (!error) {\r\n title = null; // Hide title\r\n error = i18next.t('error_fields');\r\n }\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n title: title,\r\n message: error\r\n });\r\n\r\n if (this.gaAlreadySubmitted.indexOf('flights.booking.step3.error') < 0) {\r\n (this).$ga.sendEvent('flights.booking', 'step3.error', 'flights.booking.step3.error', this.gaParams);\r\n (this).$ga.reachGoal('flights.booking.step3.error');\r\n\r\n this.gaAlreadySubmitted.push('flights.booking.step3.error');\r\n }\r\n } else {\r\n this.$emit('submit');\r\n }\r\n }\r\n\r\n onPrice() {\r\n (this).$ga.sendEvent('flights.booking', 'btn.step3.details.price', 'flights.booking.btn.step3.details.price', this.gaParams);\r\n (this.$refs).modalPrice.show();\r\n }\r\n\r\n onTerms() {\r\n (this).$ga.sendEvent('flights.booking', 'flight.terms', 'flights.booking.flight.terms', this.gaParams);\r\n (this.$refs).modalTerms.show();\r\n }\r\n\r\n onTermsAccept() {\r\n (this.$refs).modalTerms.hide();\r\n }\r\n\r\n onTermsContent(content: string, title: string) {\r\n (this.$refs).textContent.show(content, title);\r\n }\r\n\r\n onProductDetails(product: flights.ProductModel) {\r\n this.$emit('product-details', product);\r\n }\r\n\r\n onProductSelectionChange(product: flights.ProductModel, value: boolean) {\r\n this.$emit('product-selection-change', product, value);\r\n }\r\n\r\n onFlightTerms() {\r\n if (this.reservation.selectedFlight) {\r\n this.$emit('flight-terms', this.reservation.selectedFlight.uniqueId);\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as flights from 'core/flights';\r\nimport * as i18next from 'i18next';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class CoachSchemaComponent extends Vue {\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n coach: flights.CoachModel;\r\n\r\n @Prop()\r\n svgSchema: string;\r\n\r\n selectedElementsQueue: Element[] = [];\r\n\r\n tooltipShowTimer: any = null;\r\n\r\n mounted() {\r\n const coachPlaceElements = this.$el.querySelectorAll('.coach-place-svg');\r\n\r\n this.coach.selectedPlacesQueue.forEach((place) => {\r\n const accordingPlaceElement = Array.from(coachPlaceElements).find(placeElement => placeElement['dataset'].number == place.number);\r\n\r\n if (accordingPlaceElement) {\r\n this.selectedElementsQueue.push(accordingPlaceElement);\r\n }\r\n });\r\n\r\n coachPlaceElements.forEach((element) => {\r\n const placeNumber = element['dataset'].number as string;\r\n const placeType = element['dataset'].placeType as string;\r\n const freePlace = this.coach.places.find(place => place.number == placeNumber);\r\n\r\n element.addEventListener('click', () => {\r\n if (!freePlace || !freePlace.selected) {\r\n let tooltipContent: string;\r\n\r\n window.clearTimeout(this.tooltipShowTimer);\r\n if (freePlace) {\r\n tooltipContent = `${i18next.t(`label_coach_place_${placeType.toLowerCase()}`)}, ${this.$options.filters?.price(freePlace.fare.amount)}`;\r\n } else {\r\n tooltipContent = `${i18next.t('label_occupied')}`;\r\n }\r\n this.$emit('show-tooltip', tooltipContent);\r\n this.tooltipShowTimer = setTimeout(() => {\r\n this.$emit('hide-tooltip');\r\n }, 3000);\r\n }\r\n });\r\n\r\n if (!freePlace) {\r\n element.classList.add('coach-place-svg_occupied');\r\n }\r\n\r\n if (freePlace) {\r\n if (freePlace.selected) {\r\n element.classList.add('coach-place-svg_selected');\r\n }\r\n\r\n element.addEventListener('click', () => {\r\n freePlace.selected = !freePlace.selected;\r\n if (freePlace.selected) {\r\n element.classList.add('coach-place-svg_selected');\r\n this.selectedElementsQueue.push(element);\r\n this.coach.selectedPlacesQueue.push(freePlace);\r\n }\r\n\r\n if (!freePlace.selected) {\r\n element.classList.remove('coach-place-svg_selected');\r\n this.selectedElementsQueue = this.selectedElementsQueue.filter(queuedPlaceElement => queuedPlaceElement != element);\r\n this.coach.selectedPlacesQueue = this.coach.selectedPlacesQueue.filter(queuedPlace => queuedPlace.number != freePlace.number);\r\n }\r\n\r\n if (this.coach.selectedPlacesCount > this.reservation.passengersWithSeatCount\r\n && this.coach.selectedPlacesQueue.length) {\r\n this.selectedElementsQueue[0].classList.remove('coach-place-svg_selected');\r\n this.selectedElementsQueue.shift();\r\n this.coach.selectedPlacesQueue[0].selected = false;\r\n this.coach.selectedPlacesQueue.shift();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as i18next from 'i18next';\r\nimport { CoachSchemaComponent } from './coach-schema';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component({\r\n components: {\r\n 'coach-schema': CoachSchemaComponent\r\n }\r\n})\r\nexport class TrainCoachPlaceSelectComponent extends Vue {\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n focusedTrainNumber: string = '';\r\n selectedTrainNumber: string = '';\r\n focusedCoachNumber: string = '';\r\n focusedPlaceNumber: string = '';\r\n\r\n tooltipContent = '';\r\n tooltipIsShown = false;\r\n tooltipShowTimer: any = null;\r\n\r\n svgSchema = '';\r\n svgSchemaLoading = false;\r\n\r\n mounted() {\r\n this.selectedTrainNumber = this.reservation?.trains[0]?.number ?? '';\r\n }\r\n\r\n get selectedTrain() {\r\n const selectedTrain = this.reservation.trains.find(train => train.number === this.selectedTrainNumber);\r\n\r\n if (selectedTrain) {\r\n return selectedTrain;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n get selectedCoach() {\r\n const selectedCoach = this.selectedTrain?.selectedCoach;\r\n\r\n if (selectedCoach) {\r\n if (selectedCoach.schemaId) {\r\n this.svgSchemaLoading = true;\r\n\r\n const schema = this.reservation.trainCoaches[selectedCoach.schemaId];\r\n\r\n if (schema) {\r\n this.svgSchema = schema;\r\n } else {\r\n this.svgSchema = '';\r\n }\r\n\r\n this.svgSchemaLoading = false;\r\n } else {\r\n this.svgSchema = '';\r\n }\r\n }\r\n\r\n return selectedCoach;\r\n }\r\n\r\n getPlaceSelectionToBeDoneForTrainLabel(train: flights.TrainModel) {\r\n let toBeDoneCount = 0;\r\n\r\n if (train.selectedCoach) {\r\n toBeDoneCount = this.reservation.passengersWithSeatCount - train.selectedCoach.selectedPlacesCount;\r\n }\r\n\r\n return toBeDoneCount > 0\r\n ? i18next.t('numerous_seats_selection_to_be_done', { count: toBeDoneCount })\r\n : '';\r\n }\r\n\r\n onPlaceSelectionChange(place: flights.CoachPlaceModel) {\r\n if (this.selectedCoach) {\r\n if (this.selectedCoach.selectedPlacesCount > this.reservation.passengersWithSeatCount\r\n && this.selectedCoach.selectedPlacesQueue.length) {\r\n this.selectedCoach.selectedPlacesQueue[0].selected = false;\r\n this.selectedCoach.selectedPlacesQueue.shift();\r\n }\r\n\r\n if (place.selected) {\r\n this.selectedCoach.selectedPlacesQueue.push(place);\r\n }\r\n\r\n if (!place.selected) {\r\n this.selectedCoach.selectedPlacesQueue = this.selectedCoach.selectedPlacesQueue.filter(queuedPlace => queuedPlace.number != place.number);\r\n }\r\n }\r\n }\r\n\r\n onTrainFocus(number: string) {\r\n this.focusedTrainNumber = number;\r\n }\r\n\r\n onTrainBlur() {\r\n this.focusedTrainNumber = '';\r\n }\r\n\r\n onCoachFocus(number: string) {\r\n this.focusedCoachNumber = number;\r\n }\r\n\r\n onCoachBlur() {\r\n this.focusedCoachNumber = '';\r\n }\r\n\r\n onPlaceFocus(number: string) {\r\n this.focusedPlaceNumber = number;\r\n }\r\n\r\n onPlaceBlur() {\r\n this.focusedPlaceNumber = '';\r\n }\r\n\r\n onPlaceInput(place: flights.CoachPlaceModel) {\r\n this.$nextTick(() => {\r\n if (place.selected) {\r\n window.clearTimeout(this.tooltipShowTimer);\r\n this.tooltipContent = `${i18next.t(`label_coach_place_${place.placeType.toLowerCase()}`)}, ${this.$options.filters?.price(place.fare.amount)}`;\r\n this.tooltipIsShown = true;\r\n this.tooltipShowTimer = setTimeout(() => {\r\n this.tooltipIsShown = false;\r\n }, 3000);\r\n }\r\n });\r\n }\r\n\r\n onCoachSchemaShowTooltip(tooltipContent: string) {\r\n this.tooltipContent = tooltipContent;\r\n this.tooltipIsShown = true;\r\n }\r\n\r\n onCoachSchemaHideTooltip() {\r\n this.tooltipIsShown = false;\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\nimport * as flights from 'core/flights';\r\nimport { TrainCoachPlaceSelectComponent } from './train-coach-place-select';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component({\r\n components: {\r\n 'train-coach-place-select': TrainCoachPlaceSelectComponent\r\n }\r\n})\r\nexport class FlightsBookingSeatsComponent extends Vue {\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n v: any;\r\n\r\n onGoBack() {\r\n this.$emit('back');\r\n }\r\n\r\n onSubmit() {\r\n this.v.trains.$touch();\r\n\r\n if (this.v.trains.$error) {\r\n\r\n let title = i18next.t('error');\r\n let error = '';\r\n\r\n this.reservation.trains.forEach((train, index) => {\r\n if (!error) {\r\n if (!error\r\n && this.v.trains.$each[index].selectedPlaces.$error) {\r\n error = i18next.t('error_train_places');\r\n }\r\n }\r\n });\r\n\r\n (this.$root).$refs.messageDialog.show({\r\n title: title,\r\n message: error\r\n });\r\n } else {\r\n this.$emit('submit');\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class FlightsBookingServicesComponent extends Vue {\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n flightBookingDetails: api.FlightBookingDetails;\r\n\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n @Prop()\r\n gaAlreadySubmitted: string[];\r\n\r\n get productsForServicesStep() {\r\n return this.reservation.products.filter(({ product }) =>\r\n product.stepNumber === 2 && product.flightId == this.reservation.selectedFlightIdForProducts || product.stepNumber === 2 && product.flightId == null\r\n );\r\n }\r\n\r\n get stepTwoBrands() {\r\n return this.reservation.brandedProductKits ? this.reservation.brandedProductKits.find((brands) =>\r\n brands.stepOnForm === 2 && brands.kitTarget !== 'AdditionalPopup'\r\n ) : undefined;\r\n }\r\n\r\n mounted() {\r\n const productsRocket = [...this.productsForServicesStep.map((product) => product.product)];\r\n if (this.stepTwoBrands && this.stepTwoBrands.products.length) {\r\n this.stepTwoBrands.products.forEach((brand) => {\r\n const productByBrand = this.reservation.products.find((product) => brand.id && product.product.id === brand.id);\r\n if (productByBrand) {\r\n productsRocket.push(productByBrand.product);\r\n }\r\n });\r\n }\r\n new api.RetailRocket().orderFormStepOpened({\r\n flightKey: api.RetailRocketCL.flightKey,\r\n stepNumber: 2,\r\n products: productsRocket,\r\n bookingSessionId: this.flightBookingDetails.bookingSessionId,\r\n email: this.reservation.contacts.email\r\n });\r\n }\r\n\r\n onGoBack() {\r\n this.$emit('back');\r\n }\r\n\r\n onProductDetails(product: flights.ProductModel) {\r\n this.$emit('product-details', product);\r\n }\r\n\r\n onProductSelectionChange(product: flights.ProductModel, value: boolean) {\r\n this.$emit('product-selection-change', product, value);\r\n }\r\n \r\n onProductPackageSelectionChange(product, value, from){\r\n this.$emit('on-product-package-selection-change', product, value, from);\r\n }\r\n\r\n onServiceBrandChange(product: api.Product, prevProduct: api.Product) {\r\n this.$emit('service-brand-change', product, prevProduct);\r\n }\r\n\r\n onFlightTerms() {\r\n if (this.reservation.selectedFlight) {\r\n this.$emit('flight-terms', this.reservation.selectedFlight.uniqueId);\r\n }\r\n }\r\n\r\n onSubmit() {\r\n this.$emit('submit');\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\nimport banksData from './data/banks.json';\r\nimport { QIcon, Notify } from 'quasar-framework/dist/quasar.mat.esm';\r\n\r\nconst banks = banksData.banks;\r\n\r\n@WithRender\r\n@Component({\r\n components: {\r\n 'q-icon': QIcon\r\n }\r\n})\r\nexport class SbpModalComponent extends Vue {\r\n opened = false;\r\n search = '';\r\n qrUrl = '';\r\n errorText = '';\r\n showBankCount = 8;\r\n attemptsToSelect = 0;\r\n \r\n get filteredBanks() {\r\n if (!this.search) {\r\n return banks.slice(0, this.showBankCount);\r\n }\r\n \r\n return banks\r\n .filter(bank => {\r\n return bank.bankName.toLowerCase().indexOf(this.search.toLowerCase()) > -1;\r\n })\r\n .slice(0, this.showBankCount);\r\n }\r\n\r\n getRedirectUrl(bank) {\r\n const param = new URLSearchParams(this.qrUrl).get('data');\r\n\r\n if (!param) {\r\n this.errorText = 'К сожалению, произошла ошибка. Пожалуйста, выберите другой способ оплаты.';\r\n \r\n return '';\r\n }\r\n \r\n return param.replace(/https|http/, bank.schema);\r\n }\r\n \r\n show(qrUrl: string) {\r\n this.errorText = '';\r\n this.qrUrl = qrUrl;\r\n this.opened = true;\r\n }\r\n \r\n close() {\r\n this.errorText = '';\r\n this.$emit('close');\r\n this.opened = false;\r\n }\r\n\r\n onSelectBank(bank) {\r\n this.attemptsToSelect += 1;\r\n if (this.attemptsToSelect > 2) {\r\n Notify.create({\r\n message: 'Если переход в приложение банка не происходит, проверьте, доступно ли оно на вашем устройстве.',\r\n timeout: 3000,\r\n color: 'primary'\r\n });\r\n this.attemptsToSelect = 0;\r\n }\r\n\r\n document.location.href = this.getRedirectUrl(bank);\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\nimport Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport { required, minLength, maxLength, email } from 'vuelidate/lib/validators';\r\nimport * as i18next from 'i18next';\r\nimport moment from 'moment';\r\nimport * as uuidValidate from 'uuid-validate';\r\nimport router from 'src/router';\r\nimport { G2S } from 'core/g2s';\r\nimport * as auth from 'core/auth';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\nimport { YandexPaymentData } from 'core/payment';\r\nimport { Filters } from 'core/filters';\r\nimport {\r\n validatePassengerName,\r\n validatePassengerNameLast,\r\n validateDocumentValidTill,\r\n validateDocumentNumber,\r\n validateCertificateAge,\r\n validateCertificateArmenia,\r\n validationPassengersBirthday,\r\n validateCertificateSymbol,\r\n validateDocumentForeign,\r\n validateBirthday,\r\n validateBirthdayMin,\r\n isCitizenshipAccept,\r\n isCitizenshipFilled,\r\n validatePhone,\r\n onlyOneUniqueCard,\r\n cardAirlineIdRequiredIfCardNotEmpty,\r\n validateTrainSelectedPlaces\r\n} from 'core/validators';\r\nimport { FlightsBookingPassengersComponent } from './passengers';\r\nimport { FlightsBookingPaymentComponent } from './payment';\r\nimport { FlightsBookingSeatsComponent } from './seats';\r\nimport { FlightsBookingServicesComponent } from './services';\r\nimport { SbpModalComponent } from 'src/components/payment/sbp-modal';\r\nimport { ReservationService } from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\ntype FormStep = 'passengers' | 'seats' | 'services' | 'payment';\r\n\r\nexport interface FlightsBookingComponentModel {\r\n state: 'loading' | 'form' | 'booking' | 'error' | 'network-error';\r\n formStep: FormStep;\r\n bookingCompleted: boolean;\r\n}\r\n\r\n@WithRender\r\n@Component({\r\n components: {\r\n 'booking-passengers': FlightsBookingPassengersComponent,\r\n 'booking-payment': FlightsBookingPaymentComponent,\r\n 'booking-seats': FlightsBookingSeatsComponent,\r\n 'booking-services': FlightsBookingServicesComponent,\r\n 'sbp-modal': SbpModalComponent\r\n },\r\n beforeRouteEnter(to, from, next) {\r\n if (from.name == 'flightSearch' || from.name == 'flightSearchRoundtrip') {\r\n to.meta.followWasMadeFromSearchPage = true;\r\n } else {\r\n to.meta.followWasMadeFromSearchPage = false;\r\n }\r\n next();\r\n },\r\n beforeRouteLeave(to, from, next) {\r\n // Aviasales passenger input hadling\r\n (window).AviasalesInject.resetPassengers();\r\n\r\n next();\r\n },\r\n validations: {\r\n reservation: {\r\n contacts: {\r\n email: { required, email },\r\n phone: { required, validatePhone }\r\n },\r\n passengers: {\r\n validationPassengersBirthday,\r\n $each: {\r\n lastName: { required, validatePassengerName },\r\n firstName: { required, validatePassengerName },\r\n middleName: { validatePassengerNameLast },\r\n citizenship: { required, isCitizenshipAccept, isCitizenshipFilled },\r\n documentNumber: { required, validateDocumentNumber, validateCertificateSymbol, validateDocumentForeign, validateCertificateAge, validateCertificateArmenia, minLength: minLength(4), maxLength: maxLength(G2S.config.locale === 'ru' ? 15 : 20) },\r\n documentValidTill: { validateDocumentValidTill },\r\n gender: { required },\r\n birthday: { required, validateBirthday, validateBirthdayMin },\r\n card: { onlyOneUniqueCard, maxLength: maxLength(15) },\r\n cardAirlineId: { cardAirlineIdRequiredIfCardNotEmpty }\r\n }\r\n },\r\n trains: {\r\n $each: {\r\n selectedPlaces: { validateTrainSelectedPlaces }\r\n }\r\n }\r\n }\r\n }\r\n})\r\nexport default class FlightsBookingComponent extends Vue {\r\n $refs!: {\r\n sbpModal: SbpModalComponent;\r\n }\r\n \r\n $auth: auth.AuthService; // Injected in G2S.init\r\n zopa = '
ZOPA
'\r\n model: FlightsBookingComponentModel = {\r\n state: 'loading',\r\n formStep: 'passengers',\r\n bookingCompleted: false\r\n }\r\n\r\n formStepTransition: string = 'slide-right';\r\n\r\n gaParams: utils.GoogleAnalyticsParams = new utils.GoogleAnalyticsParams();\r\n\r\n trackParams: utils.TrackParams = new utils.TrackParams();\r\n\r\n gaAlreadySubmitted: string[] = [];\r\n\r\n brandChangeState: string = '';\r\n\r\n @Prop()\r\n flightId: string;\r\n\r\n @Prop()\r\n searchId: string;\r\n\r\n @Prop()\r\n searchFrom: string;\r\n\r\n @Prop()\r\n searchFrom2: string;\r\n\r\n @Prop()\r\n searchTo: string;\r\n\r\n @Prop()\r\n searchTo2: string;\r\n\r\n @Prop()\r\n searchDate: string;\r\n\r\n @Prop()\r\n searchDate2: string;\r\n\r\n @Prop()\r\n searchPassengers: string;\r\n\r\n @Prop()\r\n searchClass: string;\r\n\r\n @Prop()\r\n searchFilters: string;\r\n\r\n fareDetails: api.FareDetailsResponse | null = null;\r\n\r\n flightBookingDetails: api.FlightBookingDetails | null = null; // NOTE: null forces reactive vue property\r\n\r\n reservation: flights.ReservationModel = new flights.ReservationModel();\r\n\r\n reservationInfo: api.ReservationInfo | null = null;\r\n\r\n paymentInfo: api.PaymentInfo | null = null;\r\n\r\n currentUser: api.UserWithBonuses | null = null;\r\n\r\n private authToken: string | null = null;\r\n\r\n selectedProductId: number = 0;\r\n\r\n disabledServiceButtons: boolean = false;\r\n\r\n alreadyInPackageModal = {\r\n message: '',\r\n acceptCallback: () => { },\r\n refuseCallback: () => { }\r\n }\r\n\r\n modalUpgradeBaggageContent = {\r\n isCloseIconVisible: true,\r\n text: '',\r\n buttonText1: '',\r\n buttonText2: '',\r\n buttonText3: '',\r\n buttonAction1: '',\r\n buttonAction2: '',\r\n buttonAction3: '',\r\n buttonColor1: '',\r\n buttonColor2: '',\r\n buttonColor3: '',\r\n buttonIcon1: '',\r\n buttonIcon2: '',\r\n buttonIcon3: '',\r\n buttonStyle1: '',\r\n buttonStyle2: '',\r\n buttonStyle3: '',\r\n emTextColor: '',\r\n kitId: 0,\r\n productId: 0\r\n };\r\n productIdToConfirm: number | null = null;\r\n modalConfirmProductContent: api.ProductPopup | null = null;\r\n\r\n toolbarPriceClass: string | null = null;\r\n\r\n lastHistoryStateView: string = '';\r\n\r\n canGoBackOrForwardToPassengers: boolean = false;\r\n canGoBackOrForwardToPayment: boolean = false;\r\n canGoBackOrForwardToSeats: boolean = false;\r\n canGoBackOrForwardToServices: boolean = false;\r\n\r\n anyProductConfirmationWasShown: boolean = false;\r\n\r\n baggageQueryParamAlreadyHandled: boolean = false;\r\n\r\n modalBrandChoiceShowedOnce: boolean = false;\r\n\r\n mountedTimeStampMs: number = 0;\r\n\r\n NO_BAGGAGE_GUID = '00000000-0000-0000-0000-000000000000';\r\n\r\n get selectedProduct(): flights.ProductModel {\r\n return utils.find(this.reservation.products, (item: flights.ProductModel) => {\r\n return item.product.id == this.selectedProductId;\r\n });\r\n }\r\n\r\n get searchParams() {\r\n if (this.searchFrom2 && this.searchTo2 && this.searchDate2) {\r\n return new flights.FlightNavigationService().getRoundtripParams(\r\n this.searchFrom,\r\n this.searchTo,\r\n this.searchDate,\r\n this.searchFrom2,\r\n this.searchTo2,\r\n this.searchDate2,\r\n this.searchPassengers,\r\n this.searchClass\r\n );\r\n }\r\n else {\r\n return new flights.FlightNavigationService().getOnewayParams(\r\n this.searchFrom,\r\n this.searchTo,\r\n this.searchDate,\r\n this.searchPassengers,\r\n this.searchClass\r\n );\r\n }\r\n }\r\n\r\n get totalPassengers() {\r\n return this.searchParams!.passengers.adults\r\n + this.searchParams!.passengers.children\r\n + this.searchParams!.passengers.infants;\r\n }\r\n\r\n get className() {\r\n return flights.BookingClass.classLabel(this.searchParams!.class);\r\n }\r\n\r\n get productToConfirm() {\r\n if (this.productIdToConfirm) {\r\n return utils.find(this.reservation.products,\r\n (p: flights.ProductModel) => {\r\n let discount = true;\r\n if (this.modalConfirmProductContent && this.modalConfirmProductContent.discountId) {\r\n discount = this.modalConfirmProductContent.discountId === p.product.discountRuleId;\r\n }\r\n return p.product.id === this.productIdToConfirm && discount;\r\n });\r\n }\r\n return null;\r\n }\r\n\r\n @Watch('$v.reservation.$model.couponProduct', {deep : true})\r\n couponCancelChecker(){\r\n if(this.reservation.couponProductId && this.reservation.couponProduct){\r\n if(this.reservation.couponProduct.selected != true) {\r\n this.reservation.couponDiscountAmount = 0;\r\n } else {\r\n this.reservation.couponDiscountAmount = this.reservation.couponDiscountAmountOld;\r\n }\r\n }\r\n }\r\n\r\n @Watch('reservation.selectedFlightIdForProducts')\r\n watchForSelectedFlightIdForProducts() {\r\n const selectedProductIds = this.reservation.rawProducts.filter(p => p.selected).map(p => p.product.id);\r\n const productIdsNeedToSelect = this.reservation.rawProducts.filter(p => p.needToSelect).map(p => p.product.id);\r\n\r\n for (const product of this.reservation.rawProducts) {\r\n product.selected = false;\r\n product.needToSelect = false;\r\n }\r\n\r\n for (const product of this.reservation.products) {\r\n if (selectedProductIds.includes(product.product.id)) {\r\n product.selected = true;\r\n }\r\n\r\n if (productIdsNeedToSelect.includes(product.product.id)) {\r\n product.needToSelect = true;\r\n }\r\n }\r\n }\r\n\r\n get toolbarPrice() {\r\n // if (this.model.formStep === 'passengers') {\r\n // return this.reservation.selectedFlightBillingPrice + this.reservation.customBaggagePrice;\r\n // } else {\r\n // return this.reservation.getTotalPrice(true);\r\n // }\r\n return this.reservation.getTotalPrice(true);\r\n }\r\n\r\n get followWasMadeFromSearchPage(): boolean {\r\n return router.currentRoute.meta.followWasMadeFromSearchPage;\r\n }\r\n\r\n get hasSelectedPaidOutwardBaggage(): boolean {\r\n return this.reservation.hasSelectedOutwardCustomBaggage\r\n || this.reservation.hasSelectedBothCustomBaggage;\r\n }\r\n\r\n get hasSelectedPaidReturnBaggage(): boolean {\r\n return this.reservation.hasSelectedReturnCustomBaggage\r\n || this.reservation.hasSelectedBothCustomBaggage;\r\n }\r\n\r\n get bookingClassName() {\r\n return flights.BookingClass.classLabel(this.searchParams!.class);\r\n }\r\n\r\n mounted() {\r\n this.mountedTimeStampMs = new Date().getTime();\r\n window.document.title = i18next.t('title_flight_tickets_booking');\r\n\r\n if (!this.followWasMadeFromSearchPage) {\r\n window.history.replaceState({ ...window.history.state }, '', new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n window.history.pushState({ ...window.history.state, view: 'leaving' }, '', router.currentRoute.fullPath);\r\n window.history.pushState({ ...window.history.state, view: 'details' }, '', router.currentRoute.fullPath);\r\n window.history.pushState({ ...window.history.state, view: 'passengers' }, '', router.currentRoute.fullPath);\r\n } else {\r\n window.history.replaceState({ ...window.history.state, view: 'leaving' }, '', router.currentRoute.fullPath);\r\n window.history.pushState({ ...window.history.state, view: 'details' }, '', router.currentRoute.fullPath);\r\n window.history.pushState({ ...window.history.state, view: 'passengers' }, '', router.currentRoute.fullPath);\r\n }\r\n this.setLastHistoryStateView();\r\n window.addEventListener('popstate', this.onPopState);\r\n\r\n this.loadModel();\r\n }\r\n\r\n beforeDestroy() {\r\n window.removeEventListener('popstate', this.onPopState);\r\n }\r\n\r\n isMarkerOwner(markerOwner: string): boolean {\r\n return utils.Cookies.getMarkerOwner() === markerOwner;\r\n }\r\n\r\n setLastHistoryStateView() {\r\n this.lastHistoryStateView = window.history.state && window.history.state.view ? window.history.state.view : '';\r\n }\r\n\r\n onPopState(event) {\r\n if (event.state && event.state.view == 'leaving' && this.lastHistoryStateView != 'leaving' && this.lastHistoryStateView != 'after-payment') {\r\n this.tryToShowFlightDetails(false);\r\n\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n }\r\n if (event.state && event.state.view == 'details' && this.lastHistoryStateView != 'details' && this.lastHistoryStateView != 'after-payment') {\r\n this.hideLeavingDialog();\r\n this.tryToShowFlightDetails();\r\n }\r\n if (event.state && event.state.view == 'passengers' && this.lastHistoryStateView != 'passengers' && this.lastHistoryStateView != 'after-payment') {\r\n this.hideLeavingDialog();\r\n this.hideFlightDetails();\r\n if (this.canGoBackOrForwardToPassengers) {\r\n this.moveOnStep('passengers');\r\n }\r\n }\r\n if (event.state && event.state.view == 'seats' && this.lastHistoryStateView != 'seats' && this.lastHistoryStateView != 'after-payment') {\r\n this.hideLeavingDialog();\r\n this.hideFlightDetails();\r\n if (this.canGoBackOrForwardToSeats) {\r\n this.moveOnStep('seats');\r\n }\r\n }\r\n if (event.state && event.state.view == 'services' && this.lastHistoryStateView != 'services' && this.lastHistoryStateView != 'after-payment') {\r\n this.hideLeavingDialog();\r\n this.hideFlightDetails();\r\n if (this.canGoBackOrForwardToServices) {\r\n this.moveOnStep('services');\r\n }\r\n }\r\n if (event.state && event.state.view == 'payment' && this.lastHistoryStateView != 'payment' && this.lastHistoryStateView != 'after-payment') {\r\n this.hideLeavingDialog();\r\n this.hideFlightDetails();\r\n if (this.canGoBackOrForwardToPayment) {\r\n this.moveOnStep('payment');\r\n }\r\n }\r\n if (event.state && event.state.view && this.lastHistoryStateView == 'after-payment') {\r\n window.history.pushState({ ...window.history.state, view: 'after-payment' }, '', router.currentRoute.fullPath);\r\n this.setLastHistoryStateView();\r\n }\r\n }\r\n\r\n @Watch('$route')\r\n onRouteChanged() {\r\n this.loadModel();\r\n }\r\n\r\n @Watch('reservation.selectedFlightId')\r\n onReservationSelectedFlightIdChanged() {\r\n // Flight changed - custom baggage should be updated\r\n this.reservation.resetAllSelectedBaggage();\r\n this.reservation.resetAllSelectedSeats();\r\n\r\n if (this.reservation.flights.length > 1\r\n && this.reservation.selectedFlightId !== this.flightBookingDetails!.selectedFlightUniqueId) {\r\n const brandNum = this.gaAlreadySubmitted.includes('flights.booking.btn.brands') ? '2' : '';\r\n if (!this.gaAlreadySubmitted.includes('flights.booking.brands.changed' + brandNum)) {\r\n (this).$ga.sendEvent('flights.booking', 'brands.changed' + brandNum, 'flights.booking.brands.changed' + brandNum, this.gaParams);\r\n this.gaAlreadySubmitted.push('flights.booking.brands.changed' + brandNum);\r\n }\r\n }\r\n\r\n if (!this.baggageQueryParamAlreadyHandled) {\r\n this.handleBaggageQueryParam();\r\n }\r\n }\r\n\r\n @Watch('model.formStep')\r\n onformStepChange(formStep) {\r\n switch (this.model.formStep) {\r\n case 'passengers':\r\n (this).$ga.sendPageview('/flights/booking/start', 'Flights / Booking / Start', this.gaParams);\r\n break;\r\n case 'services':\r\n (this).$ga.sendPageview('/flights/booking/step2', 'Flights / Booking / Step2', this.gaParams);\r\n break;\r\n case 'payment':\r\n (this).$ga.sendPageview('/flights/booking/step3', 'Flights / Booking / Step3', this.gaParams);\r\n break;\r\n }\r\n }\r\n\r\n getBrandDescription(brand: api.FlightBrand): string {\r\n return brand && brand.descriptionUI ? brand.descriptionUI.replace('\"fa-ul\"', '\"ul-icons\"') : '';\r\n }\r\n\r\n loadModel() {\r\n if (!this.searchParams) {\r\n router.push('/');\r\n return;\r\n }\r\n\r\n if (!this.searchId || !this.flightId) {\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams));\r\n return;\r\n }\r\n\r\n document.getElementById('pixels')!.innerHTML = '';\r\n\r\n // Init GA params\r\n (this).$ga.addSearchParams(this.gaParams, this.searchParams);\r\n\r\n // Update tracking params\r\n utils.TrackingService.updateParamsFromSearch(this.trackParams, this.searchParams);\r\n\r\n const momentInit = moment();\r\n\r\n (this).$ga.sendPageview('/flights/booking/init', 'Flights / Booking / Init', this.gaParams);\r\n\r\n utils.TrackingService.track(utils.TrackEvent.BookingInit, this.trackParams);\r\n\r\n this.model.state = 'loading';\r\n\r\n const request: api.GetFlightBookingDetailsRequest = {\r\n baggage: this.$route.query.baggage as string || '',\r\n searchId: this.searchId,\r\n flightId: this.flightId,\r\n gaClientId: utils.Cookies.getGaClientId(),\r\n clientDevice: (this).$getClientDevice(),\r\n skipCheckBooking: api.ReservationService.skipCheckBookingOnFlightBookingDetails,\r\n partnerCookie: utils.Cookies.getPartnerCookie(),\r\n markerReferrer: utils.Cookies.getMarkerReferrer(),\r\n queryString: window.location.search.toString()\r\n };\r\n const reservationService = new api.ReservationService();\r\n\r\n reservationService.getFlightBookingDetails(request).then(\r\n (result: api.FlightBookingDetails) => {\r\n this.gaParams.metric9 = Math.round(moment.duration(moment().diff(momentInit)).as('seconds'));\r\n this.trackParams.InitStartDuration = this.gaParams.metric9;\r\n\r\n if (result.bookingPossible\r\n && result.paymentTypes\r\n && result.paymentTypes.length > 0) {\r\n this.flightBookingDetails = result;\r\n\r\n const r = new flights.ReservationModel(this.flightBookingDetails);\r\n\r\n // Override products for mobile\r\n //r.productExternalIdsForStep.passengers = ['Go2SeeRefund'];\r\n\r\n this.reservation = r;\r\n this.handleBaggageQueryParam();\r\n\r\n\r\n this.model.state = 'form';\r\n\r\n const checkFlightConfirmRequest: api.CheckFlightConfirmRequest = {\r\n bookingSessionId: this.flightBookingDetails.bookingSessionId,\r\n elapsedMsClient: new Date().getTime() - this.mountedTimeStampMs,\r\n flightId: this.flightBookingDetails.flights[0].uniqueId,\r\n searchId: this.searchId\r\n };\r\n\r\n reservationService\r\n .checkFlightConfirm(checkFlightConfirmRequest)\r\n .catch((error) => {\r\n (this).$ga.reachGoal('is_client_success_backend');\r\n if (error.response) {\r\n console.log('api/checkFlight XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('api/checkFlight XHR error', error.message);\r\n }\r\n });\r\n\r\n // Update GA params\r\n this.gaParams.dimension2 = this.reservation.selectedFlight!.adapter + '_'; // Add underscore for regex filtering in GA\r\n this.gaParams.dimension3 = this.reservation.selectedFlight ? this.reservation.selectedFlight!.allFlightAirlinesCode.join('_') : 'none';\r\n this.gaParams.dimension10 = this.reservation.selectedFlight!.multiFRType.toString();\r\n this.gaParams.metric3 = this.searchParams!.passengers.adults + this.searchParams!.passengers.children + this.searchParams!.passengers.infants;\r\n\r\n (this).$ga.addFlightProduct(this.reservation.selectedFlight, this.reservation.passengers.length);\r\n (this).$ga.setAction('checkout', { 'step': 1 });\r\n\r\n (this).$ga.sendPageview('/flights/booking/start', 'Flights / Booking / Start', this.gaParams);\r\n\r\n // Tracking\r\n utils.TrackingService.updateParamsFromReservation(this.trackParams, this.reservation);\r\n utils.TrackingService.track(utils.TrackEvent.BookingStart, this.trackParams);\r\n \r\n try {\r\n new api.RetailRocket().orderFormOpened({\r\n flightId: result.flights[0].uniqueId,\r\n searchId: this.searchId,\r\n products: result.products,\r\n mailTrackingId: this.$route.query.MailTrackingId\r\n });\r\n }\r\n catch (err) {\r\n console.error(err);\r\n }\r\n\r\n if (this.reservation.selectedFlight\r\n && this.reservation.selectedFlight.customBaggage\r\n && this.reservation.selectedFlight.customBaggage.bookable) {\r\n (this).$ga.sendEvent('flights.booking', 'baggage.available', 'flights.booking.baggage.available', this.gaParams);\r\n }\r\n\r\n if (this.$auth.authenticated) {\r\n this.$auth.getCurrentUserWithBonuses(this.flightBookingDetails.bookingSessionId).then(\r\n (result: api.UserWithBonuses) => {\r\n this.currentUser = result;\r\n\r\n if (!this.reservation.contacts.email) {\r\n this.reservation.contacts.email = this.currentUser.email!;\r\n }\r\n if (!this.reservation.contacts.phone) {\r\n this.reservation.contacts.phone = this.$options.filters!.phone(this.currentUser.phone);\r\n }\r\n }\r\n );\r\n }\r\n\r\n // Check booking\r\n this.reservation.flights.forEach((f: flights.FlightModel) => {\r\n if (!f.bookingChecked && !f.uniqueId.includes('_')) {\r\n const checkFlightRequest: api.CheckFlightRequest = {\r\n searchId: this.searchId,\r\n flightId: f.uniqueId,\r\n bookingSessionId: this.flightBookingDetails!.bookingSessionId\r\n };\r\n\r\n reservationService.checkFlight(checkFlightRequest).then(\r\n (checkResult: api.CheckFlightResponse) => {\r\n if (checkResult.flight.bookingPossible) {\r\n f.update(checkResult.flight);\r\n\r\n if (f.uniqueId === this.reservation.selectedFlightId) {\r\n this.reservation.resetAllSelectedBaggage();\r\n this.handleBaggageQueryParam();\r\n }\r\n } else {\r\n // Show out of stock dialog only if it's selected flight or it's last flight\r\n if (f.uniqueId === this.reservation.selectedFlightId\r\n || this.reservation.flights.length === 1) {\r\n this.showOutOfStockDialog();\r\n }\r\n\r\n this.reservation.deleteOutOfStockFlight(f.uniqueId);\r\n }\r\n },\r\n (error) => {\r\n // Show out of stock dialog only if it's selected flight or it's last flight\r\n if (f.uniqueId === this.reservation.selectedFlightId\r\n || this.reservation.flights.length === 1) {\r\n this.showOutOfStockDialog();\r\n }\r\n\r\n this.reservation.deleteOutOfStockFlight(f.uniqueId);\r\n\r\n if (error.response) {\r\n console.log('api/checkFlight XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('api/checkFlight XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n });\r\n\r\n if (this.reservation.hasBrands) {\r\n (this).$ga.sendEvent('flights.booking', 'brands.available', 'flights.booking.brands.available', this.gaParams);\r\n (this).$ga.sendPageview('/flights/booking/brands/available', 'Flights / Booking / Brands / Available', this.gaParams);\r\n }\r\n\r\n if (this.reservation.surchargeInfo?.type && this.reservation.surchargeInfo.clientText && this.reservation.surchargeInfo.surchargeAmount) {\r\n (this).$ga.sendEvent('flights.booking', 'price.change', 'price.change.shown.popup', this.gaParams);\r\n (this.$root).$refs.messageDialog.show({\r\n message: this.reservation.surchargeInfo.clientText,\r\n ok: this.reservation.surchargeInfo.buttonAcceptText,\r\n cancel: this.reservation.surchargeInfo.buttonRejectText,\r\n\r\n onOkCallback: () => {\r\n (this).$ga.sendEvent('flights.booking', 'price.change', 'price.change.btn.click.select', this.gaParams);\r\n },\r\n onCancelOrHideCallback: () => {\r\n (this).$ga.sendEvent('flights.booking', 'price.change', 'price.change.btn.click.new.search', this.gaParams);\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n }\r\n });\r\n }\r\n\r\n if (this.flightBookingDetails?.notifications.length) {\r\n (this).$ga.sendEvent('flights.booking', 'info.airport.closed', 'flights.booking.info.airport.closed', this.gaParams);\r\n }\r\n\r\n // Restore form data from cookie\r\n utils.Cookies.restoreReservationModelCookie(this.reservation);\r\n\r\n // Aviasales passenger input hadling\r\n (window).AviasalesInject.setPassengers(this.reservation.passengers, this.reservation.countries);\r\n\r\n utils.PixelsService.setPixelForFlightBooking(document.getElementById('pixels')!, this.searchParams!, this.reservation.selectedFlight!.billingPrice);\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('label_flight_out_of_stock'),\r\n ok: i18next.t('button_search'),\r\n onOkCallback: () => {\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n }\r\n });\r\n\r\n if (result.paymentTypes\r\n && result.paymentTypes.length > 0) {\r\n (this).$ga.sendEvent('flights.booking', 'msg.outofstock', 'flights.booking.msg.outofstock', this.gaParams);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingOutOfStock,\r\n this.trackParams,\r\n {\r\n ErrorReason: 'OutOfStock'\r\n });\r\n } else {\r\n (this).$ga.sendEvent('flights.booking', 'msg.paymentnotavailable', 'flights.booking.msg.paymentnotavailable', this.gaParams);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingOutOfStock,\r\n this.trackParams,\r\n {\r\n ErrorReason: 'NoPaymentOptions'\r\n });\r\n }\r\n }\r\n\r\n if (!this.followWasMadeFromSearchPage) {\r\n window.history.go(-1);\r\n }\r\n\r\n this.gaParams.metric9 = undefined;\r\n this.trackParams.InitStartDuration = undefined;\r\n },\r\n (error) => {\r\n this.gaParams.metric9 = Math.round(moment.duration(moment().diff(momentInit)).as('seconds'));\r\n\r\n let errorMessage = i18next.t('label_flight_out_of_stock');\r\n\r\n if (error.response) {\r\n if (error.response.status === 404) {\r\n errorMessage = i18next.t('label_flight_expired');\r\n }\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: errorMessage,\r\n ok: i18next.t('button_search'),\r\n onOkCallback: () => {\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n }\r\n });\r\n\r\n if (errorMessage === i18next.t('label_flight_expired')) {\r\n (this).$ga.sendEvent('flights.booking', 'msg.expired.404', 'flights.booking.msg.expired.404', this.gaParams);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingOutOfStock,\r\n this.trackParams,\r\n {\r\n ErrorReason: '404',\r\n InitStartDuration: this.gaParams.metric9\r\n });\r\n } else {\r\n (this).$ga.sendEvent('flights.booking', 'msg.expired.500', 'flights.booking.msg.expired.500', this.gaParams);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingOutOfStock,\r\n this.trackParams,\r\n {\r\n ErrorReason: '500',\r\n InitStartDuration: this.gaParams.metric9\r\n });\r\n }\r\n\r\n this.gaParams.metric9 = undefined;\r\n }\r\n );\r\n }\r\n\r\n handleBaggageQueryParam() {\r\n if (this.$route.query && this.$route.query.baggage) {\r\n this.reservation.selectCustomBaggageByQueryParam(this.$route.query.baggage as string);\r\n }\r\n }\r\n\r\n onBooking() {\r\n if (this.model.state !== 'booking') {\r\n this.model.state = 'booking';\r\n }\r\n\r\n if (G2S.config.theme === 'megotravel') {\r\n return;\r\n }\r\n\r\n const reservationService = new api.ReservationService();\r\n\r\n // Save user's input to cookie\r\n utils.Cookies.saveReservationModelCookie(this.reservation);\r\n\r\n const selectedPayment = this.reservation.payment!.selectedPaymentType;\r\n const selectedPaymentMethod = selectedPayment.isYandexPay ? this.reservation.payment!.selectedPaymentMethod : '';\r\n\r\n if (!selectedPayment.isYandexPay) {\r\n (this).$ga.sendPageview(\r\n `/flights/booking/payment/${selectedPayment.kind}/${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '/' + selectedPaymentMethod.type : ''}`.toLowerCase(),\r\n `Flights / Booking / Payment / ${selectedPayment.kind}/${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '/' + selectedPaymentMethod.type : ''}`,\r\n this.gaParams\r\n );\r\n }\r\n\r\n if (!this.anyProductConfirmationWasShown) {\r\n (this).$ga.sendEvent('flights.booking', 'product.confirm.empty', 'flights.booking.product.confirm.empty', this.gaParams);\r\n }\r\n (this).$ga.sendEvent('flights.booking', 'product.confirm.finished', 'flights.booking.product.confirm.finished', this.gaParams);\r\n\r\n const request: api.CreateReservationRequest = reservationService.createReservationRequest(\r\n this.searchId,\r\n this.reservation,\r\n this.flightBookingDetails!,\r\n G2S.config.clientDevice\r\n );\r\n\r\n if (this.reservation.payment\r\n && this.reservation.payment.selectedPaymentType\r\n && this.reservation.payment.selectedPaymentType.kind === 'CreditCardInplace'\r\n && !request.creditCard\r\n && !this.reservation.payment!.selectedPaymentType.isYandexPay) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_payment_card_not_available')\r\n });\r\n\r\n this.model.state = 'form';\r\n\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '.' + selectedPaymentMethod.type : ''}.notavailable`.toLowerCase(),\r\n `flights.booking.payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '.' + selectedPaymentMethod.type : ''}.notavailable`.toLowerCase(),\r\n this.gaParams\r\n );\r\n\r\n return;\r\n }\r\n\r\n window.history.pushState({ ...window.history.state, view: 'after-payment' }, '', router.currentRoute.fullPath);\r\n this.setLastHistoryStateView();\r\n\r\n // Aviasales passenger input handling: cleanup\r\n (window).AviasalesInject.resetPassengers();\r\n\r\n const createOrRestartReservationHandleResult = (result: api.CreateReservationResult, canRecursion: boolean = false) => {\r\n if (result.reservationInfo) {\r\n new api.RetailRocket().reservationCreated({\r\n flightKey: api.RetailRocketCL.flightKey,\r\n reservationId: Number(result.reservationInfo.reservationNumber),\r\n products: this.reservation.selectedProducts.map((product) => product.product)\r\n });\r\n }\r\n \r\n if (result.paymentInfo) {\r\n this.reservationInfo = result.reservationInfo;\r\n this.paymentInfo = result.paymentInfo;\r\n this.authToken = result.authToken;\r\n\r\n (this).$ga.sendPageview('/flights/booking/success', 'Flights / Booking / Success', this.gaParams);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingSuccess,\r\n this.trackParams\r\n );\r\n\r\n switch (result.paymentInfo.errorCode) {\r\n case 6200: {\r\n if (this.reservation.selectedProducts.length > 0 && !this.hasFlightService(this.reservation.passengers)) {\r\n new api.ReservationService().updateBookingSessionNotEnoughMoneyPopup({\r\n bookingSessionId: this.flightBookingDetails!.bookingSessionId\r\n }).catch(\r\n () => console.error('Error when sending the request')\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n\r\n const showPaymentSplitDialogOrDoNext = (next: () => any) => {\r\n if (result.paymentInfo.split && result.paymentInfo.split.airlineAmount > 0) {\r\n const split = result.paymentInfo.split;\r\n const message = `${i18next.t(\r\n 'label_payment_info_split_message',\r\n {\r\n i: `${Filters.priceWithCurrency(\r\n split.agencyAmount + split.airlineAmount,\r\n split.agencyAmountCurrency,\r\n false\r\n )}`,\r\n interpolation: { escapeValue: false }\r\n })}:\r\n
    \r\n
  • \r\n ${Filters.priceWithCurrency(split.agencyAmount, split.agencyAmountCurrency, false)}\r\n ${i18next.t('label_payment_info_split_to_agency')}\r\n
  • \r\n
  • \r\n ${Filters.priceWithCurrency(split.airlineAmount, split.airlineAmountCurrency, false)}\r\n ${i18next.t('label_payment_info_split_to_airline')}\r\n
  • \r\n
`;\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('label_payment_info_split_title'),\r\n text: message,\r\n firstBtnText: i18next.t('button_next'),\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n next();\r\n }\r\n });\r\n } else {\r\n (this.$root).$refs.messageDialog.show({\r\n title: i18next.t('label_payment_info_split_title'),\r\n message: message,\r\n ok: i18next.t('button_next'),\r\n onOkCallback: () => {\r\n next();\r\n },\r\n onCancelOrHideCallback: () => {\r\n next();\r\n }\r\n });\r\n }\r\n } else {\r\n next();\r\n }\r\n };\r\n\r\n if (result.paymentInfo.inPlace) {\r\n \r\n const handleFinishResponse = (result: api.CreateReservationResult) => {\r\n if (result.paymentInfo.inPlace.succeed && result.paymentInfo?.inPlace?.status !== 'Error') {\r\n if (result.paymentInfo.redirect) {\r\n // 3DS redirect\r\n showPaymentSplitDialogOrDoNext(() => {\r\n utils.Payment.redirect(result.paymentInfo.redirect);\r\n });\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingSuccessRedirect,\r\n this.trackParams\r\n );\r\n } else {\r\n this.model.bookingCompleted = true;\r\n\r\n // Wait 10 seconds to give time to server to issue tickets and change status.\r\n setTimeout(() => {\r\n showPaymentSplitDialogOrDoNext(() => {\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('title_thank_you'),\r\n text: i18next.t('label_payment_success_reservation'),\r\n firstBtnText: 'Перейти к заказу',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const authToken = result.authToken ? '?auth_code=' + result.authToken : '';\r\n router.push('/order/' + result.reservationInfo.reservationPublicId + authToken);\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('title_thank_you'),\r\n message: i18next.t('label_payment_success_reservation'),\r\n ok: i18next.t('button_ok'),\r\n onOkCallback: () => {\r\n const authToken = result.authToken ? '?auth_code=' + result.authToken : '';\r\n router.push('/order/' + result.reservationInfo.reservationPublicId + authToken);\r\n }\r\n });\r\n }\r\n \r\n (this).$ga.sendPageview('/flights/booking/payment/thankyou', 'Flights / Booking / Payment / Thankyou');\r\n });\r\n }, 10000);\r\n\r\n utils.TrackingService.track(utils.TrackEvent.BookingSuccessPaid, this.trackParams);\r\n }\r\n } else {\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `error.payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '.' + selectedPaymentMethod.type : ''}`.toLowerCase(),\r\n `flights.booking.error.payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '.' + selectedPaymentMethod.type : ''}`.toLowerCase(),\r\n this.gaParams\r\n );\r\n\r\n // Order created but not payed > redirect to restart payment\r\n if (result.paymentInfo.inPlace.exceptionMessage) {\r\n console.error('Payment error: ' + result.paymentInfo.inPlace.exceptionMessage);\r\n }\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error'),\r\n text: result.paymentInfo.inPlace.errorMessage,\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n router.push('/order/payment/' + result.reservationInfo.reservationPublicId);\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n message: result.paymentInfo.inPlace.errorMessage,\r\n ok: i18next.t('button_ok'),\r\n onOkCallback: () => {\r\n router.push('/order/payment/' + result.reservationInfo.reservationPublicId);\r\n }\r\n });\r\n }\r\n \r\n\r\n utils.TrackingService.track(utils.TrackEvent.BookingError, this.trackParams, { ErrorReason: 'Payment' });\r\n }\r\n };\r\n \r\n if (result.paymentInfo.inPlace.status === 'SbpQr' && result.paymentInfo.redirect) {\r\n this.$refs.sbpModal.show(result.paymentInfo.redirect.url);\r\n\r\n const getPaymentQrStatusRequest: api.FinishPreauth3dsRequest = {\r\n reservationPublicId: result.reservationInfo.reservationPublicId,\r\n billPublicId: result.paymentInfo.billPublicId,\r\n paymentId: result.paymentInfo.paymentId\r\n };\r\n\r\n // polling the backend until payment status changes\r\n reservationService.pollPaymentQrStatus(getPaymentQrStatusRequest)\r\n .then((pollResult) => {\r\n this.$refs.sbpModal.close();\r\n this.model.state = 'booking';\r\n handleFinishResponse(pollResult);\r\n })\r\n .catch((err) => {\r\n this.$refs.sbpModal.close();\r\n this.model.state = 'form';\r\n if (err) {\r\n (this.$root).$refs.dialogMessage.show({\r\n text: err.message\r\n });\r\n }\r\n });\r\n \r\n } else if (result.paymentInfo.inPlace.succeed) {\r\n if (result.paymentInfo.inPlace.status === 'Preauth3ds'\r\n && result.paymentInfo.redirect) {\r\n console.log('Preauth3ds');\r\n\r\n utils.Http.hiddenFrameWithPost(result.paymentInfo.redirect);\r\n\r\n // Wait for DOM issues.\r\n setTimeout(() => {\r\n const finishRequest: api.FinishPreauth3dsRequest = {\r\n reservationPublicId: result.reservationInfo.reservationPublicId,\r\n billPublicId: result.paymentInfo.billPublicId,\r\n paymentId: result.paymentInfo.paymentId\r\n };\r\n\r\n reservationService.finishPreauth3ds(finishRequest).then(\r\n (result: api.CreateReservationResult) => {\r\n handleFinishResponse(result);\r\n },\r\n (error) => {\r\n if (error.response) {\r\n console.log('api/finishPreauth3ds XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('api/finishPreauth3ds XHR error', error.message);\r\n }\r\n\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `error.payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '.' + selectedPaymentMethod.type : ''}`.toLowerCase(),\r\n `flights.booking.error.payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '.' + selectedPaymentMethod.type : ''}`.toLowerCase(),\r\n this.gaParams\r\n );\r\n\r\n if (result.paymentInfo.errorCode === 6200 && this.reservation.selectedProducts && this.reservation.selectedProducts.length > 0 && !this.hasFlightService(this.reservation.passengers)) {\r\n (this).$ga.sendEvent(\r\n 'payment',\r\n 'error',\r\n 'payment.error.limit.card',\r\n this.gaParams\r\n );\r\n \r\n (this.$refs).modalError6200.show();\r\n } else {\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error_payment'),\r\n text: i18next.t('error_payment_failed'),\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n router.push('/order/payment/' + result.reservationInfo.reservationPublicId);\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_payment_failed'),\r\n ok: i18next.t('button_ok'),\r\n onOkCallback: () => {\r\n router.push('/order/payment/' + result.reservationInfo.reservationPublicId);\r\n }\r\n });\r\n }\r\n }\r\n\r\n utils.TrackingService.track(utils.TrackEvent.BookingError, this.trackParams, { ErrorReason: 'Payment' });\r\n }\r\n );\r\n }, 100);\r\n } else if (result.paymentInfo.redirect) {\r\n // 3DS redirect\r\n showPaymentSplitDialogOrDoNext(() => {\r\n utils.Payment.redirect(result.paymentInfo.redirect);\r\n });\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingSuccessRedirect,\r\n this.trackParams\r\n );\r\n } else {\r\n this.model.bookingCompleted = true;\r\n\r\n // Wait 10 seconds to give time to server to issue tickets and change status.\r\n setTimeout(() => {\r\n showPaymentSplitDialogOrDoNext(() => {\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('title_thank_you'),\r\n text: i18next.t('label_payment_success_reservation'),\r\n firstBtnText: 'Перейти к заказу',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const authToken = result.authToken ? '?auth_code=' + result.authToken : '';\r\n router.push('/order/' + result.reservationInfo.reservationPublicId + authToken);\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('title_thank_you'),\r\n message: i18next.t('label_payment_success_reservation'),\r\n ok: i18next.t('button_ok'),\r\n onOkCallback: () => {\r\n const authToken = result.authToken ? '?auth_code=' + result.authToken : '';\r\n router.push('/order/' + result.reservationInfo.reservationPublicId + authToken);\r\n }\r\n });\r\n }\r\n });\r\n (this).$ga.sendPageview('/flights/booking/payment/thankyou', 'Flights / Booking / Payment / Thankyou');\r\n }, 10000);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingSuccessPaid,\r\n this.trackParams\r\n );\r\n }\r\n } else {\r\n if (result.reservationInfo) {\r\n // Order created but not payed > redirect to restart payment\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `error.payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '.' + selectedPaymentMethod.type : ''}`.toLowerCase(),\r\n `flights.booking.error.payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '.' + selectedPaymentMethod.type : ''}`.toLowerCase(),\r\n this.gaParams\r\n );\r\n\r\n if (result.paymentInfo.inPlace.exceptionMessage) {\r\n console.error('Payment error: ' + result.paymentInfo.inPlace.exceptionMessage);\r\n }\r\n \r\n if (result.paymentInfo.errorCode === 6200 && this.reservation.selectedProducts && this.reservation.selectedProducts.length > 0 && !this.hasFlightService(this.reservation.passengers)) {\r\n (this).$ga.sendEvent(\r\n 'payment',\r\n 'error',\r\n 'payment.error.limit.card',\r\n this.gaParams\r\n );\r\n\r\n (this.$refs).modalError6200.show();\r\n } else {\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error'),\r\n text: result.paymentInfo.inPlace.errorMessage,\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n router.push('/order/payment/' + result.reservationInfo.reservationPublicId);\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n message: result.paymentInfo.inPlace.errorMessage,\r\n ok: i18next.t('button_ok'),\r\n onOkCallback: () => {\r\n router.push('/order/payment/' + result.reservationInfo.reservationPublicId);\r\n }\r\n });\r\n }\r\n }\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingError,\r\n this.trackParams,\r\n {\r\n ErrorReason: 'Payment'\r\n }\r\n );\r\n } else {\r\n // Reservation not created - input data error\r\n if (result.paymentInfo.inPlace.exceptionMessage) {\r\n console.error('Booking error: ' + result.paymentInfo.inPlace.exceptionMessage);\r\n if (result.paymentInfo.inPlace.exceptionMessage === 'Document number validation error') {\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n 'step3.error',\r\n 'flights.booking.step3.error.validation',\r\n this.gaParams\r\n );\r\n (this).$ga.reachGoal('flights.booking.step3.error.validation');\r\n }\r\n }\r\n this.model.state = 'form';\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error'),\r\n text: result.paymentInfo.inPlace.errorMessage,\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n message: result.paymentInfo.inPlace.errorMessage,\r\n onOkCallback: () => {\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n }\r\n });\r\n }\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingError,\r\n this.trackParams,\r\n {\r\n ErrorReason: 'Booking'\r\n }\r\n );\r\n }\r\n }\r\n } else if (result.paymentInfo.redirect) {\r\n // Payment requires redirecting to external url\r\n showPaymentSplitDialogOrDoNext(() => {\r\n utils.Payment.redirect(result.paymentInfo.redirect);\r\n });\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingSuccessRedirect,\r\n this.trackParams\r\n );\r\n } else if (result.reservationInfo.surchargeInfo && canRecursion) {\r\n const request: api.StartedReservation = {\r\n reservationPublicId: result.reservationInfo.reservationPublicId\r\n };\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n 'msg.price.rise',\r\n 'flights.booking.msg.price.rise',\r\n this.gaParams\r\n );\r\n \r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n text: result.reservationInfo.surchargeInfo.clientText,\r\n firstBtnText: result.reservationInfo.surchargeInfo.buttonAcceptText,\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n 'msg.price.rise',\r\n 'flights.booking.msg.price.rise.ok',\r\n this.gaParams\r\n );\r\n reservationService.CompleteStartedReservation(request)\r\n .then((result: api.CreateReservationResult)=>{\r\n console.log(result);\r\n createOrRestartReservationHandleResult(result);\r\n },\r\n (error) => {\r\n console.log(error);\r\n createOrRestartReservationHandleResult(result);\r\n });\r\n },\r\n secondBtnText: result.reservationInfo.surchargeInfo.buttonRejectText,\r\n secondBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n 'msg.price.rise',\r\n 'flights.booking.msg.price.rise.search',\r\n this.gaParams\r\n );\r\n reservationService.RejectStartedReservation(request)\r\n .then((result) => {\r\n console.log(result);\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n },\r\n (error) => {\r\n console.log(error);\r\n });\r\n }\r\n });\r\n } else {\r\n (this.$root).$refs.messageDialog.show({\r\n message: result.reservationInfo.surchargeInfo.clientText,\r\n ok: result.reservationInfo.surchargeInfo.buttonAcceptText,\r\n cancel: result.reservationInfo.surchargeInfo.buttonRejectText,\r\n onOkCallback: () => {\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n 'msg.price.rise',\r\n 'flights.booking.msg.price.rise.ok',\r\n this.gaParams\r\n );\r\n reservationService.CompleteStartedReservation(request)\r\n .then((result: api.CreateReservationResult)=>{\r\n console.log(result);\r\n createOrRestartReservationHandleResult(result);\r\n },\r\n (error) => {\r\n console.log(error);\r\n createOrRestartReservationHandleResult(result);\r\n });\r\n },\r\n onCancelOrHideCallback: () => {\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n 'msg.price.rise',\r\n 'flights.booking.msg.price.rise.search',\r\n this.gaParams\r\n );\r\n reservationService.RejectStartedReservation(request)\r\n .then((result) => {\r\n console.log(result);\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n },\r\n (error) => {\r\n console.log(error);\r\n });\r\n \r\n }\r\n });\r\n } \r\n } else {\r\n // PayLater - push to order page\r\n const authToken = result.authToken ? '?auth_code=' + result.authToken : '';\r\n router.push('/order/' + result.reservationInfo.reservationPublicId + authToken);\r\n }\r\n } else {\r\n // We have no paymentInfo (existed duplicate reservation was found) so just redirect to order page.\r\n (this).$ga.sendEvent('flights.booking', 'booking.exists', 'flights.booking.exists', this.gaParams);\r\n\r\n const authToken = result.authToken ? '?auth_code=' + result.authToken : '';\r\n router.push('/order/' + result.reservationInfo.reservationPublicId + authToken);\r\n }\r\n };\r\n\r\n // prevent request duplication for SBP\r\n if (selectedPayment.paymentTypeId === 'MobiMoneySbp'\r\n && this.paymentInfo?.inPlace?.status === 'SbpQr'\r\n && this.paymentInfo?.redirect) {\r\n createOrRestartReservationHandleResult({\r\n paymentInfo: this.paymentInfo,\r\n reservationInfo: this.reservationInfo,\r\n authToken: this.authToken\r\n });\r\n\r\n return;\r\n }\r\n\r\n new api.ReservationService().createOrRestartReservation(request).then(\r\n (result: api.CreateReservationResult) => {\r\n createOrRestartReservationHandleResult(result, true);\r\n },\r\n (error) => {\r\n if (error.response) {\r\n console.log('api/createOrRestartReservation XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('api/createOrRestartReservation XHR error', error.message);\r\n }\r\n\r\n if (selectedPayment && error?.response && error?.response?.status) {\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `error.payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '.' + selectedPaymentMethod.type : ''}.${error?.response?.status}`.toLowerCase(),\r\n `flights.booking.error.payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '.' + selectedPaymentMethod.type : ''}.${error?.response?.status}`.toLowerCase(),\r\n this.gaParams\r\n );\r\n }\r\n\r\n if (error?.response?.status === 400) {\r\n // Bad request: reservation was not created. Show message on booking form.\r\n this.model.state = 'form';\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error'),\r\n text: error.response.data.error.message,\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n message: error.response.data.error.message\r\n });\r\n }\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingError,\r\n this.trackParams,\r\n {\r\n ErrorReason: 'BadRequest'\r\n }\r\n );\r\n\r\n if (error?.response?.data) {\r\n throw 'api/createOrRestartReservation XHR failed' + error?.response?.data?.message;\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (!error.response && error.message == 'Network Error') {\r\n // Network error.\r\n this.model.state = 'network-error';\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingError,\r\n this.trackParams,\r\n {\r\n ErrorReason: 'Network'\r\n }\r\n );\r\n\r\n throw 'api/createOrRestartReservation XHR error' + error.message;\r\n\r\n return;\r\n }\r\n\r\n // Server or another error.\r\n this.model.state = 'error';\r\n\r\n (this).$ga.sendPageview('/flights/booking/error', 'Flights / Booking / Error', this.gaParams);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingError,\r\n this.trackParams,\r\n {\r\n ErrorReason: 'ServerSide'\r\n }\r\n );\r\n\r\n if (error.message) {\r\n throw 'api/createOrRestartReservation XHR error' + error.message;\r\n } else if (error?.response && error?.response.data) {\r\n throw 'api/createOrRestartReservation XHR failed' + error?.response?.data?.message;\r\n }\r\n }\r\n );\r\n }\r\n\r\n onBookingStateBack() {\r\n switch (this.model.formStep) {\r\n case 'seats':\r\n window.history.go(-1);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingStepBack,\r\n this.trackParams,\r\n {\r\n Step: 'passengers'\r\n }\r\n );\r\n\r\n break;\r\n case 'services':\r\n (this).$ga.sendEvent('flights.booking', 'step2.back', 'flights.booking.step2.back', this.gaParams);\r\n\r\n window.history.go(-1);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingStepBack,\r\n this.trackParams,\r\n {\r\n Step: 'passengers'\r\n }\r\n );\r\n\r\n break;\r\n case 'payment':\r\n (this).$ga.sendEvent('flights.booking', 'step3.back', 'flights.booking.step3.back', this.gaParams);\r\n\r\n window.history.go(-1);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingStepBack,\r\n this.trackParams,\r\n {\r\n Step: 'services'\r\n }\r\n );\r\n\r\n break;\r\n }\r\n }\r\n\r\n parseButtonLabel(v: string): string {\r\n if (v) {\r\n v = v.replace('[[happy]]', '');\r\n v = v.replace('[[unhappy]]', '');\r\n }\r\n\r\n return v;\r\n }\r\n\r\n getMaterialIconCodeByName(name: string | undefined): string {\r\n switch(name) {\r\n case 'SmileHappy':\r\n return '';\r\n case 'SmileUnhappy':\r\n return '';\r\n case 'ArrowRight':\r\n return '';\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n showMeAccum = 0;\r\n brandContent: any = null;\r\n\r\n replaceKeys(text: string, currentPrice: number | string, futurePrice: number | string, productPrice: number, currencyCode: string | undefined) {\r\n if (text) {\r\n return text\r\n .replace(/%order\\.price\\.current%/g, String((this.$options.filters).price(currentPrice, false, currencyCode || '')))\r\n .replace(/%order\\.price\\.future%/g, String((this.$options.filters).price(futurePrice, false, currencyCode || '')))\r\n .replace(/%product\\.price%/g, String((this.$options.filters).price(productPrice, false, currencyCode || '')));\r\n }\r\n return text;\r\n }\r\n\r\n serveBrandConfirmation(confirmationData: flights.ProductServiceBrand) {\r\n this.productIdToConfirm = null;\r\n\r\n let p;\r\n if(confirmationData.services){\r\n p = utils.clone(confirmationData.services[this.showMeAccum]);\r\n }\r\n this.showMeAccum++;\r\n this.brandContent = p;\r\n if (this.brandContent && this.brandContent.products) {\r\n this.brandContent.products.sort((a,b) =>{\r\n return a.sortOrder == b.sortOrder ? 0 : (a.sortOrder > b.sortOrder ? 1 : -1);\r\n });\r\n }\r\n if(this.brandContent && this.brandContent.products){\r\n (this.$refs).modalBrandsPopup.show();\r\n } else {\r\n this.closePopup();\r\n }\r\n this.anyProductConfirmationWasShown = true;\r\n\r\n new api.ReservationService().updateBookingSessionProductPopup({\r\n bookingSessionId: this.flightBookingDetails!.bookingSessionId,\r\n productPopupId: confirmationData.popup.popupId,\r\n popupType: confirmationData.popup.popupTypeNumber,\r\n isPopupOnForm: confirmationData.popup.position !== api.ProductPopupPosition.afterOrder\r\n }).catch(() => (this).$ga.sendEvent('error', 'UpdateBookingSessionProductPopup', 'error.UpdateBookingSessionProductPopup', this.gaParams));\r\n }\r\n\r\n closePopup() {\r\n this.onConfirmProduct(false);\r\n }\r\n\r\n serveProductConfirmation(confirmationData: flights.ProductConfirmationData) {\r\n const currentPrice = this.reservation.getTotalPrice(true);\r\n const futurePrice = currentPrice + (confirmationData.product?.product.billingPrice ?? 0);\r\n const p = utils.clone(confirmationData.popup);\r\n\r\n p.buttonText1 = this.parseButtonLabel(this.replaceKeys(p.buttonText1, currentPrice, futurePrice, confirmationData.product?.product.billingPrice || 0, confirmationData.product?.product.currencyCode));\r\n p.buttonText2 = this.parseButtonLabel(this.replaceKeys(p.buttonText2, currentPrice, futurePrice, confirmationData.product?.product.billingPrice || 0, confirmationData.product?.product.currencyCode));\r\n p.buttonText3 = this.parseButtonLabel(this.replaceKeys(p.buttonText3, currentPrice, futurePrice, confirmationData.product?.product.billingPrice || 0, confirmationData.product?.product.currencyCode));\r\n p.buttonIcon1 = this.getMaterialIconCodeByName(p.buttonIcon1);\r\n p.buttonIcon2 = this.getMaterialIconCodeByName(p.buttonIcon2);\r\n p.buttonIcon3 = this.getMaterialIconCodeByName(p.buttonIcon3);\r\n p.buttonColor1 = utils.String.camelToKebab(p.buttonColor1);\r\n p.buttonColor2 = utils.String.camelToKebab(p.buttonColor2);\r\n p.buttonColor3 = utils.String.camelToKebab(p.buttonColor3);\r\n p.buttonStyle1 = utils.String.camelToKebab(p.buttonStyle1);\r\n p.buttonStyle2 = utils.String.camelToKebab(p.buttonStyle2);\r\n p.buttonStyle3 = utils.String.camelToKebab(p.buttonStyle3);\r\n p.emTextColor = utils.String.camelToKebab(p.emTextColor);\r\n\r\n if (p.reservationPriceText) {\r\n\r\n const wrap = (content: any) => `${content.toLocaleString('ru')}`;\r\n\r\n const reservationPriceText = p.reservationPriceText\r\n .replace(/%order\\.price\\.current%/g, wrap(currentPrice))\r\n .replace(/%order\\.price\\.future%/g, wrap(futurePrice));\r\n\r\n if (reservationPriceText.match(/%[\\w.]+%/)) {\r\n p.reservationPriceText = null;\r\n } else {\r\n p.reservationPriceText = reservationPriceText;\r\n }\r\n }\r\n\r\n this.modalConfirmProductContent = p;\r\n\r\n this.productIdToConfirm = confirmationData.product!.product.id;\r\n (this.$refs).modalConfirmProduct.show();\r\n this.anyProductConfirmationWasShown = true;\r\n\r\n (this).$ga.sendEvent(\r\n 'product.catchup',\r\n 'shown',\r\n 'product.catchup.kit' + this.modalConfirmProductContent?.kitId + '.id' + this.modalConfirmProductContent?.productId,\r\n this.gaParams\r\n );\r\n \r\n new api.ReservationService().updateBookingSessionProductPopup({\r\n bookingSessionId: this.flightBookingDetails!.bookingSessionId,\r\n productPopupId: confirmationData.popup.popupId,\r\n popupType: confirmationData.popup.popupTypeNumber,\r\n isPopupOnForm: confirmationData.popup.position !== api.ProductPopupPosition.afterOrder\r\n }).catch((error) => {\r\n (this).$ga.sendEvent('error', 'UpdateBookingSessionProductPopup', 'error.UpdateBookingSessionProductPopup');\r\n \r\n if (error && error?.response && error?.response?.status) {\r\n (this).$ga.sendEvent('error', 'UpdateBookingSessionProductPopup', `error.UpdateBookingSessionProductPopup.${error.response.status}`, this.gaParams);\r\n }\r\n\r\n if (error && error.message) {\r\n throw 'api/updateBookingSessionProductPopup XHR error' + error.message;\r\n } else if (error && error?.response && error?.response.data) {\r\n throw 'api/updateBookingSessionProductPopup XHR failed' + error?.response?.data?.message;\r\n }\r\n });\r\n }\r\n\r\n serveProductDiscountConfirmation(confirmationData: flights.ProductDiscountConfirmationData) {\r\n const p = utils.clone(confirmationData.popup);\r\n p.buttonText1 = this.parseButtonLabel(p.buttonText1);\r\n p.buttonText2 = this.parseButtonLabel(p.buttonText2);\r\n p.buttonText3 = this.parseButtonLabel(p.buttonText3);\r\n p.buttonIcon1 = this.getMaterialIconCodeByName(p.buttonIcon1);\r\n p.buttonIcon2 = this.getMaterialIconCodeByName(p.buttonIcon2);\r\n p.buttonIcon3 = this.getMaterialIconCodeByName(p.buttonIcon3);\r\n p.buttonColor1 = utils.String.camelToKebab(p.buttonColor1);\r\n p.buttonColor2 = utils.String.camelToKebab(p.buttonColor2);\r\n p.buttonColor3 = utils.String.camelToKebab(p.buttonColor3);\r\n p.buttonStyle1 = utils.String.camelToKebab(p.buttonStyle1);\r\n p.buttonStyle2 = utils.String.camelToKebab(p.buttonStyle2);\r\n p.buttonStyle3 = utils.String.camelToKebab(p.buttonStyle3);\r\n p.emTextColor = utils.String.camelToKebab(p.emTextColor);\r\n this.modalConfirmProductContent = p;\r\n\r\n this.productIdToConfirm = confirmationData.productDiscount!.product.id;\r\n (this.$refs).modalConfirmProductDiscount.show();\r\n this.anyProductConfirmationWasShown = true;\r\n (this).$ga.sendEvent(\r\n 'product.catchup.popup',\r\n 'shown',\r\n 'product.catchup.popup.kit' + this.modalConfirmProductContent?.kitId + '.id' + this.modalConfirmProductContent?.productId,\r\n this.gaParams\r\n );\r\n new api.ReservationService().updateBookingSessionProductPopup({\r\n bookingSessionId: this.flightBookingDetails!.bookingSessionId,\r\n productPopupId: confirmationData.popup.popupId,\r\n popupType: confirmationData.popup.popupTypeNumber,\r\n isPopupOnForm: confirmationData.popup.position !== api.ProductPopupPosition.afterOrder\r\n }).catch(() => (this).$ga.sendEvent('error', 'UpdateBookingSessionProductPopup', 'error.UpdateBookingSessionProductPopup', this.gaParams));\r\n }\r\n\r\n serveBaggageUpgradeConfirmation(confirmationData: flights.BaggageConfirmationData) {\r\n if (confirmationData.baggageData) {\r\n this.modalUpgradeBaggageContent = {\r\n ...confirmationData.popup,\r\n isCloseIconVisible: confirmationData.popup.isCloseIconVisible,\r\n text: confirmationData.popup.text\r\n .replace(\r\n '%baggage.weight%',\r\n confirmationData.baggageData.baggage\r\n )\r\n .replace(\r\n '%baggage.price%',\r\n confirmationData.baggageData.price\r\n ),\r\n buttonText1: this.parseButtonLabel(confirmationData.popup.buttonText1),\r\n buttonText2: this.parseButtonLabel(confirmationData.popup.buttonText2),\r\n buttonText3: this.parseButtonLabel(confirmationData.popup.buttonText3),\r\n buttonIcon1: this.getMaterialIconCodeByName(confirmationData.popup.buttonIcon1),\r\n buttonIcon2: this.getMaterialIconCodeByName(confirmationData.popup.buttonIcon2),\r\n buttonIcon3: this.getMaterialIconCodeByName(confirmationData.popup.buttonIcon3),\r\n buttonColor1: utils.String.camelToKebab(confirmationData.popup.buttonColor1),\r\n buttonColor2: utils.String.camelToKebab(confirmationData.popup.buttonColor2),\r\n buttonColor3: utils.String.camelToKebab(confirmationData.popup.buttonColor3),\r\n buttonStyle1: utils.String.camelToKebab(confirmationData.popup.buttonStyle1),\r\n buttonStyle2: utils.String.camelToKebab(confirmationData.popup.buttonStyle2),\r\n buttonStyle3: utils.String.camelToKebab(confirmationData.popup.buttonStyle3),\r\n emTextColor: utils.String.camelToKebab(confirmationData.popup.emTextColor)\r\n };\r\n this.anyProductConfirmationWasShown = true;\r\n (this.$refs).modalBaggageUpgrade.show();\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n 'msg.product.confirm.shown.kit' + this.modalUpgradeBaggageContent?.kitId + '.id' + this.modalUpgradeBaggageContent?.productId,\r\n 'flights.booking.msg.product.confirm.shown.kit' + this.modalUpgradeBaggageContent?.kitId + '.id' + this.modalUpgradeBaggageContent?.productId,\r\n this.gaParams\r\n );\r\n new api.ReservationService().updateBookingSessionProductPopup({\r\n bookingSessionId: this.flightBookingDetails!.bookingSessionId,\r\n productPopupId: confirmationData.popup.popupId,\r\n popupType: confirmationData.popup.popupTypeNumber,\r\n isPopupOnForm: confirmationData.popup.position !== api.ProductPopupPosition.afterOrder\r\n }).catch(() => (this).$ga.sendEvent('error', 'UpdateBookingSessionProductPopup', 'error.UpdateBookingSessionProductPopup', this.gaParams));\r\n }\r\n }\r\n\r\n onBookingStateSubmit() {\r\n this.formStepTransition = 'slide-right';\r\n\r\n window.scrollTo(0, 0);\r\n\r\n const selectedPayment = this.reservation.payment!.selectedPaymentType;\r\n const selectedPaymentMethod = selectedPayment.isYandexPay ? this.reservation.payment!.selectedPaymentMethod : '';\r\n\r\n switch (this.model.formStep) {\r\n case 'passengers':\r\n if (!this.gaAlreadySubmitted.includes('flights.booking.step1.submit')) {\r\n (this).$ga.sendEvent('flights.booking', 'step1.submit', 'flights.booking.step1.submit', this.gaParams);\r\n this.gaAlreadySubmitted.push('flights.booking.step1.submit');\r\n }\r\n\r\n if (this.reservation.selectedFlight!.bookingChecked && this.reservation.selectedFlight!.bookingPossible) {\r\n const confirmationData = this.reservation.getConfirmationDataForUndonePopupByPosition(api.ProductPopupPosition.afterStep1);\r\n\r\n if (confirmationData == 'skipPopupAndGo') {\r\n this.onBookingStateSubmit();\r\n\r\n return;\r\n }\r\n\r\n if (confirmationData?.product) {\r\n this.serveProductConfirmation(confirmationData);\r\n\r\n return;\r\n }\r\n\r\n if (confirmationData?.baggageData) {\r\n this.serveBaggageUpgradeConfirmation(confirmationData);\r\n\r\n return;\r\n }\r\n\r\n this.canGoBackOrForwardToPassengers = true;\r\n if (this.reservation?.trains.length) {\r\n this.canGoBackOrForwardToSeats = true;\r\n window.history.pushState({ ...window.history.state, view: 'seats' }, '', router.currentRoute.fullPath);\r\n this.moveOnStep('seats');\r\n } else {\r\n this.canGoBackOrForwardToServices = true;\r\n window.history.pushState({ ...window.history.state, view: 'services' }, '', router.currentRoute.fullPath);\r\n this.moveOnStep('services');\r\n }\r\n\r\n if (!this.gaAlreadySubmitted.includes('/flights/booking/step2')) {\r\n (this).$ga.addFlightProduct(this.reservation.selectedFlight, this.reservation.passengers.length);\r\n (this).$ga.setAction('checkout', { 'step': 2 });\r\n\r\n this.gaAlreadySubmitted.push('/flights/booking/step2');\r\n\r\n if (this.reservation?.trains.length) {\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingStepSeats,\r\n this.trackParams\r\n );\r\n } else {\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingStepServices,\r\n this.trackParams\r\n );\r\n }\r\n }\r\n\r\n // Save user's input to cookie\r\n utils.Cookies.saveReservationModelCookie(this.reservation);\r\n\r\n const request: api.UpdateBookingSessionRequest = {\r\n bookingSessionId: this.flightBookingDetails!.bookingSessionId,\r\n email: this.reservation.contacts.email,\r\n phone: this.reservation.contacts.phone\r\n };\r\n const reservationService = new api.ReservationService();\r\n\r\n reservationService.updateBookingSession(request);\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('label_flight_out_of_stock_fare'),\r\n ok: i18next.t('button_ok')\r\n });\r\n }\r\n break;\r\n case 'seats':\r\n this.canGoBackOrForwardToServices = true;\r\n window.history.pushState({ ...window.history.state, view: 'services' }, '', router.currentRoute.fullPath);\r\n this.moveOnStep('services');\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingStepServices,\r\n this.trackParams\r\n );\r\n\r\n break;\r\n case 'services':\r\n if (!this.gaAlreadySubmitted.includes('flights.booking.step2.submit')) {\r\n (this).$ga.sendEvent('flights.booking', 'step2.submit', 'flights.booking.step2.submit', this.gaParams);\r\n this.gaAlreadySubmitted.push('flights.booking.step2.submit');\r\n }\r\n\r\n const confirmationData = this.reservation.getConfirmationDataForUndonePopupByPosition(api.ProductPopupPosition.afterStep2);\r\n\r\n if (confirmationData == 'skipPopupAndGo') {\r\n this.onBookingStateSubmit();\r\n\r\n return;\r\n }\r\n\r\n if (confirmationData?.product) {\r\n this.serveProductConfirmation(confirmationData);\r\n\r\n return;\r\n }\r\n\r\n if (confirmationData?.baggageData) {\r\n this.serveBaggageUpgradeConfirmation(confirmationData);\r\n\r\n return;\r\n }\r\n\r\n this.canGoBackOrForwardToPayment = true;\r\n window.history.pushState({ ...window.history.state, view: 'payment' }, '', router.currentRoute.fullPath);\r\n this.moveOnStep('payment');\r\n\r\n if (!this.gaAlreadySubmitted.includes('/flights/booking/step3')) {\r\n (this).$ga.addFlightProduct(this.reservation.selectedFlight, this.reservation.passengers.length);\r\n this.reservation.selectedProducts.forEach(p => {\r\n (this).$ga.addProduct(p, this.reservation.passengers.length);\r\n });\r\n (this).$ga.setAction('checkout', { 'step': 3 });\r\n\r\n\r\n this.gaAlreadySubmitted.push('/flights/booking/step3');\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingStepPayment,\r\n this.trackParams\r\n );\r\n }\r\n break;\r\n case 'payment':\r\n if (!this.$v.reservation!.$error) {\r\n this.model.state = 'booking';\r\n const model = this.$v.reservation!.$model;\r\n if (model.payment.selectedPaymentType.paymentMethods\r\n && model.payment.selectedPaymentType.paymentMethods[0]\r\n && this.reservation.payment!.selectedPaymentType.isYandexPay) {\r\n this.$v.reservation!.$model.paymentData = new YandexPaymentData(\r\n model.payment.selectedPaymentType.paymentMethods[0].paymentMethodOptions,\r\n this.reservation.getTotalPrice(),\r\n this.flightBookingDetails!.bookingSessionId\r\n );\r\n }\r\n const g = utils.clone(this.gaParams);\r\n\r\n if (!this.gaAlreadySubmitted.includes('flights.booking.step3.submit')) {\r\n (this).$ga.sendEvent('flights.booking', 'step3.submit', 'flights.booking.step3.submit', g);\r\n this.gaAlreadySubmitted.push('flights.booking.step3.submit');\r\n }\r\n\r\n if (!this.gaAlreadySubmitted.includes('flights.booking.product.confirm.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'product.confirm.started', 'flights.booking.product.confirm.started', g);\r\n this.gaAlreadySubmitted.push('flights.booking.product.confirm.started');\r\n }\r\n\r\n const processFn = () => {\r\n new api.ReservationService().processBeforeBooking(this.searchId, this.flightBookingDetails!, this.reservation).then(\r\n (result: boolean) => {\r\n const confirmationData = this.reservation.getConfirmationDataForUndonePopupByPosition(api.ProductPopupPosition.afterOrder);\r\n\r\n if (confirmationData == 'skipPopupAndGo') {\r\n this.onBookingStateSubmit();\r\n\r\n return;\r\n }\r\n\r\n if(confirmationData?.services) {\r\n this.serveBrandConfirmation(confirmationData);\r\n\r\n return;\r\n }\r\n\r\n if (confirmationData?.product && !this.reservation.payment!.selectedPaymentType.isYandexPay) {\r\n this.serveProductConfirmation(confirmationData);\r\n\r\n return;\r\n }\r\n \r\n if (confirmationData?.productDiscount && !this.reservation.payment!.selectedPaymentType.isYandexPay) {\r\n this.serveProductDiscountConfirmation(confirmationData);\r\n\r\n return;\r\n }\r\n\r\n if (confirmationData?.baggageData && !this.reservation.payment!.selectedPaymentType.isYandexPay) {\r\n this.serveBaggageUpgradeConfirmation(confirmationData);\r\n\r\n return;\r\n }\r\n\r\n (this).$ga.setAction('checkout_option', { 'step': 3, 'option': this.reservation.payment!.selectedPaymentTypeId });\r\n\r\n this.canGoBackOrForwardToPassengers = false;\r\n this.canGoBackOrForwardToServices = false;\r\n this.canGoBackOrForwardToPayment = false;\r\n\r\n g.dimension1 = this.reservation.payment!.selectedPaymentTypeId;\r\n\r\n utils.TrackingService.updateParamsFromReservationBeforeSubmit(this.trackParams, this.reservation);\r\n\r\n if (!this.gaAlreadySubmitted.includes('/flights/booking/payment')) {\r\n let ptId = this.reservation.payment!.selectedPaymentTypeId.toLowerCase();\r\n\r\n if (this.reservation.payment!.selectedPaymentType.kind === 'CreditCard' || this.reservation.payment!.selectedPaymentType.kind === 'CreditCardInplace') {\r\n ptId = 'card';\r\n }\r\n\r\n // (this).$ga.sendPageview('/flights/booking/payment/' + ptId, 'Flights / Booking / Payment', g);\r\n\r\n this.gaAlreadySubmitted.push('/flights/booking/payment');\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingPayment,\r\n this.trackParams\r\n );\r\n }\r\n \r\n if(this.reservation.hasSeatMaps()){\r\n Object.values(this.reservation.flatSelectedSeats).forEach((flight: [])=>{\r\n if(flight.length){\r\n (this).$ga.sendEvent('flights.booking', 'seat.selected', 'flights.booking.seat.selected', g);\r\n }\r\n });\r\n }\r\n\r\n if(this.reservation.hasSelectedAnyCustomBaggage){\r\n this.reservation.selectedFlight?.customBaggage.options?.forEach(optionsByDirection=>{\r\n for (const direction of ['Outward', 'Return', 'Both']){\r\n if(optionsByDirection.customBaggageFlightDirection == direction){\r\n for (let i = 0; i < optionsByDirection.baggageOptions.length; i++) {\r\n if(this.reservation.getSelectedCustomBaggageIds().includes(optionsByDirection.baggageOptions[i].id)){\r\n (this).$ga.sendEvent('flights.booking', 'baggage.selected', 'flights.booking.baggage.selected', g);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (this.reservation.brandGroups.length > 0) {\r\n this.reservation.brandGroups.forEach((brandGroup) => {\r\n if (brandGroup.defaultFlightId !== brandGroup.selectedFlightId) {\r\n (this).$ga.sendEvent('flights.booking', 'brands.selected', 'flights.booking.brands.selected', g);\r\n\r\n if (brandGroup.brandChangeState) {\r\n (this).$ga.sendEvent('flights.booking', 'brands.selected.' + brandGroup.brandChangeState, 'flights.booking.brands.selected.' + brandGroup.brandChangeState, g);\r\n }\r\n }\r\n });\r\n } else {\r\n if (this.reservation.selectedFlightId !== this.flightBookingDetails!.selectedFlightUniqueId) {\r\n (this).$ga.sendEvent('flights.booking', 'brands.selected', 'flights.booking.brands.selected', g);\r\n\r\n if (this.brandChangeState) {\r\n (this).$ga.sendEvent('flights.booking', 'brands.selected.' + this.brandChangeState, 'flights.booking.brands.selected.' + this.brandChangeState, g);\r\n }\r\n }\r\n }\r\n\r\n this.onBooking();\r\n },\r\n (error: any) => {\r\n (this).$ga.sendEvent('error', 'ProcessBeforeFlightBooking', 'error.ProcessBeforeFlightBooking', g);\r\n }\r\n );\r\n };\r\n if (this.reservation.payment!.selectedPaymentType.isYandexPay) {\r\n console.log('create Yandex Pay');\r\n \r\n new api.ReservationService().yaCreatePayment(model.paymentData).then((payment) => {\r\n // Подписаться на событие process.\r\n payment.checkout();\r\n payment.on((window).YaPay.PaymentEventType.Process, (event) => {\r\n console.log('Yandex Pay - success!');\r\n (this).$ga.sendPageview(\r\n `/flights/booking/payment/${selectedPayment.kind}/${selectedPayment.paymentTypeId}${selectedPaymentMethod ? '/' + selectedPaymentMethod.type : ''}`.toLowerCase(),\r\n `Flights / Booking / Payment / ${selectedPayment.kind} / ${selectedPayment.paymentTypeId}${selectedPaymentMethod ? ' /' + selectedPaymentMethod.type : ''}`,\r\n this.gaParams\r\n );\r\n this.reservation.payment!.paymentMethod = {\r\n type: 'YandexPay',\r\n encryptedPacket: event.token\r\n };\r\n // Закрыть форму Yandex.Pay.\r\n payment.complete((window).YaPay.CompleteReason.Success);\r\n processFn();\r\n });\r\n payment.on((window).YaPay.PaymentEventType.Abort, () => {\r\n console.log('Yandex Pay - Abort!');\r\n this.model.state = 'form';\r\n });\r\n payment.on((window).YaPay.PaymentEventType.Error, () => {\r\n console.log('Yandex Pay - Error!');\r\n (this.$root).$refs.dialogMessage.show({\r\n title: i18next.t('error'),\r\n text: i18next.t('error_payment_yandex_not_available'),\r\n btnOkHandler: () => {\r\n this.model.state = 'form';\r\n },\r\n btnCloseHandler: () => {\r\n this.model.state = 'form';\r\n }\r\n });\r\n payment.complete((window).YaPay.CompleteReason.Error);\r\n });\r\n }).catch(() => {\r\n console.log('Yandex Pay - Server error!');\r\n\r\n (this.$root).$refs.dialogMessage.show({\r\n title: i18next.t('error'),\r\n text: i18next.t('error_payment_yandex_not_available'),\r\n btnOkHandler: () => {\r\n this.model.state = 'form';\r\n },\r\n btnCloseHandler: () => {\r\n this.model.state = 'form';\r\n }\r\n });\r\n });\r\n } else {\r\n processFn();\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n get relatedProducts() {\r\n return this.reservation.getPackageRelatedProductsByExternalId(this.productToConfirm!.product.externalId) || [];\r\n }\r\n\r\n onConfirmProduct(confirmed: boolean, btnId?: number | string, isLastPopup?: boolean) {\r\n const product = this.productToConfirm;\r\n\r\n const nextTrick = () => {\r\n this.$nextTick(() => {\r\n // Timeout for animations\r\n window.setTimeout(() => {\r\n this.onBookingStateSubmit();\r\n }, 300);\r\n });\r\n };\r\n\r\n let waitTrick = false;\r\n\r\n const discountConfirmIsActive = !!this.modalConfirmProductContent?.buttonText3;\r\n\r\n if (btnId !== undefined) {\r\n (this).$ga.sendEvent(\r\n discountConfirmIsActive ? 'product.catchup.popup' : 'product.catchup',\r\n confirmed ? 'btn.ok' : 'btn.cancel',\r\n `product.catchup${discountConfirmIsActive ? '.popup' : ''}.kit${this.modalConfirmProductContent?.kitId}.id${product?.product.id}`,\r\n this.gaParams\r\n );\r\n }\r\n\r\n if (confirmed && product) {\r\n const popup = this.reservation.productPopups.find(p => {\r\n return p.productId === product.product.id;\r\n });\r\n\r\n product.selected = true;\r\n\r\n if (popup?.position === api.ProductPopupPosition.afterOrder) {\r\n product.choiceType = isLastPopup ? api.ProductChoiceType.popupForPopupAccepted : api.ProductChoiceType.confirmationAccepted;\r\n } else {\r\n product.choiceType = api.ProductChoiceType.popupOnOrderFormAccepted;\r\n }\r\n\r\n console.log('Booking!');\r\n console.log(product.selected);\r\n console.log(this.relatedProducts);\r\n\r\n if (this.relatedProducts.length) {\r\n this.relatedProducts.forEach(relatedProduct => {\r\n let productToUnselect: flights.ProductModel | undefined = undefined;\r\n\r\n if (relatedProduct.criterion == 'equal') {\r\n productToUnselect = this.reservation.products.find(product =>\r\n product.product.externalId == relatedProduct.externalId\r\n );\r\n }\r\n\r\n if (relatedProduct.criterion == 'popup') {\r\n productToUnselect = this.reservation.products.find(product =>\r\n utils.String.startsWith(product.product.externalId, relatedProduct.externalId)\r\n );\r\n \r\n if (productToUnselect && productToUnselect!.selected) {\r\n this.alreadyInPackageModal.message = i18next.t('label_product_already_in_package', { i: productToUnselect!.product.name });\r\n waitTrick = true;\r\n this.alreadyInPackageModal.acceptCallback = () => {\r\n (this.$refs).modalProductAlreadyInPackage.hide();\r\n productToUnselect!.selected = false;\r\n nextTrick();\r\n };\r\n this.alreadyInPackageModal.refuseCallback = () => {\r\n (this.$refs).modalProductAlreadyInPackage.hide();\r\n nextTrick();\r\n };\r\n (this.$refs).modalProductAlreadyInPackage.show();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n (this.$refs).modalBrandsPopup.hide();\r\n (this.$refs).modalConfirmProduct.hide();\r\n (this.$refs).modalConfirmProductDiscount.hide();\r\n\r\n if (!waitTrick) {\r\n nextTrick();\r\n }\r\n }\r\n\r\n onGoBack() {\r\n (this).$ga.sendEvent('flights.booking', 'step1.back.arrow', 'flights.booking.step1.back.arrow', this.gaParams);\r\n\r\n window.history.go(-1);\r\n }\r\n\r\n tryToShowLeavingDialog(isGaAllow = true) {\r\n if (isGaAllow) {\r\n (this).$ga.sendEvent('flights.results', 'btn.flight.details.back', 'flights.results.btn.flight.details.back', this.gaParams);\r\n (this).$ga.sendPageview('/flights/results/details/back', 'Flights / Results / Details / Back', this.gaParams);\r\n }\r\n \r\n if (this.model.state === 'form') {\r\n this.setLastHistoryStateView();\r\n (this.$refs).leavingDialog.show();\r\n } else {\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n }\r\n }\r\n\r\n hideLeavingDialog() {\r\n (this.$refs).leavingDialog.hide();\r\n }\r\n\r\n onLeavingToSearch() {\r\n (this).$ga.sendEvent('flights.results', 'btn.flight.details.search', 'flights.results.btn.flight.details.search', this.gaParams);\r\n window.history.go(-1);\r\n }\r\n\r\n onLeavingToForm() {\r\n (this).$ga.sendEvent('flights.results', 'btn.flight.details.order', 'flights.results.btn.flight.details.order', this.gaParams);\r\n window.history.pushState({ ...window.history.state, view: 'details' }, '', router.currentRoute.fullPath);\r\n window.history.pushState({ ...window.history.state, view: 'passengers' }, '', router.currentRoute.fullPath);\r\n this.hideLeavingDialog();\r\n this.hideFlightDetails();\r\n this.setLastHistoryStateView();\r\n }\r\n\r\n onLeavingDismiss() {\r\n window.history.pushState({ ...window.history.state, view: 'details' }, '', router.currentRoute.fullPath);\r\n this.tryToShowFlightDetails();\r\n }\r\n\r\n tryToShowFlightDetails(isGaAllow = true) {\r\n this.setLastHistoryStateView();\r\n if (this.flightBookingDetails) {\r\n if (this.model.state === 'error') {\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n } else {\r\n if (this.$route.query.utm_source !== 'mobile' && this.$route.query.utm_medium !== 'app') {\r\n (this.$refs).flightDetails?.show();\r\n }\r\n if (isGaAllow) {\r\n (this).$ga.sendEvent('flights.results', 'flight.details', 'flights.results.flight.details', this.gaParams);\r\n (this).$ga.sendPageview('/flights/search/results/details', 'Flights / Search / Results / Details', this.gaParams);\r\n }\r\n }\r\n } else {\r\n if (this.model.state === 'loading') {\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('label_please_wait_loading'),\r\n ok: i18next.t('button_ok')\r\n });\r\n }\r\n }\r\n }\r\n\r\n hideFlightDetails() {\r\n this.setLastHistoryStateView();\r\n (this.$refs).flightDetails.hide();\r\n (this).$ga.sendPageview('/flights/booking/start', 'Flights / Booking / Start', this.gaParams);\r\n }\r\n\r\n onFlightDismiss() {\r\n window.history.pushState({ ...window.history.state, view: 'passengers' }, '', router.currentRoute.fullPath);\r\n this.hideFlightDetails();\r\n switch(this.model.formStep) {\r\n case 'passengers':\r\n (this).$ga.sendPageview('/flights/booking/start', 'Flights / Booking / Start', this.gaParams);\r\n break;\r\n case 'services':\r\n (this).$ga.sendPageview('/flights/booking/step2', 'Flights / Booking / Step2', this.gaParams);\r\n break;\r\n case 'payment':\r\n (this).$ga.sendPageview('/flights/booking/step3', 'Flights / Booking / Step3', this.gaParams);\r\n break;\r\n }\r\n }\r\n\r\n onFlightBack() {\r\n window.history.go(-1);\r\n this.tryToShowLeavingDialog(false);\r\n }\r\n\r\n onFlightSubmit() {\r\n window.history.pushState({ ...window.history.state, view: 'passengers' }, '', router.currentRoute.fullPath);\r\n this.hideFlightDetails();\r\n }\r\n\r\n onFlightResults() {\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n }\r\n\r\n onFlightTerms() {\r\n if (this.reservation) {\r\n (this.$refs).flightTerms.show(this.searchId, this.reservation.selectedFlightId);\r\n\r\n (this).$ga.sendEvent('flights.results', 'flight.terms', 'flights.results.flight.terms', this.gaParams);\r\n }\r\n }\r\n\r\n onPassengersChange() {\r\n if (!this.gaAlreadySubmitted.includes('flights.booking.input.started')) {\r\n (this).$ga.sendEvent('flights.booking', 'input.started', 'flights.booking.input.started', this.gaParams);\r\n (this).$ga.sendPageview('/flights/booking/inputstart', 'Flights / Booking / Inputstart', this.gaParams);\r\n\r\n this.gaAlreadySubmitted.push('flights.booking.input.started');\r\n }\r\n }\r\n\r\n onSignIn() {\r\n if (this.$auth.authenticated) {\r\n this.$auth.getCurrentUserWithBonuses().then(\r\n (result: api.UserWithBonuses) => {\r\n this.currentUser = result;\r\n }\r\n );\r\n }\r\n }\r\n\r\n showOutOfStockDialog() {\r\n const dialogParams: any = {\r\n message: this.reservation.flights.length > 1\r\n ? i18next.t('label_flight_out_of_stock_fare')\r\n : i18next.t('label_flight_out_of_stock'),\r\n ok: i18next.t('button_ok')\r\n };\r\n\r\n let anyFlightToBook = false;\r\n\r\n for (let i = 0; i < this.reservation.flights.length; i++) {\r\n if (this.reservation.flights[i].bookingPossible) {\r\n anyFlightToBook = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!anyFlightToBook) {\r\n dialogParams.onOkCallback = () => {\r\n router.push(new flights.FlightNavigationService().getSearchResultsUrl(this.searchParams!));\r\n };\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.BookingOutOfStock,\r\n this.trackParams,\r\n {\r\n ErrorReason: 'CheckBooking'\r\n }\r\n );\r\n }\r\n\r\n (this.$root.$refs).messageDialog.show(dialogParams);\r\n }\r\n\r\n onModalProductAdd(from) {\r\n new api.RetailRocket().productSelected({\r\n flightKey: api.RetailRocketCL.flightKey,\r\n productId: this.selectedProduct.product.id,\r\n bookingSessionId: this.reservation.bookingSessionId ?? undefined\r\n });\r\n\r\n if (this.selectedProduct.product.additionalProcessing) {\r\n (this.$root).$refs.dialogCatchUp.show({\r\n text: 'Извините, услуга сейчас недоступна, но вы сможете купить ее позже ❤️',\r\n btnOkLabel: 'OK',\r\n persistent: true,\r\n btnOkColorClass: 'btn-alternate',\r\n btnOkHandler() {\r\n (this).$refs.dialog.hide();\r\n }\r\n });\r\n return;\r\n }\r\n\r\n this.selectedProduct.selected = true;\r\n this.onProductSelectionChange(this.selectedProduct, true, from);\r\n\r\n (this.$refs).modalProduct.hide();\r\n\r\n }\r\n\r\n getProductPackageCheckPromiseCreator(packageExternalId: string, relatedProducts: { externalId: string; criterion: 'equal' | 'startsWith' | 'popup' }[], product: flights.ProductModel, value: boolean) {\r\n const productPackageToCheck = this.reservation.products.find(p =>\r\n p.product.externalId == packageExternalId\r\n );\r\n\r\n const productIsOneOfRelated: boolean = !!relatedProducts.find((rp) => {\r\n return (rp.criterion == 'equal' && rp.externalId == product.product.externalId)\r\n || (rp.criterion == 'startsWith' && utils.String.startsWith(product.product.externalId, rp.externalId));\r\n });\r\n \r\n if (value && productPackageToCheck && productPackageToCheck.selected && productIsOneOfRelated) {\r\n this.alreadyInPackageModal.message = i18next.t('label_product_already_in_package', { i: productPackageToCheck.product.name });\r\n \r\n this.alreadyInPackageModal.acceptCallback = () => {\r\n productPackageToCheck.selected = false;\r\n (this.$refs).modalProductAlreadyInPackage.hide();\r\n window.setTimeout(() => {\r\n this.finalCheck(false, value, product);\r\n }, 300); // popup animation\r\n };\r\n \r\n this.alreadyInPackageModal.refuseCallback = () => {\r\n (this.$refs).modalProductAlreadyInPackage.hide();\r\n window.setTimeout(() => {\r\n this.finalCheck(true, value, product);\r\n }, 300); // popup animation\r\n };\r\n \r\n if (product.product.type == api.ProductType.package\r\n && product.product.displayType == api.ProductDisplayType.grouped\r\n && productPackageToCheck.product.externalId == 'MegoPackageAllInclusive') {\r\n (this.$refs).modalProductAlreadyInPackage.show();\r\n } else if (product.product.type == api.ProductType.package\r\n && productPackageToCheck.product.displayType == api.ProductDisplayType.grouped) {\r\n (this.$refs).modalProductAlreadyInPackage.show();\r\n } else if (product.product.type == api.ProductType.service\r\n && (productPackageToCheck.product.displayType == api.ProductDisplayType.grouped\r\n || productPackageToCheck.product.type == api.ProductType.package)) {\r\n (this.$refs).modalProductAlreadyInPackage.show();\r\n }\r\n \r\n } else {\r\n this.finalCheck(false, value, product);\r\n }\r\n }\r\n\r\n finalCheck(needRollbackValue: boolean, value: boolean, product: flights.ProductModel) {\r\n if (!needRollbackValue) {\r\n value ? product.choiceType = api.ProductChoiceType.manualAccepted \r\n : product.choiceType = api.ProductChoiceType.manualDenied;\r\n } else {\r\n product.selected = !value;\r\n }\r\n\r\n return product;\r\n }\r\n\r\n onProductSelectionChange(product: flights.ProductModel, value: boolean, from: string) {\r\n // Packages selection change check is handled by package component.\r\n // So only insurances and serviecs go on here.\r\n if (from !== 'local-ga') {\r\n (this).$ga.sendEvent('product',\r\n `${from == 'modal' ? 'detail' : 'btn'}.${value ? 'ok' : 'cancel'}`,\r\n `product.step${product.product.stepNumber}.kit${product.product!.kitId || ''}.id${product.product.id}`,\r\n this.gaParams\r\n );\r\n }\r\n if (product.product.type == api.ProductType.insurance\r\n || product.product.type == api.ProductType.service\r\n || product.product.type == api.ProductType.package\r\n || product.product.displayType == api.ProductDisplayType.grouped) {\r\n \r\n for (const productPackageExternlId in this.reservation.packageRelatedProducts) {\r\n\r\n this.getProductPackageCheckPromiseCreator(\r\n productPackageExternlId,\r\n this.reservation.packageRelatedProducts[productPackageExternlId],\r\n product,\r\n value\r\n );\r\n }\r\n }\r\n }\r\n \r\n onProductPackageSelectionChange(product, value, from){\r\n this.onProductSelectionChange(product, value, from);\r\n }\r\n\r\n onPaymentWithService() {\r\n this.disabledServiceButtons = true;\r\n const reservationService = new api.ReservationService();\r\n\r\n (this).$ga.sendEvent(\r\n 'payment',\r\n 'error',\r\n 'payment.error.limit.card.ok.product',\r\n this.gaParams\r\n );\r\n\r\n reservationService\r\n .getReservationAndBillStatus(this.reservationInfo!.reservationPublicId, this.paymentInfo!.billPublicId, false)\r\n .then(\r\n (result: api.GetReservationStatusResult) => {\r\n location.href = '/order/payment/' + result.reservationInfo!.reservationPublicId;\r\n },\r\n () => {\r\n location.href = '/order/payment/' + this.reservationInfo!.reservationPublicId;\r\n }\r\n );\r\n }\r\n\r\n onPaymentDeleteService() {\r\n this.disabledServiceButtons = true;\r\n const reservationService = new api.ReservationService();\r\n\r\n (this).$ga.sendEvent(\r\n 'payment',\r\n 'error',\r\n 'payment.error.limit.card.delete.product',\r\n this.gaParams\r\n );\r\n\r\n reservationService\r\n .getReservationAndBillStatus(this.reservationInfo!.reservationPublicId, this.paymentInfo!.billPublicId, true)\r\n .then(\r\n (result: api.GetReservationStatusResult) => {\r\n location.href = '/order/payment/' + result.reservationInfo!.reservationPublicId;\r\n },\r\n () => {\r\n location.href = '/order/payment/' + this.reservationInfo!.reservationPublicId;\r\n }\r\n );\r\n }\r\n\r\n onModalProductRemove(from) {\r\n this.selectedProduct.selected = false;\r\n this.onProductSelectionChange(this.selectedProduct, false, from);\r\n // (this.$refs).modalProduct.hide();\r\n }\r\n\r\n onModalHide() {\r\n (this).$ga.sendEvent('flights.booking',\r\n `btn.product.confirm.detail.back.step${this.selectedProduct.product.stepNumber}.kit${this.selectedProduct.product.kitId || ''}.id${this.selectedProduct.product.id}`,\r\n `flights.booking.btn.product.confirm.detail.back.step${this.selectedProduct.product.stepNumber}.kit${this.selectedProduct.product.kitId || ''}.id${this.selectedProduct.product.id}`,\r\n this.gaParams\r\n );\r\n\r\n (this).$refs.modalProduct.hide();\r\n }\r\n\r\n onProductDetails(product: flights.ProductModel) {\r\n this.selectedProductId = product.product.id;\r\n (this.$refs).modalProduct.show();\r\n }\r\n\r\n brandsAccum: any[] = []\r\n oldIndex: number = 0\r\n brandAccum(index, FlyId){\r\n if(this.brandsAccum.length === 0){\r\n this.reservation.flights.forEach((item, index) =>{\r\n this.brandsAccum.push([]);\r\n });\r\n }\r\n \r\n this.reservation.products.forEach(item => {\r\n if(item.selected == true && index != this.oldIndex) {\r\n this.brandsAccum[this.oldIndex].push(item.product.id);\r\n item.selected = false;\r\n }\r\n });\r\n \r\n if(this.brandsAccum[index].length > 0 && index !== this.oldIndex){\r\n this.brandsAccum[index].forEach(element => {\r\n this.reservation.products.find(item => item.product.id == element && item.product.flightId == FlyId || item.product.id == element && item.product.flightId == null)!.selected = true;\r\n });\r\n }\r\n this.oldIndex = index;\r\n }\r\n\r\n onUpgradeBaggageRefuseClick() {\r\n const cheapestBaggageUpgradeMethod = this.reservation.getCheapestBaggageUpgradeMethod();\r\n\r\n if (cheapestBaggageUpgradeMethod && cheapestBaggageUpgradeMethod.method == 'brand') {\r\n this.reservation.brandChoiceType = api.FlightBrandChoiceType.confirmationDefault;\r\n } else if (cheapestBaggageUpgradeMethod && cheapestBaggageUpgradeMethod.method == 'customBaggage') {\r\n this.reservation.baggageChoiceType = api.BaggageChoiceType.confirmationDenied;\r\n }\r\n (this.$refs).modalBaggageUpgrade.hide();\r\n this.onBookingStateSubmit();\r\n \r\n (this).$ga.sendEvent('flights.booking',\r\n `id.btnx.product.confirm.back.kit${this.modalUpgradeBaggageContent?.kitId}.id${this.modalUpgradeBaggageContent?.productId}`,\r\n `flights.booking.id.btnx.product.confirm.back.kit${this.modalUpgradeBaggageContent?.kitId}.id${this.modalUpgradeBaggageContent?.productId}`,\r\n this.gaParams\r\n );\r\n }\r\n\r\n onUpgradeBaggageBuyClick(btnId?: number | string) {\r\n const cheapestBaggageUpgradeMethod = this.reservation.getCheapestBaggageUpgradeMethod();\r\n\r\n if (cheapestBaggageUpgradeMethod && cheapestBaggageUpgradeMethod.method == 'brand') {\r\n this.reservation.brandChoiceType = api.FlightBrandChoiceType.confirmationUpgrade;\r\n } else if (cheapestBaggageUpgradeMethod && cheapestBaggageUpgradeMethod.method == 'customBaggage') {\r\n this.reservation.baggageChoiceType = api.BaggageChoiceType.confirmationAccepted;\r\n }\r\n (this.$refs).modalBaggageUpgrade.hide();\r\n this.reservation.upgradeBaggage();\r\n this.onBookingStateSubmit();\r\n // (this).$ga.sendEvent('flights.booking', 'btn.baggage.confirm.ok', 'flights.booking.btn.baggage.confirm.ok', this.gaParams);\r\n (this).$ga.sendEvent('flights.booking',\r\n `id.btn${btnId}.product.confirm.back.kit${this.modalUpgradeBaggageContent?.kitId}.id${this.modalUpgradeBaggageContent?.productId}`,\r\n `flights.booking.id.btn${btnId}.product.confirm.back.kit${this.modalUpgradeBaggageContent?.kitId}.id${this.modalUpgradeBaggageContent?.productId}`,\r\n this.gaParams\r\n );\r\n }\r\n\r\n moveOnStep(step: FormStep) {\r\n let transition: 'slide-left' | 'slide-right' = 'slide-right';\r\n\r\n switch (this.model.formStep) {\r\n case 'passengers':\r\n if (step == 'services' || step == 'payment') {\r\n transition = 'slide-right';\r\n }\r\n\r\n break;\r\n case 'seats':\r\n if (step == 'passengers') {\r\n transition = 'slide-left';\r\n } else\r\n if (step == 'services') {\r\n transition = 'slide-right';\r\n }\r\n\r\n break;\r\n case 'services':\r\n if (step == 'passengers' || step == 'seats') {\r\n transition = 'slide-left';\r\n } else\r\n if (step == 'payment') {\r\n transition = 'slide-right';\r\n }\r\n\r\n break;\r\n case 'payment':\r\n if (step == 'passengers' || step == 'services') {\r\n transition = 'slide-left';\r\n }\r\n\r\n break;\r\n }\r\n\r\n window.scrollTo(0, 0);\r\n this.formStepTransition = transition;\r\n this.model.formStep = step;\r\n this.setLastHistoryStateView();\r\n }\r\n\r\n onPassengersStepClick() {\r\n if (this.model.formStep == 'passengers' || !this.canGoBackOrForwardToPassengers) {\r\n return;\r\n }\r\n window.history.pushState({ ...window.history.state, view: 'passengers' }, '', router.currentRoute.fullPath);\r\n this.moveOnStep('passengers');\r\n }\r\n\r\n onSeatsStepClick() {\r\n if (this.model.formStep == 'seats' || !this.canGoBackOrForwardToSeats) {\r\n return;\r\n }\r\n window.history.pushState({ ...window.history.state, view: 'seats' }, '', router.currentRoute.fullPath);\r\n this.moveOnStep('seats');\r\n }\r\n\r\n onServicesStepClick() {\r\n if (this.model.formStep == 'services' || !this.canGoBackOrForwardToServices) {\r\n return;\r\n }\r\n window.history.pushState({ ...window.history.state, view: 'services' }, '', router.currentRoute.fullPath);\r\n this.moveOnStep('services');\r\n }\r\n\r\n onPaymentStepClick() {\r\n if (this.model.formStep == 'payment' || !this.canGoBackOrForwardToPayment) {\r\n return;\r\n }\r\n window.history.pushState({ ...window.history.state, view: 'payment' }, '', router.currentRoute.fullPath);\r\n this.moveOnStep('payment');\r\n }\r\n\r\n tryToRestoreReservation() {\r\n const reservationService = new api.ReservationService();\r\n\r\n this.model.state = 'loading';\r\n reservationService\r\n .getReservationByBookingSession(this.flightBookingDetails!.bookingSessionId)\r\n .then(\r\n (result) => {\r\n if (result && uuidValidate(result)) {\r\n this.$router.push(`/order/${result}`);\r\n }\r\n },\r\n (error) => {\r\n if (error.response) {\r\n console.log('api/GetReservationByBookingSession XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('api/GetReservationByBookingSession XHR error', error.message);\r\n }\r\n\r\n if (!error.response && error.message == 'Network Error') {\r\n // Network error.\r\n this.model.state = 'network-error';\r\n\r\n return;\r\n }\r\n\r\n this.onBooking();\r\n }\r\n );\r\n }\r\n\r\n getCloseIconVisible() {\r\n let result = false;\r\n\r\n if (this.brandContent?.products) {\r\n for (const product of this.brandContent.products) {\r\n const p = this.reservation.productPopups.filter(popup => popup.displayType === 'Grouped').find(popup => popup.productId === product.productId);\r\n \r\n if (p?.isCloseIconVisible) {\r\n result = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n onServiceBrandChange(product: api.Product, prevProduct: api.Product) {\r\n const productModel = this.reservation.products.find(item => item.product.id === product.productId);\r\n\r\n if (productModel) {\r\n new api.RetailRocket().productSelected({\r\n flightKey: api.RetailRocketCL.flightKey,\r\n productId: productModel.product.id\r\n }).catch(err => {\r\n console.log(err);\r\n });\r\n\r\n productModel.choiceType = api.ProductChoiceType.manualAccepted;\r\n }\r\n }\r\n\r\n onServiceBrandChangeInPopup(product: api.Product, prevProduct: api.Product) {\r\n const productModel = this.reservation.products.find(item => item.product.id === product.productId);\r\n\r\n if (productModel) {\r\n new api.RetailRocket().productSelected({\r\n flightKey: api.RetailRocketCL.flightKey,\r\n productId: productModel.product.id\r\n }).catch(err => {\r\n console.log(err);\r\n });\r\n\r\n productModel.choiceType = api.ProductChoiceType.confirmationAccepted;\r\n }\r\n }\r\n\r\n onServiceBrandConfirmInPopup() {\r\n this.onConfirmProduct(true);\r\n }\r\n\r\n onSbpModalClose() {\r\n this.model.state = 'form';\r\n ReservationService.needToStopSbpPolling = true;\r\n }\r\n\r\n hasFlightService(passengers: flights.PassengerModel[]) {\r\n let has = false;\r\n\r\n for (const passenger of passengers) {\r\n for (const option of passenger.baggageOptions) {\r\n if (option !== this.NO_BAGGAGE_GUID) {\r\n has = true;\r\n break;\r\n }\r\n }\r\n\r\n if (Object.keys(passenger.selectedFlightSeats).length > 0) {\r\n has = true;\r\n }\r\n\r\n if (has) {\r\n break;\r\n }\r\n }\r\n\r\n return has;\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport * as flights from 'core/flights';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class FlightsComponent extends Vue {\r\n historyItems: flights.SearchHistoryItem[] = [];\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_flight_tickets');\r\n\r\n this.historyItems = new flights.FlightSearchService().getHistoryItems();\r\n }\r\n\r\n getClassName(classValue: string) {\r\n return flights.BookingClass.classLabel(classValue);\r\n }\r\n\r\n onHistoryItemClick(item: flights.SearchHistoryItem) {\r\n (this).$ga.sendEvent('flights.form', 'history.select', 'flights.form.history.select');\r\n\r\n router.push('/flights' + item.url);\r\n }\r\n\r\n onHistoryClean() {\r\n new flights.FlightSearchService().deleteAllHistoryItems();\r\n this.historyItems = [];\r\n }\r\n\r\n onViewSearchHistoryClick() {\r\n (this).$ga.sendEvent('flights.form', 'history.view', 'flights.form.history.view');\r\n }\r\n\r\n onSupportClick() {\r\n (this).$ga.sendEvent('support.new', 'click', 'support.new.click');\r\n (this).$ga.reachGoal('support.new.click');\r\n (this).$ga.reachGoal('support.new.click.booking');\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport * as api from 'core/api';\r\nimport * as mutationTypes from 'src/store/mutation-types';\r\nimport * as i18next from 'i18next';\r\nimport { G2S } from 'core/g2s';\r\nimport router from 'src/router';\r\nimport moment from 'moment';\r\nimport * as flights from 'core/flights';\r\nimport * as filters from 'core/flights/filters';\r\nimport * as utils from 'core/utils';\r\nimport { copyFile } from 'fs';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\ninterface FlightData {\r\n class: string;\r\n departure: string;\r\n from: string;\r\n passengers: string;\r\n return: string | null;\r\n to: string;\r\n}\r\n\r\nexport interface FlightsSearchResultsComponentModel {\r\n state: string;\r\n error?: string;\r\n}\r\n\r\n@WithRender\r\n@Component\r\nexport default class FlightsSearchResultsComponent extends Vue {\r\n @Prop()\r\n searchFrom: string;\r\n\r\n @Prop()\r\n searchFrom2: string;\r\n\r\n @Prop()\r\n searchTo: string;\r\n\r\n @Prop()\r\n searchTo2: string;\r\n\r\n @Prop()\r\n searchDate: string;\r\n\r\n @Prop()\r\n searchDate2: string;\r\n\r\n @Prop()\r\n searchPassengers: string;\r\n\r\n @Prop()\r\n searchClass: string;\r\n\r\n @Prop()\r\n searchFilters: string;\r\n\r\n filters: flights.FlightFilterService | null = null;\r\n filteringInProgress: boolean = false;\r\n\r\n filterAirportsValue: {\r\n legs: {\r\n departure: number[];\r\n arrival: number[];\r\n }[];\r\n } | null = null;\r\n filterAirlines: string[] = [];\r\n filterStops: string = '';\r\n filterStopDuration: {\r\n range: { min: number; max: number };\r\n qHack: { min: number; max: number }; // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n } = {\r\n range: { min: 0, max: 0 },\r\n qHack: { min: 0, max: 0 } // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n };\r\n filterFlightDuration: {\r\n range: { min: number; max: number };\r\n qHack: { min: number; max: number }; // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n }[] = [];\r\n filterDepartureArrival: {\r\n departure: {\r\n range: { min: number; max: number };\r\n qHack: { min: number; max: number }; // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n };\r\n arrival: {\r\n range: { min: number; max: number };\r\n qHack: { min: number; max: number }; // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n };\r\n }[] = [];\r\n filterPrice: {\r\n range: { min: number; max: number };\r\n qHack: { min: number; max: number }; // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n } = {\r\n range: { min: 0, max: 0 },\r\n qHack: { min: 0, max: 0 } // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n };\r\n\r\n gaParams: utils.GoogleAnalyticsParams = new utils.GoogleAnalyticsParams();\r\n\r\n trackParams: utils.TrackParams = new utils.TrackParams();\r\n\r\n model: FlightsSearchResultsComponentModel = {\r\n state: 'loading'\r\n }\r\n\r\n flightSearch = new flights.FlightSearchService();\r\n flightData: FlightData | null = null;\r\n\r\n promoDetails = {\r\n title: '',\r\n description: '',\r\n imgUrl: ''\r\n }\r\n\r\n resultsPageSize: number = 20;\r\n resultsVisible: number = this.resultsPageSize;\r\n\r\n searchParams: flights.FlightSearchParams | null = {\r\n from: '',\r\n to: '',\r\n departure: null,\r\n return: null,\r\n roundtrip: false,\r\n class: flights.BookingClass.Economic,\r\n passengers: {\r\n adults: 0,\r\n children: 0,\r\n infants: 0\r\n }\r\n };\r\n\r\n flightsToFilter: flights.FlightFilterModel[] = [];\r\n flightsToView?: { [uniqueId: string]: flights.FlightModel } = undefined; // Force non-reactive\r\n flightsVisibleCount: number = 0;\r\n flightsVisibleParentCount: number = 0;\r\n\r\n searchId: string | null = null;\r\n\r\n selectedFlightUniqueId: string = '';\r\n selectedParentFlightUniqueId: string = '';\r\n\r\n lastHistoryStateView: string = ''; \r\n\r\n gaAlreadySubmitted: string[] = [];\r\n \r\n fakingLoading: boolean = false;\r\n \r\n cheapestFlight: flights.FlightModel | {} = {};\r\n fasterFlight: flights.FlightModel | {} = {};\r\n bestFlight: flights.FlightModel | {} = {};\r\n urlQuery: any | null;\r\n\r\n subscriptionModal = {\r\n email: '',\r\n onlyFreeBaggage: false,\r\n onlyDirectFlight: false,\r\n view: 'form'\r\n }\r\n\r\n showSubscriptionButton = false;\r\n\r\n get departure() {\r\n return this.flightsToView![Object.keys(this.flightsToView!)[0]].legs[0].departureDestination;\r\n }\r\n\r\n get arrival() {\r\n return this.flightsToView![Object.keys(this.flightsToView!)[0]].legs[0].arrivalDestination;\r\n }\r\n\r\n get filteredSearchResults(): flights.FlightFilterModel[] {\r\n if (this.flightsToFilter && this.filters) {\r\n this.filteringInProgress = true;\r\n\r\n const r = this.filters.filter(this.flightsToFilter, this.flightsToView!, this.filters, this.searchParams!.roundtrip && this.flightsToFilter.length > 5);\r\n\r\n this.flightsVisibleCount = r.flightsVisibleCount;\r\n this.flightsVisibleParentCount = r.flightsVisibleParentCount;\r\n\r\n return this.flightsToFilter.filter(f => {\r\n return f.visible && !f.parentId;\r\n });\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n get pagedSearchResults(): flights.FlightFilterModel[] {\r\n this.$nextTick(() => {\r\n this.filteringInProgress = false;\r\n });\r\n\r\n return this.filteredSearchResults.slice(0, this.resultsVisible);\r\n }\r\n\r\n get selectedFlightGroupFlights(): flights.FlightFilterModel[] {\r\n return this.flightsToFilter.filter((f) => {\r\n return f.uniqueId === this.selectedParentFlightUniqueId || f.parentId === this.selectedParentFlightUniqueId;\r\n });\r\n }\r\n\r\n get filterAirlineOptions() {\r\n const result: {\r\n label: string;\r\n value: string;\r\n }[] = [];\r\n\r\n this.filters!.airlines.items.forEach(item => {\r\n result.push({\r\n label: item.airline.name,\r\n value: item.airline.uniqueId\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n get filterSortByOptions() {\r\n return [\r\n {\r\n label: i18next.t('label_sort_by_price'),\r\n value: 'price'\r\n },\r\n {\r\n label: i18next.t('label_sort_by_flight_duration'),\r\n value: 'duration'\r\n },\r\n {\r\n label: i18next.t('label_sort_by_departure_date'),\r\n value: 'departureDate'\r\n },\r\n {\r\n label: i18next.t('label_sort_by_arrival_date'),\r\n value: 'arrivalDate'\r\n }\r\n ];\r\n }\r\n\r\n get filterStopsOptions() {\r\n return [\r\n {\r\n label: i18next.t('label_flight_stops_filter_all'),\r\n value: ''\r\n },\r\n {\r\n label: i18next.t('label_flight_stops_filter_direct'),\r\n value: 'direct'\r\n },\r\n {\r\n label: i18next.t('label_flight_stops_filter_1stop'),\r\n value: '1stop'\r\n },\r\n {\r\n label: i18next.t('label_flight_stops_filter_2stops'),\r\n value: '2stops'\r\n }\r\n ];\r\n }\r\n\r\n get selectedFlight(): flights.FlightModel {\r\n return this.flightsToView![this.selectedFlightUniqueId];\r\n }\r\n\r\n get selectedParentFlight(): flights.FlightModel {\r\n return this.flightsToView![this.selectedParentFlightUniqueId];\r\n }\r\n\r\n get totalPassengers() {\r\n return this.searchParams!.passengers.adults\r\n + this.searchParams!.passengers.children\r\n + this.searchParams!.passengers.infants;\r\n }\r\n\r\n get className() {\r\n return flights.BookingClass.classLabel(this.searchParams!.class);\r\n }\r\n\r\n get isWebview(): boolean {\r\n return this.urlQuery?.utm_source == 'mobile' && this.urlQuery?.utm_medium == 'app';\r\n }\r\n\r\n mounted() {\r\n this.urlQuery = utils.Http.getUrlParameters();\r\n window.document.title = i18next.t('title_flight_tickets');\r\n\r\n window.history.replaceState({ ...window.history.state, view: 'list' }, '', router.currentRoute.fullPath);\r\n this.setLastHistoryStateView();\r\n window.addEventListener('popstate', this.onPopState);\r\n\r\n this.loadModel();\r\n window.addEventListener('scroll', this.showMoreResults);\r\n\r\n const mo = utils.Cookies.getMarkerOwner();\r\n\r\n if (G2S.config.theme !== 'aviasales' && ['219038', ''].includes(mo)) {\r\n this.showSubscriptionButton = true;\r\n }\r\n }\r\n\r\n showMoreResults(){\r\n const element = document.getElementById('loading-trigger');\r\n if(this.resultsVisible < this.flightsVisibleParentCount){\r\n if (element && (element).getBoundingClientRect().bottom < window.innerHeight) {\r\n this.fakingLoading = true;\r\n this.resultsVisible += this.resultsPageSize;\r\n this.fakingLoading = false;\r\n }\r\n }\r\n }\r\n\r\n beforeDestroy() {\r\n window.removeEventListener('popstate', this.onPopState);\r\n }\r\n\r\n setLastHistoryStateView() {\r\n this.lastHistoryStateView = window.history.state && window.history.state.view ? window.history.state.view : '';\r\n }\r\n\r\n onPopState(event) {\r\n if (event.state && event.state.view == 'flight' && this.lastHistoryStateView == 'list') {\r\n if (this.selectedParentFlight) {\r\n this.showFlightGroup(this.selectedParentFlight);\r\n }\r\n this.showFlightDetails(this.selectedFlight);\r\n }\r\n else if (event.state && event.state.view == 'list' && this.lastHistoryStateView == 'flight') {\r\n this.hideFlightDetails();\r\n this.hideFlightGroup();\r\n }\r\n else if (event.state && event.state.view == 'flightGroup' && this.lastHistoryStateView == 'list') {\r\n this.showFlightGroup(this.selectedFlight);\r\n }\r\n else if (event.state && event.state.view == 'flight' && this.lastHistoryStateView == 'flightGroup') {\r\n this.showFlightDetails(this.selectedFlight);\r\n }\r\n else if (event.state && event.state.view == 'flightGroup' && this.lastHistoryStateView == 'flight') {\r\n this.hideFlightDetails();\r\n }\r\n else if (event.state && event.state.view == 'list' && this.lastHistoryStateView == 'flightGroup') {\r\n this.hideFlightGroup();\r\n }\r\n }\r\n\r\n \r\n @Watch('filteredSearchResults')\r\n setFirstFlights() {\r\n if(Object.keys(this.cheapestFlight).length === 0 &&\r\n Object.keys(this.bestFlight).length === 0 &&\r\n Object.keys(this.fasterFlight).length === 0) {\r\n this.cheapestFlight = this.getCheapestFlight(this.filteredSearchResults);\r\n this.fasterFlight = this.getFasterFlight(this.filteredSearchResults);\r\n this.bestFlight = this.getBestFlight(this.filteredSearchResults);\r\n }\r\n }\r\n \r\n @Watch('filterStops')\r\n onFilterStopsChanged() {\r\n this.filters!.stopCount.clear();\r\n\r\n switch (this.filterStops) {\r\n case 'direct':\r\n this.filters!.stopCount.none = true;\r\n break;\r\n case '1stop':\r\n this.filters!.stopCount.one = true;\r\n break;\r\n case '2stops':\r\n this.filters!.stopCount.two = true;\r\n break;\r\n }\r\n }\r\n\r\n onFilterStopDurationInpit(value: { min: number; max: number }) {\r\n this.filterStopDuration.qHack = value; // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n }\r\n\r\n onFilterStopDurationChange(value: { min: number; max: number }) {\r\n this.filterStopDuration.range = value;\r\n this.filters!.stopDuration.rangeMin = value.min;\r\n this.filters!.stopDuration.rangeMax = value.max;\r\n\r\n (this).$ga.sendEvent('flights.results', 'filters.apply.duration.transfer', 'flights.results.filters.apply.duration.transfer', this.gaParams);\r\n }\r\n\r\n onFilterFlightDurationInput(value: { min: number; max: number }, index: number) {\r\n this.filterFlightDuration[index].qHack = value; // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n }\r\n\r\n onFilterFlightDurationChange(value: { min: number; max: number }, index: number) {\r\n this.filterFlightDuration[index].range = value;\r\n this.filters!.flightDuration.items[index].rangeMin = value.min;\r\n this.filters!.flightDuration.items[index].rangeMax = value.max;\r\n\r\n (this).$ga.sendEvent('flights.results', 'filters.apply.time.flight', 'flights.results.filters.apply.time.flight', this.gaParams);\r\n }\r\n\r\n onFilterDepartureArrivalInput(value: { min: number; max: number }, index: number, type: 'arrival' | 'departure') {\r\n this.filterDepartureArrival[index][type].qHack = value; // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n }\r\n\r\n onFilterDepartureArrivalChange(value: { min: number; max: number }, index: number, type: 'arrival' | 'departure') {\r\n this.filterDepartureArrival[index][type].range = value;\r\n this.filters!.departureArrival.items[index][type].rangeMin = value.min;\r\n this.filters!.departureArrival.items[index][type].rangeMax = value.max;\r\n\r\n (this).$ga.sendEvent('flights.results', 'filters.apply.time.departure.arrival', 'flights.results.filters.apply.time.departure.arrival', this.gaParams);\r\n }\r\n\r\n onFilterAirportsInput(value: number[], legIndex, destinationKind: string) {\r\n this.filters!.airports.legs[legIndex][destinationKind].items.forEach((item: filters.AirportsFilterItem) => {\r\n item.checked = value.indexOf(item.destination.uniqueId) >= 0;\r\n });\r\n\r\n (this).$ga.sendEvent('flights.results', 'filters.apply.airport', 'flights.results.filters.apply.airport', this.gaParams);\r\n }\r\n\r\n onFilterAirlinesInput(value: string) {\r\n if(value.length) {\r\n (this).$ga.sendEvent('flights.results', 'filters.apply.airline', 'flights.results.filters.apply.airline', this.gaParams);\r\n }\r\n }\r\n\r\n @Watch('filterAirlines')\r\n onFilterAirlinesChanged() {\r\n this.filters!.airlines.clear();\r\n\r\n this.filters!.airlines.items.forEach(item => {\r\n item.checked = this.filterAirlines.indexOf(item.airline.uniqueId) >= 0;\r\n });\r\n }\r\n\r\n onFilterPriceInput(value: { min: number; max: number }) {\r\n this.filterPrice.qHack = value; // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n }\r\n\r\n onFilterPriceChange(value: { min: number; max: number }) {\r\n this.filterPrice.range = value;\r\n this.filters!.price.rangeMin = value.min;\r\n this.filters!.price.rangeMax = value.max;\r\n\r\n (this).$ga.sendEvent('flights.results', 'filters.apply.price', 'flights.results.filters.apply.price', this.gaParams);\r\n }\r\n\r\n @Watch('$route')\r\n onRouteChanged() {\r\n this.loadModel();\r\n }\r\n\r\n flightDurationLabel(index: number, type: 'min' | 'max'): string {\r\n if (this.filterFlightDuration && this.filterFlightDuration.length > 0) {\r\n return this.durationFormat(this.filterFlightDuration[index].qHack[type]);\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n departureArrivalTimeLabel(unixTime) {\r\n return moment.unix(unixTime).utc().format(i18next.t('format_time'));\r\n }\r\n\r\n departureArrivalDayLabel(unixTime) {\r\n return moment.unix(unixTime).utc().format(i18next.t('format_date_md_short'));\r\n }\r\n\r\n getMoreLabel(): string {\r\n const b = i18next.t('numerous_flights', { count: this.resultsPageSize });\r\n return i18next.t('label_show_more_withvalue', { i: b });\r\n }\r\n\r\n getSegmentLabel(leg: flights.LegModel, segment: flights.SegmentModel, segmentIndex: number): string {\r\n let result = '';\r\n\r\n if (segment.arrivalDestination.iataCode === leg.segments[segmentIndex + 1].departureDestination.iataCode) {\r\n result += segment.arrivalDestination.iataCode;\r\n } else {\r\n result += segment.arrivalDestination.city.iataCode;\r\n }\r\n\r\n if (leg.segments.length > 1 && segmentIndex < (leg.segments.length - 2)) {\r\n result += ', ';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getFilterAirportsOptions(legIndex: number, destinationKind: string) {\r\n const filterItems = this.filters!.airports.legs[legIndex][destinationKind].items;\r\n\r\n if (filterItems && filterItems.length) {\r\n return filterItems.map((item: filters.AirportsFilterItem) => {\r\n return {\r\n label: item.destination.localizedName,\r\n value: item.destination.uniqueId\r\n };\r\n });\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n loadModel() {\r\n if (this.searchFrom2 && this.searchTo2 && this.searchDate2) {\r\n this.searchParams = new flights.FlightNavigationService().getRoundtripParams(\r\n this.searchFrom, this.searchTo, this.searchDate, this.searchFrom2, this.searchTo2, this.searchDate2, this.searchPassengers, this.searchClass\r\n )!;\r\n }\r\n else {\r\n this.searchParams = new flights.FlightNavigationService().getOnewayParams(this.searchFrom, this.searchTo, this.searchDate, this.searchPassengers, this.searchClass);\r\n }\r\n\r\n // Fighting Yandex bot\r\n if (!this.searchParams) {\r\n router.push('/');\r\n return;\r\n }\r\n\r\n // Init GA params\r\n this.gaParams = new utils.GoogleAnalyticsParams();\r\n (this).$ga.addSearchParams(this.gaParams, this.searchParams);\r\n\r\n (this).$ga.sendPageview('/flights/search/start', 'Flights / Search / Start', this.gaParams);\r\n\r\n // Tracking\r\n utils.TrackingService.updateParamsFromSearch(this.trackParams, this.searchParams);\r\n utils.TrackingService.track(\r\n utils.TrackEvent.FlightSearchStart,\r\n this.trackParams\r\n );\r\n\r\n document.getElementById('pixels')!.innerHTML = '';\r\n utils.PixelsService.setPixelForFlightSearch(document.getElementById('pixels')!, this.searchParams);\r\n\r\n this.model.state = 'loading';\r\n\r\n // Promo modal\r\n this.showPromoModal();\r\n\r\n // Save search params to state to display them on search form\r\n this.$store.commit(mutationTypes.SEARCH_FLIGHTS, this.searchParams);\r\n\r\n this.flightSearch.addHistoryItem(this.searchParams);\r\n\r\n this.flightSearch.search(this.searchParams).then(\r\n (result: flights.FlightSearchResult) => {\r\n new api.RetailRocket().searchCompleted({\r\n searchId: result.searchId,\r\n searchPhrase: router.currentRoute.fullPath.replace('/flights/', ''),\r\n mailTrackingId: this.$route.query.MailTrackingId\r\n });\r\n\r\n this.gaParams.metric1 = result.duration;\r\n\r\n if (result && result.flights && result.flights.length > 0) {\r\n this.searchId = result.searchId;\r\n this.flightsToFilter = result.flightsToFilter;\r\n this.filters = new flights.FlightFilterService(result.flights, this.searchFilters);\r\n this.filterStopDuration = {\r\n qHack: { // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n min: this.filters.stopDuration.rangeMin,\r\n max: this.filters.stopDuration.rangeMax\r\n },\r\n range: {\r\n min: this.filters.stopDuration.rangeMin,\r\n max: this.filters.stopDuration.rangeMax\r\n }\r\n };\r\n this.filters.flightDuration.items.forEach((item) => {\r\n this.filterFlightDuration.push({\r\n qHack: { // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n min: item.rangeMin,\r\n max: item.rangeMax\r\n },\r\n range: {\r\n min: item.rangeMin,\r\n max: item.rangeMax\r\n }\r\n });\r\n });\r\n this.filters.departureArrival.items.forEach((item) => {\r\n this.filterDepartureArrival.push({\r\n departure: {\r\n qHack: { // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n min: item.departure.rangeMin,\r\n max: item.departure.rangeMax\r\n },\r\n range: {\r\n min: item.departure.rangeMin,\r\n max: item.departure.rangeMax\r\n }\r\n },\r\n arrival: {\r\n qHack: { // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n min: item.arrival.rangeMin,\r\n max: item.arrival.rangeMax\r\n },\r\n range: {\r\n min: item.arrival.rangeMin,\r\n max: item.arrival.rangeMax\r\n }\r\n }\r\n });\r\n });\r\n this.filterAirportsValue = {\r\n legs: []\r\n };\r\n this.filters.airports.legs.forEach(() => {\r\n this.filterAirportsValue!.legs.push({\r\n departure: [],\r\n arrival: []\r\n });\r\n });\r\n this.filterPrice = {\r\n qHack: { // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n min: this.filters.price.rangeMin,\r\n max: this.filters.price.rangeMax\r\n },\r\n range: {\r\n min: this.filters.price.rangeMin,\r\n max: this.filters.price.rangeMax\r\n }\r\n };\r\n this.flightsToView = {};\r\n\r\n result.flights.forEach(f => {\r\n this.flightsToView![f.uniqueId] = f;\r\n });\r\n\r\n this.flightsVisibleCount = this.flightsToFilter.length;\r\n this.flightsVisibleParentCount = this.flightsVisibleCount;\r\n\r\n if (this.filters.airlines.touched) {\r\n this.filters.airlines.items.forEach(item => {\r\n if (item.checked) {\r\n this.filterAirlines.push(item.airline.uniqueId);\r\n }\r\n });\r\n }\r\n\r\n this.model.state = 'results';\r\n\r\n this.gaParams.metric2 = result.flights.length;\r\n\r\n (this).$ga.sendPageview('/flights/search/results', 'Flights / Search / Results', this.gaParams);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.FlightSearchResults,\r\n this.trackParams,\r\n {\r\n FlightCount: result.flights.length\r\n }\r\n );\r\n } else {\r\n this.model.state = 'empty';\r\n\r\n // (this).$ga.sendPageview('/flights/search/results', 'Flights / Search / Results', this.gaParams);\r\n\r\n (this).$ga.sendEvent('flights.results', 'msg.noresults', 'flights.results.msg.noresults', this.gaParams);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.FlightSearchEmpty,\r\n this.trackParams\r\n );\r\n }\r\n },\r\n (error) => {\r\n this.model.error = i18next.t('error_server_tryagain');\r\n\r\n if (error.response) {\r\n if (error.response.status === 400) {\r\n this.model.error = i18next.t('error_search_wrong_params');\r\n }\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n\r\n this.model.state = 'error';\r\n\r\n (this).$ga.sendEvent('flights.results', 'msg.error', 'flights.results.msg.error', this.gaParams);\r\n\r\n utils.TrackingService.track(\r\n utils.TrackEvent.FlightSearchError,\r\n this.trackParams\r\n );\r\n }\r\n );\r\n }\r\n\r\n onStopOptionsChange(value: any) {\r\n switch (value) {\r\n case 'direct':\r\n (this).$ga.sendEvent('flights.results', 'filters.apply.direct.only', 'flights.results.filters.apply.direct.only', this.gaParams);\r\n break;\r\n case '1stop':\r\n (this).$ga.sendEvent('flights.results', 'filters.apply.one.transfer', 'flights.results.filters.apply.one.transfer', this.gaParams);\r\n break; \r\n case '2stops':\r\n (this).$ga.sendEvent('flights.results', 'filters.apply.many.transfer', 'flights.results.filters.apply.many.transfer', this.gaParams);\r\n break;\r\n }\r\n }\r\n\r\n onFlightSubmit() {\r\n if (this.selectedFlight?.externalPartner\r\n && this.searchId\r\n && this.selectedFlight?.uniqueId) {\r\n const routeData = router.resolve({\r\n path: '/partner',\r\n query: {\r\n sid: this.searchId,\r\n fid: this.selectedFlight.uniqueId,\r\n pn: this.selectedFlight.externalPartner.name\r\n }\r\n });\r\n\r\n const partnerName: string = this.selectedFlight.externalPartner.name.replace(/\\s/g, '').toLowerCase();\r\n (this).$ga.sendEvent('flights.results', `btn.partner.${partnerName}`, `flights.results.btn.partner.${partnerName}`, this.gaParams);\r\n\r\n window.open(routeData.href, '_blank');\r\n } else {\r\n if (this.selectedFlight.promo_coupon_name) {\r\n utils.Cookies.g2scpnSet(this.selectedFlight.promo_coupon_name);\r\n }\r\n router.push(`${new flights.FlightNavigationService().getBookingUrl(this.searchParams!, this.searchId!, this.selectedFlightUniqueId)}`);\r\n }\r\n (this).$ga.sendEvent('flights.results', 'flight.buy', 'flights.results.flight.buy', this.gaParams);\r\n }\r\n\r\n onFlightDismiss() {\r\n window.history.go(-1);\r\n }\r\n\r\n onFlightBack() {\r\n window.history.go(-1);\r\n if((this.$refs).modalFlightGroup.showing){\r\n (this).$ga.sendPageview('/flights/search/results/group/details', 'Flights / Search / Results / Group / Details', this.gaParams);\r\n }\r\n }\r\n\r\n onFlightGroupDismiss() {\r\n window.history.go(-1);\r\n }\r\n\r\n onFlightGroupBack() {\r\n window.history.go(-1);\r\n }\r\n\r\n onFiltersApply() {\r\n (this.$refs).modalFilters.hide();\r\n if(!this.gaAlreadySubmitted.includes('flights.results.filters.apply')) {\r\n (this).$ga.sendEvent('flights.results', 'filters.apply', 'flights.results.filters.apply', this.gaParams);\r\n this.gaAlreadySubmitted.push('flights.results.filters.apply');\r\n }\r\n }\r\n\r\n onFiltersReset() {\r\n this.filterStopDuration = {\r\n qHack: { // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n min: this.filters!.stopDuration.min,\r\n max: this.filters!.stopDuration.max\r\n },\r\n range: {\r\n min: this.filters!.stopDuration.min,\r\n max: this.filters!.stopDuration.max\r\n }\r\n };\r\n this.filterFlightDuration.forEach((item, index) => {\r\n item.qHack = { // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n min: this.filters!.flightDuration.items[index].min,\r\n max: this.filters!.flightDuration.items[index].max\r\n };\r\n item.range = {\r\n min: this.filters!.flightDuration.items[index].min,\r\n max: this.filters!.flightDuration.items[index].max\r\n };\r\n });\r\n this.filterDepartureArrival.forEach((item, index) => {\r\n item.departure = {\r\n qHack: { // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n min: this.filters!.departureArrival.items[index].departure.min,\r\n max: this.filters!.departureArrival.items[index].departure.max\r\n },\r\n range: {\r\n min: this.filters!.departureArrival.items[index].departure.min,\r\n max: this.filters!.departureArrival.items[index].departure.max\r\n }\r\n };\r\n item.arrival = {\r\n qHack: { // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n min: this.filters!.departureArrival.items[index].arrival.min,\r\n max: this.filters!.departureArrival.items[index].arrival.max\r\n },\r\n range: {\r\n min: this.filters!.departureArrival.items[index].arrival.min,\r\n max: this.filters!.departureArrival.items[index].arrival.max\r\n }\r\n };\r\n });\r\n this.filterAirportsValue!.legs.forEach((leg) => {\r\n leg.departure = [];\r\n leg.arrival = [];\r\n });\r\n this.filterPrice = {\r\n qHack: { // Quasar QRange not firing \"change\" event if value changed on \"input\"\r\n min: this.filters!.price.min,\r\n max: this.filters!.price.max\r\n },\r\n range: {\r\n min: this.filters!.price.min,\r\n max: this.filters!.price.max\r\n }\r\n };\r\n\r\n this.filters!.clear();\r\n\r\n (this.$refs).modalFilters.hide();\r\n\r\n (this).$ga.sendEvent('flights.results', 'filters.reset', 'flights.results.filters.reset', this.gaParams);\r\n this.gaAlreadySubmitted = this.gaAlreadySubmitted.filter((ga) => ga !== 'flights.results.filters.apply');\r\n }\r\n\r\n onFlightTerms() {\r\n if (this.selectedFlight) {\r\n (this.$refs).flightTerms.show(this.searchId, this.selectedFlight.uniqueId);\r\n\r\n (this).$ga.sendEvent('flights.results', 'flight.terms', 'flights.results.flight.terms', this.gaParams);\r\n }\r\n }\r\n\r\n onModalFilters() {\r\n (this.$refs).modalFilters.show();\r\n\r\n (this).$ga.sendEvent('flights.results', 'filters.open', 'flights.results.filters.open', this.gaParams);\r\n }\r\n\r\n showFlightDetails(flight) {\r\n this.setLastHistoryStateView();\r\n this.selectedFlightUniqueId = flight.uniqueId;\r\n (this.$refs).flightDetails?.show();\r\n // Track add to cart\r\n (this).$ga.addFlightProduct(this.selectedFlight, this.totalPassengers);\r\n (this).$ga.setAction('add', null);\r\n \r\n (this).$ga.sendEvent('flights.results', 'flight.details', 'flights.results.flight.details', this.gaParams);\r\n (this).$ga.sendPageview('/flights/search/results/details', 'Flights / Search / Results / Details', this.gaParams);\r\n }\r\n\r\n hideFlightDetails() {\r\n this.setLastHistoryStateView();\r\n (this.$refs).flightDetails.hide();\r\n }\r\n\r\n showFlightGroup(flight) {\r\n this.setLastHistoryStateView();\r\n this.selectedParentFlightUniqueId = flight.uniqueId;\r\n (this.$refs).modalFlightGroup.show();\r\n (this).$ga.sendEvent('flights.results', 'flight.group.details', 'flights.results.flight.group.details', this.gaParams);\r\n (this).$ga.sendPageview('/flights/search/results/group/details', 'Flights / Search / Results / Group / Details', this.gaParams);\r\n }\r\n\r\n hideFlightGroup() {\r\n this.setLastHistoryStateView();\r\n (this.$refs).modalFlightGroup.hide();\r\n }\r\n\r\n onSelectFlight(flight) {\r\n // if (flight.childCount > 0) {\r\n // window.history.pushState({ ...window.history.state, view: 'flightGroup' }, '', router.currentRoute.fullPath);\r\n // this.showFlightGroup(flight);\r\n // } else {\r\n window.history.pushState({ ...window.history.state, view: 'flight' }, '', router.currentRoute.fullPath);\r\n if(this.isWebview){\r\n this.setLastHistoryStateView();\r\n this.selectedFlightUniqueId = flight.uniqueId;\r\n this.onFlightSubmit();\r\n } else {\r\n this.showFlightDetails(flight);\r\n }\r\n // }\r\n }\r\n\r\n onSelectFlightGroupFlight(flight) {\r\n window.history.pushState({ ...window.history.state, view: 'flight' }, '', router.currentRoute.fullPath);\r\n this.showFlightDetails(flight);\r\n }\r\n\r\n showPromoModal() {\r\n const utmCompaign = utils.Http.getUrlParameter('utm_campaign');\r\n if (utmCompaign == 'social-vk-2018-08'\r\n && this.searchParams!.to) {\r\n this.promoDetails.imgUrl = G2S.config.cdnUrl + '/p/d/' + this.searchParams!.to + '.600x300.jpg';\r\n\r\n switch(this.searchParams!.to) {\r\n case 'BOJ':\r\n this.promoDetails.title = 'Бургас (Болгария)';\r\n this.promoDetails.description =\r\n '

В городе Бургас вы отдохнете на море, посетите старинные минеральные бани и увидите руины античных городов.

'\r\n + '

Посетите Бургас вместе с нами. А самые выгодные билеты для вас мы уже нашли :)

';\r\n break;\r\n case 'TIV':\r\n this.promoDetails.title = 'Тиват (Черногория)';\r\n this.promoDetails.description =\r\n '

Тиват расположен в уютной бухте, отделяющей это место от других городов. В период средневековья здесь любили отдыхать знаменитые вельможи Европы.

'\r\n + '

Посетите Тиват вместе с нами. А самые выгодные билеты для вас мы уже нашли :)

';\r\n break;\r\n case 'DPS':\r\n this.promoDetails.title = 'Денпасар (Индонезия)';\r\n this.promoDetails.description =\r\n '

Денпасар — город свободы, в котором переплетены восточная и западная культуры. Здесь вы увидите Катур Мюка — стража города, который защищает его от злых сил.

'\r\n + '

Посетите Денпасар вместе с нами. А самые выгодные билеты для вас мы уже нашли :)

';\r\n break;\r\n case 'TBS':\r\n this.promoDetails.title = 'Тбилиси (Грузия)';\r\n this.promoDetails.description =\r\n '

Тбилиси впитал дыхание Европы, древнюю кавказскую историю и наследие Советского Союза. Первые упоминания об этом городе появились в V веке н.э.

'\r\n + '

Посетите Тбилиси вместе с нами. А самые выгодные билеты для вас мы уже нашли :)

';\r\n break;\r\n case 'BCN':\r\n this.promoDetails.title = 'Барселона (Испания)';\r\n this.promoDetails.description =\r\n '

В Барселоне жили и работали Пабло Пикассо и Сальвадор Дали. Пикассо настоял на том, чтобы его музей был построен именно здесь. А лучший вид на Барселону открывается с холма Тибидабо.

'\r\n + '

Посетите Барселону вместе с нами. А самые выгодные билеты для вас мы уже нашли :)

';\r\n break;\r\n default:\r\n this.promoDetails.title = this.searchParams!.to;\r\n break;\r\n }\r\n\r\n (this.$refs).modalPromo.show();\r\n }\r\n }\r\n\r\n durationFormat(mins: number): string {\r\n return (moment.duration(mins, 'minutes')).format(i18next.t('format_duration'));\r\n }\r\n\r\n legsHasDifferentAirlines(flight: flights.FlightModel) {\r\n return flight.legs[0].segments[0].airline.iataCode !== flight.legs[1].segments[0].airline.iataCode;\r\n }\r\n\r\n getLegsSegmentsAirlinesDistinct(flight: flights.FlightModel) {\r\n const result: api.Airline[] = [];\r\n const map: string[] = [];\r\n const segments: flights.SegmentModel[] = [];\r\n\r\n flight.legs.forEach((leg) => {\r\n leg.segments.forEach((segment) => {\r\n segments.push(segment);\r\n });\r\n });\r\n\r\n for (const segment of segments) {\r\n if (!map.includes(segment.airline.uniqueId)) {\r\n map.push(segment.airline.uniqueId);\r\n result.push(segment.airline);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n sumFast(flight: flights.FlightModel) {\r\n return flight.legs.reduce((total, f) => total + f.durationMinutes, 0) / 60;\r\n }\r\n \r\n getCheapestFlight(flightsForSort: flights.FlightFilterModel[]) {\r\n const flightsSortFast = [...flightsForSort].sort(\r\n utils\r\n .firstBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return (this).flightsToView[v1.uniqueId].billingPrice - (this).flightsToView[v2.uniqueId].billingPrice; })\r\n .thenBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return this.sumFast((this).flightsToView[v1.uniqueId]) - this.sumFast((this).flightsToView[v2.uniqueId]); })\r\n );\r\n\r\n return (this).flightsToView[flightsSortFast[0].uniqueId];\r\n }\r\n\r\n getFasterFlight(flightsForSort: flights.FlightFilterModel[]) {\r\n const flightsSortFast = [...flightsForSort].sort(\r\n utils\r\n .firstBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return this.sumFast((this).flightsToView[v1.uniqueId]) - this.sumFast((this).flightsToView[v2.uniqueId]); })\r\n .thenBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return (this).flightsToView[v1.uniqueId].billingPrice - (this).flightsToView[v2.uniqueId].billingPrice; })\r\n );\r\n\r\n return (this).flightsToView[flightsSortFast[0].uniqueId];\r\n }\r\n\r\n // Желательно переписать и отправить в core @todo\r\n getBestFlight(flightFilters: flights.FlightFilterModel[]) {\r\n const localFlightFilters = [...flightFilters];\r\n const resByTime = localFlightFilters.sort((a, b) => this.sumFast((this).flightsToView[a.uniqueId]) - this.sumFast((this).flightsToView[b.uniqueId])).map((e, i) => ({\r\n uid: e.uniqueId,\r\n index: i,\r\n value: this.sumFast((this).flightsToView[e.uniqueId]),\r\n priority: (this).flightsToView[e.uniqueId]\r\n }));\r\n \r\n const resByCost = localFlightFilters.sort((a, b) => (this).flightsToView[a.uniqueId].billingPrice - (this).flightsToView[b.uniqueId].billingPrice).map((e, i) => ({\r\n uid: e.uniqueId,\r\n index: i,\r\n value: (this).flightsToView[e.uniqueId].billingPrice,\r\n priority: (this).flightsToView[e.uniqueId]\r\n }));\r\n\r\n const swap = (json)=>{\r\n const ret = {};\r\n for(const key in json) {\r\n ret[json[key].uid] = json[key].rank;\r\n }\r\n return ret;\r\n }; \r\n \r\n const setRank = (elems) => { \r\n let prevValue = null;\r\n let rankIndex = 1;\r\n \r\n for (const elem of elems) {\r\n if (!prevValue || elem.value == (prevValue).value) {\r\n elem.rank = rankIndex;\r\n } else {\r\n elem.rank = ++rankIndex;\r\n }\r\n \r\n prevValue = elem;\r\n \r\n }\r\n \r\n return elems;\r\n };\r\n \r\n const merge = (time, cost) => {\r\n const res = {};\r\n \r\n for (const key in time) {\r\n res[key] = parseFloat(cost[key]) + parseFloat(time[key]) * 0.5;\r\n }\r\n \r\n return res;\r\n };\r\n \r\n const result = merge(\r\n swap(setRank(resByTime)),\r\n swap(setRank(resByCost))\r\n );\r\n\r\n return (this).flightsToView[localFlightFilters.sort((a, b) => result[a.uniqueId] - result[b.uniqueId])[0].uniqueId];\r\n \r\n }\r\n\r\n updateFlightData() {\r\n const lastHistoryItem = this.flightSearch.getHistoryItems()[0];\r\n\r\n if (lastHistoryItem) {\r\n this.flightData = {\r\n class: lastHistoryItem.class,\r\n departure: moment(lastHistoryItem.departure!).format(i18next.t('format_date_lg_wd')),\r\n from: lastHistoryItem.from,\r\n passengers: i18next.t('label_passengers_and_class_value', {\r\n i: lastHistoryItem.passengers,\r\n j: i18next.t('label_flight_class_' + lastHistoryItem.class.toLowerCase())\r\n }),\r\n return: lastHistoryItem.return ? moment(lastHistoryItem.return!).format(i18next.t('format_date_lg_wd')) : null,\r\n to: lastHistoryItem.to\r\n };\r\n }\r\n }\r\n\r\n openSubscriptionModal() {\r\n (this).$ga.sendEvent('price subscription', 'btn.click', this.getFlightDataGaLabel(), this.gaParams);\r\n this.updateFlightData();\r\n this.subscriptionModal.view = 'form';\r\n (this.$refs).modalSubscription.show();\r\n }\r\n\r\n getFlightDataGaLabel() {\r\n const p = location.pathname.split('/');\r\n\r\n if (p.length === 7) {\r\n return `${p[2]}-${p[3]}.${p[4]}-0000.${p[5].split('').join('-')}`;\r\n } else {\r\n return `${p[2]}-${p[3]}.${p[4]}-${p[7]}.${p[8].split('').join('-')}`;\r\n }\r\n }\r\n\r\n subscribe() {\r\n if (this.searchId && this.subscriptionModal.email) {\r\n this.subscriptionModal.view = 'loading';\r\n new api.BestPriceService().subscribe({\r\n searchId: this.searchId,\r\n email: this.subscriptionModal.email,\r\n onlyFreeBaggage: this.subscriptionModal.onlyFreeBaggage,\r\n onlyDirectFlight: this.subscriptionModal.onlyDirectFlight\r\n }).then(\r\n () => {\r\n this.subscriptionModal.view = 'success';\r\n },\r\n error => {\r\n this.subscriptionModal.view = 'error';\r\n console.error(error);\r\n }\r\n );\r\n }\r\n }\r\n}\r\n","export const SEARCH_FLIGHTS = 'SEARCH_FLIGHTS';\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as utils from 'core/utils';\r\nimport * as i18next from 'i18next';\r\nimport { G2S } from 'core/g2s';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class HomeComponent extends Vue {\r\n location: any = location;\r\n gaClientId: string = '';\r\n\r\n mounted() {\r\n utils.PixelsService.setPixelForHomepage(document.getElementById('pixels')!);\r\n setTimeout(() => this.gaClientId = (window).__gaClientID, 1500);\r\n\r\n (this.$root).$refs.dialogApp.show();\r\n }\r\n\r\n get newYearDate() {\r\n return new Date() >= new Date(new Date().getFullYear(), 11, 21) || new Date() <= new Date(new Date().getFullYear(), 0, 11);\r\n }\r\n\r\n get currentSite() {\r\n return G2S.config.markets.find((market) => market.code === G2S.config.marketCode);\r\n }\r\n\r\n getCurrencySymbol(code) {\r\n return utils.String.currencySymbol(code);\r\n }\r\n\r\n onChangeMarket(subdomain) {\r\n (this).$ga.sendEvent('global.header', `market.change.${G2S.config.marketCode}_${subdomain}`, `global.header.market.change.${G2S.config.marketCode}_${subdomain}`);\r\n }\r\n\r\n onFaqClick() {\r\n (this).$ga.sendEvent('global.header', 'market.change.en_ru', 'global.header.market.change.en_ru');\r\n\r\n window.location.href = '/faq';\r\n }\r\n\r\n onSupportClick() {\r\n (this).$ga.sendEvent('support.new', 'click', 'support.new.click');\r\n (this).$ga.reachGoal('support.new.click');\r\n (this).$ga.reachGoal('support.new.click.footer');\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport { G2S } from 'core/g2s';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport * as api from 'core/api';\r\nimport * as payment from 'core/payment';\r\nimport * as utils from 'core/utils';\r\nimport { SbpModalComponent } from 'src/components/payment/sbp-modal';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface OrderBookingProductComponentModel {\r\n state: string;\r\n error: string;\r\n title: string;\r\n reservation: api.ReservationInfo | null;\r\n}\r\n\r\n@WithRender\r\n@Component({\r\n components: {\r\n 'sbp-modal': SbpModalComponent\r\n }\r\n})\r\nexport default class OrderBookingProductComponent extends Vue {\r\n $refs!: {\r\n sbpModal: SbpModalComponent;\r\n }\r\n \r\n @Prop()\r\n orderGuid: string;\r\n\r\n @Prop()\r\n productId: string;\r\n\r\n gaParams: utils.GoogleAnalyticsParams = new utils.GoogleAnalyticsParams();\r\n\r\n gaAlreadySubmitted: string[] = [];\r\n\r\n model: OrderBookingProductComponentModel = {\r\n state: 'loading',\r\n error: '',\r\n title: '',\r\n reservation: null\r\n }\r\n\r\n products: api.Product[] = [];\r\n\r\n paymentModel: payment.PaymentModel | null = null;\r\n selectedProductId: number = 0;\r\n\r\n cancelProductRequestsInProgress = {};\r\n\r\n redirectUrl: string | null = null;\r\n\r\n get amountToPay() {\r\n if (this.model.reservation) {\r\n let price = 0;\r\n\r\n this.products.forEach(p => {\r\n if (p.priceType === 'PerPassenger') {\r\n price += this.model.reservation!.passengers.length * p.price;\r\n } else {\r\n price += p.price;\r\n }\r\n });\r\n\r\n if (this.paymentModel && this.paymentModel.selectedPaymentType.commission) {\r\n price += this.paymentModel.selectedPaymentType.commission;\r\n }\r\n\r\n return i18next.t('label_amount_to_pay', { i: (this.$options.filters).price(price, false, this.products[0] ? this.products[0].currencyCode : '') });\r\n }\r\n return i18next.t('label_amount_to_pay', { i: 0 });\r\n }\r\n\r\n get selectedProduct(): api.Product {\r\n return utils.find(this.products, (item: api.Product) => {\r\n return item.id === this.selectedProductId;\r\n });\r\n }\r\n\r\n mounted() {\r\n if (this.$route.query.ct) {\r\n utils.Cookies.setChoiceType(parseInt(this.$route.query.ct));\r\n }\r\n\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n this.model.state = 'loading';\r\n this.model.title = i18next.t('title_order_booking_product');\r\n window.document.title = this.model.title;\r\n const ct = parseInt(this.$route.query.ct);\r\n const redirectDomain = this.$route.query.redirect_domain || undefined;\r\n\r\n const request: api.ProductBookingDetailsRequest = {\r\n reservationPublicId: this.orderGuid,\r\n productIds: this.parseIds(this.productId),\r\n choiceType: ct || utils.Cookies.getChoiceType() || api.ProductChoiceType.notSet,\r\n redirectDomain\r\n };\r\n\r\n new api.ReservationService().getProductBookingDetails(request).then(\r\n (result: api.ProductBookingDetails) => {\r\n if (result.redirectUrl) {\r\n this.redirectUrl = result.redirectUrl;\r\n }\r\n\r\n if (result.products\r\n && result.products.length > 0\r\n && result.paymentTypes\r\n && result.paymentTypes.length > 0) {\r\n this.model.reservation = result.reservationInfo;\r\n\r\n this.products = result.products;\r\n\r\n this.paymentModel = new payment.PaymentModel(result.paymentTypes);\r\n\r\n this.model.state = 'form';\r\n } else {\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error'),\r\n text: i18next.t('error_payment_not_available'),\r\n firstBtnText: 'Перейти к заказу',\r\n firstBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const reservationPublicId = result.reservationInfo.parentReservationPublicId ?? result.reservationInfo.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_payment_not_available'),\r\n ok: i18next.t('button_ok'),\r\n onOkCallback: () => {\r\n router.push('/order/' + result.reservationInfo.reservationPublicId);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n (error) => {\r\n this.model.error = i18next.t('error_server_tryagain');\r\n\r\n if (error.response) {\r\n if (error.response.status === 404) {\r\n this.model.error = i18next.t('error_order_notfound');\r\n } else {\r\n if (error?.response?.data?.localizedMessage) {\r\n if (G2S.config.theme === 'aviasales') {\r\n if (error.response.data.redirectUrl) {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error'),\r\n text: error.response.data.localizedMessage,\r\n firstBtnText: 'Перейти к заказу',\r\n firstBtnFn: () => {\r\n location.href = error.response.data.redirectUrl;\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error'),\r\n text: error.response.data.localizedMessage,\r\n firstBtnText: 'На главную',\r\n firstBtnFn: () => {\r\n location.href = 'https://www.aviasales.ru/';\r\n }\r\n });\r\n }\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n message: error.response.data.localizedMessage,\r\n ok: i18next.t('button_ok'),\r\n onOkCallback: () => {\r\n location.href = '/';\r\n }\r\n });\r\n }\r\n\r\n return;\r\n }\r\n }\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n\r\n this.model.state = 'error';\r\n }\r\n );\r\n }\r\n\r\n @Watch('$route')\r\n onRouteChanged() {\r\n this.loadModel();\r\n }\r\n\r\n onProductDetails(productId: number) {\r\n this.selectedProductId = productId;\r\n\r\n (this.$refs).modalProduct.show();\r\n }\r\n\r\n onSubmit() {\r\n const error = (this.$refs).paymentForm.validate();\r\n\r\n if (error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: error\r\n });\r\n } else {\r\n this.model.state = 'processing';\r\n\r\n const ct = parseInt(this.$route.query.ct);\r\n const redirectDomain = this.$route.query.redirect_domain || undefined;\r\n\r\n const request: api.BookProductsRequest = {\r\n productIds: [],\r\n parentReservationPublicId: this.model.reservation!.reservationPublicId,\r\n paymentTypeId: this.paymentModel!.selectedPaymentType.paymentTypeId,\r\n confirmationPageUrlTemplate: G2S.config.desktopUrl + '/go/order/payment/_reservationPublicId_/_billPublicId_',\r\n bonusAmount: 0,\r\n gaClientID: (window).__gaClientID,\r\n clientDevice: (this).$getClientDevice(),\r\n choiceType: ct || utils.Cookies.getChoiceType() || api.ProductChoiceType.notSet,\r\n redirectDomain\r\n };\r\n\r\n this.products.forEach(p => {\r\n request.productIds.push(p.id);\r\n });\r\n\r\n if (this.paymentModel!.selectedPaymentType.kind === 'CreditCardInplace') {\r\n request.creditCard = this.paymentModel!.getCardWithEncryptedPacket() || undefined;\r\n\r\n if (!request.creditCard) {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('error'),\r\n message: i18next.t('error_payment_card_not_available')\r\n });\r\n\r\n this.model.state = 'form';\r\n\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `payment.${this.paymentModel!.selectedPaymentType.kind}.${this.paymentModel!.selectedPaymentType.paymentTypeId}.notavailable`.toLowerCase(),\r\n `flights.booking.payment.${this.paymentModel!.selectedPaymentType.kind}.${this.paymentModel!.selectedPaymentType.paymentTypeId}.notavailable`.toLowerCase(),\r\n this.gaParams\r\n );\r\n\r\n return null;\r\n }\r\n }\r\n\r\n new api.ReservationService().bookProducts(request).then(\r\n (result: api.BookProductsResponse) => {\r\n if (result.paymentInfo) {\r\n if (result.paymentInfo?.inPlace.status === 'SbpQr' && result.paymentInfo.redirect) {\r\n this.$refs.sbpModal.show(result.paymentInfo.redirect.url);\r\n\r\n const pollPaymentStatusRequest: api.FinishPreauth3dsRequest = {\r\n reservationPublicId: result.reservationPublicId,\r\n billPublicId: result.paymentInfo.billPublicId,\r\n paymentId: result.paymentInfo.paymentId\r\n };\r\n\r\n this.pollPaymentStatus(pollPaymentStatusRequest);\r\n } else if (result.paymentInfo.redirect) {\r\n // Payment requires redirecting to external url\r\n utils.Http.redirect(result.paymentInfo.redirect);\r\n }\r\n else if (result.paymentInfo.inPlace) {\r\n if (result.paymentInfo.inPlace.succeed) {\r\n this.handleSuccess(result.parentReservationPublicId);\r\n } else {\r\n this.handleFail(result.paymentInfo.inPlace);\r\n }\r\n } else {\r\n console.error('Payment: strange result');\r\n\r\n router.push('/order/' + result.parentReservationPublicId);\r\n }\r\n } else {\r\n router.push('/order/' + result.parentReservationPublicId);\r\n }\r\n },\r\n (error) => {\r\n let message = i18next.t('error_server_tryagain');\r\n\r\n if (error.response) {\r\n console.log('api/BookProducts XHR failed', error.response.status, error.response.data);\r\n\r\n if (error.response.data\r\n && error.response.data.localizedMessage) {\r\n message = error.response.data.localizedMessage;\r\n }\r\n } else {\r\n console.log('api/BookProducts XHR error', error.message);\r\n }\r\n\r\n (this).$ga.sendPageview('/order/booking/product/error', 'Order / Booking / Product / Error', this.gaParams);\r\n\r\n this.model.state = 'form';\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error_payment'),\r\n text: message,\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n },\r\n secondBtnText: 'Вернуться к заказу',\r\n secondBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const reservationPublicId = this.model.reservation!.parentReservationPublicId ?? this.model.reservation!.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('error'),\r\n message: message\r\n });\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n redirectToOrderPage() {\r\n // Force href to remove any query params for feng shui\r\n window.location.href = '/order/' + this.orderGuid;\r\n }\r\n\r\n parseIds(ids: string) {\r\n return ids.replace(/[^\\d_]/g, '').split('_').map(id => parseInt(id)).filter(id => !!id);\r\n }\r\n\r\n handleSuccess(parentReservationPublicId: string) {\r\n // Wait 5 seconds to give time to server to issue tickets and change status.\r\n window.setTimeout(() => {\r\n (this).$ga.sendPageview('/flights/booking/payment/thankyou', 'Flights / Booking / Payment / Thankyou');\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('title_thank_you'),\r\n text: i18next.t('label_payment_success_reservation'),\r\n firstBtnText: 'Перейти к заказу',\r\n firstBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n router.push('/order/' + parentReservationPublicId);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('title_thank_you'),\r\n message: i18next.t('label_payment_success_reservation'),\r\n ok: i18next.t('button_ok'),\r\n onOkCallback: () => {\r\n router.push('/order/' + parentReservationPublicId);\r\n }\r\n });\r\n }\r\n }, 5000);\r\n }\r\n\r\n handleFail(paymentInfoInPlace: api.PaymentInfoInPlace) {\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `error.payment.${this.paymentModel!.selectedPaymentType.kind}.${this.paymentModel!.selectedPaymentType.paymentTypeId}`.toLowerCase(),\r\n `flights.booking.error.payment.${this.paymentModel!.selectedPaymentType.kind}.${this.paymentModel!.selectedPaymentType.paymentTypeId}`.toLowerCase()\r\n );\r\n \r\n if (paymentInfoInPlace.exceptionMessage) {\r\n console.error('Payment error: ' + paymentInfoInPlace.exceptionMessage);\r\n }\r\n\r\n this.model.state = 'form';\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error_payment'),\r\n text: paymentInfoInPlace.errorMessage,\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n },\r\n secondBtnText: 'Вернуться к заказу',\r\n secondBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const reservationPublicId = this.model.reservation!.parentReservationPublicId ?? this.model.reservation!.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('error_payment'),\r\n message: paymentInfoInPlace.errorMessage\r\n });\r\n }\r\n }\r\n\r\n async pollPaymentStatus(request: api.FinishPreauth3dsRequest) {\r\n const reservationService = new api.ReservationService();\r\n\r\n const pollResult = await reservationService.pollPaymentQrStatus(request);\r\n\r\n if (pollResult.paymentInfo?.redirect?.url) {\r\n location.href = pollResult.paymentInfo.redirect.url;\r\n }\r\n\r\n if (pollResult.paymentInfo?.inPlace?.status === 'Error') {\r\n this.$refs.sbpModal.close();\r\n this.handleFail(pollResult.paymentInfo?.inPlace);\r\n }\r\n\r\n if (pollResult.paymentInfo?.inPlace?.status === 'Success') {\r\n const parentReservationPublicId = this.model.reservation!.reservationPublicId;\r\n this.handleSuccess(parentReservationPublicId);\r\n }\r\n }\r\n\r\n onSbpModalClose() {\r\n this.model.state = 'form';\r\n api.ReservationService.needToStopSbpPolling = true;\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport { required, minLength, maxLength } from 'vuelidate/lib/validators';\r\nimport { validateEmailOrPhone } from 'core/validators';\r\nimport { G2S } from 'core/g2s';\r\nimport * as api from 'core/api';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n model: {\r\n orderNumber: { required, minLength: minLength(7), maxLength: maxLength(7) },\r\n orderContact: { required, minLength: minLength(5), validateEmailOrPhone }\r\n }\r\n }\r\n})\r\nexport default class OrderComponent extends Vue {\r\n $ga: utils.GoogleAnalyticsService; // Injected in G2S.init\r\n\r\n model: any = {\r\n orderNumber: '',\r\n orderContact: '',\r\n error: '',\r\n submitted: false\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_order_my');\r\n }\r\n\r\n onOrderContactInput(value: string) {\r\n if (value.length === 1 && value === '8') {\r\n this.model.orderContact = '+7';\r\n }\r\n }\r\n\r\n onSubmit() {\r\n (this).$ga.sendEvent('order.view', 'btn.find', 'order.view.btn.find');\r\n\r\n this.$v.model!.$touch();\r\n\r\n this.model.error = '';\r\n \r\n if ((this).$v.model.orderNumber.$error) {\r\n this.model.error = i18next.t('error_order_notvalid');\r\n } else if ((this).$v.model.orderContact.$error) {\r\n this.model.error = i18next.t('error_email_or_phone_wrong');\r\n } else if (this.$v.model!.$error) {\r\n this.model.error = i18next.t('error_fields');\r\n } else if (G2S.config.theme === 'megotravel') {\r\n this.model.error = i18next.t('error_email_or_phone_wrong');\r\n }\r\n\r\n if (this.model.error) {\r\n (this.$root).$refs.messageDialog.show({\r\n message: this.model.error\r\n });\r\n (this).$ga.sendEvent('order.view', 'error', 'order.view.error');\r\n return;\r\n }\r\n console.log('AFTER error!');\r\n \r\n this.model.submitted = true;\r\n \r\n const request: api.GetReservationPublicIdRequest = {\r\n reservationNumber: this.model.orderNumber,\r\n emailOrPhone: this.model.orderContact\r\n };\r\n\r\n new api.ReservationService().getReservationPublicId(request).then(\r\n (result: api.GetReservationPublicIdResponse) => {\r\n this.model.submitted = false;\r\n\r\n (this).$ga.sendEvent('order.view', 'submit.success', 'order.view.submit.success');\r\n router.push('/order/' + result.reservationPublicId);\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n\r\n (this).$ga.sendEvent('order.view', 'error', 'order.view.error');\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_order_notfound_bydetails')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport { G2S } from 'core/g2s';\r\nimport * as i18next from 'i18next';\r\nimport moment from 'moment';\r\nimport router from 'src/router';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as payment from 'core/payment';\r\nimport * as utils from 'core/utils';\r\nimport { SbpModalComponent } from 'src/components/payment/sbp-modal';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface OrderPaymentComponentModel {\r\n state: string;\r\n error: string;\r\n title: string;\r\n reservation: api.ReservationInfo | null;\r\n bill: api.BillInfo | null;\r\n}\r\n\r\n@WithRender\r\n@Component({\r\n components: {\r\n 'sbp-modal': SbpModalComponent\r\n }\r\n})\r\nexport default class OrderPaymentComponent extends Vue {\r\n $refs!: {\r\n sbpModal: SbpModalComponent;\r\n }\r\n \r\n @Prop()\r\n orderGuid: string;\r\n\r\n @Prop()\r\n billPublicId: string;\r\n\r\n @Prop()\r\n message: string;\r\n\r\n queryErrorText: string = '';\r\n \r\n queryErrorCode: string = '';\r\n\r\n gaParams: utils.GoogleAnalyticsParams = new utils.GoogleAnalyticsParams();\r\n\r\n gaAlreadySubmitted: string[] = [];\r\n\r\n flight: flights.FlightModel;\r\n\r\n model: OrderPaymentComponentModel = {\r\n state: 'loading',\r\n error: '',\r\n title: '',\r\n reservation: null,\r\n bill: null\r\n }\r\n\r\n paymentModel: payment.PaymentModel | null = null;\r\n\r\n disabledServiceButtons: boolean = false;\r\n\r\n redirectUrl: string | null = null;\r\n\r\n get amountToPay() {\r\n if (this.model.reservation) {\r\n let price = this.model.reservation.amount;\r\n\r\n if (this.model.bill && this.model.bill.amount) {\r\n price = this.model.bill.amount;\r\n }\r\n\r\n if (this.paymentModel && this.paymentModel.selectedPaymentType.commission) {\r\n price += this.paymentModel.selectedPaymentType.commission;\r\n }\r\n\r\n return price;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n get amountToPayLabel() {\r\n return this.paymentModel?.selectedPaymentTab === 'moneywall'\r\n ? i18next.t(\r\n 'label_amount_to_pay',\r\n {\r\n i: (this.$options.filters).price(\r\n utils.Payment.calcMoneyWallPrice(\r\n this.amountToPay,\r\n this.flight.legs[0].segments[0].departureDate\r\n )\r\n )\r\n }\r\n ) + '
' +\r\n '(' + i18next.t('numerous_payment_first_of', { count: 3 }) + ')'\r\n : i18next.t(\r\n 'label_amount_to_pay',\r\n {\r\n i: (this.$options.filters).price(\r\n this.amountToPay\r\n )\r\n }\r\n );\r\n }\r\n\r\n mounted() {\r\n if (typeof this.$route.query?.ErrorText === 'string') {\r\n // we can't redirect from desktop with \"
\" or \"\\n\" in query string directly\r\n this.queryErrorText = this.$route.query?.ErrorText.replace('_', '
');\r\n }\r\n \r\n if (typeof this.$route.query?.ErrorCode === 'string') {\r\n this.queryErrorCode = this.$route.query?.ErrorCode;\r\n }\r\n \r\n this.loadModel();\r\n }\r\n\r\n getTotalLabel(label: string): string {\r\n return i18next.t(label, { i: (this.$options.filters).price(this.model.reservation!.amount) });\r\n }\r\n\r\n loadModel() {\r\n this.model.state = 'loading';\r\n this.model.title = i18next.t('title_order_payment');\r\n window.document.title = this.model.title;\r\n\r\n if (this.billPublicId) {\r\n new api.ReservationService().getReservationAndBillStatus(this.orderGuid, this.billPublicId).then(\r\n (result: api.GetReservationStatusResult) => {\r\n this.onResultSuccess(result);\r\n },\r\n (error) => {\r\n this.onResultError(error);\r\n }\r\n );\r\n } else {\r\n new api.ReservationService().getReservationStatus(this.orderGuid, true, false).then(\r\n (result: api.GetReservationStatusResult) => {\r\n this.onResultSuccess(result);\r\n },\r\n (error) => {\r\n this.onResultError(error);\r\n }\r\n );\r\n }\r\n }\r\n\r\n makePaymentRedirect(d: api.PaymentInfoRedirect) {\r\n if (d.method.toLowerCase() === 'get' && d.requestParameters.length === 0) {\r\n window.location.href = d.url;\r\n }\r\n else {\r\n const form: HTMLFormElement = window.document.createElement('form');\r\n\r\n form.method = d.method;\r\n form.action = d.url;\r\n\r\n for (let i: number = 0; i < d.requestParameters.length; i++) {\r\n const p = d.requestParameters[i];\r\n const input = window.document.createElement('input');\r\n input.value = p.paramValue;\r\n input.name = p.paramName;\r\n input.type = 'hidden';\r\n form.appendChild(input);\r\n }\r\n\r\n window.document.body.appendChild(form);\r\n\r\n // Wait for DOM issues.\r\n setTimeout(function () {\r\n form.submit();\r\n }, 1000);\r\n }\r\n }\r\n\r\n @Watch('$route')\r\n onRouteChanged() {\r\n this.loadModel();\r\n }\r\n\r\n onFlightDetails() {\r\n (this.$refs).flightDetails?.show();\r\n \r\n (this).$ga.sendEvent('flights.results', 'flight.details', 'flights.results.flight.details', this.gaParams);\r\n (this).$ga.sendPageview('/flights/search/results/details', 'Flights / Search / Results / Details', this.gaParams);\r\n }\r\n\r\n onFlightTerms() {\r\n (this.$refs).flightTerms.show(null, null, this.model.reservation!.reservationPublicId);\r\n }\r\n\r\n onResultError(error: any) {\r\n this.model.error = i18next.t('error_server_tryagain');\r\n\r\n if (error.response) {\r\n if (error.response.status === 404) {\r\n this.model.error = i18next.t('error_order_notfound');\r\n }\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n\r\n this.model.state = 'error';\r\n }\r\n\r\n onResultSuccess(result: api.GetReservationStatusResult) {\r\n this.redirectUrl = result.redirectUrl;\r\n\r\n if (result?.paymentTypes?.length > 0\r\n && result?.billInfo?.billStatus !== 'Payed') {\r\n this.model.reservation = result.reservationInfo;\r\n this.model.bill = result.billInfo;\r\n this.paymentModel = new payment.PaymentModel(result.paymentTypes);\r\n\r\n if (this.model.bill && !utils.String.startsWith(this.model.bill.billType, 'Reservation')) {\r\n this.model.title = i18next.t('title_bill_payment');\r\n window.document.title = this.model.title;\r\n }\r\n\r\n // Handle error messages on return after 3Ds.\r\n if (this.queryErrorText) {\r\n const paymentTypeByError = result.paymentTypes.find((item) =>\r\n item.paymentTypeId === result.billInfo.paymentTypeId);\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `error.payment.${paymentTypeByError ? '.' + paymentTypeByError.kind : ''}${this.model.bill ? '.' + this.model.bill.paymentTypeId : ''}`.toLowerCase(),\r\n `flights.booking.error.payment${paymentTypeByError ? '.' + paymentTypeByError.kind : ''}${this.model.bill ? '.' + this.model.bill.paymentTypeId : ''}`.toLowerCase(),\r\n this.gaParams\r\n );\r\n\r\n if (\r\n !this.model.reservation.parentReservationPublicId\r\n && '6200' === this.queryErrorCode\r\n && this.model.reservation.products.length > 0\r\n && !this.hasFlightService(this.model.reservation.products)\r\n ) {\r\n new api.ReservationService().updateBookingSessionNotEnoughMoneyPopup({\r\n reservationPublicId: this.model.reservation!.reservationPublicId\r\n }).catch(\r\n () => console.error('Error when sending the request')\r\n );\r\n (this).$ga.sendEvent(\r\n 'payment',\r\n 'error',\r\n 'payment.error.limit.card',\r\n this.gaParams\r\n );\r\n (this.$refs).modalError6200.show();\r\n // Return to keep loading state\r\n return;\r\n }\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error'),\r\n text: this.queryErrorText,\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n },\r\n secondBtnText: 'Вернуться к заказу',\r\n secondBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const reservationPublicId = this.model.reservation!.parentReservationPublicId ?? this.model.reservation!.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n message: this.queryErrorText\r\n });\r\n }\r\n }\r\n\r\n this.model.state = 'form';\r\n\r\n // Init GA params\r\n this.flight = new flights.FlightModel(result.flight, result);\r\n\r\n this.gaParams.dimension2 = this.flight.adapter + '_'; // Add underscore for regex filtering in GA\r\n this.gaParams.dimension3 = this.flight?.allFlightAirlinesCode?.length ? this.flight.allFlightAirlinesCode.join('_') : 'none';\r\n this.gaParams.metric3 = result.reservationInfo.passengers.length;\r\n this.gaParams.metric7 = Math.round(moment.duration(this.flight.legs[0].departureDate.clone().startOf('day').diff(moment().startOf('day'))).asDays());\r\n } else {\r\n let title = '';\r\n let message = i18next.t(result.billInfo && result.billInfo.billStatus === 'Payed'\r\n ? 'error_bill_already_payed'\r\n : 'error_payment_not_available');\r\n\r\n // Handle success message on return after 3Ds.\r\n if (\r\n this.message === 'payment-success'\r\n || this.$route.query?.message === 'payment-success'\r\n ) {\r\n title = i18next.t('title_thank_you');\r\n message = i18next.t('label_payment_success_bill');\r\n\r\n if (result.billInfo\r\n && utils.String.startsWith(result.billInfo.billType, 'Reservation')) {\r\n message = i18next.t('label_payment_success_reservation');\r\n (this).$ga.sendPageview('/flights/booking/payment/thankyou', 'Flights / Booking / Payment / Thankyou');\r\n }\r\n }\r\n\r\n // Handle error with 6200 code on return after 3Ds.\r\n if (\r\n !result.reservationInfo.parentReservationPublicId\r\n && this.queryErrorCode === '6200'\r\n && result.reservationInfo.products.length > 0\r\n && !this.hasFlightService(result.reservationInfo.products)\r\n ) {\r\n new api.ReservationService().updateBookingSessionNotEnoughMoneyPopup({\r\n reservationPublicId: result.reservationInfo.reservationPublicId\r\n }).catch(\r\n () => console.error('Error when sending the request')\r\n );\r\n }\r\n\r\n if (this.queryErrorText) {\r\n message = this.queryErrorText;\r\n }\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n if (this.$route.query.payment_status === 'success') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: this.queryErrorText ? i18next.t('error') : (title || undefined),\r\n text: message,\r\n firstBtnText: 'Перейти к заказу',\r\n firstBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const reservationPublicId = result.reservationInfo.parentReservationPublicId ?? result.reservationInfo.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: this.queryErrorText ? i18next.t('error') : (title || undefined),\r\n text: message,\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n },\r\n secondBtnText: 'Вернуться к заказу',\r\n secondBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const reservationPublicId = result.reservationInfo.parentReservationPublicId ?? result.reservationInfo.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: title,\r\n message: message,\r\n ok: i18next.t('button_ok'),\r\n onOkCallback: () => {\r\n const reservationPublicId = result.reservationInfo.parentReservationPublicId ?? result.reservationInfo.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n onSubmit() {\r\n const error = (this.$refs).paymentForm.validate();\r\n\r\n if (error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: error\r\n });\r\n } else {\r\n this.model.state = 'processing';\r\n\r\n const request: api.PayReservationRequest = {\r\n reservationPublicId: this.model.reservation!.reservationPublicId,\r\n paymentTypeId: this.paymentModel!.selectedPaymentType.paymentTypeId,\r\n confirmationPageUrlTemplate: G2S.config.desktopUrl + '/go/order/payment/_reservationPublicId_/_billPublicId_',\r\n bonusAmount: this.paymentModel!.selectedPaymentType.paymentTypeId !== 'PayLater' ? this.paymentModel!.bonusAmount : 0,\r\n clientDevice: G2S.config.clientDevice\r\n };\r\n\r\n if (this.model.bill && this.model.bill.publicId) {\r\n request.billPublicId = this.model.bill.publicId;\r\n }\r\n\r\n if (this.paymentModel!.selectedPaymentType.kind === 'CreditCardInplace') {\r\n request.creditCard = this.paymentModel!.getCardWithEncryptedPacket() || undefined;\r\n\r\n if (!request.creditCard) {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('error'),\r\n message: i18next.t('error_payment_card_not_available')\r\n });\r\n\r\n this.model.state = 'form';\r\n\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `payment.${this.paymentModel!.selectedPaymentType.kind}.${this.paymentModel!.selectedPaymentType.paymentTypeId}.notavailable`.toLowerCase(),\r\n `flights.booking.payment.${this.paymentModel!.selectedPaymentType.kind}.${this.paymentModel!.selectedPaymentType.paymentTypeId}.notavailable`.toLowerCase(),\r\n this.gaParams\r\n );\r\n\r\n return null;\r\n }\r\n }\r\n\r\n const reservationService = new api.ReservationService();\r\n\r\n reservationService.pay(request).then(\r\n (result: api.CreateReservationResult) => {\r\n if (result.paymentInfo) {\r\n if (!this.model.reservation?.parentReservationPublicId && result.paymentInfo.errorCode === 6200 && this.model.reservation?.products && this.model.reservation.products.length > 0 && !this.hasFlightService(this.model.reservation.products)) {\r\n new api.ReservationService().updateBookingSessionNotEnoughMoneyPopup({\r\n reservationPublicId: result.reservationInfo.reservationPublicId\r\n }).catch(\r\n () => console.error('Error when sending the request')\r\n );\r\n\r\n (this).$ga.sendEvent(\r\n 'payment',\r\n 'error',\r\n 'payment.error.limit.card',\r\n this.gaParams\r\n );\r\n\r\n (this.$refs).modalError6200.show();\r\n } else if (result.paymentInfo.inPlace) {\r\n if (result.paymentInfo.inPlace.status === 'SbpQr' && result.paymentInfo.redirect) {\r\n this.$refs.sbpModal.show(result.paymentInfo.redirect.url);\r\n this.pollPaymentStatus(result);\r\n } else if (result.paymentInfo.inPlace.succeed) {\r\n if (result.paymentInfo.inPlace.status === 'Preauth3ds'\r\n && result.paymentInfo.redirect) {\r\n console.log('Preauth3ds');\r\n\r\n utils.Http.hiddenFrameWithPost(result.paymentInfo.redirect);\r\n\r\n // Wait for DOM issues.\r\n setTimeout(() => {\r\n const finishRequest: api.FinishPreauth3dsRequest = {\r\n reservationPublicId: result.reservationInfo.reservationPublicId,\r\n billPublicId: result.paymentInfo.billPublicId,\r\n paymentId: result.paymentInfo.paymentId\r\n };\r\n\r\n reservationService.finishPreauth3ds(finishRequest).then(\r\n (result: api.CreateReservationResult) => {\r\n this.handleFinishResponse(result);\r\n },\r\n (error) => {\r\n if (error.response) {\r\n console.log('api/finishPreauth3ds XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('api/finishPreauth3ds XHR error', error.message);\r\n }\r\n\r\n this.model.state = 'form';\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error_payment'),\r\n text: i18next.t('error_payment_failed'),\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n },\r\n secondBtnText: 'Вернуться к заказу',\r\n secondBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const reservationPublicId = this.model.reservation!.parentReservationPublicId ?? this.model.reservation!.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('error_payment'),\r\n message: i18next.t('error_payment_failed')\r\n });\r\n }\r\n }\r\n );\r\n }, 100);\r\n } else if (result.paymentInfo.redirect) {\r\n // 3DS redirect\r\n this.makePaymentRedirect(result.paymentInfo.redirect);\r\n } else {\r\n let m = i18next.t('label_payment_success_bill');\r\n\r\n if (this.model.bill\r\n && utils.String.startsWith(this.model.bill.billType, 'Reservation')) {\r\n m = i18next.t('label_payment_success_reservation');\r\n (this).$ga.sendPageview('/flights/booking/payment/thankyou', 'Flights / Booking / Payment / Thankyou');\r\n }\r\n\r\n // Wait 5 seconds to give time to server to issue tickets and change status.\r\n setTimeout(() => {\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('title_thank_you'),\r\n text: m,\r\n firstBtnText: 'Перейти к заказу',\r\n firstBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const reservationPublicId = result.reservationInfo.parentReservationPublicId ?? result.reservationInfo.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('title_thank_you'),\r\n message: m,\r\n ok: i18next.t('button_ok'),\r\n onOkCallback: () => {\r\n const reservationPublicId = result.reservationInfo.parentReservationPublicId ?? result.reservationInfo.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n });\r\n }\r\n }, 5000);\r\n }\r\n }\r\n else {\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `error.payment.${this.paymentModel!.selectedPaymentType.kind}.${this.paymentModel!.selectedPaymentType.paymentTypeId}`.toLowerCase(),\r\n `flights.booking.error.payment.${this.paymentModel!.selectedPaymentType.kind}.${this.paymentModel!.selectedPaymentType.paymentTypeId}`.toLowerCase(),\r\n this.gaParams\r\n );\r\n\r\n if (result.paymentInfo.inPlace.exceptionMessage) {\r\n console.error('Payment error: ' + result.paymentInfo.inPlace.exceptionMessage);\r\n }\r\n\r\n this.model.state = 'form';\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error_payment'),\r\n text: result.paymentInfo.inPlace.errorMessage,\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n },\r\n secondBtnText: 'Вернуться к заказу',\r\n secondBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const reservationPublicId = this.model.reservation!.parentReservationPublicId ?? this.model.reservation!.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('error_payment'),\r\n message: result.paymentInfo.inPlace.errorMessage\r\n });\r\n }\r\n }\r\n }\r\n else if (result.paymentInfo.redirect) {\r\n // Payment requires redirecting to external url\r\n this.makePaymentRedirect(result.paymentInfo.redirect);\r\n } else {\r\n console.error('Payment: stange result');\r\n\r\n const reservationPublicId = result.reservationInfo.parentReservationPublicId ?? result.reservationInfo.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n } else {\r\n const reservationPublicId = result.reservationInfo.parentReservationPublicId ?? result.reservationInfo.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n },\r\n (error) => {\r\n if (error.response) {\r\n console.log('api/Reservation/Pay XHR failed', error.response.status, error.response.data);\r\n\r\n this.model.state = 'form';\r\n\r\n if (error.response.status === 400) {\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error'),\r\n text: error.response.data.error.message,\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n },\r\n secondBtnText: 'Вернуться к заказу',\r\n secondBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const reservationPublicId = this.model.reservation!.parentReservationPublicId ?? this.model.reservation!.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('error'),\r\n message: error.response.data.error.message\r\n });\r\n }\r\n } else {\r\n (this).$ga.sendPageview('/order/payment/error', 'Order / Payment / Error', this.gaParams);\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error_payment'),\r\n text: error.response.data.error ? error.response.data.error.message : error.response.data.message,\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n },\r\n secondBtnText: 'Вернуться к заказу',\r\n secondBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const reservationPublicId = this.model.reservation!.parentReservationPublicId ?? this.model.reservation!.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('error_payment'),\r\n message: error.response.data.error ? error.response.data.error.message : error.response.data.message\r\n });\r\n }\r\n }\r\n } else {\r\n console.log('api/Reservation/Pay XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n onTotalAmount() {\r\n (this.$refs).modalTotalAmount.show();\r\n }\r\n\r\n onPaymentWithService() {\r\n this.disabledServiceButtons = true;\r\n const reservationService = new api.ReservationService();\r\n\r\n (this).$ga.sendEvent(\r\n 'payment',\r\n 'error',\r\n 'payment.error.limit.card.ok.product',\r\n this.gaParams\r\n );\r\n\r\n reservationService\r\n .getReservationAndBillStatus(this.model.reservation!.reservationPublicId, this.model.bill!.publicId, false)\r\n .then(\r\n (result: api.GetReservationStatusResult) => {\r\n location.href = '/order/payment/' + result.reservationInfo!.reservationPublicId;\r\n },\r\n () => {\r\n location.href = '/order/payment/' + this.model.reservation!.reservationPublicId;\r\n }\r\n );\r\n }\r\n\r\n onPaymentDeleteService() {\r\n this.disabledServiceButtons = true;\r\n const reservationService = new api.ReservationService();\r\n\r\n (this).$ga.sendEvent(\r\n 'payment',\r\n 'error',\r\n 'payment.error.limit.card.delete.product',\r\n this.gaParams\r\n );\r\n\r\n reservationService\r\n .getReservationAndBillStatus(this.model.reservation!.reservationPublicId, this.model.bill!.publicId, true)\r\n .then(\r\n (result: api.GetReservationStatusResult) => {\r\n location.href = '/order/payment/' + result.reservationInfo!.reservationPublicId;\r\n },\r\n () => {\r\n location.href = '/order/payment/' + this.model.reservation!.reservationPublicId;\r\n }\r\n );\r\n }\r\n\r\n hasFlightService(products: api.Product[]) {\r\n let has = false;\r\n\r\n for (const product of products) {\r\n if (!['Service', 'Insurance', 'Package'].includes(product.type)) {\r\n has = true;\r\n break;\r\n }\r\n }\r\n\r\n return has;\r\n }\r\n \r\n handleFinishResponse(result: api.CreateReservationResult) {\r\n if (result.paymentInfo.inPlace.succeed && result.paymentInfo?.inPlace?.status !== 'Error') {\r\n if (result.paymentInfo.redirect) {\r\n // 3DS redirect\r\n this.makePaymentRedirect(result.paymentInfo.redirect);\r\n } else {\r\n let m = i18next.t('label_payment_success_bill');\r\n\r\n if (\r\n this.model.bill\r\n && utils.String.startsWith(this.model.bill.billType, 'Reservation')\r\n ) {\r\n m = i18next.t('label_payment_success_reservation');\r\n (this).$ga.sendPageview('/flights/booking/payment/thankyou', 'Flights / Booking / Payment / Thankyou');\r\n }\r\n\r\n // Wait 5 seconds to give time to server to issue tickets and change status.\r\n setTimeout(() => {\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('title_thank_you'),\r\n text: m,\r\n firstBtnText: 'Перейти к заказу',\r\n firstBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const authToken = result.authToken ? '?auth_code=' + result.authToken : '';\r\n const reservationPublicId = result.reservationInfo.parentReservationPublicId ?? result.reservationInfo.reservationPublicId;\r\n router.push('/order/' + reservationPublicId + authToken);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('title_thank_you'),\r\n message: m,\r\n ok: i18next.t('button_ok'),\r\n onOkCallback: () => {\r\n const authToken = result.authToken ? '?auth_code=' + result.authToken : '';\r\n const reservationPublicId = result.reservationInfo.parentReservationPublicId ?? result.reservationInfo.reservationPublicId;\r\n router.push('/order/' + reservationPublicId + authToken);\r\n }\r\n });\r\n }\r\n }, 5000);\r\n }\r\n }\r\n else {\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `error.payment.${this.paymentModel!.selectedPaymentType.kind}.${this.paymentModel!.selectedPaymentType.paymentTypeId}`.toLowerCase(),\r\n `flights.booking.error.payment.${this.paymentModel!.selectedPaymentType.kind}.${this.paymentModel!.selectedPaymentType.paymentTypeId}`.toLowerCase(),\r\n this.gaParams\r\n );\r\n\r\n if (result.paymentInfo.inPlace.exceptionMessage) {\r\n console.error('Payment error: ' + result.paymentInfo.inPlace.exceptionMessage);\r\n }\r\n\r\n this.model.state = 'form';\r\n\r\n if (G2S.config.theme === 'aviasales') {\r\n (this.$root.$refs).fullScreenDialog.show({\r\n title: i18next.t('error_payment'),\r\n text: result.paymentInfo.inPlace.errorMessage,\r\n firstBtnText: 'Попробовать ещё раз',\r\n firstBtnFn: () => {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n },\r\n secondBtnText: 'Вернуться к заказу',\r\n secondBtnFn: () => {\r\n if (this.redirectUrl) {\r\n location.href = this.redirectUrl;\r\n } else {\r\n (this.$root.$refs).fullScreenDialog.hide();\r\n const reservationPublicId = this.model.reservation!.parentReservationPublicId ?? this.model.reservation!.reservationPublicId;\r\n router.push('/order/' + reservationPublicId);\r\n }\r\n }\r\n });\r\n } else {\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('error_payment'),\r\n message: result.paymentInfo.inPlace.errorMessage\r\n });\r\n }\r\n }\r\n }\r\n \r\n pollPaymentStatus(result: api.CreateReservationResult) {\r\n const reservationService = new api.ReservationService();\r\n\r\n const getPaymentQrStatusRequest: api.FinishPreauth3dsRequest = {\r\n reservationPublicId: result.reservationInfo.reservationPublicId,\r\n billPublicId: result.paymentInfo.billPublicId,\r\n paymentId: result.paymentInfo.paymentId\r\n };\r\n \r\n // polling the backend until payment status changes\r\n reservationService.pollPaymentQrStatus(getPaymentQrStatusRequest)\r\n .then((pollResult) => {\r\n this.$refs.sbpModal.close();\r\n this.model.state = 'loading';\r\n\r\n if (result.paymentInfo?.redirect?.url) {\r\n location.href = result.paymentInfo.redirect.url;\r\n }\r\n\r\n this.handleFinishResponse(pollResult);\r\n })\r\n .catch((error) => {\r\n this.$refs.sbpModal.close();\r\n this.model.state = 'form';\r\n if (error) {\r\n (this.$root).$refs.messageDialog.show({\r\n message: error.message\r\n });\r\n }\r\n });\r\n }\r\n\r\n onSbpModalClose() {\r\n this.model.state = 'form';\r\n api.ReservationService.needToStopSbpPolling = true;\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class OrderServiceComponent extends Vue {\r\n contentBody: string;\r\n\r\n state: string = 'loading';\r\n\r\n mounted() {\r\n window.document.title = i18next.t('label_change_or_refund');\r\n\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n new api.ContentService().getText('flight.changerefund').then(\r\n (result: api.ContentText) => {\r\n this.contentBody = result.body;\r\n this.state = 'success';\r\n },\r\n (error) => {\r\n this.state = 'failed';\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n\r\n toSupport() {\r\n (this).$ga.sendEvent('support.new', 'click', 'support.new.click');\r\n (this).$ga.reachGoal('support.new.click');\r\n (this).$ga.reachGoal('support.new.click.order');\r\n\r\n window.location.href = '/support/new';\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport { G2S } from 'core/g2s';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\nimport { ReservationModel } from 'core/flights';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface OrderViewComponentModel {\r\n state: string;\r\n error: string;\r\n title: string;\r\n reservation: api.ReservationInfo | null;\r\n status: StatusRefreshModel | null;\r\n isMaskedPersonalData: boolean;\r\n}\r\n\r\nexport interface StatusRefreshModel {\r\n loading: boolean;\r\n attemptCount: number;\r\n}\r\n\r\n@WithRender\r\n@Component\r\nexport default class OrderViewComponent extends Vue {\r\n @Prop()\r\n orderGuid: string;\r\n\r\n model: OrderViewComponentModel = {\r\n state: 'loading',\r\n error: '',\r\n title: '',\r\n reservation: null,\r\n status: {\r\n loading: false,\r\n attemptCount: 1\r\n },\r\n isMaskedPersonalData: false,\r\n }\r\n\r\n isWaitingSurcharge: boolean = false;\r\n\r\n flight: flights.FlightModel | null = null;\r\n\r\n gaParams: utils.GoogleAnalyticsParams = new utils.GoogleAnalyticsParams();\r\n\r\n pixelApplied: boolean = false;\r\n\r\n selectedPassengerId: number = 0;\r\n\r\n selectedProductIdsOnOrderPage: number[] = [];\r\n\r\n selectedProductId: number = 0;\r\n\r\n selectedProductIdInOrder: number = 0;\r\n\r\n lastHistoryStateView: string = '';\r\n\r\n cancelProductRequestsInProgress = {};\r\n cancelProductId: number = 0;\r\n cancelProductIndex: number = 0;\r\n loadingAfterPopup: boolean = false;\r\n\r\n modalProductInfo = {\r\n buttonText1: 'Оставить услугу со скидкой 50%',\r\n text: `
\r\n
\r\n

Как жаль, что вы отказываетесь от услуги умный пакет

\r\n
\r\n
\r\n

Мы расстроены и дарим вам 50% скидки на заказ данной услуги

\r\n
\r\n
`\r\n };\r\n\r\n get orderTotal(): number {\r\n return this.model.reservation!.amount - this.model.reservation!.couponDiscountAmount;\r\n }\r\n\r\n get productsInsurance(): api.Product[] {\r\n return this.model.reservation!.products.filter((item: api.Product) => {\r\n return item.type === 'Insurance';\r\n });\r\n }\r\n\r\n get productsService(): api.Product[] {\r\n return this.model.reservation!.products.filter((item: api.Product) => {\r\n return item.type === 'Service';\r\n });\r\n }\r\n\r\n get productsPackage(): api.Product[] {\r\n return this.model.reservation!.products.filter((item: api.Product) => {\r\n return item.type === 'Package';\r\n });\r\n }\r\n\r\n get selectedPassenger(): api.PassengerInfo {\r\n return utils.find(this.model.reservation!.passengers, (item: api.PassengerInfo) => {\r\n return item.passengerId === this.selectedPassengerId;\r\n });\r\n }\r\n\r\n get selectedProduct(): api.Product {\r\n return utils.find(this.model.reservation!.products, (item: api.Product) => {\r\n return item.id === this.selectedProductId;\r\n });\r\n }\r\n\r\n get selectedProductInOrder(): api.Product {\r\n return utils.find(this.model.reservation!.productsOnOrderPage.products, (item: api.Product) => {\r\n return item.id === this.selectedProductIdInOrder;\r\n });\r\n }\r\n\r\n get indexOfSelectedProduct() {\r\n return this.model.reservation!.products.indexOf(this.selectedProduct);\r\n }\r\n\r\n get totalCostOnOrderPage() {\r\n return this.selectedProductIdsOnOrderPage.reduce((acc, id) => {\r\n const product = this.model.reservation!.productsOnOrderPage.products.find(p => p.id === id)!;\r\n acc += product.billingPrice;\r\n return acc;\r\n }, 0);\r\n }\r\n\r\n get productsPurchaseUrl() {\r\n const ct = utils.Cookies.getChoiceType() ?? api.ProductChoiceType.orderPageAccepted;\r\n const ids = this.selectedProductIdsOnOrderPage.join('_');\r\n return `/order/booking/product/${this.orderGuid}/${ids}?ct=${ct}`;\r\n }\r\n\r\n mounted() {\r\n window.history.replaceState({ ...window.history.state, view: 'view' }, '', router.currentRoute.fullPath);\r\n this.setLastHistoryStateView();\r\n window.addEventListener('popstate', this.onPopState);\r\n\r\n if (this.$route.query.ct) {\r\n utils.Cookies.setChoiceType(parseInt(this.$route.query.ct));\r\n }\r\n\r\n this.loadModel();\r\n }\r\n\r\n beforeDestroy() {\r\n window.removeEventListener('popstate', this.onPopState);\r\n }\r\n\r\n setLastHistoryStateView() {\r\n this.lastHistoryStateView = window.history.state && window.history.state.view ? window.history.state.view : '';\r\n }\r\n\r\n onPopState(event) {\r\n if (event.state && event.state.view == 'flight' && this.lastHistoryStateView == 'view') {\r\n this.showFlightDetails();\r\n }\r\n else if (event.state && event.state.view == 'view' && this.lastHistoryStateView == 'flight') {\r\n this.hideFlightDetails();\r\n }\r\n }\r\n\r\n destroyed() {\r\n this.model.status!.attemptCount = 999;\r\n }\r\n\r\n getTotalLabel(label: string): string {\r\n return i18next.t(label, { i: (this.$options.filters).price(this.orderTotal) });\r\n }\r\n\r\n applyPixels() {\r\n if (this.model.reservation!.isPayed || this.model.reservation!.isTicketed) {\r\n if (!this.pixelApplied) {\r\n utils.PixelsService.setPixelForOrderConfirmation(document.getElementById('pixels')!, this.model.reservation!, this.flight);\r\n\r\n (this).$ga.sendPageview('/flights/booking/confirmation', 'Flights / Booking / Confirmation', this.gaParams);\r\n\r\n this.pixelApplied = true;\r\n }\r\n }\r\n }\r\n\r\n loadModel() {\r\n this.model.state = 'loading';\r\n this.model.title = i18next.t('title_order');\r\n window.document.title = this.model.title;\r\n\r\n document.getElementById('pixels')!.innerHTML = '';\r\n\r\n new api.ReservationService().getReservationStatus(this.orderGuid, false, false).then(\r\n (result: api.GetReservationStatusResult) => {\r\n this.model.reservation = result.reservationInfo;\r\n if (result.isMaskedPersonalData) {\r\n this.model.isMaskedPersonalData = result.isMaskedPersonalData;\r\n }\r\n\r\n this.model.title = i18next.t('label_order_with_number',\r\n { i: this.model.reservation.reservationNumber }\r\n );\r\n\r\n window.document.title = this.model.title;\r\n\r\n if (result.flight) {\r\n this.flight = new flights.FlightModel(result.flight, result);\r\n\r\n this.gaParams.dimension2 = this.flight.adapter + '_'; // Add underscore for regex filtering in GA\r\n this.gaParams.dimension3 = this.flight?.allFlightAirlinesCode?.length ? this.flight.allFlightAirlinesCode.join('_') : 'none';\r\n }\r\n this.gaParams.metric3 = this.model.reservation.passengers.length;\r\n\r\n if (this.model.reservation.isStatusPending\r\n && !this.model.reservation.reservedTillExpired) {\r\n this.model.status!.loading = true;\r\n\r\n setTimeout(() => this.refreshStatus(), 5000);\r\n } else {\r\n this.applyPixels();\r\n }\r\n\r\n this.model.state = 'view';\r\n if (this.model.reservation!.uiStatusType === 'Success' && this.model.reservation!.isTicketed) {\r\n (this.$root).$refs.dialogApp.show();\r\n }\r\n },\r\n (error) => {\r\n this.model.error = i18next.t('error_server_tryagain');\r\n\r\n if (error.response) {\r\n if (error.response.status === 404) {\r\n this.model.error = i18next.t('error_order_notfound');\r\n }\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n\r\n this.model.state = 'error';\r\n }\r\n );\r\n }\r\n\r\n refreshStatus() {\r\n if (this.model.status!.attemptCount > 30\r\n || !this.model.reservation!.isStatusPending\r\n || this.model.reservation!.reservedTillExpired) {\r\n this.model.status!.loading = false;\r\n }\r\n\r\n if (!this.model.status!.loading) {\r\n return;\r\n }\r\n\r\n console.log('Refresh status #' + this.model.status!.attemptCount + '...');\r\n\r\n new api.ReservationService().getReservationStatus(this.orderGuid, false, true).then(\r\n (result: api.GetReservationStatusResult) => {\r\n if (this.model.reservation!.reservationStatus !== result.reservationInfo.reservationStatus\r\n || this.model.reservation!.uiStatusType !== result.reservationInfo.uiStatusType) {\r\n this.model.reservation = result.reservationInfo;\r\n\r\n this.applyPixels();\r\n } else {\r\n this.model.reservation!.surchargeInfo = result.reservationInfo.surchargeInfo;\r\n }\r\n\r\n if (this.model.status!.loading) {\r\n setTimeout(() => this.refreshStatus(), 10000 * this.model.status!.attemptCount);\r\n }\r\n },\r\n (error) => {\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n\r\n this.model.status!.attemptCount++;\r\n }\r\n\r\n showSurchargeModal() {\r\n const reservationService = new api.ReservationService();\r\n const request: api.StartedReservation = {\r\n reservationPublicId: this.model.reservation!.reservationPublicId\r\n };\r\n\r\n if (this.model.reservation && this.model.reservation!.surchargeInfo) {\r\n const surchargeInfo = this.model.reservation.surchargeInfo;\r\n (this.$root).$refs.messageDialog.show({\r\n message: surchargeInfo.clientText,\r\n ok: surchargeInfo.buttonAcceptText,\r\n cancel: surchargeInfo.buttonRejectText,\r\n onOkCallback: () => {\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n 'msg.price.rise',\r\n 'flights.booking.msg.price.rise.ok',\r\n this.gaParams\r\n );\r\n this.isWaitingSurcharge = true;\r\n reservationService.CompleteStartedReservation(request)\r\n .then(() => {\r\n this.refreshStatus();\r\n },\r\n (error)=>{\r\n (this.$root).$refs.messageDialog.show({\r\n title: i18next.t('error'),\r\n message: error?.response?.data?.message ? error.response.data.message : i18next.t('error_server_tryagain')\r\n });\r\n this.isWaitingSurcharge = false;\r\n });\r\n },\r\n onCancelOrHideCallback: () => {\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n 'msg.price.rise',\r\n 'flights.booking.msg.price.rise.search',\r\n this.gaParams\r\n );\r\n this.isWaitingSurcharge = true;\r\n reservationService.RejectStartedReservation(request)\r\n .then(() => {\r\n this.refreshStatus();\r\n },\r\n (error)=>{\r\n (this.$root).$refs.messageDialog.show({\r\n title: i18next.t('error'),\r\n message: error?.response?.data?.message ? error.response.data.message : i18next.t('error_server_tryagain')\r\n });\r\n this.isWaitingSurcharge = false;\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n cancelProduct(index: number) {\r\n const productReservationId = this.model.reservation!.products[index].productReservationId;\r\n const billingPrice = this.model.reservation!.products[index].billingPrice;\r\n this.cancelProductId = productReservationId;\r\n this.cancelProductIndex = index;\r\n const request: api.CancelProductRequest = {\r\n productReservationId\r\n };\r\n\r\n this.$set(this.cancelProductRequestsInProgress, `${productReservationId}`, true);\r\n new api.ReservationService().cancelProduct(request).then(\r\n (result: api.CancelProductResponse) => {\r\n (this).$ga.sendEvent('order.view', 'product.detail', `order.view.product.detail${this.selectedProduct.saleType ? '.' + this.selectedProduct.saleType : ''}.btn.cancel${this.selectedProduct.kitId ? '.kit' + this.selectedProduct.kitId : ''}.id${this.selectedProduct.id}`.toLowerCase());\r\n if (result.success) {\r\n (this).$ga.sendEvent('order.view', 'product.detail', `order.view.product.detail.btn.success.cancel${this.selectedProduct.saleType ? '.' + this.selectedProduct.saleType : ''}${this.selectedProduct!.kitId ? '.kit' + this.selectedProduct!.kitId : ''}.id${this.selectedProduct!.id}`.toLowerCase(), this.gaParams);\r\n }\r\n\r\n this.$set(this.cancelProductRequestsInProgress, `${productReservationId}`, false);\r\n (this.$refs).modalProduct.hide();\r\n if (result.popup) {\r\n (this.$root).$refs.dialogCatchUp.show({\r\n text: result.popup.text,\r\n btnOkLabel: result.popup.firstButtonText,\r\n persistent: false,\r\n btnOkHandler: () => {\r\n this.cancelProductAfterPopup(true);\r\n },\r\n btnCloseHandler: () => {\r\n this.cancelProductAfterPopup(false);\r\n }\r\n });\r\n (this).$ga.sendEvent('order.view', 'msg.hold', `order.view.msg.hold${this.selectedProduct.saleType ? '.' + this.selectedProduct.saleType : ''}${this.selectedProduct.kitId ? '.kit' + this.selectedProduct.kitId : ''}.id${this.selectedProduct.id}`.toLowerCase(), this.gaParams);\r\n } else {\r\n // eslint-disable-next-line no-cond-assign\r\n const productPackageRules = utils.cancelProductWithPackage[this.selectedProduct.externalId];\r\n \r\n if (productPackageRules) {\r\n const deleteProducts = this.model.reservation!.products.reduce((arr, product, index) => {\r\n if (productPackageRules.includes(product.externalId)) {\r\n arr.push(index);\r\n }\r\n return arr;\r\n }, []);\r\n console.log(deleteProducts);\r\n\r\n deleteProducts.reverse().forEach((indexProd) => {\r\n this.$delete(this.model.reservation!.products, indexProd);\r\n });\r\n }\r\n\r\n this.$delete(this.model.reservation!.products, index);\r\n this.model.reservation!.amount = this.model.reservation!.amount - billingPrice;\r\n (this.$root).$refs.messageDialog.show({\r\n message: result.localizedMessage\r\n });\r\n }\r\n },\r\n (error) => {\r\n this.$set(this.cancelProductRequestsInProgress, `${productReservationId}`, false);\r\n (this.$root).$refs.messageDialog.show({\r\n title: i18next.t('error'),\r\n message: error?.response?.data?.message ? error.response.data.message : i18next.t('error_server_tryagain')\r\n });\r\n }\r\n );\r\n }\r\n\r\n cancelProductAfterPopup(applyDiscount: boolean) {\r\n const productReservationId = this.cancelProductId;\r\n const index = this.cancelProductIndex;\r\n const billingPrice = this.model.reservation!.products[index].billingPrice;\r\n const productId = this.model.reservation!.products[index].id;\r\n\r\n const request: api.CancelProductAfterPopupRequest = {\r\n applyDiscount: applyDiscount,\r\n productReservationId: this.cancelProductId\r\n };\r\n\r\n if (!this.loadingAfterPopup) {\r\n this.loadingAfterPopup = true;\r\n new api.ReservationService().cancelProductAfterPopup(request).then(\r\n (result: any) => {\r\n (this.$refs).modalCancelProduct.hide();\r\n (this.$root).$refs.dialogCatchUp.onHide();\r\n (this.$root).$refs.dialogCatchUp.onLoading(false);\r\n if (!applyDiscount && result.success) {\r\n (this).$ga.sendEvent('order.view', 'product.detail', `order.view.product.detail.btn.success.cancel${this.selectedProduct.saleType ? '.' + this.selectedProduct.saleType : ''}${this.selectedProduct!.kitId ? '.kit' + this.selectedProduct!.kitId : ''}.id${this.selectedProduct!.id}`.toLowerCase(), this.gaParams);\r\n }\r\n\r\n this.loadingAfterPopup = false;\r\n this.$set(this.cancelProductRequestsInProgress, `${productReservationId}`, false);\r\n if (result.product) {\r\n (this).$ga.sendEvent('order.view', 'msg.hold', `order.view.msg.hold${this.selectedProduct.saleType ? '.' + this.selectedProduct.saleType : ''}.btn.discount${this.selectedProduct.kitId ? '.kit' + this.selectedProduct.kitId : ''}.id${productId}`.toLowerCase(), this.gaParams);\r\n this.model.reservation!.products[index].price = result.product.price;\r\n (this.$root).$refs.messageDialog.show({\r\n title: '',\r\n message: result.localizedMessage\r\n });\r\n } else {\r\n (this).$ga.sendEvent('order.view', 'msg.hold', `order.view.msg.hold${this.selectedProduct.saleType ? '.' + this.selectedProduct.saleType : ''}.btn.not.discount${this.selectedProduct.kitId ? '.kit' + this.selectedProduct.kitId : ''}.id${productId}`.toLowerCase(), this.gaParams);\r\n this.$delete(this.model.reservation!.products, index);\r\n this.model.reservation!.amount = this.model.reservation!.amount - billingPrice;\r\n (this.$root).$refs.messageDialog.show({\r\n message: result.localizedMessage\r\n });\r\n }\r\n },\r\n (error) => {\r\n this.loadingAfterPopup = false;\r\n (this.$root).$refs.messageDialog.show({\r\n message: (error.response.data && error.response.data.message) ? error.response.data.message : i18next.t('error_server_tryagain')\r\n });\r\n }\r\n );\r\n }\r\n }\r\n\r\n @Watch('$route')\r\n onRouteChanged() {\r\n this.loadModel();\r\n }\r\n\r\n showFlightDetails() {\r\n this.setLastHistoryStateView();\r\n (this.$refs).flightDetails?.show();\r\n\r\n (this).$ga.sendEvent('flights.results', 'flight.details', 'flights.results.flight.details', this.gaParams);\r\n (this).$ga.sendPageview('/flights/search/results/details', 'Flights / Search / Results / Details', this.gaParams);\r\n }\r\n\r\n hideFlightDetails() {\r\n this.setLastHistoryStateView();\r\n (this.$refs).flightDetails.hide();\r\n }\r\n\r\n onFlightDetails() {\r\n window.history.pushState({ ...window.history.state, view: 'flight' }, '', router.currentRoute.fullPath);\r\n this.showFlightDetails();\r\n }\r\n\r\n onFlightTerms() {\r\n (this.$refs).flightTerms.show(null, null, this.model.reservation!.reservationPublicId);\r\n }\r\n\r\n onFlightSubmit() {\r\n window.history.go(-1);\r\n }\r\n\r\n onFlightDismiss() {\r\n window.history.go(-1);\r\n }\r\n\r\n onFlightBack() {\r\n window.history.go(-1);\r\n }\r\n\r\n onTermsContent(content: string, title: string) {\r\n (this.$refs).textContent.show(content, title);\r\n }\r\n\r\n onTermsAccept() {\r\n (this.$refs).modalTerms.hide();\r\n }\r\n \r\n onTerms() {\r\n // (this).$ga.sendEvent('flights.booking', 'flight.terms', 'flights.booking.flight.terms', this.gaParams);\r\n (this.$refs).modalTerms.show();\r\n }\r\n\r\n onPassengerInsurance(insurance: api.InsurancePolicy) {\r\n window.location.href = insurance.url;\r\n }\r\n\r\n onPassengerTicket(passenger: api.PassengerInfo) {\r\n window.location.href = ReservationModel.getTicketUrl(this.model.reservation!, passenger);\r\n }\r\n\r\n onPassengerAllTickets() {\r\n window.location.href = ReservationModel.getAllTicketsUrl(this.model.reservation!);\r\n }\r\n\r\n onPassengerReceipt() {\r\n window.location.href = ReservationModel.getReceiptUrl(this.model.reservation!);\r\n }\r\n\r\n onPassengerDetails(passengerId: number) {\r\n this.selectedPassengerId = passengerId;\r\n\r\n (this.$refs).modalPassenger.show();\r\n }\r\n\r\n onProductDetails(productId: number) {\r\n this.selectedProductId = productId;\r\n\r\n (this).$ga.sendEvent('order.view', 'product.detail', `order.view.product.detail${this.selectedProduct.saleType ? '.' + this.selectedProduct.saleType : ''}${this.selectedProduct.kitId ? '.kit' + this.selectedProduct.kitId : ''}.id${this.selectedProduct.id}`.toLowerCase(), this.gaParams);\r\n if (this.selectedProduct.cancelPossible) {\r\n (this).$ga.sendEvent('order.view', 'product.detail', `order.view.product.detail.btn.show.cancel${this.selectedProduct.saleType ? '.' + this.selectedProduct.saleType : ''}${this.selectedProduct!.kitId ? '.kit' + this.selectedProduct!.kitId : ''}.id${this.selectedProduct!.id}`.toLowerCase(), this.gaParams);\r\n }\r\n\r\n (this.$refs).modalProduct.show();\r\n }\r\n\r\n onTotalAmount() {\r\n (this.$refs).modalTotalAmount.show();\r\n }\r\n\r\n onSupportLink() {\r\n (this).$ga.sendEvent('support.new', 'click', 'support.new.click');\r\n (this).$ga.reachGoal('support.new.click');\r\n (this).$ga.reachGoal('support.new.click.order');\r\n router.push('/support');\r\n }\r\n\r\n detailProductOnSale(index: number) {\r\n this.cancelProductId = this.model.reservation!.productsOnOrderPage.products[index].productReservationId;\r\n this.cancelProductIndex = index;\r\n this.selectedProductIdInOrder = this.model.reservation!.productsOnOrderPage.products[index].id;\r\n\r\n (this.$refs).modalProductInOrder.show();\r\n }\r\n\r\n isTextStrikeNeeded(product: api.Product) {\r\n return product.status == api.ProductStatus.canceled\r\n || product.status == api.ProductStatus.deleted\r\n || product.status == api.ProductStatus.refunded;\r\n }\r\n\r\n crutchName(product: api.Product) { // Костыль на время тестов\r\n let newName = '';\r\n switch (product.kitId) {\r\n case 236:\r\n newName = 'Умный пакет';\r\n break;\r\n case 237:\r\n newName = 'Гарантия возврата билета в случае болезни';\r\n break;\r\n case 238:\r\n newName = 'Гарантированный возврат';\r\n break;\r\n default:\r\n newName = product.name;\r\n break;\r\n }\r\n\r\n return newName;\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport { G2S } from 'core/g2s';\r\nimport * as api from 'core/api';\r\nimport * as utils from 'core/utils';\r\nimport * as i18next from 'i18next';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class PartnerComponent extends Vue {\r\n @Prop()\r\n searchId?: string;\r\n\r\n @Prop()\r\n flightId?: string;\r\n\r\n @Prop()\r\n partnerName?: string;\r\n\r\n view: 'loading' | 'error' = 'loading';\r\n errorHtml = i18next.t('error_something_wrong');\r\n\r\n get redirectLabel() {\r\n return this.partnerName\r\n ? i18next.t('label_partner_redirect_to') + ` ${this.partnerName}`\r\n : i18next.t('label_partner_redirect');\r\n }\r\n\r\n mounted() {\r\n this.processExternalLinkRequest();\r\n }\r\n\r\n processExternalLinkRequest() {\r\n if (this.flightId && this.searchId) {\r\n const request: api.ExternalLinkRequest = {\r\n flightId: this.flightId,\r\n searchId: this.searchId\r\n };\r\n\r\n new api.FlightService().externalLink(request).then(\r\n (result: api.ExternalLinkResponse) => {\r\n if (result?.method.toLocaleLowerCase() == 'get'\r\n && result.url) {\r\n window.location.replace(result.url);\r\n }\r\n if (result?.method.toLocaleLowerCase() == 'post'\r\n && result.url\r\n && result.pixelUrl\r\n && result.params) {\r\n let pixel = window.document.createElement('img');\r\n\r\n pixel.width = 0;\r\n pixel.height = 0;\r\n pixel.src = result.pixelUrl;\r\n (this.$refs.component as HTMLDivElement).appendChild(pixel);\r\n\r\n let params: api.RequestParam[] = [];\r\n\r\n for (let key in result.params) {\r\n params.push({\r\n paramName: key,\r\n paramValue: result.params[key]\r\n });\r\n }\r\n window.setTimeout(() => {\r\n utils.Http.redirect({\r\n method: result.method,\r\n url: result.url,\r\n requestParameters: params\r\n });\r\n }, 1000);\r\n }\r\n },\r\n (error) => {\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n this.view = 'error';\r\n }\r\n );\r\n } else {\r\n window.location.href = '/';\r\n }\r\n }\r\n}","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport { required, email } from 'vuelidate/lib/validators';\r\nimport * as auth from 'core/auth';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface PasswordComponentModel {\r\n state: string;\r\n email: string;\r\n submitted: boolean;\r\n}\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n model: {\r\n email: { required, email }\r\n }\r\n }\r\n})\r\nexport default class PasswordComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: PasswordComponentModel = {\r\n state: 'form',\r\n email: '',\r\n submitted: false\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('label_password_recovery');\r\n }\r\n\r\n onSubmit() {\r\n (this).$ga.sendEvent('password', 'btn.submit', 'password.btn.submit');\r\n\r\n if (this.$v.model) {\r\n this.$v.model.$touch();\r\n\r\n if (this.$v.model.$error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_fields')\r\n });\r\n } else {\r\n this.model.submitted = true;\r\n\r\n this.$auth.forgottenPassword(this.model.email).then(\r\n () => {\r\n this.model.submitted = false;\r\n\r\n this.model.state = 'result';\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.message\r\n ? error.response.data.message\r\n : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport { required, minLength } from 'vuelidate/lib/validators';\r\nimport * as auth from 'core/auth';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface PasswordNewComponentModel {\r\n state: string;\r\n newPassword: string;\r\n submitted: boolean;\r\n}\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n model: {\r\n newPassword: { required, minLength: minLength(6) }\r\n }\r\n }\r\n})\r\nexport default class PasswordNewComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: PasswordNewComponentModel = {\r\n state: 'form',\r\n newPassword: '',\r\n submitted: false\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('label_password_recovery');\r\n\r\n if (!this.$route.query.token) {\r\n router.push('/account/password');\r\n }\r\n }\r\n\r\n onSubmit() {\r\n (this as any).$ga.sendEvent('account.password.new', 'btn.save', 'account.password.new.btn.save');\r\n\r\n if (this.$v.model) {\r\n this.$v.model.$touch();\r\n\r\n if (this.$v.model.$error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_fields')\r\n });\r\n } else {\r\n this.model.submitted = true;\r\n\r\n this.$auth.setPassword(this.$route.query.token as string, this.model.newPassword).then(\r\n () => {\r\n this.model.submitted = false;\r\n\r\n this.model.state = 'result';\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.message\r\n ? error.response.data.message\r\n : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport { required, minLength } from 'vuelidate/lib/validators';\r\nimport * as auth from 'core/auth';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n model: {\r\n email: { required, minLength: minLength(5) },\r\n password: { required, minLength: minLength(6) }\r\n }\r\n }\r\n})\r\nexport default class RegistrationComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: any = {\r\n state: 'form',\r\n email: '',\r\n password: '',\r\n submitted: false\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_registration');\r\n }\r\n\r\n onSubmit() {\r\n (this).$ga.sendEvent('registration', 'btn.submit', 'registration.btn.submit');\r\n\r\n if (this.$v.model) {\r\n this.$v.model.$touch();\r\n\r\n if (this.$v.model.$error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_fields')\r\n });\r\n } else {\r\n this.model.submitted = true;\r\n\r\n this.$auth.registration(this.model.email, this.model.password).then(\r\n () => {\r\n this.model.submitted = false;\r\n\r\n this.model.state = 'result';\r\n\r\n (this).$ga.sendEvent('registration', 'success', 'registration.success');\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.localizedMessage\r\n ? error.response.data.localizedMessage\r\n : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n\r\n (this).$ga.sendEvent('registration', 'error', 'registration.error');\r\n }\r\n );\r\n\r\n (this).$ga.sendPageview('/registration/submitted', 'Registration / Submitted', null);\r\n }\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class RentalCarsComponent extends Vue {\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_car_rent');\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport router from 'src/router';\r\nimport { required, minLength } from 'vuelidate/lib/validators';\r\nimport * as auth from 'core/auth';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n model: {\r\n email: { required, minLength: minLength(5) },\r\n password: { required, minLength: minLength(6) },\r\n otp: { required, minLength: minLength(6) }\r\n }\r\n }\r\n})\r\nexport default class SigninComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n model: any = {\r\n email: '',\r\n password: '',\r\n otp: '',\r\n submitted: false,\r\n state: 'password'\r\n }\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_account_signin');\r\n\r\n if (this.$route.query.auth === 'phone') {\r\n this.model.state = 'sms';\r\n }\r\n }\r\n\r\n onSubmit() {\r\n if (this.model.state === 'password') {\r\n this.onSubmitWithPassword();\r\n } else if (this.model.state === 'sms') {\r\n this.onSubmitWithSms();\r\n } else if (this.model.state === 'otp') {\r\n this.onSubmitWithOtp();\r\n }\r\n }\r\n\r\n onSubmitWithPassword() {\r\n this.$v.model!.email.$touch();\r\n this.$v.model!.password.$touch();\r\n\r\n (this).$ga.sendEvent('signin', 'btn.signin', 'signin.btn.signin');\r\n\r\n if (this.$v.model!.email.$error || this.$v.model!.password.$error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_fields')\r\n });\r\n } else {\r\n this.model.submitted = true;\r\n\r\n (this.$auth).signIn(this.model.email, this.model.password).then(\r\n () => {\r\n this.model.submitted = false;\r\n\r\n router.push(this.$route.query.redirect ? this.$route.query.redirect as string : '/account');\r\n\r\n (this).$ga.sendEvent('signin', 'success', 'signin.success');\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.localizedMessage ? error.response.data.localizedMessage : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n\r\n (this).$ga.sendEvent('signin', 'error', 'signin.error');\r\n }\r\n );\r\n }\r\n }\r\n\r\n onSubmitWithSms() {\r\n this.$v.model!.email.$touch();\r\n\r\n (this).$ga.sendEvent('signin', 'btn.signin', 'signin.btn.signin');\r\n\r\n if (this.$v.model!.$error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_fields')\r\n });\r\n } else {\r\n this.model.submitted = true;\r\n\r\n (this.$auth).sendOneTimePassword(this.model.email).then(\r\n () => {\r\n this.model.submitted = false;\r\n\r\n this.model.state = 'otp';\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.localizedMessage ? error.response.data.localizedMessage : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n\r\n (this).$ga.sendEvent('signin', 'error', 'signin.error');\r\n }\r\n );\r\n }\r\n }\r\n\r\n onSubmitWithOtp() {\r\n this.$v.model!.otp.$touch();\r\n\r\n (this).$ga.sendEvent('signin', 'btn.signin', 'signin.btn.signin');\r\n\r\n if (this.$v.model!.$error) {\r\n (this.$root.$refs).messageDialog.show({\r\n message: i18next.t('error_fields')\r\n });\r\n } else {\r\n this.model.submitted = true;\r\n\r\n (this.$auth).signInByOneTimePassword(this.model.email, this.model.otp).then(\r\n () => {\r\n this.model.submitted = false;\r\n\r\n router.push(this.$route.query.redirect ? this.$route.query.redirect as string : '/account');\r\n\r\n (this).$ga.sendEvent('signin', 'success', 'signin.success');\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error?.response?.data?.localizedMessage ? error.response.data.localizedMessage : i18next.t('error_server_tryagain')\r\n });\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n\r\n (this).$ga.sendEvent('signin', 'error', 'signin.error');\r\n }\r\n );\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as i18next from 'i18next';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class SupportComponent extends Vue {\r\n gaParams: utils.GoogleAnalyticsParams = new utils.GoogleAnalyticsParams();\r\n\r\n mounted() {\r\n window.document.title = i18next.t('title_support');\r\n }\r\n\r\n onPhoneClick(phone: string) {\r\n (this).$ga.sendPageview('/contacts/phone/click', 'Contacts / Phone / Click');\r\n (this).$ga.sendEvent('contacts', 'btn.phone', 'contacts.btn.phone', this.gaParams);\r\n\r\n window.location.href = 'tel:' + phone;\r\n }\r\n\r\n onFaqClick() {\r\n (this).$ga.sendEvent('zendesk', 'btn.help', 'zendesk.btn.help', this.gaParams);\r\n\r\n window.location.href = '/faq';\r\n }\r\n\r\n toSupport() {\r\n (this).$ga.sendEvent('support.new', 'click', 'support.new.click');\r\n (this).$ga.reachGoal('support.new.click');\r\n (this).$ga.reachGoal('support.new.click.support');\r\n\r\n window.location.href = '/support/new';\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\nimport { required, minLength, maxLength } from 'vuelidate/lib/validators';\r\nimport { validationEmail, validateExchangeDesiredDate } from 'core/validators';\r\nimport * as api from 'core/api';\r\nimport { G2S } from 'core/g2s';\r\nimport * as auth from 'core/auth';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\ntype SupportNewComponentState = 'form' | 'success';\r\n\r\nexport interface SupportNewComponentModel {\r\n state: SupportNewComponentState;\r\n submitted: boolean;\r\n error: string;\r\n category: string | null;\r\n subCategory: string | null;\r\n description: string | null;\r\n orderNumber: string;\r\n exchangeDesiredDate: string | null;\r\n email: string;\r\n}\r\nfunction validateSubCategory(value, parentVm): boolean {\r\n return value !== '' || parentVm.category !== 'baggage' && value == '';\r\n}\r\n@WithRender\r\n@Component({\r\n validations: {\r\n model: {\r\n category: { required },\r\n subCategory: { validateSubCategory },\r\n description: { required },\r\n orderNumber: { minLength: minLength(7), maxLength: maxLength(7) },\r\n email: { required, minLength: minLength(5), validationEmail },\r\n exchangeDesiredDate: { validateExchangeDesiredDate }\r\n }\r\n }\r\n})\r\nexport default class SupportNewComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n gaParams: utils.GoogleAnalyticsParams = new utils.GoogleAnalyticsParams();\r\n\r\n @Prop()\r\n orderNumber: string;\r\n\r\n model: SupportNewComponentModel = {\r\n state: 'form',\r\n submitted: false,\r\n error: '',\r\n category: '',\r\n subCategory: '',\r\n description: '',\r\n orderNumber: '',\r\n email: '',\r\n exchangeDesiredDate: ''\r\n }\r\n\r\n refundInfo: api.RefundInfo = {\r\n clientText: '',\r\n headerText: '',\r\n youPaidText: '',\r\n weWillRefundText: '',\r\n termText: '',\r\n buttonAcceptText: '',\r\n buttonRejectText: '',\r\n buttonWriteManuallyText: '',\r\n refundSum: 0,\r\n paidSum: 0,\r\n refundSumCurrency: ''\r\n };\r\n\r\n categoryOptions: utils.SupportCategoryOption[] = [];\r\n baggageAdditionalOptions: utils.SupportCategoryOption[] = [];\r\n\r\n isVisibleAutovoid = false;\r\n autovoidTimeout: number | null = null;\r\n autovoidLabel = {\r\n adviseText: '',\r\n accountText: ''\r\n };\r\n\r\n acceptedFileTypes = [\r\n 'text/plain',\r\n 'image/jpeg',\r\n 'image/pjpeg',\r\n 'image/png',\r\n 'application/msword',\r\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n 'application/vnd.ms-excel',\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'application/pdf'\r\n ];\r\n\r\n selectedFiles = [];\r\n\r\n mounted() {\r\n let url = G2S.config.desktopUrl + '/support/new/';\r\n window.location.href = url;\r\n return;\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n this.model.state = 'form';\r\n this.model.submitted = false;\r\n \r\n this.categoryOptions = utils.Support.categoryOptions();\r\n this.baggageAdditionalOptions = utils.Support.baggageOptions();\r\n\r\n if ((this).$route.query.t) {\r\n this.model.category = (this).$route.query.t;\r\n }\r\n\r\n if (this.orderNumber) {\r\n this.model.orderNumber = this.orderNumber;\r\n (this.$refs).orderNumber.blur();\r\n } else if ((this).$route.query.g) {\r\n new api.ReservationService().getReservationStatus((this).$route.query.g, false, false).then(\r\n (result: api.GetReservationStatusResult) => {\r\n this.model.orderNumber = result.reservationInfo.reservationNumber;\r\n (this.$refs).orderNumber.blur();\r\n }\r\n );\r\n }\r\n\r\n this.$auth.getSupportText(G2S.config.locale).then(\r\n (result) => {\r\n this.autovoidLabel = {\r\n adviseText: result.adviseText,\r\n accountText: result.accountText\r\n };\r\n },\r\n (error)=>{\r\n console.log(error);\r\n }\r\n );\r\n\r\n if ((this).$route.query.email) {\r\n this.model.email = (this).$route.query.email;\r\n } else if (this.$auth.authenticated) {\r\n this.$auth.getCurrentUser().then(\r\n (result: api.User) => {\r\n this.model.email = result.email || '';\r\n }\r\n );\r\n }\r\n }\r\n\r\n getAcceptedFileTypes(): string {\r\n return this.acceptedFileTypes.join(',');\r\n }\r\n\r\n getDescriptionPlaceholder(): string | null {\r\n switch (this.model.category) {\r\n case 'flight_change':\r\n return i18next.t('label_support_request_description_flight_change');\r\n case 'flight_refund':\r\n return i18next.t('label_support_request_description_flight_refund');\r\n case 'cancel_same_day':\r\n return i18next.t('label_support_request_description_cancel_same_day');\r\n case 'baggage':\r\n return i18next.t('label_support_request_description_baggage');\r\n case 'changes':\r\n return i18next.t('label_support_request_description_changes');\r\n case 'add_services':\r\n return i18next.t('label_support_request_description_add_services');\r\n case 'error':\r\n return i18next.t('label_support_request_description_error');\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n formatFileSize(number: number) {\r\n if (number < 1024) {\r\n return number + ' b';\r\n } else if (number > 1024 && number < 1048576) {\r\n return (number / 1024).toFixed(1) + ' Kb';\r\n } else if (number > 1048576) {\r\n return (number / 1048576).toFixed(1) + ' Mb';\r\n }\r\n }\r\n\r\n checkErrors() {\r\n this.model.error = '';\r\n this.$v.model!.$touch();\r\n \r\n if (this.$v.model!.$error) {\r\n this.model.error = i18next.t('error_fields');\r\n }\r\n\r\n if ((this).$v.model.orderNumber.$error) {\r\n this.model.error = i18next.t('error_order_notvalid');\r\n } else if (!(this).$v.model.email.validationEmail) {\r\n this.model.error = i18next.t('error_email_wrong');\r\n } else if ((this).$v.model.exchangeDesiredDate.$error && this.model.category == 'flight_change') {\r\n this.model.error = 'Дата указана неверно. Проверьте корректность введенных данных и обратите внимание, что для обмена доступны даты, начиная с завтрашнего дня';\r\n } else if ((this.model.category === 'flight_change'\r\n || this.model.category === 'flight_refund')\r\n && !this.model.orderNumber) {\r\n this.model.error = i18next.t('error_support_request_order_required');\r\n } else if ((this).$v.model.description.$error) {\r\n this.model.error = this.model.description\r\n ? i18next.t('label_support_request_desc_wrong')\r\n : i18next.t('label_support_request_desc_empty');\r\n } else if((this).$v.model.subCategory.$error) {\r\n this.model.error = i18next.t('error_support_sub_category_required');\r\n }\r\n }\r\n\r\n submitTicket() {\r\n // Use form data for file upload\r\n const request = new FormData();\r\n request.append('category', this.model.category);\r\n request.append('description', this.model.description);\r\n request.append('email', this.model.email);\r\n request.append('orderNumber', this.model.orderNumber);\r\n request.append('clientDevice', JSON.stringify(G2S.config.clientDevice));\r\n\r\n if(this.model.subCategory){\r\n request.append('subCategory', this.model.subCategory);\r\n }\r\n\r\n if (this.model.category == 'flight_change' && G2S.config.marketCode == 'ru') {\r\n request.append('exchangeDesiredDate', this.model.exchangeDesiredDate);\r\n }\r\n\r\n for (let i = 0; i < this.selectedFiles.length; i++) {\r\n request.append('files[' + i + ']', this.selectedFiles[i]);\r\n }\r\n\r\n this.model.submitted = true;\r\n new api.SupportService().create(request).then(\r\n (result: api.SupportCreateResult) => {\r\n this.model.submitted = false;\r\n if (result.success) {\r\n (this.$root).$refs.messageDialog.show({\r\n persistent: true,\r\n title: i18next.t('title_thank_you'),\r\n message: i18next.t('label_support_request_success'),\r\n onOkCallback: () => {\r\n window.location.href = G2S.config.theme !== 'aviasales' ? '/' : 'https://aviasales.ru';\r\n }\r\n });\r\n (this).$ga.sendEvent('support.new', 'submit.success', 'support.new.submit.success', this.gaParams);\r\n (this).$ga.reachGoal('support.new.success');\r\n }\r\n else {\r\n (this).$ga.sendEvent('support.new', 'error', 'support.new.error', this.gaParams);\r\n (this.$root).$refs.messageDialog.show({\r\n title: i18next.t('error'),\r\n message: result.message\r\n });\r\n }\r\n },\r\n (error) => {\r\n this.model.submitted = false;\r\n (this).$ga.sendEvent('support.new', 'error', 'support.new.server.error', this.gaParams);\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n\r\n let errorMessage = i18next.t('error_server_tryagain');\r\n\r\n if (error?.response?.data?.localizedMessage) {\r\n errorMessage = error.response.data.localizedMessage;\r\n }\r\n\r\n (this.$root).$refs.messageDialog.show({\r\n title: i18next.t('error'),\r\n message: errorMessage\r\n });\r\n }\r\n );\r\n }\r\n\r\n checkVisibleAutovoid() {\r\n if (this.model.category === 'cancel_same_day' && String(this.model.orderNumber).length >= 7) {\r\n this.autovoidTimeout = window.setTimeout(() => {\r\n this.$auth.checkVoidAvailability(this.model.orderNumber).then(({isAutoVoidAvailable}) => {\r\n this.isVisibleAutovoid = isAutoVoidAvailable;\r\n });\r\n }, 500);\r\n } else {\r\n this.isVisibleAutovoid = false;\r\n }\r\n }\r\n\r\n onChangeOrderNumber() {\r\n if (this.autovoidTimeout) {\r\n clearTimeout(this.autovoidTimeout);\r\n }\r\n\r\n this.checkVisibleAutovoid();\r\n }\r\n\r\n onFilesAdd() {\r\n (this.$refs).files.click();\r\n }\r\n\r\n onFilesClear() {\r\n (this.$refs).files.value = '';\r\n this.selectedFiles = [];\r\n }\r\n\r\n onFilesChange() {\r\n this.selectedFiles = (this.$refs).files.files;\r\n }\r\n\r\n onCategoryChange(val) {\r\n if (val == 'flight_refund') {\r\n (this).$ga.sendEvent('refund.tickets', 'select.topic', 'refund.tickets.select.topic.support.new', this.gaParams);\r\n }\r\n\r\n this.checkVisibleAutovoid();\r\n }\r\n\r\n onAcceptCancelingOrder() {\r\n this.$auth.createVoidSupport(this.model.orderNumber, this.model.email, this.model.description).then(\r\n () => {\r\n this.$auth.getProcessStartedText(G2S.config.locale).then(\r\n (result) => {\r\n (this.$refs).dialog.hide();\r\n (this.$root).$refs.messageDialog.show({\r\n title: result.headerText,\r\n message: result.messageText,\r\n ok: result.buttonAcceptText,\r\n onOkCallback: () => {\r\n window.location.href = '/';\r\n }\r\n });\r\n },\r\n (error) => {\r\n (this.$refs).dialog.hide();\r\n (this.$root).$refs.messageDialog.show({\r\n message: (error.response.data && error.response.data.localizedMessage) ? error.response.data.localizedMessage : i18next.t('error_server_tryagain')\r\n });\r\n }\r\n );\r\n },\r\n (error) => {\r\n (this.$refs).dialog.hide();\r\n (this.$root.$refs).messageDialog.show({\r\n message: (error.response.data && error.response.data.localizedMessage) ? error.response.data.localizedMessage : i18next.t('error_server_tryagain')\r\n });\r\n }\r\n );\r\n }\r\n\r\n onClose() {\r\n (this.$refs).dialog.hide();\r\n }\r\n\r\n onSubmit() {\r\n (this).$ga.sendEvent('support.new', 'btn.submit', 'support.new.btn.submit', this.gaParams);\r\n (this).$ga.reachGoal('support.new.submit');\r\n\r\n this.checkErrors();\r\n\r\n if (this.model.error) {\r\n (this.$root).$refs.messageDialog.show({\r\n title: i18next.t('error'),\r\n message: this.model.error\r\n });\r\n (this).$ga.sendEvent('support.new', 'error', 'support.new.error', this.gaParams);\r\n\r\n return;\r\n }\r\n\r\n const getRefundInfo = () => {\r\n this.$auth.getRefundInfoWithWriteUs(G2S.config.locale, this.model.orderNumber).then(\r\n (result) => {\r\n this.model.submitted = false;\r\n this.refundInfo = result;\r\n (this.$refs).dialog.show();\r\n },\r\n (error) => this.submitTicket()\r\n );\r\n };\r\n\r\n if (this.isVisibleAutovoid) {\r\n this.model.submitted = true;\r\n if (this.$auth.currentUser) {\r\n this.$auth.ordersExists(this.model.orderNumber).then(\r\n (result) => {\r\n if (result.orderExists) {\r\n getRefundInfo();\r\n } else {\r\n this.submitTicket();\r\n }\r\n },\r\n (error) => this.submitTicket()\r\n );\r\n } else {\r\n new api.SupportService().checkReservationEmail(this.model.orderNumber, this.model.email).then(\r\n (result) => {\r\n if (result.isSameEmail) {\r\n getRefundInfo();\r\n } else {\r\n this.submitTicket();\r\n }\r\n },\r\n (error) => this.submitTicket()\r\n );\r\n }\r\n } else {\r\n this.submitTicket();\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { G2S } from 'core/g2s';\r\nimport router from 'src/router';\r\nimport * as api from 'core/api';\r\nimport * as auth from 'core/auth';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class SupportListComponent extends Vue {\r\n $auth: auth.AuthService; // Injected in G2S.init\r\n\r\n view = 'loading';\r\n\r\n gaParams: utils.GoogleAnalyticsParams = new utils.GoogleAnalyticsParams();\r\n\r\n reservationsSupportInfo?: api.ReservationSupportInfo[];\r\n\r\n selectedReservationSupportInfo: api.ReservationSupportInfo | null = null;\r\n\r\n mounted() {\r\n if (this.$auth.authenticated) {\r\n this.loadModel();\r\n } else {\r\n this.$nextTick(() => {\r\n if (this.$route.query.token) {\r\n // If token in url the try to confirm user\r\n this.$auth.confirm(this.$route.query.token as string).then(\r\n (result: api.User) => {\r\n if (result.hasPassword) {\r\n this.loadModel();\r\n } else {\r\n window.location.href = '/signin';\r\n }\r\n },\r\n () => {\r\n router.push({\r\n path: '/signin',\r\n query: { auth: 'phone', redirect: '/support/list' }\r\n });\r\n }\r\n );\r\n } else {\r\n router.push({\r\n path: '/signin',\r\n query: { auth: 'phone', redirect: '/support/list' }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n loadModel() {\r\n const marketCode = G2S.config.marketCode;\r\n const locale = G2S.config.locale;\r\n\r\n new api.SupportService().getReservationsSupportInformation(marketCode, locale).then(\r\n (result: api.SupportGetReservationsSupportInformationResult) => {\r\n this.reservationsSupportInfo = result.reservationsSupportInfo;\r\n\r\n this.view = 'view';\r\n },\r\n (error) => {\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n\r\n openStatus(info: api.ReservationSupportInfo) {\r\n if (!info.ticketExist) {\r\n (this).$ga.sendEvent('account', 'shown.popup', 'shown.popup.no.refund.requests', this.gaParams);\r\n }\r\n\r\n this.selectedReservationSupportInfo = info;\r\n (this.$refs).modalStatus.show();\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { G2S } from 'core/g2s';\r\nimport * as api from 'core/api';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class SupportAllrequestsComponent extends Vue {\r\n view = 'loading';\r\n\r\n tickets: api.SupportTicket[] = [];\r\n\r\n expandedTicketIndexes: number[] = [];\r\n\r\n commentsHeadLength = 3;\r\n\r\n mounted() {\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n const marketCode = G2S.config.marketCode;\r\n const locale = G2S.config.locale;\r\n\r\n new api.SupportService().getHistory(marketCode, locale).then(\r\n (result) => {\r\n this.tickets = result.tickets;\r\n\r\n this.view = 'view';\r\n },\r\n (error) => {\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n\r\n this.view = 'view';\r\n }\r\n );\r\n }\r\n\r\n isExpanded(ticketIndex: number) {\r\n return this.expandedTicketIndexes.includes(ticketIndex);\r\n }\r\n\r\n toggleComments(ticketIndex: number) {\r\n if (this.isExpanded(ticketIndex)) {\r\n this.expandedTicketIndexes = this.expandedTicketIndexes.filter(index => index !== ticketIndex);\r\n } else {\r\n this.expandedTicketIndexes.push(ticketIndex);\r\n }\r\n }\r\n\r\n getComments(ticketIndex: number) {\r\n const comments = this.tickets[ticketIndex].comments;\r\n\r\n if (this.isExpanded(ticketIndex)) {\r\n return comments;\r\n } else {\r\n return comments.slice(0, this.commentsHeadLength);\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class TermsComponent extends Vue {\r\n @Prop()\r\n contentId: string;\r\n\r\n mounted() {\r\n window.document.title = i18next.t('label_terms');\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport default class TestComponent extends Vue {\r\n mounted() {\r\n window.document.title = 'Test';\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport VueRouter from 'vue-router';\r\nimport * as auth from 'core/auth';\r\nimport moment from 'moment';\r\nimport AboutComponent from './views/about';\r\nimport AccountBonusesComponent from './views/account/bonuses';\r\nimport AccountComponent from './views/account';\r\nimport AccountCouponsComponent from './views/account/coupons';\r\nimport AccountOrdersComponent from './views/account/orders';\r\nimport AccountCorporateComponent from './views/account/corporate';\r\nimport AccountProfileComponent from './views/account/profile';\r\nimport AccountProfileEmailComponent from './views/account/profile/email';\r\nimport AccountProfilePhoneComponent from './views/account/profile/phone';\r\nimport AccountSettingsComponent from './views/account/settings';\r\nimport AccountSettingsPasswordComponent from './views/account/settings/password';\r\nimport AccountSettingsRemovalComponent from './views/account/settings/removal';\r\nimport AccountWelcomeComponent from './views/account/welcome';\r\nimport AccountWelcomePasswordComponent from './views/account/welcome/password';\r\nimport AccountProductsBuyComponent from './views/account/products/buy';\r\nimport AccountProductsBuyOrderComponent from './views/account/products/buy/order';\r\nimport AccountUnsubscribeComponent from './views/account/unsubscribe';\r\nimport Error404Component from './views/error404';\r\nimport FlightsBookingComponent from './views/flights/booking';\r\nimport FlightsComponent from './views/flights';\r\nimport FlightsSearchResultsComponent from './views/flights/search-results';\r\nimport HomeComponent from './views/home';\r\nimport OrderBookingProductComponent from './views/order/booking/product';\r\nimport OrderComponent from './views/order';\r\nimport OrderPaymentComponent from './views/order/payment';\r\nimport OrderServiceComponent from './views/order/service';\r\nimport OrderViewComponent from './views/order/view';\r\nimport PartnerComponent from './views/partner';\r\nimport PasswordComponent from './views/password';\r\nimport PasswordNewComponent from './views/password/new';\r\nimport RegistrationComponent from './views/registration';\r\nimport RentalCarsComponent from './views/rentalcars';\r\nimport SignInComponent from './views/signin';\r\nimport SupportComponent from './views/support';\r\nimport SupportNewComponent from './views/support/new';\r\nimport SupportListComponent from './views/support/list';\r\nimport SupportAllrequestsComponent from './views/support/allrequests';\r\nimport TermsComponent from './views/terms';\r\nimport TestComponent from './views/test';\r\nimport TrainsComponent from './views/trains';\r\n\r\nVue.use(VueRouter);\r\n\r\nexport const router = new VueRouter({\r\n mode: 'history',\r\n routes: [\r\n { path: '/', component: HomeComponent, meta: { gaTitle: 'Home' } },\r\n { path: '/about', component: AboutComponent, meta: { gaTitle: 'About' } },\r\n { path: '/account', component: AccountComponent, meta: { gaTitle: 'Account' } },\r\n { path: '/account/bonuses', component: AccountBonusesComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Account / Bonuses' } },\r\n { path: '/account/coupons', component: AccountCouponsComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Account / Coupons' } },\r\n { path: '/account/orders', component: AccountOrdersComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Account / Orders' } },\r\n { path: '/account/corporate', component: AccountCorporateComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Account / Corporate account' } },\r\n { path: '/account/password', component: PasswordComponent, beforeEnter: auth.AuthService.routeAnonymousOnly, meta: { gaTitle: 'Password' } },\r\n { path: '/account/password/new', component: PasswordNewComponent, beforeEnter: auth.AuthService.routeAnonymousOnly, meta: { gaTitle: 'Password / New' } },\r\n { path: '/account/profile', component: AccountProfileComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Account / Profile' } },\r\n { path: '/account/profile/email', component: AccountProfileEmailComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Account / Profile / Email' } },\r\n { path: '/account/profile/phone', component: AccountProfilePhoneComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Account / Profile / Phone' } },\r\n { path: '/account/settings', component: AccountSettingsComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Account / Settings' } },\r\n { path: '/account/settings/password', component: AccountSettingsPasswordComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Account / Settings / Password' } },\r\n { path: '/account/settings/removal', component: AccountSettingsRemovalComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Account / Settings / Removal' } },\r\n { path: '/account/welcome', component: AccountWelcomeComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Account / Welcome' } },\r\n { path: '/account/welcome/password', component: AccountWelcomePasswordComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Account / Welcome / Password' } },\r\n { path: '/account/products/buy', component: AccountProductsBuyComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, meta: { gaTitle: 'Products / Buy' } },\r\n { path: '/account/products/buy/:orderGuid', component: AccountProductsBuyOrderComponent, beforeEnter: auth.AuthService.routeAuthenticatedOnly, props: true, meta: { gaTitle: 'Products / Buy / Order' } },\r\n { path: '/account/unsubscribe', component: AccountUnsubscribeComponent, meta: { gaTitle: 'Account / Unsubscribe' } },\r\n { path: '/cars', component: RentalCarsComponent, meta: { gaTitle: 'Rentalcars' } },\r\n { path: '/flights', component: FlightsComponent, meta: { gaTitle: 'Flights' } },\r\n { path: '/flights/:searchFrom/:searchTo/:searchDate/:searchPassengers/:searchClass/:searchFilters?', name: 'flightSearch', component: FlightsSearchResultsComponent, props: true, meta: { gaTitle: 'Flights / Search results' } },\r\n { path: '/flights/:searchFrom/:searchTo/:searchDate/:searchPassengers/:searchClass/booking/:searchId/:flightId', name: 'flightBooking', component: FlightsBookingComponent, props: true, meta: { gaTitle: 'Flights / Booking' } },\r\n { path: '/flights/:searchFrom/:searchTo/:searchDate/:searchFrom2/:searchTo2/:searchDate2/:searchPassengers/:searchClass/:searchFilters?', name: 'flightSearchRoundtrip', component: FlightsSearchResultsComponent, props: true, meta: { gaTitle: 'Flights / Search results' } },\r\n { path: '/flights/:searchFrom/:searchTo/:searchDate/:searchFrom2/:searchTo2/:searchDate2/:searchPassengers/:searchClass/booking/:searchId/:flightId', name: 'flightBookingRoundtrip', component: FlightsBookingComponent, props: true, meta: { gaTitle: 'Flights / Booking' } },\r\n {\r\n path: '/flights/:searchFrom/:searchTo/:searchFilters?', redirect: route => {\r\n route.params.searchFrom2 = route.params.searchTo;\r\n route.params.searchTo2 = route.params.searchFrom;\r\n route.params.searchDate = moment().add(7, 'd').format('MMDD');\r\n route.params.searchDate2 = moment().add(14, 'd').format('MMDD');\r\n route.params.searchClass = 'e';\r\n route.params.searchPassengers = '100';\r\n\r\n return '/flights/:searchFrom/:searchTo/:searchDate/:searchFrom2/:searchTo2/:searchDate2/:searchPassengers/:searchClass/:searchFilters?';\r\n }\r\n },\r\n { path: '/order', component: OrderComponent, meta: { gaTitle: 'Order' } },\r\n { path: '/order/booking/product/:orderGuid/:productId', component: OrderBookingProductComponent, props: true, meta: { gaTitle: 'Order / Booking / Product' } },\r\n { path: '/order/service', component: OrderServiceComponent, meta: { gaTitle: 'Order / Service' } },\r\n { path: '/order/payment/:orderGuid/:billPublicId?', name: 'order-payment', component: OrderPaymentComponent, props: true, meta: { gaTitle: 'Order / Payment' } },\r\n { path: '/order/payment/:orderGuid/:billPublicId/message-:message', component: OrderPaymentComponent, props: true, meta: { gaTitle: 'Order / Payment' } },\r\n { path: '/order/:orderGuid', component: OrderViewComponent, props: true, meta: { gaTitle: 'Order / View' } },\r\n { path: '/registration', component: RegistrationComponent, beforeEnter: auth.AuthService.routeAnonymousOnly, meta: { gaTitle: 'Registration' } },\r\n { path: '/signin', component: SignInComponent, beforeEnter: auth.AuthService.routeAnonymousOnly, meta: { gaTitle: 'Signin' } },\r\n { path: '/support', component: SupportComponent, meta: { gaTitle: 'Support' } },\r\n { path: '/support/new', component: SupportNewComponent, meta: { gaTitle: 'Support / New' } },\r\n { path: '/support/list', component: SupportListComponent, meta: { gaTitle: 'Support / List' } },\r\n { path: '/support/allrequests', component: SupportAllrequestsComponent, meta: { gaTitle: 'Support / Allrequests' } },\r\n {\r\n path: '/terms',\r\n component: TermsComponent,\r\n props: { contentId: 'terms' },\r\n meta: { gaTitle: 'Terms' }\r\n },\r\n {\r\n path: '/terms-:name',\r\n component: TermsComponent,\r\n props: route => ({ contentId: `terms${route.params.name}` }),\r\n meta: { gaTitle: 'Terms' }\r\n },\r\n { path: '/test', component: TestComponent },\r\n /*{ path: '/trains', component: TrainsComponent, meta: { gaTitle: 'Trains' } },*/\r\n {\r\n path: '/partner',\r\n component: PartnerComponent,\r\n props: (route) => ({\r\n searchId: route.query.sid,\r\n flightId: route.query.fid,\r\n partnerName: route.query.pn\r\n }),\r\n meta: { gaTitle: 'Partner' }\r\n },\r\n { path: '*', component: Error404Component } // Not found\r\n ]\r\n});\r\n\r\nrouter.afterEach((to) => {\r\n (Vue).prototype.$ga.sendPageview(to.fullPath, to.meta.gaTitle ? to.meta.gaTitle : window.document.title);\r\n // Fix for bug when modal was not closed before push to new route\r\n document.body.classList.remove('with-modal');\r\n});\r\n\r\nexport default router;\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class ContentModalComponent extends Vue {\r\n contentId: string;\r\n contentBody: string | null = null;\r\n title: string = '';\r\n\r\n show(contentId: string, title: string) {\r\n if (contentId != this.contentId\r\n || this.contentBody === 'ERROR') {\r\n this.contentBody = null;\r\n }\r\n\r\n this.contentId = contentId;\r\n this.title = title;\r\n\r\n (this.$refs).modalTextContent.show();\r\n\r\n this.makeRequest();\r\n }\r\n\r\n hide() {\r\n (this.$refs).modalTextContent.hide();\r\n }\r\n\r\n onRetry() {\r\n this.contentBody = null;\r\n\r\n this.makeRequest();\r\n }\r\n\r\n makeRequest() {\r\n new api.ContentService().getText(this.contentId).then(\r\n (result: api.ContentText) => {\r\n this.contentBody = result.body;\r\n },\r\n (error) => {\r\n this.contentBody = 'ERROR';\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class ContentTextComponent extends Vue {\r\n @Prop()\r\n contentId: string;\r\n\r\n contentBody: string;\r\n\r\n state: string = 'loading';\r\n\r\n mounted() {\r\n this.loadModel();\r\n }\r\n\r\n loadModel() {\r\n new api.ContentService().getText(this.contentId).then(\r\n (result: api.ContentText) => {\r\n this.contentBody = result.body;\r\n this.state = 'success';\r\n },\r\n (error) => {\r\n this.state = 'failed';\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class CustomDialogComponent extends Vue {\r\n @Prop()\r\n title: string;\r\n\r\n @Prop()\r\n message: string;\r\n\r\n @Prop()\r\n prompt: object;\r\n\r\n @Prop()\r\n options: object;\r\n\r\n @Prop()\r\n ok: boolean | string | object;\r\n\r\n @Prop()\r\n cancel: boolean | string | object;\r\n\r\n @Prop()\r\n stackButtons: boolean;\r\n\r\n @Prop()\r\n preventClose: boolean;\r\n\r\n @Prop()\r\n noEscDismiss: boolean;\r\n\r\n @Prop()\r\n noBackdropDismiss: boolean;\r\n\r\n @Prop()\r\n noRefocus: boolean;\r\n\r\n @Prop()\r\n position: string;\r\n\r\n @Prop()\r\n color: string;\r\n\r\n @Prop()\r\n value: boolean;\r\n\r\n title_: string | null = null;\r\n message_: string | null = null;\r\n ok_: boolean | string | object | null = null;\r\n cancel_: boolean | string | object | null = null;\r\n onOkCallback: Function | null = null;\r\n onCancelOrHideCallback: Function | null = null;\r\n\r\n show(options: {\r\n title?: string;\r\n message?: string;\r\n ok?: boolean | string | object;\r\n cancel?: boolean | string | object;\r\n onOkCallback?: Function;\r\n onCancelOrHideCallback?: Function;\r\n }): void {\r\n this.clearData();\r\n this.title_ = options.title || null;\r\n this.message_ = options.message || null;\r\n this.ok_ = options.ok || true;\r\n this.cancel_ = options.cancel || null;\r\n this.onOkCallback = options.onOkCallback || null;\r\n this.onCancelOrHideCallback = options.onCancelOrHideCallback || null;\r\n (this.$refs).dialog.show();\r\n }\r\n\r\n clearData(): void {\r\n this.title_ = null;\r\n this.message_ = null;\r\n this.ok_ = null;\r\n this.cancel_ = null;\r\n this.onOkCallback = null;\r\n this.onCancelOrHideCallback = null;\r\n }\r\n\r\n onOk(): void {\r\n if (this.onOkCallback instanceof Function) {\r\n this.onOkCallback();\r\n }\r\n this.$emit('ok');\r\n }\r\n\r\n onCancel(): void {\r\n if (this.onCancelOrHideCallback instanceof Function) {\r\n this.onCancelOrHideCallback();\r\n }\r\n this.$emit('cancel');\r\n }\r\n\r\n onShow(): void {\r\n this.$emit('show');\r\n }\r\n\r\n onHide(): void {\r\n this.$emit('hide');\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface DialogCatchUpModel {\r\n contentClass: string;\r\n text: string;\r\n size: string;\r\n persistent?: boolean;\r\n centerActions?: boolean;\r\n btnOkLabel?: string;\r\n btnCancelLabel?: string;\r\n btnOkHandler?: Function;\r\n btnCancelHandler?: Function;\r\n btnCloseHandler?: Function;\r\n}\r\n\r\n@WithRender\r\n@Component\r\nexport class DialogCatchUpComponent extends Vue {\r\n contentClass: string = '';\r\n text: string = '';\r\n size: string = 'md';\r\n persistent: boolean = false;\r\n centerActions?: boolean = false;\r\n btnOkLabel: string = '';\r\n btnCancelLabel?: string = '';\r\n btnOkHandler?: Function;\r\n btnCancelHandler?: Function;\r\n btnCloseHandler?: Function;\r\n loadingStatus = false;\r\n\r\n \r\n onLoading(state: boolean) {\r\n this.loadingStatus = state;\r\n }\r\n\r\n onHide(): void {\r\n (this).$refs.dialog.hide();\r\n }\r\n\r\n onOk() {\r\n if (this.btnOkHandler) {\r\n this.btnOkHandler();\r\n }\r\n }\r\n onCancel() {\r\n (this).$refs.dialog.hide();\r\n\r\n if (this.btnCancelHandler) {\r\n this.btnCancelHandler();\r\n }\r\n }\r\n\r\n onClose() {\r\n (this).$refs.dialog.hide();\r\n\r\n if (this.btnCloseHandler) {\r\n this.btnCloseHandler();\r\n }\r\n }\r\n\r\n show(model: DialogCatchUpModel) {\r\n this.contentClass = model.contentClass;\r\n this.text = model.text;\r\n this.size = model.size ? model.size : 'md';\r\n this.centerActions = model.centerActions ? model.centerActions : false;\r\n this.persistent = model.persistent ? model.persistent : false;\r\n this.btnOkLabel = model.btnOkLabel ? model.btnOkLabel : i18next.t('button_ok');\r\n this.btnCancelLabel = model.btnCancelLabel;\r\n this.btnOkHandler = model.btnOkHandler;\r\n this.btnCancelHandler = model.btnCancelHandler;\r\n this.btnCloseHandler = model.btnCloseHandler;\r\n (this).$refs.dialog.show();\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { G2S } from 'core/g2s';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class DialogAppComponent extends Vue {\r\n onClose(): void {\r\n (this).$refs.dialog.hide();\r\n }\r\n\r\n onApple() {\r\n (this).$refs.dialog.hide();\r\n\r\n window.open('https://apps.apple.com/ru/app/mego-travel-%D0%B0%D0%B2%D0%B8%D0%B0%D0%B1%D0%B8%D0%BB%D0%B5%D1%82%D1%8B-%D0%B4%D0%B5%D1%88%D0%B5%D0%B2%D0%BE/id6444725059', '_blank');\r\n }\r\n \r\n onGoogle() {\r\n (this).$refs.dialog.hide();\r\n\r\n window.open('https://play.google.com/store/apps/details?id=travel.mego.app', '_blank');\r\n }\r\n\r\n show() {\r\n if (G2S.config.locale === 'ru' && G2S.config.theme === 'mego') {\r\n (this).$refs.dialog.show();\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class DrawerMenuComponent extends Vue {\r\n onFaqClick() {\r\n (this).$ga.sendEvent('zendesk', 'btn.help', 'zendesk.btn.help');\r\n\r\n window.location.href = '/faq';\r\n }\r\n onSupportClick() {\r\n (this).$ga.sendEvent('support.new', 'click', 'support.new.click');\r\n (this).$ga.reachGoal('support.new.click');\r\n (this).$ga.reachGoal('support.new.click.' + this.getPathForMetrik());\r\n }\r\n getPathForMetrik() {\r\n let currentPath = '';\r\n if (this.$router.currentRoute.path === '/account') {\r\n currentPath = 'account';\r\n } else if (this.$router.currentRoute.path.includes('order')) {\r\n currentPath = 'order';\r\n } else if (this.$router.currentRoute.path.includes('about')) {\r\n currentPath = 'about';\r\n } else {\r\n currentPath = 'unknow';\r\n }\r\n return currentPath;\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as api from 'core/api';\r\nimport * as i18next from 'i18next';\r\nimport * as flights from 'core/flights';\r\nimport moment from 'moment';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class FlightCardComponent extends Vue {\r\n @Prop()\r\n flight: flights.FlightModel;\r\n\r\n @Prop()\r\n flightIndex: number;\r\n\r\n @Prop()\r\n filterFlight: flights.FlightFilterModel;\r\n\r\n @Prop()\r\n cheapestFlightId: string;\r\n\r\n @Prop()\r\n fasterFlightId: string;\r\n\r\n @Prop()\r\n bestFlightId: string;\r\n\r\n flightUniqueAirlinesLength: number;\r\n\r\n getLegDurationTime(leg: flights.LegModel){\r\n let result = '';\r\n\r\n if(leg.duration.asHours() < 1){\r\n result += Math.round(leg.duration.asMinutes()) + ' ' + i18next.t('label_minutes_short');\r\n } else {\r\n result += Math.round(leg.duration.asHours()) + i18next.t('label_tabs_hours');\r\n }\r\n\r\n return result.replace('.', ',');\r\n }\r\n\r\n getSegmentDurationTime(segment: flights.SegmentModel){\r\n let result = '';\r\n\r\n if (segment.connection.duration.asHours() < 1) {\r\n result += Math.round(segment.connection.duration.asMinutes()) + ' ' + i18next.t('label_minutes_short');\r\n } else {\r\n result += Math.round(segment.connection.duration.asHours() * 2) / 2 + i18next.t('label_tabs_hours');\r\n }\r\n\r\n return result.replace('.', ',');\r\n }\r\n\r\n getSegmentLabel(leg: flights.LegModel, segment: flights.SegmentModel, segmentIndex: number): string {\r\n let result = '';\r\n\r\n if (segment.arrivalDestination.iataCode === leg.segments[segmentIndex + 1].departureDestination.iataCode) {\r\n result += segment.arrivalDestination.iataCode;\r\n } else {\r\n result += segment.arrivalDestination.city.iataCode;\r\n }\r\n\r\n if (leg.segments.length > 1 && segmentIndex < (leg.segments.length - 2)) {\r\n result += ', ';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n selectFlight() {\r\n this.$emit('select', this.filterFlight);\r\n }\r\n\r\n legsHasDifferentAirlines() {\r\n return this.flight.legs[0].segments[0].airline.iataCode !== this.flight.legs[1].segments[0].airline.iataCode;\r\n }\r\n\r\n getLegsSegmentsAirlinesDistinct() {\r\n const result: api.Airline[] = [];\r\n const map: string[] = [];\r\n const segments: flights.SegmentModel[] = [];\r\n\r\n this.flight.legs.forEach((leg) => {\r\n leg.segments.forEach((segment) => {\r\n segments.push(segment);\r\n });\r\n });\r\n\r\n for (const segment of segments) {\r\n if (!map.includes(segment.airline.uniqueId)) {\r\n map.push(segment.airline.uniqueId);\r\n result.push(segment.airline);\r\n }\r\n }\r\n\r\n this.flightUniqueAirlinesLength = result.length;\r\n return result;\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\ninterface FullScreenDialogOptions {\r\n title?: string;\r\n text?: string;\r\n firstBtnText?: string;\r\n firstBtnFn?: () => void | Promise;\r\n secondBtnText?: string;\r\n secondBtnFn?: () => void | Promise;\r\n}\r\n\r\n@WithRender\r\n@Component\r\nexport class FullScreenDialogComponent extends Vue {\r\n visible = false;\r\n options: FullScreenDialogOptions;\r\n\r\n show(options: FullScreenDialogOptions) {\r\n this.options = options;\r\n this.visible = true;\r\n }\r\n\r\n hide() {\r\n this.visible = false;\r\n this.options = {};\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { G2S } from 'core/g2s';\r\nimport * as utils from 'core/utils';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n@WithRender\r\n@Component\r\nexport class RegionSelectorComponent extends Vue {\r\n\r\n @Prop()\r\n markets: []; \r\n\r\n \r\n selectedMarket: any = null;\r\n isUserCancelSelection: boolean = false;\r\n marketsTranslates: any = [\r\n {marketCode: 'en', text:'Select your local website to display the best flight options', button: 'Accept'},\r\n {marketCode: 'ae', text:'حدد موقع الويب المحلي الخاص بك لعرض أفضل خيارات الرحلات الجوية', button: 'قبول'},\r\n {marketCode: 'az', text:'Ən yaxşı uçuş seçimlərini göstərmək üçün yerli veb saytınızı seçin', button: 'Qəbul edin'},\r\n {marketCode: 'br', text:'Selecione seu site local para exibir as melhores opções de voo', button: 'Aceitar'},\r\n {marketCode: 'ca', text:'Select your local website to display the best flight options', button: 'Accept'},\r\n {marketCode: 'de', text:'Wählen Sie Ihre lokale Website aus, um die besten Flugoptionen anzuzeigen', button: 'Annehmen'},\r\n {marketCode: 'dk', text:'Vælg dit lokale websted for at vise de bedste flymuligheder', button: 'Acceptere'},\r\n {marketCode: 'es', text:'Seleccione su sitio web local para mostrar las mejores opciones de vuelo', button: ' Aceptar'},\r\n {marketCode: 'fr', text:'Sélectionnez votre site Web local pour afficher les meilleures options de vol', button: 'Accepter'},\r\n {marketCode: 'gr', text:'Επιλέξτε τον τοπικό σας ιστότοπο για να εμφανίσετε τις καλύτερες επιλογές πτήσης', button: 'Αποδέχομαι'},\r\n {marketCode: 'hu', text:'Válassza ki helyi webhelyét a legjobb repülési lehetőségek megjelenítéséhez', button: 'Elfogad'},\r\n {marketCode: 'id', text:'Pilih situs web lokal Anda untuk menampilkan opsi penerbangan terbaik', button: 'Menerima'},\r\n {marketCode: 'il', text:'Select your local website to display the best flight options', button: 'Accept'},\r\n {marketCode: 'in', text:'Select your local website to display the best flight options', button: 'Accept'},\r\n {marketCode: 'it', text:'Seleziona il tuo sito web locale per visualizzare le migliori opzioni di volo', button: 'Accettare'},\r\n {marketCode: 'kz', text:'Выберите региональный сайт для отображения оптимальных перелетов', button: 'Далее'},\r\n {marketCode: 'mx', text:'Seleccione su sitio web local para mostrar las mejores opciones de vuelo', button: 'Aceptar'},\r\n {marketCode: 'my', text:'Pilih tapak web tempatan anda untuk memaparkan pilihan penerbangan terbaik', button: 'Terima'},\r\n {marketCode: 'nl', text:'Selecteer uw lokale website om de beste vluchtopties weer te geven', button: 'Aanvaarden'},\r\n {marketCode: 'pl', text:'Wybierz lokalną stronę internetową, aby wyświetlić najlepsze opcje lotów', button: 'Zaakceptować'},\r\n {marketCode: 'pt', text:'Selecione seu site local para exibir as melhores opções de voo', button: 'Aceitar'},\r\n {marketCode: 'ro', text:'Selectați site-ul dvs. web local pentru a afișa cele mai bune opțiuni de zbor', button: 'Accept'},\r\n {marketCode: 'ru', text:'Выберите региональный сайт для отображения оптимальных перелетов', button: 'Далее'},\r\n {marketCode: 'se', text:'Välj din lokala webbplats för att visa de bästa flygalternativen', button: 'Acceptera'},\r\n {marketCode: 'tr', text:'En iyi uçuş seçeneklerini görüntülemek için yerel web sitenizi seçin', button: 'Kabul'}\r\n ];\r\n \r\n mounted() {\r\n try {\r\n this.isUserCancelSelection = Boolean(utils.Cookies.getIsUserCancelSelectionLanguage());\r\n // this.selectedMarketCode = utils.Cookies.getUserLanguage();\r\n } catch (error) {\r\n this.isUserCancelSelection = false;\r\n }\r\n if(this.markets){ \r\n this.selectedMarket = this.markets.find(market=>{\r\n return G2S.config.clientDevice.language.includes((market).code);\r\n });\r\n }\r\n }\r\n\r\n get isRegionSelectionActive(){\r\n if(this.$route.path !== '/' || this.isUserCancelSelection){\r\n return false;\r\n }\r\n if(!G2S.config.clientDevice.language.includes(G2S.config.marketCode)){\r\n (this).$ga.sendEvent('market', 'msg', 'market.msg');\r\n return true;\r\n }\r\n }\r\n\r\n get selectedMarketTranslate() {\r\n return this.marketsTranslates.find(market=> G2S.config.clientDevice.language.includes((market).marketCode))\r\n || this.marketsTranslates.find(market=> 'en' === (market).marketCode);\r\n }\r\n\r\n onChangeMarket(market) {\r\n this.selectedMarket = market;\r\n }\r\n\r\n close() {\r\n utils.Cookies.setIsUserCancelSelectionLanguage(this.selectedMarket?.code);\r\n (this).$ga.sendEvent('market', 'cliсk.x', 'market.cliсk.x');\r\n this.isUserCancelSelection = true;\r\n }\r\n\r\n apply() {\r\n (this).$ga.sendEvent('market', 'cliсk.further', 'market.cliсk.further');\r\n utils.Cookies.setIsUserCancelSelectionLanguage(this.selectedMarket?.code);\r\n\r\n if(this.selectedMarket.MarketCode != G2S.config.marketCode) {\r\n (this).$ga.sendEvent('global.header', `market.change.${G2S.config.marketCode}_${this.selectedMarket?.code}`, `global.header.market.change.${G2S.config.marketCode}_${this.selectedMarket?.code}`);\r\n setTimeout(() => {\r\n location.href = location.protocol + '//' + (this.selectedMarket?.code === 'en' ? '' : this.selectedMarket?.code + '-') + 'm.' + G2S.config.cookieDomain + location.pathname;\r\n }, 100);\r\n } else {\r\n this.isUserCancelSelection = true; \r\n }\r\n }\r\n}","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { G2S } from 'core/g2s';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\ninterface Market {\r\n code: string;\r\n url: string;\r\n name: string;\r\n nameNative: string;\r\n currency: string;\r\n currencySymbol: string;\r\n}\r\n\r\n@WithRender\r\n@Component\r\nexport class SwitchLanguageComponent extends Vue {\r\n @Prop()\r\n markets: Market[]; \r\n\r\n @Prop()\r\n currentMarket: any;\r\n \r\n @Prop()\r\n isMenuAdditional: boolean;\r\n \r\n currencyValue: string = '';\r\n languageValue: string = '';\r\n marketCode: string = '';\r\n gaClientID: string = ''; \r\n \r\n get currency() {\r\n return this.currencyValue;\r\n }\r\n\r\n get language() {\r\n return this.languageValue;\r\n }\r\n\r\n get filteredMarkets() {\r\n return this.markets; // Для ограничений маркета со стороны vue\r\n }\r\n\r\n mounted() {\r\n this.gaClientID = utils.Cookies.getGaClientId();\r\n this.marketCode = G2S.config.marketCode;\r\n }\r\n\r\n openLanguageModal() {\r\n (this).$refs.languageModal.show();\r\n }\r\n\r\n getCurrencySymbol(code) {\r\n return utils.String.currencySymbol(code);\r\n }\r\n\r\n setCurrency(newValue: string) {\r\n this.currencyValue = newValue;\r\n }\r\n\r\n changeCurrentMarket(market) {\r\n if(this.isMenuAdditional){\r\n this.$emit('on-change', market);\r\n (this).$refs.languageModal.hide();\r\n }else {\r\n this.onApply(market.code);\r\n }\r\n }\r\n\r\n setLanguage(newValue: string) {\r\n this.languageValue = newValue;\r\n }\r\n\r\n onOpenDropdow() {\r\n (this).$ga.sendEvent('market', 'open.dropdown', 'market.open.dropdown');\r\n }\r\n \r\n onApply(code) {\r\n location.href = location.protocol+ '//' + code + '-' + 'm.' + G2S.config.cookieDomain + location.pathname;\r\n }\r\n}","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\nimport { FlightStopKind } from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class FlightDetailsComponent extends Vue {\r\n @Prop()\r\n flight: flights.FlightModel;\r\n\r\n @Prop()\r\n passengerCount: number;\r\n\r\n @Prop()\r\n submitLabel: string;\r\n\r\n @Prop()\r\n searchId?: string;\r\n\r\n @Prop({ default: true })\r\n canGoBack: boolean;\r\n\r\n getBaggageLabel(flightBaggage: api.FlightBaggage, isCabin: boolean): string {\r\n let label = utils.Baggage.getLabel(flightBaggage, isCabin);\r\n\r\n if (label == i18next.t('label_baggage_without')) {\r\n label = i18next.t('label_baggage_without_short');\r\n }\r\n if (label == i18next.t('label_baggage_cabin_without')) {\r\n label = i18next.t('label_baggage_cabin_without_short');\r\n }\r\n\r\n return label;\r\n }\r\n\r\n hasBaggage(legOrSegment: flights.LegModel | flights.SegmentModel): boolean {\r\n return legOrSegment.baggage && (legOrSegment.baggage.pieceWeight > 0 || legOrSegment.baggage.pieces > 0);\r\n }\r\n\r\n hasBaggageCabin(legOrSegment: flights.LegModel | flights.SegmentModel): boolean {\r\n return legOrSegment.baggageCabin && (legOrSegment.baggageCabin.pieceWeight > 0 || legOrSegment.baggageCabin.pieces > 0);\r\n }\r\n\r\n getStopLabel(stop: flights.SegmentStopModel, stopIndex: number, stopsCount: number): string {\r\n return stop.destination.iataCode + ((stopsCount > 1 && stopIndex < stopsCount - 1) ? ',' : '');\r\n }\r\n\r\n markerOwner() {\r\n return utils.Cookies.getMarkerOwner();\r\n }\r\n\r\n show() {\r\n (this.$refs).modalFlight.show();\r\n }\r\n\r\n hide() {\r\n (this.$refs).modalFlight.hide();\r\n }\r\n\r\n onFlightKind() {\r\n const flightKind = this.flight.flightKind == 'RegularSpecial' ? 'regularspecial' : this.flight.flightKind.toLowerCase();\r\n (this.$refs).textContentFlightKind.show(\r\n 'flight.kind.' + flightKind,\r\n i18next.t('label_flight_kind_' + flightKind)\r\n );\r\n }\r\n\r\n onSubmit() {\r\n this.$emit('submit', (this.$refs).modalFlight);\r\n }\r\n\r\n onFlightTerms() {\r\n this.$emit('terms', this.flight);\r\n }\r\n\r\n onGoBack() {\r\n this.$emit('back', (this.$refs).modalFlight);\r\n }\r\n\r\n onShow() {\r\n this.$emit('show', (this.$refs).modalFlight);\r\n\r\n if (this.searchId) {\r\n new api.RetailRocket().flightDetailsOpened({\r\n flightId: this.flight.uniqueId,\r\n searchId: this.searchId\r\n });\r\n }\r\n }\r\n\r\n onHide() {\r\n this.$emit('hide', (this.$refs).modalFlight);\r\n }\r\n\r\n onDismiss() {\r\n this.$emit('dismiss', (this.$refs).modalFlight);\r\n }\r\n\r\n onStopClick(segment: flights.SegmentModel) {\r\n if (segment.nextSegmentStop == FlightStopKind.ByPassenger) {\r\n (this.$refs).textContentFlightKind.show('flight.stopKind.byPassenger', i18next.t('label_flight_stop_self_tranfer'));\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { required } from 'vuelidate/lib/validators';\r\nimport { Watch } from 'vue-property-decorator';\r\nimport moment from 'moment';\r\nimport * as i18next from 'i18next';\r\nimport router from '../../../router';\r\nimport { G2S } from 'core/g2s';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport interface DestinationViewModel {\r\n name?: string;\r\n parentName?: string;\r\n iataCode?: string;\r\n}\r\n\r\nexport interface FlightSearchFormModel {\r\n params: flights.FlightSearchParams;\r\n destinationFrom?: DestinationViewModel;\r\n destinationTo?: DestinationViewModel;\r\n destinationLookupFrom: string;\r\n destinationLookupTo: string;\r\n submitted: boolean;\r\n}\r\n\r\nexport function toSameAsFrom(value, parentVm) {\r\n if (parentVm.from === value) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function departureMinDate(value) {\r\n const now = moment().startOf('day');\r\n if (moment(value).isBefore(now)) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function returnBeforeDate(value, parentVm) {\r\n if (parentVm.departure\r\n && moment(value).isBefore(moment(parentVm.departure))\r\n && parentVm.roundtrip) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function passengersTotal(value) {\r\n if (value.adults + value.children + value.infants > 9) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function infantsWithAdults(value, parentVm) {\r\n if (value > 0 && value > parentVm.adults) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n model: {\r\n params: {\r\n from: { required },\r\n to: { required, toSameAsFrom },\r\n departure: { departureMinDate },\r\n return: { returnBeforeDate },\r\n passengers: {\r\n passengersTotal,\r\n infants: { infantsWithAdults }\r\n }\r\n }\r\n }\r\n }\r\n})\r\nexport class FlightSearchFormComponent extends Vue {\r\n // There are no flights after 331 day\r\n maxDate = moment().add(331, 'day').startOf('day');\r\n\r\n model: FlightSearchFormModel = {\r\n params: {\r\n from: '',\r\n to: '',\r\n departure: moment().add(7, 'days').startOf('day').toDate(),\r\n return: moment().add(14, 'days').startOf('day').toDate(),\r\n roundtrip: true,\r\n class: flights.BookingClass.Economic,\r\n passengers: {\r\n adults: 1,\r\n children: 0,\r\n infants: 0\r\n }\r\n },\r\n destinationFrom: undefined,\r\n destinationTo: undefined,\r\n destinationLookupFrom: '',\r\n destinationLookupTo: '',\r\n submitted: false\r\n }\r\n\r\n isInputStarted: boolean = false;\r\n isDataWasSelected: boolean = false;\r\n\r\n searchType: string = 'roundtrip';\r\n\r\n modalDestinationMode: string = '';\r\n modalDateMode: string = '';\r\n\r\n @Watch('model.destinationLookupFrom', {deep: true})\r\n onChangeDestinationLookupFrom() {\r\n if(!this.model.destinationLookupFrom){\r\n this.model.params.from = '';\r\n (this).model.destinationFrom = {\r\n name: '',\r\n parentName: '',\r\n iataCode: ''\r\n };\r\n }\r\n }\r\n\r\n @Watch('model.destinationLookupTo', {deep: true})\r\n onChangeDestinationLookupTo() {\r\n if(!this.model.destinationLookupTo){\r\n this.model.params.to = '';\r\n (this).model.destinationTo = {\r\n name: '',\r\n parentName: '',\r\n iataCode: ''\r\n };\r\n }\r\n }\r\n \r\n\r\n @Watch('model.destinationFrom.iataCode', {deep: true})\r\n onChangeDestinationFrom() {\r\n if(this.model.destinationFrom?.name){\r\n this.model.destinationLookupFrom = this.model.destinationFrom.name;\r\n }\r\n }\r\n @Watch('model.destinationTo.iataCode', {deep: true})\r\n onChangeDestinationTo() {\r\n if(this.model.destinationTo?.name){\r\n this.model.destinationLookupTo = this.model.destinationTo.name;\r\n }\r\n }\r\n\r\n get classLabel() {\r\n return flights.BookingClass.classLabel(this.model.params.class);\r\n }\r\n \r\n get classOptions() {\r\n const result: { label: string; value: string }[] = [];\r\n\r\n flights.BookingClass.listForSearch().forEach((c) => {\r\n result.push({\r\n label: flights.BookingClass.classLabel(c),\r\n value: c\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n get calendarMonths() {\r\n const result: {\r\n date: moment.Moment;\r\n days: any[];\r\n }[] = [];\r\n\r\n const now = moment().startOf('day');\r\n const date = now.clone().startOf('month');\r\n\r\n while (date.diff(this.maxDate) < 0) {\r\n const item: {\r\n date: moment.Moment;\r\n days: any[];\r\n } = {\r\n date: date.clone(),\r\n days: []\r\n };\r\n\r\n const startWeek = date.clone().isoWeekday(G2S.config.locale !== 'ru' ? 'Sunday' : 'Monday').startOf('month').week();\r\n const monthStart = date.clone().isoWeekday(G2S.config.locale !== 'ru' ? 'Sunday' : 'Monday').week(startWeek).startOf('week');\r\n const monthEnd = date.clone().endOf('month');\r\n\r\n while (monthStart.diff(monthEnd) < 0) {\r\n let d: any = {};\r\n\r\n if (monthStart.month() == date.month()) {\r\n const isYesterday = monthStart.diff(now, 'days') == -1;\r\n d = {\r\n number: monthStart.date(),\r\n date: (monthStart.isSameOrAfter(now) && monthStart.isSameOrBefore(this.maxDate)) ? monthStart.format('YYYY-MM-DD') : '',\r\n isYesterday,\r\n isToday: monthStart.diff(now) === 0,\r\n isDeparture: monthStart.isSame(this.model.params.departure!),\r\n isReturn: this.model.params.roundtrip && monthStart.isSame(this.model.params.return!),\r\n isCurrent: false,\r\n isActive: false\r\n };\r\n }\r\n if (d.isDeparture\r\n || d.isReturn\r\n || (this.model.params.roundtrip\r\n && monthStart.isAfter(this.model.params.departure!)\r\n && monthStart.isBefore(this.model.params.return!)\r\n )\r\n ) {\r\n d.isActive = true;\r\n }\r\n\r\n if (d.isDeparture || d.isReturn) {\r\n d.isCurrent = true;\r\n d.isActive = false;\r\n }\r\n\r\n item.days.push(d);\r\n\r\n monthStart.add(1, 'days');\r\n }\r\n\r\n result.push(item);\r\n\r\n date.add(1, 'months');\r\n }\r\n return result;\r\n }\r\n\r\n get caledarWeekdays() {\r\n return moment.weekdaysShort(true);\r\n }\r\n\r\n get totalPassengers() {\r\n return this.model.params.passengers.adults\r\n + this.model.params.passengers.children\r\n + this.model.params.passengers.infants;\r\n }\r\n\r\n dateToUppercase(text: string) {\r\n if (!text) return text;\r\n return text.split(' ').map(s => s[0].toUpperCase() + s.slice(1)).join(' ');\r\n }\r\n\r\n startedSearchInput() {\r\n if (!this.isInputStarted) {\r\n (this).$ga.sendEvent('flights.search', 'submit.error', 'flights.search.submit.input.started');\r\n this.isInputStarted = true;\r\n }\r\n }\r\n\r\n getDestinationViewModel(apiDestination: api.Destination): DestinationViewModel {\r\n const result: DestinationViewModel = {\r\n name: apiDestination.localizedName,\r\n parentName: '',\r\n iataCode: apiDestination.iataCode\r\n };\r\n\r\n if (apiDestination.city\r\n && apiDestination.city.localizedName != apiDestination.localizedName) {\r\n result.parentName = apiDestination.city.localizedName;\r\n }\r\n\r\n if (apiDestination.country) {\r\n if (result.parentName && result.parentName.length > 0) {\r\n result.parentName += ', ';\r\n }\r\n result.parentName += apiDestination.country.localizedName;\r\n }\r\n\r\n return result;\r\n }\r\n mounted() {\r\n const historyItems: flights.SearchHistoryItem[] = new flights.FlightSearchService().getHistoryItems();\r\n\r\n if (historyItems && historyItems.length) {\r\n const url = historyItems[0].url.split('/');\r\n const passengersFromUrl = url[url.length - 2];\r\n\r\n this.model.params.from = url[1];\r\n this.model.params.to = url[2];\r\n this.model.params.departure = historyItems[0].departure;\r\n this.model.params.return = historyItems[0].return;\r\n this.model.params.roundtrip = historyItems[0].return ? true : false;\r\n this.model.params.class = historyItems[0].class;\r\n this.model.params.passengers = {\r\n adults: parseInt(passengersFromUrl[0]),\r\n children: parseInt(passengersFromUrl[1]),\r\n infants: parseInt(passengersFromUrl[2])\r\n };\r\n this.model.destinationFrom = {\r\n name: '',\r\n parentName: '',\r\n iataCode: url[1]\r\n };\r\n this.model.destinationTo = {\r\n name: '',\r\n parentName: '',\r\n iataCode: url[2]\r\n };\r\n this.model.destinationLookupFrom = historyItems[0].from;\r\n this.model.destinationLookupTo = historyItems[0].to;\r\n }\r\n\r\n if (this.$store.getters.flightSearchParams) {\r\n // There are stored search params - let's use them\r\n this.model.params.from = this.$store.getters.flightSearchParams.from;\r\n this.model.params.to = this.$store.getters.flightSearchParams.to;\r\n this.model.params.departure = this.$store.getters.flightSearchParams.departure;\r\n this.model.params.return = this.$store.getters.flightSearchParams.return;\r\n this.model.params.roundtrip = this.$store.getters.flightSearchParams.roundtrip;\r\n this.model.params.class = this.$store.getters.flightSearchParams.class;\r\n this.model.params.passengers.adults = this.$store.getters.flightSearchParams.passengers.adults;\r\n this.model.params.passengers.children = this.$store.getters.flightSearchParams.passengers.children;\r\n this.model.params.passengers.infants = this.$store.getters.flightSearchParams.passengers.infants;\r\n this.model.destinationFrom = {\r\n name: '',\r\n parentName: '',\r\n iataCode: this.model.params.from\r\n };\r\n this.model.destinationTo = {\r\n name: '',\r\n parentName: '',\r\n iataCode: this.model.params.to\r\n };\r\n }\r\n\r\n if (historyItems && historyItems.length\r\n || this.$store.getters.flightSearchParams) {\r\n // Get destination details\r\n new api.DestinationService().list([this.model.params.from, this.model.params.to]).then(\r\n (result: api.Destination[]) => {\r\n let d = utils.find(result, (item) => {\r\n return item.iataCode === this.model.params.from;\r\n });\r\n\r\n if (d) {\r\n const m = this.getDestinationViewModel(d);\r\n if (this.model.destinationFrom) {\r\n this.model.destinationFrom.name = m.name;\r\n this.model.destinationFrom.parentName = m.parentName;\r\n }\r\n }\r\n\r\n d = utils.find(result, (item) => {\r\n return item.iataCode === this.model.params.to;\r\n });\r\n\r\n if (d) {\r\n const m = this.getDestinationViewModel(d);\r\n if (this.model.destinationTo) {\r\n this.model.destinationTo.name = m.name;\r\n this.model.destinationTo.parentName = m.parentName;\r\n }\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n onDestinationSwap() {\r\n if (this.model.destinationFrom) {\r\n const tmp = {\r\n name: this.model.destinationFrom.name,\r\n parentName: this.model.destinationFrom.parentName,\r\n iataCode: this.model.destinationFrom.iataCode\r\n };\r\n\r\n this.model.destinationFrom = this.model.destinationTo;\r\n this.model.destinationTo = tmp;\r\n\r\n if (this.model.destinationFrom) {\r\n this.model.params.from = this.model.destinationFrom!.iataCode!;\r\n } else {\r\n this.model.params.from = '';\r\n }\r\n this.model.params.to = this.model.destinationTo!.iataCode!;\r\n } else if (this.model.destinationTo) {\r\n const tmp = {\r\n name: this.model.destinationTo.name,\r\n parentName: this.model.destinationTo.parentName,\r\n iataCode: this.model.destinationTo.iataCode\r\n };\r\n\r\n this.model.destinationTo = this.model.destinationFrom;\r\n this.model.destinationFrom = tmp;\r\n\r\n if (this.model.destinationTo) {\r\n this.model.params.to = this.model.destinationTo!.iataCode!;\r\n } else {\r\n this.model.params.to = '';\r\n }\r\n this.model.params.from = this.model.destinationFrom!.iataCode!;\r\n }\r\n }\r\n\r\n onSubmit() {\r\n setTimeout(() => {\r\n (this).$ga.sendPageview('/flights/search/submit', 'Flights / Search / Submit');\r\n\r\n this.$v.model!.params!.$touch();\r\n\r\n if (this.$v.model!.$error) {\r\n let error = undefined;\r\n (this).$ga.sendEvent('flights.search', 'submit.error', 'flights.search.submit.error');\r\n (this).$ga.reachGoal('flights.search.submit.error');\r\n\r\n if (!error\r\n && !this.$v.model!.params!.from!.required) {\r\n error = i18next.t('error_flight_destination_from_empty');\r\n }\r\n\r\n if (!error\r\n && !this.$v.model!.params!.to!.required) {\r\n error = i18next.t('error_flight_destination_to_empty');\r\n }\r\n\r\n if (!error\r\n && !this.$v.model!.params!.to!.toSameAsFrom) {\r\n error = i18next.t('error_flight_destination_to_same_as_from');\r\n }\r\n\r\n if (!error\r\n && !this.$v.model!.params!.departure!.departureMinDate) {\r\n error = i18next.t('error_flight_departure_in_the_past');\r\n }\r\n\r\n if (!error\r\n && !this.$v.model!.params!.return!.returnBeforeDate) {\r\n error = i18next.t('error_flight_return_before_departure');\r\n }\r\n\r\n if (!error\r\n && this.$v.model!.params!.passengers!.$error) {\r\n error = i18next.t('error_flight_passengers');\r\n }\r\n\r\n if (!error) {\r\n error = i18next.t('error_fields');\r\n }\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n message: error\r\n });\r\n } else {\r\n this.model.submitted = true;\r\n\r\n const flightNavigationService = new flights.FlightNavigationService();\r\n\r\n flightNavigationService.onBeforeNavigation(this.model.params);\r\n\r\n router.push(flightNavigationService.getSearchResultsUrl(this.model.params));\r\n }\r\n }, 300);\r\n }\r\n\r\n onModalDestinationStart(mode: string) {\r\n const modeUpper = mode[0].toUpperCase() + mode.slice(1);\r\n this.model['destinationLookup' + modeUpper] = '';\r\n this.model.params[mode] = '';\r\n this.model['destination' + modeUpper] = {\r\n name: '',\r\n parentName: '',\r\n iataCode: ''\r\n };\r\n\r\n this.modalDestinationMode = mode;\r\n }\r\n\r\n onModalDestinationSelected(item: any) {\r\n if (this.modalDestinationMode === 'from') {\r\n this.model.params.from = item.value;\r\n this.model.destinationFrom = {\r\n name: item.label,\r\n parentName: item.sublabel,\r\n iataCode: item.stamp\r\n };\r\n } else {\r\n this.model.params.to = item.value;\r\n this.model.destinationTo = {\r\n name: item.label,\r\n parentName: item.sublabel,\r\n iataCode: item.stamp\r\n };\r\n }\r\n\r\n }\r\n\r\n onDestinationBlur(destination: string) {\r\n const autocompliteRef = 'autocompliteDestination' + destination,\r\n inputRef = 'inputDestination' + destination,\r\n modalDestination = 'destination' + destination;\r\n\r\n if ((this.$refs)[autocompliteRef].results.length) {\r\n this.onModalDestinationSelected((this.$refs)[autocompliteRef].results[0]);\r\n } else if (!this.model[modalDestination].iataCode && (this.$refs)[inputRef].model) {\r\n new api.DestinationService().lookup((this.$refs)[inputRef].model).then(\r\n (result: api.Destination[]) => {\r\n const destinations = this.destinationsConvert(result);\r\n if (destinations.length) {\r\n this.onModalDestinationSelected(destinations[0]);\r\n }\r\n }\r\n );\r\n \r\n }\r\n }\r\n\r\n onModalDateOpen(mode: string) {\r\n if (mode == 'return' && !this.model.params.roundtrip) {\r\n return;\r\n }\r\n\r\n this.modalDateMode = mode;\r\n\r\n (this.$refs).modalDate.show();\r\n\r\n this.startedSearchInput();\r\n }\r\n\r\n dataWasSelected(){\r\n if (!this.isDataWasSelected) {\r\n this.isDataWasSelected = true;\r\n }\r\n }\r\n \r\n onModalDateOpened() {\r\n let d: string = '';\r\n\r\n if (this.modalDateMode === 'departure') {\r\n if (this.model.params.departure) {\r\n d = moment(this.model.params.departure).format('YYYYMM');\r\n }\r\n } else {\r\n if (this.model.params.return) {\r\n d = moment(this.model.params.return).format('YYYYMM');\r\n }\r\n }\r\n\r\n if (d) {\r\n utils.ScrollTo.element('#modalDate .q-modal-layout-content', '#month' + d, false);\r\n }\r\n }\r\n\r\n onModalDateSelect($event) {\r\n const d = $event.target.getAttribute('data-date');\r\n \r\n if (d) {\r\n const selectedDate = moment(d);\r\n \r\n if (this.modalDateMode === 'departure') {\r\n if(this.model.params.return && this.model.params.roundtrip){\r\n if (moment(this.model.params.return).isBefore(selectedDate)) {\r\n this.model.params.departure = selectedDate.toDate();\r\n (this).model.params.roundtrip = !(this).model.params.roundtrip;\r\n (this).model.params.return = !(this).model.params.return;\r\n this.modalDateMode = 'return';\r\n } else {\r\n if(!this.isDataWasSelected){\r\n this.model.params.departure = selectedDate.toDate();\r\n this.modalDateMode = 'return';\r\n } else {\r\n (this.$refs).modalDate.hide();\r\n this.model.params.departure = selectedDate.toDate();\r\n }\r\n }\r\n } else {\r\n this.modalDateMode = 'return';\r\n this.model.params.departure = selectedDate.toDate();\r\n }\r\n }\r\n else if (this.modalDateMode === 'return') {\r\n if (moment(this.model.params.departure!).isAfter(selectedDate) && this.model.params.return) {\r\n this.model.params.departure = selectedDate.toDate();\r\n } else if(moment(this.model.params.departure!).isAfter(selectedDate)) {\r\n this.model.params.return = this.model.params.departure;\r\n (this).model.params.departure = selectedDate.toDate();\r\n this.model.params.roundtrip = true;\r\n } else {\r\n this.model.params.return = selectedDate.toDate();\r\n this.model.params.roundtrip = true;\r\n (this.$refs).modalDate.hide();\r\n }\r\n } else {\r\n this.model.params[this.modalDestinationMode] = selectedDate.toDate();\r\n (this.$refs).modalDate.hide();\r\n }\r\n this.dataWasSelected();\r\n }\r\n }\r\n\r\n onModalDateOneWay() {\r\n (this.$refs).modalDate.hide();\r\n\r\n if ((this).model.params.return) {\r\n (this).model.params.return = !(this).model.params.return;\r\n }\r\n this.model.params.roundtrip = false;\r\n }\r\n\r\n onModalPassengersChange(target: string, v: number) {\r\n this.startedSearchInput();\r\n switch (target) {\r\n case 'adults':\r\n if (v > 0) {\r\n if (this.model.params.passengers.adults < 9) {\r\n this.model.params.passengers.adults++;\r\n }\r\n } else {\r\n if (this.model.params.passengers.adults > 1) {\r\n this.model.params.passengers.adults--;\r\n }\r\n }\r\n break;\r\n case 'children':\r\n if (v > 0) {\r\n if (this.model.params.passengers.children < 8) {\r\n this.model.params.passengers.children++;\r\n }\r\n } else {\r\n if (this.model.params.passengers.children > 0) {\r\n this.model.params.passengers.children--;\r\n }\r\n }\r\n break;\r\n case 'infants':\r\n if (v > 0) {\r\n if (this.model.params.passengers.infants < 4) {\r\n this.model.params.passengers.infants++;\r\n }\r\n } else {\r\n if (this.model.params.passengers.infants > 0) {\r\n this.model.params.passengers.infants--;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n onModalPassengersSubmit() {\r\n this.$v.model!.params!.passengers!.$touch();\r\n\r\n if (this.$v.model!.params!.passengers!.$error) {\r\n let error = undefined;\r\n\r\n // Child validation should be checked first\r\n if (!error\r\n && this.$v.model!.params!.passengers!.infants!.$error) {\r\n error = i18next.t('error_flight_passengers_infants_noadult');\r\n }\r\n if (!error\r\n && this.$v.model!.params!.passengers!.$error) {\r\n error = i18next.t('error_flight_passengers_limit');\r\n }\r\n\r\n if (!error) {\r\n error = i18next.t('error_fields');\r\n }\r\n\r\n (this.$root.$refs).messageDialog.show({\r\n title: i18next.t('error'),\r\n message: error\r\n });\r\n } else {\r\n (this.$refs).modalPassengers.hide();\r\n }\r\n }\r\n\r\n showDestinations(ref: string) {\r\n if ((this.$refs)['autocompliteDestination' + ref].results.length === 1) {\r\n (this.$refs)['autocompliteDestination' + ref].setValue((this.$refs)['autocompliteDestination' + ref].results[0]);\r\n \r\n if (ref === 'From') {\r\n (this.$refs).inputDestinationTo.focus();\r\n this.onModalDestinationStart('to');\r\n } else {\r\n (this.$refs).inputDestinationTo.blur();\r\n }\r\n }\r\n }\r\n\r\n destinationsConvert(result) {\r\n const destinations: {\r\n value?: string;\r\n label?: string;\r\n sublabel?: string;\r\n stamp?: string;\r\n }[] = [];\r\n\r\n let limit = result.length;\r\n\r\n // limit lookup results to 6 items on UI\r\n if (limit > 7) {\r\n limit = 7;\r\n }\r\n\r\n for (let i = 0; i < limit; i++) {\r\n const d = this.getDestinationViewModel(result[i]);\r\n\r\n destinations.push({\r\n value: d.iataCode,\r\n label: d.name,\r\n sublabel: d.parentName,\r\n stamp: d.iataCode\r\n });\r\n }\r\n\r\n return destinations;\r\n }\r\n\r\n searchDestinations(inputValue, callback) {\r\n this.startedSearchInput();\r\n new api.DestinationService().lookup(inputValue).then(\r\n (result: api.Destination[]) => {\r\n const destinations = this.destinationsConvert(result);\r\n callback(destinations);\r\n },\r\n () => {\r\n callback([]);\r\n }\r\n );\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { G2S } from 'core/g2s';\r\nimport * as api from 'core/api';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class FlightTermsComponent extends Vue {\r\n searchId: string;\r\n flightId: string;\r\n publicReservationId: string;\r\n\r\n fareDetails: api.FareDetailsResponse| null = null;\r\n\r\n show(searchId: string, flightId: string, publicReservationId?: string) {\r\n if (searchId != this.searchId\r\n || flightId != this.flightId\r\n || (publicReservationId && publicReservationId != this.publicReservationId)) {\r\n this.fareDetails = null;\r\n }\r\n\r\n this.searchId = searchId;\r\n this.flightId = flightId;\r\n this.publicReservationId = publicReservationId!;\r\n\r\n (this.$refs).modalFlightTerms.show();\r\n\r\n this.loadFlightTerms();\r\n }\r\n\r\n hide() {\r\n (this.$refs).modalFlightTerms.hide();\r\n }\r\n\r\n loadFlightTerms() {\r\n const request: api.FareDetailsRequest = {\r\n searchId: this.searchId,\r\n flightId: this.flightId,\r\n publicReservationId: this.publicReservationId\r\n };\r\n\r\n new api.FlightService().fareDetails(request).then(\r\n (result: api.FareDetailsResponse) => {\r\n this.fareDetails = result;\r\n },\r\n (error) => {\r\n this.fareDetails = { isSuccess: false };\r\n\r\n if (error.response) {\r\n console.log('XHR failed', error.response.status, error.response.data);\r\n } else {\r\n console.log('XHR error', error.message);\r\n }\r\n }\r\n );\r\n }\r\n\r\n onFlightTermsRetry() {\r\n this.fareDetails = null;\r\n\r\n this.loadFlightTerms();\r\n }\r\n\r\n onGoBack() {\r\n this.$emit('back', (this.$refs).modalFlight);\r\n }\r\n\r\n onShow() {\r\n this.$emit('show', (this.$refs).modalFlight);\r\n }\r\n\r\n onHide() {\r\n this.$emit('hide', (this.$refs).modalFlight);\r\n }\r\n\r\n onDismiss() {\r\n this.$emit('dismiss', (this.$refs).modalFlight);\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class SearchTabsComponent extends Vue {\r\n @Prop()\r\n value: string;\r\n\r\n @Prop()\r\n filteredSearchResults: flights.FlightFilterModel[] | [];\r\n\r\n @Prop()\r\n flightsToView?: { [uniqueId: string]: flights.FlightModel } | undefined; // Force non-reactive\r\n\r\n @Prop()\r\n cheapestFlight: flights.FlightModel | {};\r\n\r\n @Prop()\r\n fasterFlight: flights.FlightModel | {};\r\n\r\n @Prop()\r\n bestFlight: flights.FlightModel | {};\r\n\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n @Watch('value')\r\n onModeChange(value) {\r\n (this).$ga.sendEvent('flights.results', 'sort', 'flights.results.sort.' + value, this.gaParams); \r\n }\r\n \r\n switchSortingMode(mode: string) {\r\n this.$emit('input', mode);\r\n }\r\n}","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\nimport moment from 'moment';\r\nimport { Notify } from 'quasar-framework/dist/quasar.mat.esm';\r\nimport * as utils from 'core/utils';\r\nimport Cleave from 'cleave.js';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n/**\r\n * Based on QInput component. Provides additional filtering of user input.\r\n */\r\n@WithRender\r\n@Component\r\nexport class MobileInputComponent extends Vue {\r\n @Prop()\r\n autocomplete: string;\r\n\r\n @Prop()\r\n name: string;\r\n\r\n @Prop()\r\n id: string;\r\n\r\n @Prop()\r\n error: boolean;\r\n\r\n @Prop()\r\n stackLabel: string;\r\n\r\n @Prop()\r\n floatLabel: string;\r\n\r\n @Prop()\r\n help: boolean;\r\n\r\n @Prop([String, Number])\r\n maxLength: number;\r\n\r\n @Prop()\r\n noPassToggle: boolean;\r\n\r\n @Prop()\r\n placeholder: string;\r\n\r\n @Prop()\r\n readonly: boolean;\r\n\r\n @Prop({ default: 'text' })\r\n type: string;\r\n\r\n @Prop()\r\n typeMode: string;\r\n\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\r\n //@ts-ignore\r\n @Prop({ type: null }) // WTF?! Always check type if not null.\r\n value: any;\r\n\r\n @Watch('value')\r\n onValueChanged(val: any) {\r\n this.valueShadow = this.parseValue(val);\r\n }\r\n\r\n valueShadow: string = this.parseValue(this.value);\r\n\r\n cleave: any;\r\n\r\n focused: boolean = false;\r\n\r\n showPass: boolean = false;\r\n\r\n lastNotify: any = undefined; // Force non-reactive\r\n\r\n get inputPlaceholder(): string {\r\n if (!this.floatLabel || this.labelIsAbove) {\r\n return this.placeholder;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n get inputType(): string {\r\n switch (this.type) {\r\n case 'password':\r\n return this.showPass ? 'text' : 'password';\r\n case 'cardholder':\r\n case 'document':\r\n case 'name':\r\n return 'text';\r\n case 'cardexpiry':\r\n case 'cardnumber':\r\n case 'number':\r\n case 'date':\r\n case 'phone':\r\n return 'tel';\r\n default:\r\n return this.type;\r\n }\r\n }\r\n\r\n get isPassword() {\r\n return this.type === 'password';\r\n }\r\n\r\n get labelIsAbove(): boolean {\r\n return this.focused || this.length > 0;\r\n }\r\n\r\n get length(): number {\r\n if (this.value) {\r\n return ('' + this.value).length;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n mounted() {\r\n if (this.type === 'date') {\r\n const options = {\r\n date: true,\r\n datePattern: ['d', 'm', 'Y'],\r\n delimiter: '.'\r\n };\r\n const format = moment().localeData().longDateFormat('L');\r\n\r\n if (format[0] === 'D') {\r\n options.datePattern = ['d', 'm', 'Y'];\r\n } else {\r\n options.datePattern = ['m', 'd', 'Y'];\r\n }\r\n\r\n if (format[2] === '.' || format[2] === '/') {\r\n options.delimiter = format[2];\r\n }\r\n\r\n this.cleave = new Cleave(this.$refs.input, options);\r\n } else if (this.type === 'cardexpiry') {\r\n const options = {\r\n date: true,\r\n datePattern: ['m', 'y'],\r\n delimiter: '/'\r\n };\r\n\r\n this.cleave = new Cleave(this.$refs.input, options);\r\n }\r\n }\r\n\r\n beforeDestroy() {\r\n if (this.cleave) {\r\n this.cleave.destroy();\r\n }\r\n }\r\n\r\n parseValue(v) {\r\n if (v) {\r\n if (this.type === 'cardexpiry') {\r\n const m = moment(v);\r\n\r\n if (m.isValid()) {\r\n return m.format('MM/YY');\r\n }\r\n } else if (this.type === 'date') {\r\n const m = moment(v);\r\n\r\n if (m.isValid()) {\r\n return m.format('L');\r\n }\r\n } else {\r\n return v;\r\n }\r\n }\r\n else if (v === 0) {\r\n return v;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n showToast(message: string) {\r\n if (this.lastNotify && typeof this.lastNotify === 'function') {\r\n this.lastNotify();\r\n }\r\n\r\n this.lastNotify = Notify.create({\r\n classes: 'bg-negative',\r\n message: message,\r\n position: 'bottom',\r\n timeout: 2000\r\n });\r\n }\r\n\r\n onTogglePass() {\r\n this.showPass = !this.showPass;\r\n }\r\n\r\n onInput(e) {\r\n if (e.target.value !== this.value) {\r\n if (this.type === 'name') {\r\n const allowCyrillic = this.typeMode === 'cyrillic';\r\n const allowSpaceSymbol = this.name !== 'mname';\r\n\r\n e.target.value = utils.String.normalizePassengerName(\r\n e.target.value,\r\n allowCyrillic,\r\n () => {\r\n this.showToast(i18next.t('error_letters_' + (allowCyrillic ? 'only' : 'latin_only')));\r\n },\r\n allowSpaceSymbol\r\n );\r\n } else if (this.type === 'contact') {\r\n e.target.value = utils.String.disabledCyrillic(\r\n e.target.value,\r\n () => {\r\n this.showToast(i18next.t('error_letters_latin_numbers_symbols_only_no_specifics'));\r\n }\r\n );\r\n } else if (this.type === 'document') {\r\n const allowCyrillic = this.typeMode === 'cyrillic';\r\n\r\n e.target.value = utils.String.normalizeDocumentNumber(\r\n e.target.value,\r\n allowCyrillic,\r\n () => {\r\n this.showToast(i18next.t('error_letters_' + (allowCyrillic ? 'numbers_only' : 'latin_numbers_only')));\r\n }\r\n );\r\n } else if (this.type === 'phone') {\r\n e.target.value = utils.String.normalizePhone(e.target.value);\r\n } else if (this.type === 'cardholder') {\r\n e.target.value = utils.String.normalizeCardHolder(\r\n e.target.value,\r\n () => {\r\n this.showToast(i18next.t('error_letters_latin_only'));\r\n }\r\n );\r\n } else if (this.type === 'number' || this.type === 'cardnumber') {\r\n e.target.value = utils.String.normalizeNumber(e.target.value);\r\n }\r\n\r\n let v = e.target.value;\r\n\r\n if (this.type === 'cardexpiry') {\r\n if (v) {\r\n const m = moment(v, 'MM/YY', true);\r\n\r\n if (m.isValid()) {\r\n v = m.endOf('month').format('YYYY-MM-DD'); // Use ISO-format.\r\n\r\n this.$emit('input', v);\r\n this.$emit('change', v);\r\n\r\n this.valueShadow = e.target.value;\r\n }\r\n } else {\r\n this.$emit('input', null);\r\n this.$emit('change', null);\r\n\r\n this.valueShadow = e.target.value;\r\n }\r\n } else if (this.type === 'date') {\r\n if (v) {\r\n const m = moment(v, moment().localeData().longDateFormat('L'), true);\r\n\r\n if (m.isValid()) {\r\n v = m.format('YYYY-MM-DD'); // Use ISO-format.\r\n\r\n this.$emit('input', v);\r\n this.$emit('change', v);\r\n\r\n this.valueShadow = e.target.value;\r\n }\r\n } else {\r\n this.$emit('input', null);\r\n this.$emit('change', null);\r\n\r\n this.valueShadow = e.target.value;\r\n }\r\n } else {\r\n this.$emit('input', v);\r\n this.$emit('change', v);\r\n\r\n this.valueShadow = e.target.value;\r\n }\r\n }\r\n }\r\n\r\n onFocus(e) {\r\n this.focused = true;\r\n this.$emit('focus', e);\r\n }\r\n\r\n onBlur(e) {\r\n this.focused = false;\r\n\r\n if (this.type === 'phone') {\r\n const v = this.$options.filters!.phone(e.target.value);\r\n\r\n if (v !== e.target.value) {\r\n e.target.value = v;\r\n\r\n this.$emit('input', v);\r\n this.$emit('change', v);\r\n }\r\n } else if (this.type === 'cardnumber') {\r\n const card = new utils.Card(e.target.value, '');\r\n\r\n if (card.numberIsValid) {\r\n e.target.value = card.formatCardNumber();\r\n\r\n this.$emit('input', e.target.value);\r\n this.$emit('change', e.target.value);\r\n }\r\n } else if (this.type === 'cardexpiry') {\r\n const m = moment(this.cleave.getISOFormatDate(), 'MM/YY', true);\r\n\r\n if (m.isValid()) {\r\n const v = m.endOf('month').format('YYYY-MM-DD'); // Use ISO-format.\r\n\r\n this.$emit('input', v);\r\n this.$emit('change', v);\r\n\r\n this.valueShadow = e.target.value;\r\n }\r\n } else if (this.type === 'date') {\r\n const m = moment(this.cleave.getISOFormatDate(), 'YYYY-MM-DD', true);\r\n\r\n if (m.isValid()) {\r\n const v = m.format('YYYY-MM-DD'); // Use ISO-format.\r\n\r\n this.$emit('input', v);\r\n this.$emit('change', v);\r\n\r\n this.valueShadow = e.target.value;\r\n }\r\n }\r\n\r\n this.$emit('blur', e);\r\n }\r\n\r\n onClick() {\r\n (this.$refs).input.focus();\r\n this.$emit('click');\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\nimport * as api from 'core/api';\r\nimport moment from 'moment';\r\nimport * as utils from 'core/utils';\r\nimport * as flights from 'core/flights';\r\nimport * as payment from 'core/payment';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nexport function requiredIfCard(value) {\r\n if (this.paymentModel.selectedPaymentType.kind === 'CreditCardInplace'\r\n && !value\r\n && !this.paymentModel.selectedPaymentType.isYandexPay)\r\n {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function cardCode(value) {\r\n if (value) {\r\n const card = new utils.Card(this.paymentModel.card.number, value);\r\n\r\n if (!card.cvcIsValid) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function cardNumber(value) {\r\n if (value) {\r\n const card = new utils.Card(value, this.paymentModel.card.code);\r\n\r\n if (!card.numberIsValid) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function cardExpired(value) {\r\n if (value\r\n && moment(value).isBefore(moment())) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n@WithRender\r\n@Component({\r\n validations: {\r\n paymentModel: {\r\n card: {\r\n holder: { requiredIfCard },\r\n number: { requiredIfCard, cardNumber },\r\n expiry: { requiredIfCard },\r\n code: { requiredIfCard, cardCode }\r\n }\r\n }\r\n }\r\n})\r\nexport class PaymentFormComponent extends Vue {\r\n @Prop()\r\n amount: number;\r\n\r\n @Prop()\r\n gaAlreadySubmitted: string[];\r\n\r\n @Prop()\r\n paymentModel: payment.PaymentModel;\r\n\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n flight: flights.FlightModel;\r\n\r\n @Prop()\r\n showSbp: boolean;\r\n\r\n parceladoState: string = '';\r\n\r\n flagSmsPackage: number = 0;\r\n\r\n get moneyWallPrice() {\r\n if (this.flight) {\r\n return utils.Payment.calcMoneyWallPrice(this.amount, this.flight.legs[0].segments[0].departureDate);\r\n }\r\n return 0;\r\n }\r\n\r\n get yandexSmsProduct() {\r\n return this.reservation ? this.reservation.productsOfYandex.find(item => item.product.externalId = 'MegoPackageSuperSms') : null;\r\n }\r\n\r\n @Watch('paymentModel.selectedPaymentTab')\r\n onPaymentTabChange(value: string) {\r\n // @Todo Удалить или отрефакторить yandex код\r\n let yandexPaySms, bookingSms;\r\n\r\n if (value == 'parcelado') {\r\n this.parceladoState = 'loading';\r\n this.onParceladoSelect();\r\n (this).$ga.sendEvent('flights.booking', 'step3.payment.installment', 'flights.booking.step3.payment.installment');\r\n }\r\n\r\n if (this.reservation?.products) {\r\n yandexPaySms = this.reservation.products.find(item => item.product.externalId == 'MegoPackageSuperSms' && item.product.saleType == 'YandexPayButton');\r\n bookingSms = this.reservation.products.find(item => item.product.externalId == 'MegoPackageSuperSms' && item.product.saleType == 'BookingForm');\r\n }\r\n\r\n if (yandexPaySms) {\r\n value == 'yandexpay' ? yandexPaySms!.selected = true : yandexPaySms!.selected = false;\r\n }\r\n\r\n if (this.yandexSmsProduct && value == 'yandexpay' && bookingSms?.selected == true) {\r\n bookingSms!.selected = false;\r\n this.onProductSelectionChange(this.yandexSmsProduct, value === 'yandexpay');\r\n this.flagSmsPackage = 1;\r\n } else if (this.yandexSmsProduct) {\r\n this.onProductSelectionChange(this.yandexSmsProduct!, value === 'yandexpay');\r\n }\r\n\r\n if (yandexPaySms && bookingSms) {\r\n if (this.flagSmsPackage == 1 && !this.yandexSmsProduct!.selected) {\r\n bookingSms!.selected = true;\r\n }\r\n }\r\n\r\n this.paymentModel.onSelectedPaymentTabChanged();\r\n const selectedPayment = this.paymentModel.selectedPaymentType;\r\n const selectedPaymentMethod = value === 'yandexpay' ? this.paymentModel.selectedPaymentMethod : '';\r\n\r\n if (!this.gaAlreadySubmitted.includes('flights.booking.payment.changed') && value) {\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n 'payment.changed',\r\n 'flights.booking.payment.changed'\r\n );\r\n this.gaAlreadySubmitted.push('flights.booking.payment.changed');\r\n }\r\n\r\n if (value) {\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}.${selectedPaymentMethod ? selectedPaymentMethod.type + '.' : ''}selected`.toLowerCase(),\r\n `flights.booking.${selectedPayment.kind}.${selectedPayment.paymentTypeId}.${selectedPaymentMethod ? selectedPaymentMethod.type + '.' : ''}selected`.toLowerCase()\r\n );\r\n }\r\n }\r\n\r\n selectPaymentTab(tab: string){\r\n this.paymentModel.selectedPaymentTab = tab;\r\n }\r\n\r\n showMoreDetails(type: string) {\r\n const selectedPayment = this.paymentModel.selectedPaymentType;\r\n const selectedPaymentMethod = type === 'yandexpay' ? this.paymentModel.selectedPaymentMethod : '';\r\n\r\n (this).$ga.sendEvent(\r\n 'flights.booking',\r\n `payment.${selectedPayment.kind}.${selectedPayment.paymentTypeId}.${selectedPaymentMethod ? selectedPaymentMethod.type + '.' : ''}details`.toLowerCase(),\r\n `flights.booking.${selectedPayment.kind}.${selectedPayment.paymentTypeId}.${selectedPaymentMethod ? selectedPaymentMethod.type + '.' : ''}details`.toLowerCase()\r\n );\r\n }\r\n\r\n getCommissionLabel(v: number): string {\r\n return i18next.t('label_payment_commission_withvalue', { i: (this.$options.filters).price(v) });\r\n }\r\n\r\n getMonthlyPaymentLabel(): number {\r\n return this.reservation.getTotalPrice() / 6;\r\n }\r\n\r\n /**\r\n * Return error or null if credit card form valid.\r\n */\r\n validate(): string | null {\r\n if (this.paymentModel.selectedPaymentType.kind === 'CreditCardInplace' && !this.paymentModel.selectedPaymentType.isYandexPay) {\r\n this.$v.paymentModel!.card!.$touch();\r\n\r\n if (this.$v.paymentModel!.card!.$error) {\r\n let error = null;\r\n\r\n if (!error && !this.$v.paymentModel!.card!.number!.cardNumber) {\r\n error = i18next.t('error_card_number_wrong');\r\n }\r\n\r\n // if (!error && !this.$v.paymentModel!.card!.expiry!.cardExpired) {\r\n // error = i18next.t('error_card_expiry_wrong');\r\n // }\r\n\r\n if (!error && !this.$v.paymentModel!.card!.code!.cardCode) {\r\n error = i18next.t('error_card_code_wrong');\r\n }\r\n\r\n if (!error) {\r\n error = i18next.t('error_fields');\r\n }\r\n\r\n return error;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n onCardNumberInput() {\r\n this.$emit('card-number-input');\r\n }\r\n\r\n onProductSelectionChange(product: flights.ProductModel, value: boolean) {\r\n this.$emit('product-selection-change', product, value);\r\n }\r\n\r\n onParceladoSelect(){\r\n setTimeout(()=>{\r\n this.parceladoState = '';\r\n }, 2750);\r\n }\r\n\r\n openSbpFaq() {\r\n window.open('https://sbp.nspk.ru/faq/', '_blank');\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class ProductListComponent extends Vue {\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n products: flights.ProductModel[];\r\n\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n @Prop()\r\n gaAlreadySubmitted: string[];\r\n\r\n onProductDetails(product: flights.ProductModel) {\r\n this.$emit('product-details', product);\r\n }\r\n\r\n onProductSelectionChange(product: flights.ProductModel, value: boolean) {\r\n if (value) {\r\n product.choiceType = api.ProductChoiceType.manualAccepted;\r\n }\r\n this.$emit('product-selection-change', product, value);\r\n }\r\n\r\n onProductPackageSelectionChange(product, value, from){\r\n this.$emit('on-product-package-selection-change', product, value, from)\r\n }\r\n onFlightTerms() {\r\n if (this.reservation.selectedFlight) {\r\n this.$emit('flight-terms', this.reservation.selectedFlight.uniqueId);\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\nimport { PassengerModel } from 'core/flights';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class SeatsSelectionComponent extends Vue {\r\n @Prop()\r\n flightBookingDetails: api.FlightBookingDetails;\r\n\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n @Prop()\r\n gaAlreadySubmitted: string[];\r\n\r\n currentPassengerId: number = 0;\r\n currentFlightCode: string = '';\r\n selectedSeats = [];\r\n selectedSeatsPriceAmount: number = 0;\r\n \r\n mounted(){\r\n this.currentPassengerId = this.reservation.passengers[0].index;\r\n this.detectPassengersWithInfant()\r\n this.selectedSeatsPriceAmount = this.reservation.getTotalSeatsPrice();\r\n\r\n if(this.reservation.hasSeatMaps()){\r\n (this).$ga.sendEvent('flights.booking', 'seat.available', 'flights.booking.seat.available', this.gaParams);\r\n }\r\n }\r\n \r\n @Watch('reservation.selectedFlightId')\r\n onReservationSelectedFlightIdChanged() {\r\n this.selectedSeatsPriceAmount = this.reservation.getTotalSeatsPrice();\r\n }\r\n \r\n get currentPassenger(): PassengerModel {\r\n return this.reservation.passengers[this.currentPassengerId];\r\n }\r\n\r\n get idSeatSelectedByCurrentUser(): string {\r\n return this.currentPassenger.selectedFlightSeats[this.currentFlightCode]?.id;\r\n }\r\n\r\n get isAllPassengersHaveASeat(): boolean {\r\n const result: boolean = this.reservation.passengers.some(p=>{\r\n if(p.type !== 'infant'){\r\n return !p.selectedFlightSeats[this.currentFlightCode];\r\n }\r\n });\r\n \r\n return !result;\r\n }\r\n\r\n get currentFlightSeatsPriceAmount() {\r\n let total = 0;\r\n \r\n this.reservation.passengers.forEach(pass=>{\r\n if(pass.selectedFlightSeats[this.currentFlightCode]){\r\n total += pass.selectedFlightSeats[this.currentFlightCode].price;\r\n }\r\n });\r\n \r\n return total;\r\n }\r\n\r\n get flatSelectedSeats(){\r\n return this.reservation.flatSelectedSeats;\r\n }\r\n\r\n detectPassengersWithInfant(){\r\n const infantQuantity = this.reservation.passengers.reduce((a, c) => (c.type == 'infant' ? ++a : a), 0);\r\n\r\n let adultQuantity = 0;\r\n for(let i=0; infantQuantity > adultQuantity; i++) {\r\n const passenger = this.reservation.passengers[i];\r\n if (passenger.type == 'adult') {\r\n this.reservation.passengers[i].seatWithInfant = true;\r\n adultQuantity++;\r\n }\r\n }\r\n }\r\n\r\n hasFlightSelectedSeats(flightCode: string): boolean {\r\n if (this.flatSelectedSeats[flightCode] && this.flatSelectedSeats[flightCode].length){\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n getSeatColor(id:number) {\r\n switch(id){\r\n case 1:\r\n return 'standart-seat';\r\n case 2:\r\n return 'optimum-seat';\r\n case 3:\r\n return 'premium-seat';\r\n case 4:\r\n return 'royal-seat';\r\n }\r\n }\r\n \r\n getSeatIcon(seat){\r\n if (!seat.available) {\r\n return 'times-svg';\r\n }\r\n if (this.currentPassenger.type == 'adult' && !this.currentPassenger.seatWithInfant) {\r\n return false;\r\n }\r\n if (seat.availableChild && this.currentPassenger.type == 'child') {\r\n return 'infant-icon';\r\n }\r\n if (seat.withInfant && this.currentPassenger.type == 'child') {\r\n return 'infant-icon';\r\n }\r\n if (this.currentPassenger.seatWithInfant && !seat.withInfant) {\r\n return 'times-svg';\r\n }\r\n if (seat.withInfant){\r\n return 'with-infant-icon';\r\n }\r\n if (!seat.availableChild && this.currentPassenger.type == 'child') {\r\n return 'times-svg';\r\n }\r\n return false;\r\n }\r\n \r\n checkIsSeatAvaliableForPassenger(seat: api.Seat): boolean {\r\n if(seat.available) {\r\n if (this.flatSelectedSeats[this.currentFlightCode]&& this.flatSelectedSeats[this.currentFlightCode].includes(seat.id)){\r\n return true;\r\n }\r\n if (this.currentPassenger.type == 'adult' && this.currentPassenger.seatWithInfant && !seat.withInfant){\r\n return false;\r\n } else if (this.currentPassenger.type == 'child' && !seat.availableChild) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n else{\r\n return false;\r\n }\r\n }\r\n\r\n scrollToSelectedPassenger(){\r\n if(this.reservation.passengers.length>3){\r\n const cardWithOffsetHeight = 130;\r\n const widthFromLeft = this.currentPassengerId*cardWithOffsetHeight;\r\n \r\n this.$nextTick(() => {\r\n (this).$refs.passengersWrapper.scrollTo({\r\n left: widthFromLeft,\r\n behavior: 'smooth'\r\n });\r\n });\r\n }\r\n }\r\n\r\n scrollToSelectedSeat(){\r\n if(this.currentPassenger.selectedFlightSeats[this.currentFlightCode]){\r\n const rowNumber = this.currentPassenger.selectedFlightSeats[this.currentFlightCode]?.row;\r\n const cardWithOffsetHeight = 60;\r\n const heightFromTop = rowNumber*cardWithOffsetHeight;\r\n\r\n this.$nextTick(() => {\r\n (this).$refs.seatsWrapper.parentElement.scrollTo({\r\n top: heightFromTop,\r\n behavior: 'smooth'\r\n });\r\n });\r\n }\r\n }\r\n\r\n onChangePassenger(id: number){\r\n this.currentPassengerId = id;\r\n this.scrollToSelectedSeat();\r\n this.scrollToSelectedPassenger();\r\n }\r\n \r\n onAddSeat(){\r\n (this).$ga.sendEvent('flights.booking', 'seat.add', 'flights.booking.seat.add', this.gaParams);\r\n (this).$refs.modalSeatsSelection.hide();\r\n }\r\n \r\n openSeatMap(flightCode:string){\r\n this.currentPassengerId = 0;\r\n this.currentFlightCode = flightCode;\r\n this.scrollToSelectedSeat();\r\n this.scrollToSelectedPassenger();\r\n (this).$refs.modalSeatsSelection.show();\r\n (this).$ga.sendEvent('flights.booking', 'seat.popap', 'flights.booking.seat.popap', this.gaParams);\r\n (this).$ga.reachGoal('flights.booking.seat.popup');\r\n }\r\n\r\n closeSeatMapsModal(){\r\n (this).$refs.modalSeatsSelection.hide();\r\n (this).$ga.sendEvent('flights.booking', 'seat.popap', 'flights.booking.seat.popap.x', this.gaParams);\r\n }\r\n\r\n onChangeSeat(seat: api.Seat){\r\n const flightCode = this.currentFlightCode;\r\n (this).$ga.sendEvent('flights.booking', 'seat.click', 'flights.booking.seat.click', this.gaParams);\r\n if (this.checkIsSeatAvaliableForPassenger(seat)){\r\n seat.selected = !seat.selected;\r\n this.currentFlightCode = \"\"; \r\n this.currentFlightCode = flightCode;\r\n \r\n this.reservation.passengers.forEach((passenger) => { \r\n if (passenger.selectedFlightSeats[flightCode]?.id === seat.id && this.currentPassengerId !== passenger.index) { \r\n this.currentPassengerId = passenger.index; \r\n }\r\n });\r\n \r\n if( this.reservation.passengers[this.currentPassengerId].selectedFlightSeats[flightCode] && this.reservation.passengers[this.currentPassengerId].selectedFlightSeats[flightCode]?.id === seat.id ){\r\n this.$delete(this.reservation.passengers[this.currentPassengerId].selectedFlightSeats, `${flightCode}`);\r\n } else {\r\n this.$set(this.reservation.passengers[this.currentPassengerId].selectedFlightSeats, `${flightCode}`, seat);\r\n }\r\n \r\n if (this.reservation.passengers.length > 1){\r\n for(let i = 0; i< this.reservation.passengers.length; i++){\r\n if(!this.reservation.passengers[i].selectedFlightSeats[flightCode] && this.reservation.passengers[i].type !== 'infant'){\r\n this.onChangePassenger(this.reservation.passengers[i].index);\r\n break;\r\n }\r\n }\r\n }\r\n \r\n this.reservation.flatSelectedSeats[flightCode] = this.reservation.passengers\r\n .map((p) => p.selectedFlightSeats[flightCode]?.id)\r\n .filter((s: any)=>s);\r\n\r\n this.selectedSeatsPriceAmount = this.reservation.getTotalSeatsPrice()\r\n } \r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class ProductNotPackageComponent extends Vue {\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n product: flights.ProductModel;\r\n\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n @Prop()\r\n gaAlreadySubmitted: string[];\r\n\r\n mounted() {\r\n const stepNumber = this.product.product.stepNumber;\r\n const kitId = this.product.product!.kitId || '';\r\n const id = this.product.product.id;\r\n const label = `product.step${stepNumber}.kit${kitId}.id${id}`;\r\n\r\n if(!this.gaAlreadySubmitted.includes(label)) {\r\n (this).$ga.sendEvent('product',\r\n 'display',\r\n label,\r\n this.gaParams\r\n );\r\n this.gaAlreadySubmitted.push(label);\r\n }\r\n }\r\n\r\n onProductDetails(product: flights.ProductModel) {\r\n (this).$ga.sendEvent('product',\r\n 'detail',\r\n `product.step${product.product.stepNumber}.kit${product.product!.kitId || ''}.id${product.product.id}`,\r\n this.gaParams\r\n );\r\n\r\n this.$emit('product-details', product);\r\n }\r\n\r\n onProductSelectionChange(product: flights.ProductModel, value: boolean) {\r\n if(product.product.id == 15 && value == false && !!0) { // временное ограничение на показ окна\r\n (this).$ga.sendEvent(\r\n 'product.popup',\r\n 'display',\r\n `product.popup.step${this.product.product.stepNumber}.kit${this.product.product!.kitId || ''}.id${this.product.product.id}`,\r\n this.gaParams\r\n );\r\n const self = this;\r\n (this.$root).$refs.dialogCatchUp.show({\r\n text: 'Вы уверены, что хотите отказаться от услуги Возврат без потерь и остаться без компенсации в случае возврата билета?',\r\n btnOkLabel: 'Оставить услугу в заказе',\r\n btnOkColorClass: 'btn-alternate',\r\n persistent: false,\r\n btnOkHandler: function() {\r\n self.$ga.sendEvent(\r\n 'product.popup',\r\n 'btn.ok',\r\n `product.popup.step${self.product.product.stepNumber}.kit${self.product.product!.kitId || ''}.id${self.product.product.id}`,\r\n this.gaParams\r\n );\r\n (this).$refs.dialog.hide();\r\n },\r\n btnCancelLabel: 'Отказаться от услуги',\r\n btnCancelHandler: () => {\r\n product.selected = value;\r\n\r\n (this).$ga.sendEvent(\r\n 'product.popup',\r\n 'btn.cancel',\r\n `product.popup.step${this.product.product.stepNumber}.kit${this.product.product!.kitId || ''}.id${this.product.product.id}`,\r\n this.gaParams\r\n );\r\n },\r\n btnCloseHandler: function(){\r\n (this).$refs.dialog.hide();\r\n }\r\n });\r\n } else {\r\n product.selected = value;\r\n }\r\n\r\n (this).$ga.sendEvent(\r\n 'product',\r\n value ? 'btn.ok' : 'btn.cancel',\r\n `product.step${product.product.stepNumber}.kit${product.product!.kitId || ''}.id${product.product.id}`,\r\n this.gaParams\r\n );\r\n if (value) {\r\n new api.RetailRocket().productSelected({\r\n flightKey: api.RetailRocketCL.flightKey,\r\n productId: product.product.id,\r\n bookingSessionId: this.reservation.bookingSessionId ?? undefined\r\n });\r\n }\r\n\r\n if (value && product.product.additionalProcessing) {\r\n this.$nextTick(() => {\r\n (this.$root).$refs.dialogCatchUp.show({\r\n text: 'Извините, услуга сейчас недоступна, но вы сможете купить ее позже ❤️',\r\n btnOkLabel: 'OK',\r\n persistent: true,\r\n btnOkColorClass: 'btn-alternate',\r\n btnOkHandler() {\r\n (this).$refs.dialog.hide();\r\n }\r\n });\r\n this.product.selected = false;\r\n });\r\n return;\r\n }\r\n\r\n // @todo отрефакторить\r\n // Проверка на наличие пакета в выбранных\r\n if(value) {\r\n this.reservation.selectedProducts.forEach(item => {\r\n if(item.product.internalProductIds){\r\n item.product.internalProductIds.forEach(inPackage => {\r\n if(inPackage == product.product.id) {\r\n // Вызов модалки\r\n (this.$root).$refs.dialogCatchUp.show({\r\n text: `Эта услуга уже есть в ${item.product.name}`,\r\n btnOkLabel: 'Ok',\r\n persistent: true,\r\n btnOkColorClass: 'btn-alternate',\r\n btnOkHandler: function(){\r\n (this).$refs.dialog.hide();\r\n }\r\n });\r\n product.selected = false;\r\n return 0;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (value) {\r\n product.choiceType = api.ProductChoiceType.manualAccepted;\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class ProductPackageComponent extends Vue {\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n product: flights.ProductModel;\r\n\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n @Prop()\r\n gaAlreadySubmitted: string[];\r\n mounted() {\r\n const stepNumber = this.product.product.stepNumber;\r\n const kitId = this.product.product.kitId || '';\r\n const id = this.product.product.id;\r\n const label = `product.step${stepNumber}.kit${kitId}.id${id}`;\r\n\r\n if(!this.gaAlreadySubmitted.includes(label)) {\r\n (this).$ga.sendEvent('product',\r\n 'display',\r\n label,\r\n this.gaParams\r\n );\r\n this.gaAlreadySubmitted.push(label);\r\n }\r\n }\r\n\r\n get relatedProducts() {\r\n return this.reservation.getPackageRelatedProductsByExternalId(this.product.product.externalId);\r\n }\r\n\r\n get yandexSuperSms() {\r\n // @Todo Удалить или отрефакторить yandex код\r\n return this.reservation.products.find(item => item.product.externalId == 'MegoPackageSuperSms' && item.product.saleType == 'YandexPayButton');\r\n }\r\n\r\n onProductDetails(product: flights.ProductModel) {\r\n (this).$ga.sendEvent('product',\r\n 'detail',\r\n `product.step${product.product.stepNumber}.kit${product.product!.kitId || ''}.id${product.product.id}`,\r\n this.gaParams\r\n );\r\n\r\n (this.$refs).modalProduct.show();\r\n }\r\n\r\n onProductSelectionChange(value: boolean, from: string) {\r\n this.product.selected = value;\r\n (this).$ga.sendEvent('product',\r\n `${from == 'modal' ? 'detail' : 'btn'}.${value ? 'ok' : 'cancel'}`,\r\n `product.step${this.product.product.stepNumber}.kit${this.product.product!.kitId || ''}.id${this.product.product.id}`,\r\n this.gaParams\r\n );\r\n if (value) {\r\n this.product.choiceType = api.ProductChoiceType.manualAccepted;\r\n\r\n console.log('Package!');\r\n\r\n if (this.relatedProducts.length) {\r\n this.relatedProducts.forEach(relatedProduct => {\r\n let productToUnselect: flights.ProductModel | undefined = undefined;\r\n\r\n if (relatedProduct.criterion == 'equal') {\r\n productToUnselect = this.reservation.products.find(product =>\r\n product.product.externalId == relatedProduct.externalId\r\n );\r\n }\r\n\r\n if (relatedProduct.criterion == 'startsWith') {\r\n productToUnselect = this.reservation.products.find(product =>\r\n utils.String.startsWith(product.product.externalId, relatedProduct.externalId)\r\n );\r\n }\r\n\r\n if (productToUnselect) {\r\n // productToUnselect.selected = false;\r\n }\r\n });\r\n }\r\n } else {\r\n this.product.choiceType = api.ProductChoiceType.manualDenied;\r\n }\r\n this.$emit('on-product-package-selection-change', this.product, value, 'local-ga');\r\n }\r\n\r\n onModalProductAdd(from) {\r\n (this.$refs).modalProduct.hide();\r\n this.onProductSelectionChange(true, from);\r\n\r\n }\r\n\r\n onModalProductRemove(from) {\r\n this.onProductSelectionChange(false, from);\r\n // (this.$refs).modalProduct.hide();\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop } from 'vue-property-decorator';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class OnlineRegistrationComponent extends Vue {\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n @Prop()\r\n gaAlreadySubmitted: string[];\r\n\r\n isProductSelected = false;\r\n\r\n mounted() {\r\n (this).$ga.sendEvent('online.registration', 'display', 'online.registration.display');\r\n }\r\n\r\n onProductSelectionChange() {\r\n this.isProductSelected = !this.isProductSelected;\r\n (this).$ga.sendEvent('online.registration', 'btn.ok', 'online.registration.btn.ok');\r\n if (this.isProductSelected) {\r\n (this.$root).$refs.messageDialog.show({\r\n title: 'Онлайн-регистрация на рейс',\r\n message: 'К сожалению, данный функционал не поддерживается.',\r\n btnOkLabel: 'Закрыть',\r\n onOkCallback: () => {\r\n (this).$ga.sendEvent('online.registration', 'btn.click', 'online.registration.btn.click.х');\r\n this.isProductSelected = false;\r\n },\r\n onCancelOrHideCallback: () => {\r\n (this).$ga.sendEvent('online.registration', 'btn.click', 'online.registration.btn.click.х');\r\n this.isProductSelected = false;\r\n }\r\n });\r\n \r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class ProductServiceBrandComponent extends Vue {\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n productKit: any;\r\n\r\n @Prop()\r\n step: number;\r\n\r\n @Prop()\r\n productsOfGrouped: flights.ProductModel[];\r\n\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n @Prop()\r\n gaAlreadySubmitted: string[];\r\n\r\n @Prop()\r\n forwardFlag: boolean;\r\n\r\n @Prop({ default: api.ProductChoiceType.manualAccepted })\r\n choiceType: api.ProductChoiceType;\r\n\r\n @Prop()\r\n location?: string;\r\n\r\n accumIds: any = [];\r\n\r\n mounted() {\r\n this.sortByOrder();\r\n this.notStandartChecker();\r\n\r\n const { products, stepOnForm } = this.productKit;\r\n\r\n for (const product of products) {\r\n if (this.location === 'catchup') {\r\n (this).$ga.sendEvent(\r\n 'product.catchup.svb',\r\n 'shown',\r\n `product.catchup.svb.kit${product.kitId}.id${product.productId}`,\r\n this.gaParams\r\n );\r\n } else {\r\n (this).$ga.sendEvent(\r\n 'product.svb',\r\n 'display',\r\n `product.svb.step${stepOnForm}.kit${product.kitId}.id${product.productId}`,\r\n this.gaParams\r\n );\r\n }\r\n }\r\n }\r\n\r\n nameGetter(id) {\r\n if(this.reservation.products) {\r\n const res = this.reservation.products.find(item => item.product.id == id);\r\n if(res) {\r\n return res.product.name;\r\n }\r\n }\r\n }\r\n\r\n priceGetter(id) {\r\n if (this.reservation.products) {\r\n const res = this.reservation.products.find(item => item.product.id == id);\r\n if (res) {\r\n return res.product.billingPrice;\r\n }\r\n }\r\n }\r\n\r\n getCurrentCode(id) {\r\n if (this.reservation.products) {\r\n const res = this.reservation.products.find(item => {\r\n return item.product.id == id;\r\n });\r\n return res?.product?.currencyCode;\r\n }\r\n }\r\n selectChecker(id) {\r\n return this.accumIds.includes(id);\r\n }\r\n\r\n sortByOrder() {\r\n if(this.productKit.products) {\r\n this.productKit.products.sort((a, b) => {\r\n return a.sortOrder == b.sortOrder ? 0 : (a.sortOrder > b.sortOrder ? 1 : -1);\r\n });\r\n }\r\n }\r\n\r\n get productsAccum() {\r\n return this.productKit.products.filter(item => item.productId || item.productId == 0);\r\n }\r\n onProductChoose(product, kit) {\r\n const stepOnForm = this.reservation.brandedProductKits ? this.reservation.brandedProductKits[0].stepOnForm : '0';\r\n if (this.location === 'catchup') {\r\n (this).$ga.sendEvent(\r\n 'product.catchup.svb',\r\n 'btn.ok',\r\n `product.catchup.svb.kit${kit}.id${product}`,\r\n this.gaParams\r\n );\r\n } else {\r\n (this).$ga.sendEvent(\r\n 'product.svb',\r\n 'btn.ok',\r\n `product.svb.step${stepOnForm}.kit${kit}.id${product}`,\r\n this.gaParams\r\n );\r\n }\r\n \r\n if (product == 0) {\r\n this.onProductChooseStandart();\r\n return 0;\r\n }\r\n\r\n const resultPackage = this.reservation.products.find(item => item.product.id == product);\r\n if (resultPackage !== null && resultPackage !== undefined) {\r\n try {\r\n new api.RetailRocket().productSelected({\r\n flightKey: api.RetailRocketCL.flightKey,\r\n productId: resultPackage.product.id\r\n });\r\n }\r\n catch (error) {\r\n console.log(error);\r\n }\r\n\r\n resultPackage.choiceType = this.choiceType;\r\n }\r\n\r\n this.productsAccum.forEach(item => {\r\n this.reservation.products.find(productItem => productItem.product.id == product)!.selected = true;\r\n const result = this.reservation.products.find(productItem => productItem.product.id !== product && item.productId == productItem.product.id);\r\n if (result) {\r\n result.selected = false;\r\n }\r\n });\r\n this.notStandartChecker();\r\n this.$emit('close-popup');\r\n }\r\n\r\n onProductChooseStandart() {\r\n this.productKit.products.forEach(item => {\r\n const result = this.reservation.products.find(productItem => productItem.product.id == item.productId);\r\n if (result) {\r\n result.selected = false;\r\n }\r\n });\r\n this.notStandartChecker();\r\n this.$emit('close-popup');\r\n }\r\n notStandartChecker() {\r\n let flag = true;\r\n this.productsAccum.forEach(item => {\r\n const res = this.reservation.products.find(product => {\r\n return product.product.id == item.productId;\r\n });\r\n if(res !== undefined && res !== null && flag !== false) {\r\n if(res.selected == true) {\r\n this.accumIds = [res.product.id];\r\n flag = false;\r\n } else if (this.forwardFlag !== true) {\r\n this.accumIds = [0];\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport * as api from 'core/api';\r\nimport * as flights from 'core/flights';\r\nimport * as utils from 'core/utils';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class AdvancedProductServiceBrandComponent extends Vue {\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n brandKit: api.ProductBrand;\r\n\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n @Prop({ default: false })\r\n triggerChangeOnClick: boolean;\r\n\r\n @Prop({ default: false })\r\n confirmButton: boolean;\r\n\r\n @Prop()\r\n location?: string;\r\n\r\n selectedProductIdValue = 0;\r\n\r\n get selectedProductId() {\r\n return this.selectedProductIdValue;\r\n }\r\n\r\n set selectedProductId(id: number) {\r\n const product = this.brandKit.products.find(p => p.productId === id)!;\r\n const prevProduct = this.brandKit.products.find(p => p.productId === this.selectedProductIdValue)!;\r\n\r\n this.selectedProductIdValue = id;\r\n\r\n if (this.triggerChangeOnClick || product !== prevProduct) {\r\n this.onServiceBrandChange(product, prevProduct);\r\n }\r\n }\r\n\r\n get selectedProduct() {\r\n return this.brandKit.products.find(p => p.productId === this.selectedProductId)!;\r\n }\r\n\r\n mounted() {\r\n this.brandKit.products.sort((a, b) => a.sortOrder - b.sortOrder);\r\n\r\n for (const product of this.brandKit.products) {\r\n const p = this.reservation.products.find(p => p.product.id === product.productId);\r\n\r\n if (p?.selected) {\r\n this.selectedProductId = p.product.id;\r\n }\r\n }\r\n }\r\n\r\n getName(id: number) {\r\n if (this.reservation.products) {\r\n const res = this.reservation.products.find(p => p.product.id === id);\r\n return res?.product.name;\r\n }\r\n }\r\n\r\n getPrice(id: number) {\r\n if (this.reservation.products) {\r\n const res = this.reservation.products .find(p => p.product.id === id);\r\n return res?.product.billingPrice;\r\n }\r\n }\r\n\r\n getCurrentCode(id: number) {\r\n if (this.reservation.products) {\r\n const res = this.reservation.products.find(p => p.product.id === id);\r\n return res?.product?.currencyCode;\r\n }\r\n }\r\n\r\n selectOrDeselect(id: number) {\r\n if (this.selectedProductId === id) {\r\n this.selectedProductId = 0;\r\n } else {\r\n this.selectedProductId = id;\r\n }\r\n }\r\n\r\n onServiceBrandChange(product: api.Product, prevProduct: api.Product) {\r\n for (const p of this.reservation.products) {\r\n if (p.product.id === product.productId) {\r\n p.selected = true;\r\n } else if (p.product.id === prevProduct.productId) {\r\n p.selected = false;\r\n }\r\n }\r\n\r\n const stepOnForm = this.reservation.brandedProductKits ? this.reservation.brandedProductKits[0].stepOnForm : '0';\r\n if (this.location === 'catchup') {\r\n (this).$ga.sendEvent(\r\n 'product.catchup.svb',\r\n 'btn.ok',\r\n `product.catchup.svb.kit${this.brandKit.kitId}.id${product.productId}`,\r\n this.gaParams\r\n );\r\n } else {\r\n (this).$ga.sendEvent(\r\n 'product.svb',\r\n 'btn.ok',\r\n `product.svb.step${stepOnForm}.kit${this.brandKit.kitId}.id${product.productId}`,\r\n this.gaParams\r\n );\r\n }\r\n\r\n this.$emit('service-brand-change', product, prevProduct);\r\n }\r\n\r\n onServiceBrandConfirm() {\r\n this.$emit('service-brand-confirm');\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport { setInterval, clearInterval } from 'timers';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class ProductTimerComponent extends Vue {\r\n @Prop()\r\n text: string;\r\n\r\n @Prop()\r\n time: number;\r\n\r\n timer = 0;\r\n timerInterval: NodeJS.Timeout;\r\n\r\n get timerText() {\r\n const seconds = this.timer % 60;\r\n const minutes = (this.timer - seconds) / 60;\r\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\r\n }\r\n\r\n @Watch('time')\r\n watchForTime() {\r\n this.stopTimer();\r\n this.startTimer();\r\n }\r\n\r\n mounted() {\r\n this.startTimer();\r\n }\r\n\r\n destroyed() {\r\n this.stopTimer();\r\n }\r\n\r\n startTimer() {\r\n this.timer = this.time * 60;\r\n this.timerInterval = setInterval(() => {\r\n this.timer--;\r\n\r\n if (this.timer === 0 && this.timerInterval) {\r\n clearInterval(this.timerInterval);\r\n }\r\n }, 1000);\r\n }\r\n\r\n stopTimer() {\r\n if (this.timerInterval) {\r\n clearInterval(this.timerInterval);\r\n }\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\nimport { Prop, Watch } from 'vue-property-decorator';\r\nimport * as i18next from 'i18next';\r\nimport * as api from 'core/api';\r\nimport * as utils from 'core/utils';\r\nimport * as flights from 'core/flights';\r\nimport { PassengerModel } from 'core/flights';\r\n\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\n@WithRender\r\n@Component\r\nexport class AdditionalBaggageComponent extends Vue {\r\n @Prop()\r\n reservation: flights.ReservationModel;\r\n\r\n @Prop()\r\n flightBookingDetails: api.FlightBookingDetails;\r\n \r\n @Prop()\r\n flight: flights.FlightModel;\r\n\r\n @Prop()\r\n gaParams: utils.GoogleAnalyticsParams;\r\n\r\n currentFlightDirection: string = '';\r\n\r\n dialogVisible: boolean = false;\r\n \r\n NO_BAGGAGE_GUID = '00000000-0000-0000-0000-000000000000';\r\n\r\n customBaggageOptions: [] = [];\r\n\r\n flightDirections: ['Both', 'Outward', 'Return'];\r\n \r\n currentPassengerIdByFlightDirection: object = {\r\n 'Outward': 0, \r\n 'Return': 0,\r\n 'Both': 0\r\n };\r\n\r\n detectPassengersWithInfant(){\r\n const infantQuantity = this.reservation.passengers.reduce((a, c) => (c.type == 'infant' ? ++a : a), 0);\r\n\r\n let adultQuantity = 0;\r\n for(let i=0; infantQuantity > adultQuantity; i++){\r\n const passenger = this.reservation.passengers[i];\r\n if (passenger.type == 'adult'){\r\n this.reservation.passengers[i].seatWithInfant = true;\r\n adultQuantity++;\r\n }\r\n }\r\n }\r\n\r\n onChangePassenger(id: number, flightDirection: string){\r\n this.currentPassengerIdByFlightDirection[flightDirection] = id;\r\n }\r\n \r\n onTimesClick(){\r\n (this).$ga.sendEvent('flights.booking', 'baggage.popap', 'flights.booking.baggage.popap.x', this.gaParams);\r\n this.closePopup();\r\n }\r\n\r\n onAddServiceClick(){\r\n (this).$ga.sendEvent('flights.booking', 'baggage.add', 'flights.booking.baggage.add', this.gaParams);\r\n this.closePopup();\r\n }\r\n\r\n openPopup(flightDirection){\r\n if(flightDirection){\r\n this.currentFlightDirection = flightDirection;\r\n }\r\n (this).$ga.sendEvent('flights.booking', 'baggage.popap', 'flights.booking.baggage.popap', this.gaParams);\r\n (this).$ga.reachGoal('flights.booking.baggage.popup');\r\n (this).$refs.modalAdditionalBaggage.show();\r\n }\r\n \r\n closePopup(){\r\n (this).$refs.modalAdditionalBaggage.hide();\r\n }\r\n\r\n get hasSelectedCustomOutwardBaggage(): boolean {\r\n return this.reservation.hasSelectedOutwardCustomBaggage\r\n || this.reservation.hasSelectedBothCustomBaggage;\r\n }\r\n\r\n get hasSelectedCustomReturnBaggage(): boolean {\r\n return this.reservation.hasSelectedReturnCustomBaggage\r\n || this.reservation.hasSelectedBothCustomBaggage;\r\n }\r\n\r\n \r\n getPassengerLabel(index){\r\n if (this.reservation.passengers[index].firstName\r\n || this.reservation.passengers[index].middleName\r\n || this.reservation.passengers[index].lastName) {\r\n return this.reservation.passengers[index].middleName\r\n ? `${this.reservation.passengers[index].firstName} ${this.reservation.passengers[index].middleName} ${this.reservation.passengers[index].lastName}`\r\n : `${this.reservation.passengers[index].firstName} ${this.reservation.passengers[index].lastName}`;\r\n } else {\r\n return i18next.t('label_passenger_with_number', { i: index + 1 });\r\n }\r\n }\r\n\r\n getCheapestBaggageOptionInFlightDirection(customBaggageOption){\r\n const result = {\r\n price: 0,\r\n weight: 0\r\n };\r\n const prices: number[] = [];\r\n const weights: number[] = [];\r\n customBaggageOption.baggageOptions.forEach(baggageOption => {\r\n if (baggageOption.price > 0) {\r\n weights.push(baggageOption.bagsWeight);\r\n prices.push(baggageOption.price);\r\n }\r\n });\r\n\r\n result.price = Math.min(...prices);\r\n result.weight = Math.min(...weights);\r\n \r\n return result;\r\n }\r\n\r\n hasPassengersSelectedBaggageOptionsIyFlightDirection(customBaggageOption){\r\n const passengers = this.reservation.passengers;\r\n for (let i = 0; i < passengers.length; i++) {\r\n for (let j = 0; j < passengers[i].baggageOptions.length; j++) {\r\n for (let ji = 0; ji < customBaggageOption.baggageOptions.length; ji++) {\r\n if(customBaggageOption.baggageOptions[ji].id == passengers[i].baggageOptions[j] && passengers[i].baggageOptions[j] !== this.NO_BAGGAGE_GUID){\r\n return true;\r\n } \r\n }\r\n } \r\n } \r\n }\r\n\r\n getPassengersWithBaggage(): PassengerModel[] {\r\n const passengers = this.reservation.passengers;\r\n const passengersWithBaggage: PassengerModel[] = [];\r\n\r\n for (let i = 0; i < passengers.length; i++) {\r\n for (let j = 0; j < passengers[i].baggageOptions.length; j++) {\r\n if(passengers[i].baggageOptions[j] !== this.NO_BAGGAGE_GUID){\r\n passengersWithBaggage.push(passengers[i]);\r\n break;\r\n } \r\n }\r\n }\r\n return passengersWithBaggage;\r\n }\r\n\r\n getCurrentPassengerByFlightDirection(flightDirection){\r\n return this.reservation.passengers.find(p=>p.index == this.currentPassengerIdByFlightDirection[flightDirection]);\r\n }\r\n\r\n getBaggageOptionDirectionLabelById(optionId){\r\n let label = '';\r\n this.reservation.selectedFlight?.customBaggage.options?.forEach(option=>{\r\n return option.baggageOptions.forEach(o=>{\r\n if(o.id == optionId && o.id !== this.NO_BAGGAGE_GUID){\r\n label = option.customBaggageFlightDirection;\r\n }\r\n });\r\n });\r\n\r\n if(label == 'Outward') {\r\n return i18next.t('label_flight_date_depart');\r\n }\r\n if(label == 'Return') {\r\n return i18next.t('label_flight_date_return');\r\n }\r\n if(label == 'Both') {\r\n return i18next.t('label_flight_search_roundtrip');\r\n }\r\n }\r\n\r\n getBaggageOptionById(id){\r\n let result = {};\r\n this.reservation.selectedFlight?.customBaggage.options?.forEach(option=>{\r\n return option?.baggageOptions?.forEach(option=>{\r\n if(option.id == id){\r\n result = option;\r\n }\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n getBaggageIndex(selectedOptionId){\r\n return this.reservation.selectedFlight?.customBaggage.options?.findIndex(option=>{\r\n return option.baggageOptions.find(option=>{\r\n return option.id == selectedOptionId;\r\n });\r\n });\r\n }\r\n\r\n selectBaggage(selectedOptionId, flightDirection){\r\n const passenger = this.getCurrentPassengerByFlightDirection(flightDirection);\r\n const baggageIndex = this.getBaggageIndex(selectedOptionId);\r\n\r\n (this).$ga.sendEvent('flights.booking', 'baggage.click', 'flights.booking.baggage.click', this.gaParams);\r\n if(passenger && baggageIndex !== undefined){\r\n if(passenger.baggageOptions[baggageIndex] == selectedOptionId){\r\n this.$set(passenger.baggageOptions, `${baggageIndex}`, this.NO_BAGGAGE_GUID);\r\n } else {\r\n this.$set(passenger.baggageOptions, `${baggageIndex}`, selectedOptionId);\r\n }\r\n }\r\n this.$emit('baggage-change');\r\n }\r\n\r\n getDestinationNameById(id) {\r\n const destination = this.flightBookingDetails.destinations[id];\r\n let destinationName = '';\r\n\r\n if (destination && destination.city && destination.city.localizedName) {\r\n destinationName = destination.city.localizedName;\r\n }\r\n\r\n if (destinationName) {\r\n return destinationName;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n get allPassengerHaveSelectedBaggage(): boolean {\r\n let baggageIndex: number;\r\n if (this.currentFlightDirection \r\n && this.reservation.selectedFlight && this.reservation.selectedFlight.customBaggage\r\n && this.reservation.selectedFlight.customBaggage.options) {\r\n this.reservation.selectedFlight.customBaggage.options.forEach((option,index) => {\r\n if (option.customBaggageFlightDirection == this.currentFlightDirection) {\r\n baggageIndex = index;\r\n }\r\n });\r\n }\r\n\r\n const result: boolean = this.reservation.passengers.some(p=>{\r\n if(p.type !== 'infant'){\r\n return p.baggageOptions[baggageIndex] !== this.NO_BAGGAGE_GUID;\r\n }\r\n });\r\n \r\n return result;\r\n }\r\n\r\n isLegBaggageLabelNeeded(leg: flights.LegModel, legIndex: number) {\r\n const legHasNotBaggage = leg.baggage && leg.baggage.pieceWeight == 0 && leg.baggage.pieces == 0;\r\n const legHasAnyBaggage = (leg.baggage && leg.baggage.pieceWeight > 0)\r\n || (leg.baggage && leg.baggage.pieces > 0);\r\n const legBaggageIsUnknown = !leg.baggage;\r\n\r\n return ((legHasNotBaggage || legBaggageIsUnknown) && legIndex == 0 && !this.hasSelectedCustomOutwardBaggage)\r\n || ((legHasNotBaggage || legBaggageIsUnknown) && legIndex == 1 && !this.hasSelectedCustomReturnBaggage)\r\n || legHasAnyBaggage;\r\n }\r\n\r\n getBaggageLabel(segment: flights.SegmentModel, isCabin: boolean): string {\r\n // For multiFR display baggage from brand group selected flight\r\n if (this.reservation.hasBrandGroups) {\r\n this.reservation.brandGroups.forEach((brandGroup) => {\r\n const f = brandGroup.selectedFlight;\r\n\r\n if (f?.legs[0].segments[0].departureDestination.uniqueId == segment.departureDestination.uniqueId\r\n && f?.legs[0].segments[0].arrivalDestination.uniqueId == segment.arrivalDestination.uniqueId) {\r\n segment = f?.legs[0].segments[0];\r\n }\r\n else {\r\n // Check if return leg for CombiIncut\r\n if (this.reservation.defaultFlight?.multiFRType == 5) {\r\n if (f?.legs[1].segments[0].departureDestination.uniqueId == segment.arrivalDestination.uniqueId\r\n && f?.legs[1].segments[0].arrivalDestination.uniqueId == segment.departureDestination.uniqueId) {\r\n segment = f?.legs[0].segments[0];\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n return utils.Baggage.getLabel(isCabin ? segment.baggageCabin : segment.baggage, isCabin);\r\n }\r\n\r\n hasBaggageCabin(legOrSegment: flights.LegModel | flights.SegmentModel): boolean {\r\n return legOrSegment.baggageCabin && (legOrSegment.baggageCabin.pieceWeight > 0 || legOrSegment.baggageCabin.pieces > 0);\r\n }\r\n}","import Vue from 'vue';\r\nimport moment from 'moment';\r\nimport VS2 from 'vue-script2';\r\nimport Quasar, {\r\n QAutocomplete,\r\n QBtn,\r\n QCard,\r\n QCarousel,\r\n QCarouselSlide,\r\n QCheckbox,\r\n QChip,\r\n QDialog,\r\n QInput,\r\n QInputFrame,\r\n QItem,\r\n QItemMain,\r\n QItemSide,\r\n QItemTile,\r\n QLayout,\r\n QLayoutDrawer,\r\n QLayoutFooter,\r\n QLayoutHeader,\r\n QList,\r\n QModal,\r\n QModalLayout,\r\n QPage,\r\n QPageContainer,\r\n QPopover,\r\n QRadio,\r\n QRange,\r\n QSelect,\r\n QSpinner,\r\n QTab,\r\n QTabPane,\r\n QTabs,\r\n QToggle,\r\n QToolbar,\r\n QToolbarTitle,\r\n QTooltip,\r\n QCollapsible,\r\n Notify\r\n} from 'quasar-framework/dist/quasar.mat.esm';\r\nimport Vuelidate from 'vuelidate';\r\nimport { G2S } from 'core/g2s';\r\nimport * as api from 'core/api';\r\nimport store from './store';\r\nimport router from './router';\r\nimport * as utils from 'core/utils';\r\nimport { ContentModalComponent } from './components/content/modal';\r\nimport { ContentTextComponent } from './components/content/text';\r\nimport { CustomDialogComponent } from './components/custom-dialog';\r\nimport { DialogCatchUpComponent } from './components/dialog-catch-up';\r\nimport { DialogAppComponent } from './components/dialog-app';\r\nimport { DrawerMenuComponent } from './components/navigation/drawer-menu';\r\nimport { FlightCardComponent } from './components/flight/card';\r\nimport { FullScreenDialogComponent } from './components/full-screen-dialog';\r\nimport { RegionSelectorComponent } from './components/header-region-selector';\r\nimport { SwitchLanguageComponent } from './components/language-switcher';\r\nimport { FlightDetailsComponent } from './components/flight/details';\r\nimport { FlightSearchFormComponent } from './components/flight/search-form';\r\nimport { FlightTermsComponent } from './components/flight/terms';\r\nimport { SearchTabsComponent } from './components/flight/search-tabs';\r\nimport { MobileInputComponent } from './components/forms/mobile-input';\r\nimport { PaymentFormComponent } from './components/payment/form';\r\nimport { ProductListComponent } from './components/product/list';\r\nimport { SeatsSelectionComponent } from './components/flight/seats-selection';\r\nimport { ProductNotPackageComponent } from './components/product/not-package';\r\nimport { ProductPackageComponent } from './components/product/package';\r\nimport { OnlineRegistrationComponent } from './components/product/online-registration';\r\nimport { ProductServiceBrandComponent } from './components/product/service-brands';\r\nimport { AdvancedProductServiceBrandComponent } from './components/product/advanced-service-brands';\r\nimport { ProductTimerComponent } from './components/product/timer';\r\nimport { AdditionalBaggageComponent } from './components/flight/additional-baggage';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nconst WithRender = require('./template.html');\r\n\r\nG2S.init();\r\n\r\n// axios global interceptor for required sign in\r\nG2S.$http.interceptors.response.use((response) => {\r\n return response;\r\n}, function (error) {\r\n if (error.response && (error.response.status == 401 || error.response.status == 403)) {\r\n (Vue).prototype.$auth.signOutClientSide();\r\n\r\n // Redirect only for /account routes!!!\r\n if (router.currentRoute && utils.String.startsWith(router.currentRoute.path, '/account')) {\r\n router.push({\r\n path: '/signin',\r\n query: (router.currentRoute ? { redirect: router.currentRoute.fullPath } : {})\r\n });\r\n }\r\n }\r\n return Promise.reject(error);\r\n});\r\n\r\nVue.use(Vuelidate);\r\nVue.use(VS2);\r\nVue.use(Quasar, {\r\n components: {\r\n QAutocomplete,\r\n QBtn,\r\n QCard,\r\n QCarousel,\r\n QCarouselSlide,\r\n QCheckbox,\r\n QChip,\r\n QDialog,\r\n QInput,\r\n QInputFrame,\r\n QItem,\r\n QItemMain,\r\n QItemSide,\r\n QItemTile,\r\n QLayout,\r\n QLayoutDrawer,\r\n QLayoutFooter,\r\n QLayoutHeader,\r\n QList,\r\n QModal,\r\n QModalLayout,\r\n QPage,\r\n QPageContainer,\r\n QPopover,\r\n QRadio,\r\n QRange,\r\n QSelect,\r\n QSpinner,\r\n QTab,\r\n QTabPane,\r\n QTabs,\r\n QToggle,\r\n QToolbar,\r\n QToolbarTitle,\r\n QTooltip,\r\n QCollapsible\r\n },\r\n plugins: { Notify },\r\n loadingBar: {\r\n skipHijack: true // disabled loading for webvizor\r\n }\r\n});\r\n\r\nVue.component('content-modal', ContentModalComponent);\r\nVue.component('content-text', ContentTextComponent);\r\nVue.component('custom-dialog', CustomDialogComponent);\r\nVue.component('dialog-catch-up', DialogCatchUpComponent);\r\nVue.component('full-screen-dialog', FullScreenDialogComponent);\r\nVue.component('dialog-app', DialogAppComponent);\r\nVue.component('drawer-menu', DrawerMenuComponent);\r\nVue.component('flight-card', FlightCardComponent);\r\nVue.component('flight-details', FlightDetailsComponent);\r\nVue.component('flight-search-form', FlightSearchFormComponent);\r\nVue.component('region-selector', RegionSelectorComponent);\r\nVue.component('language-switcher', SwitchLanguageComponent);\r\nVue.component('flight-terms', FlightTermsComponent);\r\nVue.component('search-tabs', SearchTabsComponent);\r\nVue.component('mobile-input', MobileInputComponent);\r\nVue.component('payment-form', PaymentFormComponent);\r\nVue.component('product-list', ProductListComponent);\r\nVue.component('seats-selection', SeatsSelectionComponent);\r\nVue.component('product-not-package', ProductNotPackageComponent);\r\nVue.component('product-package', ProductPackageComponent);\r\nVue.component('product-registration', OnlineRegistrationComponent);\r\nVue.component('product-service-brand', ProductServiceBrandComponent);\r\nVue.component('advanced-product-service-brand', AdvancedProductServiceBrandComponent);\r\nVue.component('product-timer', ProductTimerComponent);\r\nVue.component('additional-baggage', AdditionalBaggageComponent);\r\n\r\n(Vue).prototype.$getClientDevice = function (): api.ClientDevice {\r\n const result = {\r\n browser: (this).$q.platform.is.name || G2S.config.clientDevice.browser,\r\n colorDepth: screen.colorDepth,\r\n ipAddress: G2S.config.clientDevice.ipAddress,\r\n javaEnabled: true,\r\n language: navigator.language,\r\n platform: (this).$q.platform.is.platform || G2S.config.clientDevice.platform,\r\n screenHeight: screen.height,\r\n screenWidth: screen.width,\r\n timezone: new Date().getTimezoneOffset(),\r\n type: G2S.config.clientDevice.type,\r\n userAgent: navigator.userAgent,\r\n windowHeight: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight,\r\n windowWidth: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth\r\n };\r\n\r\n if (result.platform.length > 10) {\r\n result.platform.length = result.platform.substring(0, 10);\r\n }\r\n\r\n if (result.browser.length > 20) {\r\n result.browser.length = result.browser.substring(0, 20);\r\n }\r\n\r\n if ((this).$q.platform.is.mobile) {\r\n result.type = 'mobile';\r\n }\r\n \r\n if ((this).$q.platform.is.platform === 'mac') {\r\n result.platform = 'macos';\r\n }\r\n\r\n switch (G2S.config.clientDevice.browser) {\r\n case 'app_android':\r\n result.browser = 'app_android';\r\n break;\r\n\r\n case 'app_iphone':\r\n result.browser = 'app_iphone';\r\n break;\r\n }\r\n\r\n switch (G2S.config.clientDevice.platform) {\r\n case 'android':\r\n result.platform = 'android';\r\n break;\r\n\r\n case 'iphone':\r\n result.platform = 'iphone';\r\n break;\r\n }\r\n\r\n return result;\r\n};\r\n\r\n// GA support\r\n// https://groups.google.com/forum/#!searchin/phonegap/google$20analytics/phonegap/Mtj6KoUk8cY/1oPJ-UEhpBIJ\r\n\r\nconst root = new Vue(WithRender({\r\n el: '#q-app',\r\n store,\r\n router,\r\n data: () => {\r\n return {\r\n // v-model value for left drawer\r\n drawerLeftState: true\r\n };\r\n }\r\n}));\r\n\r\nwindow['ROOT'] = root;\r\nwindow['moment'] = moment;\r\n","import * as api from '../api';\r\nimport * as flight from './FlightModel';\r\n\r\nexport * from './BookingClass';\r\nexport * from './FlightFilterService';\r\nexport * from './FlightNavigationService';\r\nexport * from './FlightModel';\r\nexport * from './TrainModel';\r\nexport * from './FlightSearchFilters';\r\nexport * from './FlightSearchService';\r\nexport * from './ReservationModel';\r\n\r\nexport interface FlightFilterModel {\r\n uniqueId: string;\r\n visible: boolean;\r\n parentId: string;\r\n childCount: number;\r\n}\r\n\r\nexport interface FlightFilterLegModel {\r\n durationMinutes: number;\r\n}\r\n\r\nexport interface FlightFilterResult {\r\n flightsVisibleCount: number;\r\n flightsVisibleParentCount: number;\r\n}\r\n\r\nexport interface FlightListModel {\r\n uniqueId: string;\r\n flight: flight.FlightModel;\r\n}\r\n\r\nexport interface FlightSearchParams {\r\n from: string;\r\n to: string;\r\n departure: Date | null;\r\n return: Date | null;\r\n roundtrip: boolean;\r\n class: string;\r\n passengers: PassengersCount;\r\n}\r\n\r\nexport interface FlightSearchResult {\r\n searchId: string;\r\n flights: flight.FlightModel[];\r\n flightsToFilter: FlightFilterModel[];\r\n banners: api.Banner[];\r\n duration: number; // Search duration in seconds\r\n}\r\n\r\nexport enum Gender {\r\n Male,\r\n Female\r\n}\r\n\r\nexport interface PassengersCount {\r\n adults: number;\r\n children: number;\r\n infants: number;\r\n}\r\n\r\nexport interface SearchHistoryItem {\r\n from: string;\r\n to: string;\r\n departure: Date | null;\r\n return: Date | null;\r\n passengers: number;\r\n class: string;\r\n url: string;\r\n timestamp: number;\r\n expires: number;\r\n}\r\n","import * as i18next from 'i18next';\r\n\r\nexport class BookingClass {\r\n static get Business(): string { return 'Business'; }\r\n static get Economic(): string { return 'Economic'; }\r\n static get EconomicPremium(): string { return 'EconomicPremium'; }\r\n static get EconomicTourist(): string { return 'EconomicTourist'; }\r\n static get First(): string { return 'First'; }\r\n\r\n static listForSearch(): string[] {\r\n return [\r\n BookingClass.Economic,\r\n //BookingClass.EconomicPremium,\r\n BookingClass.Business\r\n ];\r\n }\r\n\r\n static classLabel(className: string): string {\r\n return i18next.t('label_flight_class_' + className.toLowerCase());\r\n }\r\n}\r\n","import * as api from '../../api';\r\nimport * as flights from '../../flights';\r\n\r\nexport class AirlinesFilterAlliance {\r\n checked: boolean;\r\n name: string;\r\n\r\n constructor(checked: boolean, name: string) {\r\n this.checked = checked;\r\n this.name = name;\r\n }\r\n}\r\n\r\nexport class AirlinesFilterItem {\r\n checked: boolean;\r\n airline: api.Airline;\r\n\r\n constructor(checked: boolean, airline: api.Airline) {\r\n this.checked = checked;\r\n this.airline = airline;\r\n }\r\n}\r\n\r\nexport class AirlinesFilter {\r\n items: AirlinesFilterItem[] = [];\r\n alliances: AirlinesFilterAlliance[] = [];\r\n\r\n constructor(flights: flights.FlightModel[]) {\r\n const newItems: AirlinesFilterItem[] = [];\r\n const keys: string[] = [];\r\n const newAlliances: AirlinesFilterAlliance[] = [];\r\n const allianceKeys: string[] = [];\r\n\r\n flights.forEach((flight) => {\r\n flight.legs.forEach((leg) => {\r\n if (keys.indexOf(leg.segments[0].airline.uniqueId) < 0) {\r\n newItems.push(new AirlinesFilterItem(false, leg.segments[0].airline));\r\n keys.push(leg.segments[0].airline.uniqueId);\r\n }\r\n if (leg.segments[0].airline.alliance\r\n && leg.segments[0].airline.alliance != 'None'\r\n && allianceKeys.indexOf(leg.segments[0].airline.alliance) < 0) {\r\n newAlliances.push(new AirlinesFilterAlliance(false, leg.segments[0].airline.alliance));\r\n allianceKeys.push(leg.segments[0].airline.alliance);\r\n }\r\n });\r\n });\r\n\r\n newItems.sort((a, b) => {\r\n return a.airline!.name == b.airline!.name ? 0 : (a.airline!.name > b.airline!.name ? 1 : -1);\r\n });\r\n newAlliances.sort((a, b) => {\r\n return a.name == b.name ? 0 : (a.name > b.name ? 1 : -1);\r\n });\r\n\r\n this.items = newItems;\r\n this.alliances = newAlliances;\r\n }\r\n\r\n get touched(): boolean {\r\n if (this.getCheckedItemIds().length > 0\r\n || this.getCheckedAlliances().length > 0) {\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n clear() {\r\n this.items.forEach((item: AirlinesFilterItem) => {\r\n item.checked = false;\r\n });\r\n this.alliances.forEach((item: AirlinesFilterAlliance) => {\r\n item.checked = false;\r\n });\r\n }\r\n\r\n check(flight: flights.FlightModel): boolean {\r\n const checkedItems = this.getCheckedItemIds();\r\n const checkedAlliances = this.getCheckedAlliances();\r\n\r\n if (checkedItems.length > 0) {\r\n if (flight.legs.length === 1) {\r\n if (checkedItems.indexOf(flight.legs[0].segments[0].airline.uniqueId) < 0) {\r\n return false;\r\n }\r\n } else {\r\n if (checkedItems.indexOf(flight.legs[0].segments[0].airline.uniqueId) < 0\r\n && checkedItems.indexOf(flight.legs[1].segments[0].airline.uniqueId) < 0) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (checkedAlliances.length > 0) {\r\n if (flight.legs.length === 1) {\r\n if (checkedAlliances.indexOf(flight.legs[0].segments[0].airline.alliance) < 0) {\r\n return false;\r\n }\r\n } else {\r\n if (checkedAlliances.indexOf(flight.legs[0].segments[0].airline.alliance) < 0\r\n && checkedAlliances.indexOf(flight.legs[1].segments[0].airline.alliance) < 0) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private getCheckedItemIds(): string[] {\r\n const result: string[] = [];\r\n\r\n this.items.forEach((item: AirlinesFilterItem) => {\r\n if (item.checked) {\r\n result.push(item.airline!.uniqueId);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private getCheckedAlliances(): string[] {\r\n const result: string[] = [];\r\n\r\n this.alliances.forEach((item: AirlinesFilterAlliance) => {\r\n if (item.checked) {\r\n result.push(item.name);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import * as api from '../../api';\r\nimport * as flights from '../../flights';\r\n\r\nexport class AirportsFilterItem {\r\n checked: boolean;\r\n destination: api.Destination;\r\n\r\n constructor(checked: boolean, destination: api.Destination) {\r\n this.checked = checked;\r\n this.destination = destination;\r\n }\r\n}\r\n\r\nexport class AirportsFilter {\r\n legs: {\r\n direction: string;\r\n departure: {\r\n items: AirportsFilterItem[];\r\n };\r\n arrival: {\r\n items: AirportsFilterItem[];\r\n };\r\n }[]\r\n\r\n constructor(flights: flights.FlightModel[]) {\r\n if (flights && flights.length) {\r\n this.legs = [];\r\n flights[0].legs.forEach((leg) => {\r\n this.legs.push({\r\n direction: `${leg.departureDestination.city.localizedName} – ${leg.arrivalDestination.city.localizedName}`,\r\n departure: {\r\n items: []\r\n },\r\n arrival: {\r\n items: []\r\n }\r\n });\r\n });\r\n }\r\n\r\n flights.forEach((flight) => {\r\n flight.legs.forEach((leg, legIndex) => {\r\n const alreadyAddedDepartureItem = this.legs[legIndex].departure.items.find(x => x.destination.uniqueId == leg.departureDestination.uniqueId);\r\n\r\n if (!alreadyAddedDepartureItem) {\r\n this.legs[legIndex].departure.items.push(new AirportsFilterItem(false, leg.departureDestination));\r\n }\r\n\r\n const alreadyAddedArrivalItem = this.legs[legIndex].arrival.items.find(x => x.destination.uniqueId == leg.arrivalDestination.uniqueId);\r\n\r\n if (!alreadyAddedArrivalItem) {\r\n this.legs[legIndex].arrival.items.push(new AirportsFilterItem(false, leg.arrivalDestination));\r\n }\r\n });\r\n });\r\n\r\n this.legs.forEach((leg) => {\r\n const sortByLocalizedNameCallback = (a, b) => a.destination.localizedName == b.destination.localizedName ? 0 : (a.destination.localizedName > b.destination.localizedName ? 1 : -1);\r\n\r\n leg.departure.items.sort(sortByLocalizedNameCallback);\r\n leg.arrival.items.sort(sortByLocalizedNameCallback);\r\n });\r\n }\r\n\r\n get touched(): boolean {\r\n let touched = false;\r\n const legsWithCheckedItemIds = this.getLegsWithCheckedItemIds();\r\n\r\n legsWithCheckedItemIds.forEach((legWithCheckedItemIds) => {\r\n if (legWithCheckedItemIds.departure.length > 0\r\n || legWithCheckedItemIds.arrival.length > 0) {\r\n touched = true;\r\n }\r\n });\r\n\r\n return touched;\r\n }\r\n\r\n clear() {\r\n this.legs.forEach((leg) => {\r\n leg.departure.items.forEach((departureFilterItem) => {\r\n departureFilterItem.checked = false;\r\n });\r\n leg.arrival.items.forEach((arrivalFilterItem) => {\r\n arrivalFilterItem.checked = false;\r\n });\r\n });\r\n }\r\n\r\n check(flight: flights.FlightModel): boolean {\r\n let checkPassed = true;\r\n const legsWithCheckedItemIds = this.getLegsWithCheckedItemIds();\r\n\r\n flight.legs.forEach((leg, legIndex) => {\r\n if (legsWithCheckedItemIds[legIndex].departure.length\r\n && legsWithCheckedItemIds[legIndex].departure.indexOf(leg.departureDestination.uniqueId) < 0) {\r\n checkPassed = false;\r\n }\r\n if (legsWithCheckedItemIds[legIndex].arrival.length\r\n && legsWithCheckedItemIds[legIndex].arrival.indexOf(leg.arrivalDestination.uniqueId) < 0) {\r\n checkPassed = false;\r\n }\r\n });\r\n\r\n return checkPassed;\r\n }\r\n\r\n private getLegsWithCheckedItemIds() {\r\n const legsWithCheckedItems: {\r\n departure: number[];\r\n arrival: number[];\r\n }[] = [];\r\n\r\n this.legs.forEach((leg, legIndex) => {\r\n legsWithCheckedItems.push({\r\n departure: [],\r\n arrival: []\r\n });\r\n leg.departure.items.forEach((departureFilterItem) => {\r\n if (departureFilterItem.checked) {\r\n legsWithCheckedItems[legIndex].departure.push(departureFilterItem.destination.uniqueId);\r\n }\r\n });\r\n leg.arrival.items.forEach((arrivalFilterItem) => {\r\n if (arrivalFilterItem.checked) {\r\n legsWithCheckedItems[legIndex].arrival.push(arrivalFilterItem.destination.uniqueId);\r\n }\r\n });\r\n });\r\n\r\n return legsWithCheckedItems;\r\n }\r\n}\r\n","import * as flights from '../../flights';\r\n\r\nexport class BaggageFilter {\r\n none = false;\r\n with = false;\r\n\r\n get touched(): boolean {\r\n return this.none || this.with;\r\n }\r\n\r\n clear() {\r\n this.none = false;\r\n this.with = false;\r\n }\r\n\r\n check(flight: flights.FlightModel): boolean {\r\n let result = true; // By default filter is not applied\r\n\r\n if (this.none || this.with) {\r\n result = false; // Filter defined so hide flight by default\r\n\r\n if (this.none && !this.hasBaggage(flight.legs[0])) {\r\n return true;\r\n }\r\n\r\n if (this.with && this.hasBaggage(flight.legs[0])) {\r\n return true;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n hasBaggage(leg: flights.LegModel): boolean {\r\n return leg.baggage && (leg.baggage.pieceWeight > 0 || leg.baggage.pieces > 0);\r\n }\r\n\r\n hasBaggageCabin(leg: flights.LegModel): boolean {\r\n return leg.baggageCabin && (leg.baggageCabin.pieceWeight > 0 || leg.baggageCabin.pieces > 0);\r\n }\r\n}\r\n","import * as flights from '../../flights';\r\n\r\nexport class ChangeRefundFilter {\r\n none = false;\r\n changable = false;\r\n refundable = false;\r\n\r\n get touched(): boolean {\r\n return this.none || this.changable || this.refundable;\r\n }\r\n\r\n clear() {\r\n this.none = false;\r\n this.changable = false;\r\n this.refundable = false;\r\n }\r\n\r\n check(flight: flights.FlightModel): boolean {\r\n let result = true; // By default filter is not applied\r\n\r\n if (this.none || this.changable || this.refundable) {\r\n result = false; // Filter defined so hide flight by default\r\n\r\n if (this.none) {\r\n return flight.exchangeRules\r\n && !flight.exchangeRules.isAllowable\r\n && flight.refundRules\r\n && !flight.refundRules.isAllowable;\r\n }\r\n\r\n if (this.changable) {\r\n return flight.exchangeRules\r\n && flight.exchangeRules.isAllowable;\r\n }\r\n\r\n if (this.refundable) {\r\n return flight.refundRules\r\n && flight.refundRules.isAllowable;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import * as flights from '../../flights';\r\n\r\nexport class FlightDurationFilterItem {\r\n min = 0;\r\n max = 0;\r\n rangeMin = 0;\r\n rangeMax = 0;\r\n\r\n constructor(min: number, max: number, rangeMin: number, rangeMax: number) {\r\n this.min = min;\r\n this.max = max;\r\n this.rangeMin = rangeMin;\r\n this.rangeMax = rangeMax;\r\n }\r\n}\r\n\r\nexport class FlightDurationFilter {\r\n items: FlightDurationFilterItem[] = [];\r\n\r\n constructor(flights: flights.FlightModel[]) {\r\n if (flights.length === 0) {\r\n return;\r\n }\r\n\r\n const newItems: FlightDurationFilterItem[] = [];\r\n\r\n flights[0].legs.forEach(() => {\r\n newItems.push(new FlightDurationFilterItem(0, 0, 0, 0));\r\n });\r\n\r\n flights.forEach(f => {\r\n f.legs.forEach((l, i) => {\r\n l.durationMinutes = l.duration.asMinutes();\r\n\r\n if (newItems[i].min === 0 || newItems[i].min > l.durationMinutes) {\r\n newItems[i].min = l.durationMinutes;\r\n }\r\n\r\n if (newItems[i].max === 0 || newItems[i].max < l.durationMinutes) {\r\n newItems[i].max = l.durationMinutes;\r\n }\r\n });\r\n });\r\n\r\n newItems.forEach((item) => {\r\n item.rangeMin = item.min;\r\n item.rangeMax = item.max;\r\n });\r\n\r\n this.items = newItems;\r\n }\r\n\r\n get touched(): boolean {\r\n let result = false;\r\n\r\n this.items.forEach((item) => {\r\n if (item.rangeMin !== item.min || item.rangeMax !== item.max) {\r\n result = true;\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n clear() {\r\n this.items.forEach((item) => {\r\n item.rangeMin = item.min;\r\n item.rangeMax = item.max;\r\n });\r\n }\r\n\r\n check(flight: flights.FlightModel): boolean {\r\n for (let i = 0; i < flight.legs.length; i++) {\r\n if (this.items[i].min !== this.items[i].max\r\n && (this.items[i].min !== this.items[i].rangeMin || this.items[i].max !== this.items[i].rangeMax)) {\r\n if (flight.legs[i].durationMinutes < this.items[i].rangeMin) {\r\n return false;\r\n }\r\n\r\n if (flight.legs[i].durationMinutes > this.items[i].rangeMax) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import * as flights from '../../flights';\r\n\r\nexport class DepartureArrivalFilterItem {\r\n\r\n departure: RangeFilter = {\r\n min: 0,\r\n max: 0,\r\n rangeMin: 0,\r\n rangeMax: 0\r\n }\r\n\r\n arrival: RangeFilter = {\r\n min: 0,\r\n max: 0,\r\n rangeMin: 0,\r\n rangeMax: 0\r\n }\r\n\r\n constructor(\r\n departure: { min: number; max: number; rangeMin: number; rangeMax: number },\r\n arrival: { min: number; max: number; rangeMin: number; rangeMax: number }\r\n ) {\r\n this.departure = departure;\r\n this.arrival = arrival;\r\n }\r\n}\r\n\r\nexport class DepartureArrivalFilter {\r\n items: DepartureArrivalFilterItem[] = [];\r\n\r\n constructor(flights: flights.FlightModel[]) {\r\n if (flights.length === 0) {\r\n return;\r\n }\r\n\r\n const newItems: DepartureArrivalFilterItem[] = [];\r\n\r\n flights[0].legs.forEach(() => {\r\n newItems.push(new DepartureArrivalFilterItem(\r\n { min: 0, max: 0, rangeMin: 0, rangeMax: 0 },\r\n { min: 0, max: 0, rangeMin: 0, rangeMax: 0 }\r\n ));\r\n });\r\n\r\n flights.forEach(f => {\r\n f.legs.forEach((l, i) => {\r\n if (newItems[i].departure.min === 0 || newItems[i].departure.min > l.departureDate.unix()) {\r\n newItems[i].departure.min = l.departureDate.unix();\r\n }\r\n\r\n if (newItems[i].departure.max === 0 || newItems[i].departure.max < l.departureDate.unix()) {\r\n newItems[i].departure.max = l.departureDate.unix();\r\n }\r\n\r\n if (newItems[i].arrival.min === 0 || newItems[i].arrival.min > l.arrivalDate.unix()) {\r\n newItems[i].arrival.min = l.arrivalDate.unix();\r\n }\r\n\r\n if (newItems[i].arrival.max === 0 || newItems[i].arrival.max < l.arrivalDate.unix()) {\r\n newItems[i].arrival.max = l.arrivalDate.unix();\r\n }\r\n });\r\n });\r\n\r\n newItems.forEach((item) => {\r\n item.departure.rangeMin = item.departure.min;\r\n item.departure.rangeMax = item.departure.max;\r\n item.arrival.rangeMin = item.arrival.min;\r\n item.arrival.rangeMax = item.arrival.max;\r\n });\r\n\r\n this.items = newItems;\r\n }\r\n\r\n get touched(): boolean {\r\n let result = false;\r\n\r\n this.items.forEach((item) => {\r\n if (item.departure.rangeMin !== item.departure.min\r\n || item.departure.rangeMax !== item.departure.max\r\n || item.arrival.rangeMin !== item.arrival.min\r\n || item.arrival.rangeMax !== item.arrival.max) {\r\n result = true;\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n clear() {\r\n this.items.forEach((item) => {\r\n item.departure.rangeMin = item.departure.min;\r\n item.departure.rangeMax = item.departure.max;\r\n item.arrival.rangeMin = item.arrival.min;\r\n item.arrival.rangeMax = item.arrival.max;\r\n });\r\n }\r\n\r\n check(flight: flights.FlightModel): boolean {\r\n for (let i = 0; i < flight.legs.length; i++) {\r\n if (this.items[i].departure.min !== this.items[i].departure.max\r\n && (this.items[i].departure.min !== this.items[i].departure.rangeMin\r\n || this.items[i].departure.max !== this.items[i].departure.rangeMax)) {\r\n if (flight.legs[i].departureDate.unix() < this.items[i].departure.rangeMin) {\r\n return false;\r\n }\r\n\r\n if (flight.legs[i].departureDate.unix() > this.items[i].departure.rangeMax) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this.items[i].arrival.min !== this.items[i].arrival.max\r\n && (this.items[i].arrival.min !== this.items[i].arrival.rangeMin\r\n || this.items[i].arrival.max !== this.items[i].arrival.rangeMax)) {\r\n if (flight.legs[i].arrivalDate.unix() < this.items[i].arrival.rangeMin) {\r\n return false;\r\n }\r\n\r\n if (flight.legs[i].arrivalDate.unix() > this.items[i].arrival.rangeMax) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\ninterface RangeFilter {\r\n min: number;\r\n max: number;\r\n rangeMin: number;\r\n rangeMax: number;\r\n}\r\n","import * as flights from '../../flights';\r\n\r\nexport class FlightKindFilterItem {\r\n checked: boolean;\r\n name: string;\r\n\r\n constructor(checked: boolean, name: string) {\r\n this.checked = checked;\r\n this.name = name;\r\n }\r\n}\r\n\r\nexport class FlightKindFilter {\r\n items: FlightKindFilterItem[] = [];\r\n\r\n constructor(flights: flights.FlightModel[]) {\r\n const newItems: FlightKindFilterItem[] = [];\r\n const keys: string[] = [];\r\n\r\n flights.forEach((flight) => {\r\n if (keys.indexOf(flight.flightKind) < 0) {\r\n newItems.push(new FlightKindFilterItem(false, flight.flightKind));\r\n keys.push(flight.flightKind);\r\n }\r\n });\r\n\r\n newItems.sort((a, b) => {\r\n return a.name == b.name ? 0 : (a.name > b.name ? 1 : -1);\r\n });\r\n\r\n if (newItems.length > 1) {\r\n this.items = newItems;\r\n }\r\n }\r\n\r\n get touched(): boolean {\r\n let result = false;\r\n\r\n if (this.getCheckedItemIds().length > 0) {\r\n result = true;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n clear() {\r\n this.items.forEach((item: FlightKindFilterItem) => {\r\n item.checked = false;\r\n });\r\n }\r\n\r\n check(flight: flights.FlightModel): boolean {\r\n const checkedItems = this.getCheckedItemIds();\r\n\r\n if (checkedItems.length > 0 && checkedItems.indexOf(flight.flightKind) < 0) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private getCheckedItemIds(): string[] {\r\n const result: string[] = [];\r\n\r\n this.items.forEach((item: FlightKindFilterItem) => {\r\n if (item.checked) {\r\n result.push(item.name);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import * as flights from '../../flights';\r\n\r\nexport class PriceFilter {\r\n min: number;\r\n max: number;\r\n rangeMin: number;\r\n rangeMax: number;\r\n currencyCode?: string;\r\n\r\n constructor(flights: flights.FlightModel[]) {\r\n let minVal = 0;\r\n let maxVal = 0;\r\n let currencyCode = '';\r\n\r\n flights.forEach(f => {\r\n if (!minVal || minVal > f.billingPrice) {\r\n minVal = f.billingPrice;\r\n }\r\n\r\n if (!maxVal || maxVal < f.billingPrice) {\r\n maxVal = f.billingPrice;\r\n }\r\n if (f.currencyCode) {\r\n currencyCode = f.currencyCode;\r\n }\r\n });\r\n\r\n if (minVal > 0\r\n && maxVal > 0\r\n && minVal !== maxVal) {\r\n this.min = minVal;\r\n this.max = maxVal;\r\n } else {\r\n this.min = 0;\r\n this.max = 0;\r\n }\r\n\r\n this.rangeMin = this.min;\r\n this.rangeMax = this.max;\r\n this.currencyCode = currencyCode;\r\n }\r\n\r\n get touched(): boolean {\r\n return this.rangeMin !== this.min || this.rangeMax !== this.max;\r\n }\r\n\r\n clear() {\r\n this.rangeMin = this.min;\r\n this.rangeMax = this.max;\r\n }\r\n\r\n check(flight: flights.FlightModel): boolean {\r\n if (this.min !== this.max && (this.min !== this.rangeMin || this.max !== this.rangeMax)) {\r\n if (flight.billingPrice < this.rangeMin) {\r\n return false;\r\n }\r\n\r\n if (flight.billingPrice > this.rangeMax) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import * as flights from '../../flights';\r\n\r\nexport class StopCountFilter {\r\n none = false;\r\n one = false;\r\n two = false;\r\n\r\n get touched(): boolean {\r\n return this.none || this.one || this.two;\r\n }\r\n\r\n clear() {\r\n this.none = false;\r\n this.one = false;\r\n this.two = false;\r\n }\r\n\r\n check(flight: flights.FlightModel): boolean {\r\n let result = true; // By default filter is not applied\r\n\r\n if (this.none || this.one || this.two) {\r\n result = false; // Filter defined so hide flight by default\r\n\r\n let maxStopCount = 0;\r\n\r\n flight.legs.forEach(l => {\r\n const stopsCount = l.segments.length - 1;\r\n\r\n if (stopsCount > maxStopCount) {\r\n maxStopCount = stopsCount;\r\n }\r\n });\r\n\r\n if (this.none && maxStopCount === 0) {\r\n return true;\r\n }\r\n\r\n if (this.one && maxStopCount === 1) {\r\n return true;\r\n }\r\n\r\n if (this.two && maxStopCount > 1) {\r\n return true;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import * as flights from '../../flights';\r\n\r\nexport class StopDurationFilter {\r\n min: number;\r\n max: number;\r\n rangeMin: number;\r\n rangeMax: number;\r\n\r\n constructor(flights: flights.FlightModel[]) {\r\n let minStop = 0;\r\n let maxStop = 0;\r\n\r\n flights.forEach(f => {\r\n f.legs.forEach(l => {\r\n for (let i = 0; i < l.segments.length - 1; i++) {\r\n const stopBeginTime = l.segments[i].arrivalDate;\r\n const stopEndTime = l.segments[i + 1].departureDate;\r\n const d = stopEndTime.diff(stopBeginTime, 'minute');\r\n\r\n if (!minStop || minStop > d) {\r\n minStop = d;\r\n }\r\n\r\n if (!maxStop || maxStop < d) {\r\n maxStop = d;\r\n }\r\n }\r\n });\r\n });\r\n\r\n if (minStop > 0\r\n && maxStop > 0\r\n && minStop !== maxStop) {\r\n this.min = minStop;\r\n this.max = maxStop;\r\n } else {\r\n this.min = 0;\r\n this.max = 0;\r\n }\r\n\r\n this.rangeMin = this.min;\r\n this.rangeMax = this.max;\r\n }\r\n\r\n get touched(): boolean {\r\n return this.rangeMin !== this.min || this.rangeMax !== this.max;\r\n }\r\n\r\n clear() {\r\n this.rangeMin = this.min;\r\n this.rangeMax = this.max;\r\n }\r\n\r\n check(flight: flights.FlightModel): boolean {\r\n if (this.min !== this.max && (this.min !== this.rangeMin || this.max !== this.rangeMax)) {\r\n if (flight.stopDuration[0] == 0 && flight.stopDuration[1] == 0) {\r\n // Filter out direct flights\r\n return false;\r\n } else {\r\n if (flight.stopDuration[0] < this.rangeMin) {\r\n return false;\r\n }\r\n\r\n if (flight.stopDuration[1] > this.rangeMax) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import * as flights from '../flights';\r\nimport * as filters from './filters';\r\nimport * as utils from '../utils';\r\n\r\nexport class FlightFilterService {\r\n public sort: string;\r\n\r\n public airlines: filters.AirlinesFilter;\r\n public baggage: filters.BaggageFilter;\r\n public changeRefund: filters.ChangeRefundFilter;\r\n public flightDuration: filters.FlightDurationFilter;\r\n public airports: filters.AirportsFilter;\r\n public departureArrival: filters.DepartureArrivalFilter;\r\n public flightKind: filters.FlightKindFilter;\r\n public price: filters.PriceFilter;\r\n public stopCount: filters.StopCountFilter;\r\n public stopDuration: filters.StopDurationFilter;\r\n\r\n constructor(flights: flights.FlightModel[], urlFilters: string) {\r\n this.sort = 'price';\r\n\r\n this.airlines = new filters.AirlinesFilter(flights);\r\n this.baggage = new filters.BaggageFilter();\r\n this.changeRefund = new filters.ChangeRefundFilter();\r\n this.flightDuration = new filters.FlightDurationFilter(flights);\r\n this.airports = new filters.AirportsFilter(flights);\r\n this.departureArrival = new filters.DepartureArrivalFilter(flights);\r\n this.flightKind = new filters.FlightKindFilter(flights);\r\n this.price = new filters.PriceFilter(flights);\r\n this.stopCount = new filters.StopCountFilter();\r\n this.stopDuration = new filters.StopDurationFilter(flights);\r\n\r\n if (urlFilters) {\r\n const parsed = urlFilters.split('-');\r\n\r\n parsed.forEach(f => {\r\n if (f.length == 2) {\r\n // It's airline\r\n this.airlines.items.forEach((item) => {\r\n if (item.airline.iataCode === urlFilters) {\r\n item.checked = true;\r\n }\r\n });\r\n } else {\r\n if (f == 'd') {\r\n this.stopCount.none = true;\r\n } else if (f == 'b') {\r\n this.baggage.with = true;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n get touched(): boolean {\r\n return this.airlines.touched\r\n || this.baggage.touched\r\n || this.changeRefund.touched\r\n || this.flightDuration.touched\r\n || this.airports.touched\r\n || this.departureArrival.touched\r\n || this.flightKind.touched\r\n || this.price.touched\r\n || this.stopCount.touched\r\n || this.stopDuration.touched;\r\n }\r\n\r\n public filter(\r\n flights: flights.FlightFilterModel[],\r\n flightsToView: { [uniqueId: string]: flights.FlightModel },\r\n filters: flights.FlightFilterService,\r\n allowGroupping: boolean\r\n ): flights.FlightFilterResult {\r\n // Filter\r\n this.filterFlights(flights, flightsToView);\r\n\r\n // Reset grouping\r\n flights.forEach((flight) => {\r\n flight.parentId = '';\r\n flight.childCount = 0;\r\n });\r\n\r\n // Apply grouping\r\n // if (filters.sort === 'price' && allowGroupping) {\r\n // this.groupFlights(flights, flightsToView);\r\n // }\r\n\r\n // Sort\r\n this.sortFlights(flights, flightsToView);\r\n\r\n // Count results\r\n const result: flights.FlightFilterResult = {\r\n flightsVisibleCount: 0,\r\n flightsVisibleParentCount: 0\r\n };\r\n\r\n flights.forEach((f) => {\r\n if (f.visible) {\r\n result.flightsVisibleCount++;\r\n if (!f.parentId) {\r\n result.flightsVisibleParentCount++;\r\n }\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n clear() {\r\n this.airlines.clear();\r\n this.airports.clear();\r\n this.baggage.clear();\r\n this.changeRefund.clear();\r\n this.flightDuration.clear();\r\n this.departureArrival.clear();\r\n this.flightKind.clear();\r\n this.price.clear();\r\n this.stopCount.clear();\r\n this.stopDuration.clear();\r\n }\r\n\r\n private filterFlights(flights: flights.FlightFilterModel[], flightsToView: { [uniqueId: string]: flights.FlightModel }) {\r\n flights.forEach((f) => {\r\n const flight = flightsToView[f.uniqueId];\r\n\r\n if (!this.touched\r\n || (this.touched\r\n && (this.stopCount.check(flight)\r\n && this.baggage.check(flight)\r\n && this.changeRefund.check(flight)\r\n && this.stopDuration.check(flight)\r\n && this.airlines.check(flight)\r\n && this.flightDuration.check(flight)\r\n && this.airports.check(flight)\r\n && this.departureArrival.check(flight)\r\n && this.flightKind.check(flight)\r\n && this.price.check(flight)))) {\r\n f.visible = true;\r\n\r\n return;\r\n }\r\n\r\n f.visible = false;\r\n });\r\n }\r\n\r\n private groupFlights(flightFilters: flights.FlightFilterModel[], flights: { [uniqueId: string]: flights.FlightModel }) {\r\n flightFilters.forEach((potentialParentFlightFilter: flights.FlightFilterModel) => {\r\n const potentialParentFlight = flights[potentialParentFlightFilter.uniqueId];\r\n\r\n if (potentialParentFlightFilter.visible && !potentialParentFlightFilter.parentId) {\r\n const childrenFlightFilters = flightFilters.filter((flightFilter: flights.FlightFilterModel) => {\r\n const potentialChildFlight = flights[flightFilter.uniqueId];\r\n\r\n return flightFilter.uniqueId !== potentialParentFlightFilter.uniqueId\r\n && potentialChildFlight.billingPrice === potentialParentFlight.billingPrice\r\n && potentialChildFlight.legs[0].segments[0].airline.iataCode === potentialParentFlight.legs[0].segments[0].airline.iataCode\r\n && (potentialChildFlight.legs.length == 1\r\n || (potentialChildFlight.legs.length > 1\r\n && potentialChildFlight.legs[1].segments[0].airline.iataCode === potentialParentFlight.legs[1].segments[0].airline.iataCode))\r\n // There can be different airports so do not group different airports\r\n && potentialChildFlight.legs[0].segments[0].departureDestination.iataCode === potentialParentFlight.legs[0].segments[0].departureDestination.iataCode\r\n && potentialChildFlight.legs[0].segments[potentialChildFlight.legs[0].segments.length - 1].arrivalDestination.iataCode === potentialParentFlight.legs[0].segments[potentialParentFlight.legs[0].segments.length - 1].arrivalDestination.iataCode;\r\n });\r\n\r\n if (childrenFlightFilters.length > 0) {\r\n childrenFlightFilters.forEach((childFlightFilter: flights.FlightFilterModel) => {\r\n childFlightFilter.parentId = potentialParentFlightFilter.uniqueId;\r\n potentialParentFlightFilter.childCount++;\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n sumFast(flight: flights.FlightModel) {\r\n return flight.legs.reduce((total, f) => total + f.durationMinutes, 0) / 60;\r\n }\r\n\r\n private sortFlights(flightFilters: flights.FlightFilterModel[], flightsToView: { [uniqueId: string]: flights.FlightModel }) {\r\n switch (this.sort) {\r\n case 'price':\r\n {\r\n flightFilters.sort(\r\n utils\r\n .firstBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return flightsToView[v1.uniqueId].priority - flightsToView[v2.uniqueId].priority; }, { direction: -1 })\r\n .thenBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return flightsToView[v1.uniqueId].billingPrice - flightsToView[v2.uniqueId].billingPrice; })\r\n .thenBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return this.sumFast(flightsToView[v1.uniqueId]) - this.sumFast(flightsToView[v2.uniqueId]); })\r\n );\r\n break;\r\n }\r\n case 'duration':\r\n {\r\n flightFilters.sort(\r\n utils\r\n .firstBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return flightsToView[v1.uniqueId].priority - flightsToView[v2.uniqueId].priority; }, { direction: -1 })\r\n .thenBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return this.sumFast(flightsToView[v1.uniqueId]) - this.sumFast(flightsToView[v2.uniqueId]); })\r\n .thenBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return flightsToView[v1.uniqueId].billingPrice - flightsToView[v2.uniqueId].billingPrice; })\r\n );\r\n break;\r\n }\r\n case 'best':\r\n { \r\n let resByTime = flightFilters.sort((a, b) => this.sumFast(flightsToView[a.uniqueId]) - this.sumFast(flightsToView[b.uniqueId])).map((e, i) => ({\r\n uid: e.uniqueId,\r\n index: i,\r\n value: this.sumFast(flightsToView[e.uniqueId]),\r\n priority: flightsToView[e.uniqueId].priority\r\n }));\r\n \r\n let resByCost = flightFilters.sort((a, b) => flightsToView[a.uniqueId].billingPrice - flightsToView[b.uniqueId].billingPrice).map((e, i) => ({\r\n uid: e.uniqueId,\r\n index: i,\r\n value: flightsToView[e.uniqueId].billingPrice,\r\n priority: flightsToView[e.uniqueId].priority\r\n }));\r\n\r\n const swap = (json)=>{\r\n var ret = {};\r\n for(var key in json){\r\n ret[json[key].uid] = json[key].rank;\r\n }\r\n \r\n return ret;\r\n } \r\n \r\n let setRank = (elems) => { \r\n let prevValue = null;\r\n let rankIndex = 1;\r\n \r\n for (let elem of elems) {\r\n \r\n if (!prevValue || elem.value == (prevValue).value) {\r\n elem.rank = rankIndex;\r\n } else {\r\n elem.rank = ++rankIndex;\r\n }\r\n \r\n prevValue = elem;\r\n \r\n }\r\n\r\n return elems;\r\n }\r\n \r\n let merge = (time, cost) => {\r\n let res = {};\r\n \r\n for (let key in time) {\r\n res[key] = parseFloat(cost[key]) + parseFloat(time[key]) * 0.5\r\n }\r\n return res;\r\n }\r\n \r\n let result = merge(\r\n swap(setRank(resByTime)),\r\n swap(setRank(resByCost))\r\n )\r\n \r\n flightFilters.sort(\r\n utils\r\n .firstBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return flightsToView[v1.uniqueId].priority - flightsToView[v2.uniqueId].priority; }, { direction: -1 })\r\n .thenBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return (result[v1.uniqueId] - result[v2.uniqueId] )})\r\n )\r\n \r\n break;\r\n }\r\n case 'departureDate':\r\n {\r\n flightFilters.sort(\r\n utils\r\n .firstBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return flightsToView[v1.uniqueId].priority - flightsToView[v2.uniqueId].priority; }, { direction: -1 })\r\n .thenBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return flightsToView[v1.uniqueId].legs[0].departureDate.unix() - flightsToView[v2.uniqueId].legs[0].departureDate.unix(); })\r\n );\r\n break;\r\n }\r\n case 'arrivalDate':\r\n {\r\n flightFilters.sort(\r\n utils\r\n .firstBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return flightsToView[v1.uniqueId].priority - flightsToView[v2.uniqueId].priority; }, { direction: -1 })\r\n .thenBy((v1: flights.FlightFilterModel, v2: flights.FlightFilterModel) => { return flightsToView[v1.uniqueId].legs[flightsToView[v1.uniqueId].legs.length - 1].arrivalDate.unix() - flightsToView[v2.uniqueId].legs[flightsToView[v1.uniqueId].legs.length - 1].arrivalDate.unix(); })\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport * as flights from '../flights';\r\nimport * as api from '../api';\r\nimport * as utils from '../utils';\r\n\r\nexport class FlightNavigationService {\r\n public getBookingUrl(searchParams: flights.FlightSearchParams, searchId: string, flightId: string): string {\r\n return this.getSearchResultsUrl(searchParams) + '/booking/' + searchId + '/' + flightId;\r\n }\r\n\r\n public getBookingUrlNotParsed(search: string, searchId: string, flightId: string): string {\r\n return '/flights' + search + '/booking/' + searchId + '/' + flightId;\r\n }\r\n\r\n public getParamsFromRequest(request: api.FlightSearchRequest): flights.FlightSearchParams {\r\n const result: flights.FlightSearchParams = {\r\n from: request.sections[0].from,\r\n to: request.sections[0].to,\r\n departure: moment(request.sections[0].date).toDate(),\r\n return: null,\r\n roundtrip: (request.sections.length > 1),\r\n class: flights.BookingClass.Economic,\r\n passengers: {\r\n adults: request.adults,\r\n children: request.children,\r\n infants: request.babies\r\n }\r\n };\r\n\r\n if (request.sections.length > 1) {\r\n result.return = moment(request.sections[1].date).toDate();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public getSearchResultsUrl(searchParams: flights.FlightSearchParams): string {\r\n let url = '/flights';\r\n\r\n if (searchParams) {\r\n url += '/' + searchParams.from + '/' + searchParams.to;\r\n url += '/' + moment(searchParams.departure!).format('MMDD');\r\n\r\n if (searchParams.roundtrip) {\r\n url += '/' + searchParams.to + '/' + searchParams.from;\r\n url += '/' + moment(searchParams.return!).format('MMDD');\r\n }\r\n\r\n url += '/' + searchParams.passengers.adults + '' + searchParams.passengers.children + '' + searchParams.passengers.infants;\r\n url += '/';\r\n\r\n switch (searchParams.class) {\r\n case flights.BookingClass.Business:\r\n url += 'b';\r\n break;\r\n case flights.BookingClass.Economic:\r\n url += 'e';\r\n break;\r\n case flights.BookingClass.EconomicPremium:\r\n url += 'ep';\r\n break;\r\n case flights.BookingClass.EconomicTourist:\r\n url += 'et';\r\n break;\r\n case flights.BookingClass.First:\r\n url += 'f';\r\n break;\r\n default:\r\n url += 'e'; // Defaults to Economic\r\n }\r\n }\r\n\r\n return url;\r\n }\r\n\r\n public getOnewayParams(\r\n from: string,\r\n to: string,\r\n date: string,\r\n passengers: string,\r\n bookingClass: string\r\n ): flights.FlightSearchParams | null {\r\n const result: flights.FlightSearchParams = {\r\n from: '',\r\n to: '',\r\n departure: null,\r\n return: null,\r\n roundtrip: true,\r\n class: flights.BookingClass.Economic,\r\n passengers: {\r\n adults: 1,\r\n children: 0,\r\n infants: 0\r\n }\r\n };\r\n\r\n result.roundtrip = false;\r\n\r\n if (from && from.length === 3) {\r\n result.from = from.toUpperCase();\r\n } else {\r\n return null;\r\n }\r\n\r\n if (to && to.length === 3) {\r\n result.to = to.toUpperCase();\r\n } else {\r\n return null;\r\n }\r\n\r\n if (date && date.length === 4) {\r\n const d = this.parseDate(date);\r\n\r\n if (d) {\r\n result.departure = d;\r\n // Set return date the same for UI usage.\r\n // TODO: strange code. There will be no errors.\r\n // result.return = d;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n\r\n if (bookingClass && bookingClass.length >= 1 && bookingClass.length <= 2) {\r\n result.class = this.parseBookingClass(bookingClass);\r\n } else {\r\n return null;\r\n }\r\n\r\n if (passengers && passengers.length === 3) {\r\n const nAdults = parseInt(passengers[0]);\r\n const nChildren = parseInt(passengers[1]);\r\n const nInfants = parseInt(passengers[2]);\r\n\r\n if (nAdults >= 0\r\n && nChildren >= 0\r\n && nInfants >= 0\r\n && !(nAdults === 0 && nChildren === 0 && nInfants === 0)\r\n ) {\r\n if (nAdults + nChildren + nInfants > 9) {\r\n // Total limit\r\n return null;\r\n }\r\n\r\n if (nInfants > 0 && nInfants > nAdults && nAdults > 0) {\r\n // Infants limit\r\n return null;\r\n }\r\n\r\n result.passengers.adults = nAdults;\r\n result.passengers.children = nChildren;\r\n result.passengers.infants = nInfants;\r\n }\r\n } else {\r\n return null;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public getRoundtripParams(\r\n from: string,\r\n to: string,\r\n date: string,\r\n from2: string,\r\n to2: string,\r\n date2: string,\r\n passengers: string,\r\n bookingClass: string\r\n ): flights.FlightSearchParams | null {\r\n const result = this.getOnewayParams(from, to, date, passengers, bookingClass);\r\n\r\n if (!result) {\r\n return null;\r\n }\r\n\r\n result.roundtrip = true;\r\n\r\n if (from2 && from2.length === 3 && from2.toUpperCase() === result.to) {\r\n // OK\r\n } else {\r\n return null;\r\n }\r\n\r\n if (to2 && to2.length === 3 && to2.toUpperCase() === result.from) {\r\n // OK\r\n } else {\r\n return null;\r\n }\r\n\r\n if (date2 && date2.length === 4) {\r\n const d = this.parseDate(date2);\r\n\r\n if (d) {\r\n result.return = d;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Additional logics before flight search navigation (search form submit).\r\n */\r\n public onBeforeNavigation(searchParams: flights.FlightSearchParams) {\r\n const markerOwner = utils.Cookies.getMarkerOwner();\r\n if (markerOwner == '335141' || markerOwner == '335142') {\r\n utils.Cookies.setMarkerValue(searchParams.from + searchParams.to);\r\n }\r\n }\r\n\r\n private parseBookingClass(s: string): string {\r\n switch (s) {\r\n case 'b':\r\n return flights.BookingClass.Business;\r\n case 'e':\r\n return flights.BookingClass.Economic;\r\n case 'ep':\r\n return flights.BookingClass.EconomicPremium;\r\n case 'et':\r\n return flights.BookingClass.EconomicTourist;\r\n case 'f':\r\n return flights.BookingClass.First;\r\n default:\r\n return flights.BookingClass.Economic; // Defaults to Economic\r\n }\r\n }\r\n\r\n private parseDate(stringToParse: string): Date | undefined {\r\n if (stringToParse.length === 4) {\r\n let parsed: moment.Moment;\r\n\r\n if (stringToParse === '0229' && !moment().isLeapYear()) {\r\n parsed = moment(`${moment().year()}0228`, 'YYYYMMDD');\r\n } else {\r\n parsed = moment(`${moment().year()}${stringToParse}`, 'YYYYMMDD');\r\n }\r\n\r\n const today = moment().startOf('day');\r\n\r\n if (parsed.isBefore(today)) {\r\n if (stringToParse === '0229' && !moment().add(1, 'year').isLeapYear()) {\r\n parsed = moment(`${moment().add(1, 'year').year()}0228`, 'YYYYMMDD');\r\n } else {\r\n parsed = moment(`${moment().add(1, 'year').year()}${stringToParse}`, 'YYYYMMDD');\r\n }\r\n }\r\n\r\n return moment({ year: parsed.year(), month: parsed.month(), day: parsed.date() }).toDate();\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport * as api from '../api';\r\nimport * as utils from '../utils';\r\nimport * as i18next from 'i18next';\r\n\r\nexport class ConnectionModel {\r\n public duration: moment.Duration;\r\n public anotherAirport: boolean;\r\n public anotherTerminal: boolean;\r\n\r\n constructor(duration: moment.Duration, anotherAirport: boolean, anotherTerminal: boolean) {\r\n this.duration = duration;\r\n this.anotherAirport = anotherAirport;\r\n this.anotherTerminal = anotherTerminal;\r\n }\r\n}\r\n\r\nexport class SegmentStopModel {\r\n public aircraft: api.Aircraft;\r\n public arrivalDate: moment.Moment;\r\n public departureDate: moment.Moment;\r\n public destination: api.Destination;\r\n public duration: moment.Duration;\r\n\r\n constructor(s: api.SegmentStop, d: api.FlightDictionaries) {\r\n this.destination = d.destinations[s.destinationUID];\r\n this.arrivalDate = moment.utc(s.arrivalDateLocal);\r\n this.departureDate = moment.utc(s.departureDateLocal);\r\n this.duration = moment.duration(moment.utc(s.arrivalDate).diff(moment.utc(s.departureDate)));\r\n this.aircraft = d.aircrafts[s.aircraftUID];\r\n }\r\n}\r\n\r\nexport class SegmentModel {\r\n public aircraft: string;\r\n public airline: api.Airline; // Marketing airline\r\n public arrivalDate: moment.Moment;\r\n public arrivalDateUtc: moment.Moment;\r\n public arrivalDestination: api.Destination;\r\n public arrivalTerminal: string;\r\n public baggage: api.FlightBaggage;\r\n public baggageCabin: api.FlightBaggage;\r\n public connection: ConnectionModel;\r\n public departureDate: moment.Moment;\r\n public departureDateUtc: moment.Moment;\r\n public departureDestination: api.Destination;\r\n public departureTerminal: string;\r\n public duration: moment.Duration;\r\n public exchangeRules: api.FlightModifyRules;\r\n public segmentFlags: api.SegmentFlags[];\r\n public flightCode: string;\r\n public isNextDayArrival: boolean;\r\n public nextSegmentStop: api.FlightStopKind;\r\n public operatingAirline: api.Airline; // Validating airline\r\n public refundRules: api.FlightModifyRules;\r\n public stops: SegmentStopModel[]; // Technical stops during flight (refueling)\r\n public transport: api.SegmentTransport;\r\n\r\n constructor(s: api.Segment, d: api.FlightDictionaries) {\r\n this.aircraft = d.aircrafts[s.aircraftUID].displayName;\r\n this.airline = d.airlines[s.airlineUID];\r\n this.arrivalDate = moment.utc(s.arrivalDateLocal);\r\n this.arrivalDestination = d.destinations[s.arrivalDestinationUID];\r\n this.arrivalTerminal = s.arrivalTerminal;\r\n this.baggage = s.baggage;\r\n this.baggageCabin = s.baggageCabin;\r\n this.departureDate = moment.utc(s.departureDateLocal);\r\n this.departureDestination = d.destinations[s.departureDestinationUID];\r\n this.departureTerminal = s.departureTerminal;\r\n this.duration = moment.duration(moment(s.arrivalDate).diff(moment(s.departureDate)));\r\n this.exchangeRules = s.exchangeRules;\r\n this.segmentFlags = s.segmentFlags;\r\n this.flightCode = s.flightCode;\r\n this.isNextDayArrival = this.departureDate.date() !== this.arrivalDate.date();\r\n this.nextSegmentStop = s.nextSegmentStop === null\r\n ? api.FlightStopKind.Standard\r\n : s.nextSegmentStop;\r\n this.operatingAirline = d.airlines[s.operatingAirlineUID];\r\n this.refundRules = s.refundRules;\r\n if (s.stops && s.stops.length > 0) {\r\n this.stops = s.stops.map(segmentStop => new SegmentStopModel(segmentStop, d));\r\n }\r\n this.transport = s.transport;\r\n }\r\n\r\n public get hasNoBaggage(): boolean {\r\n return this.baggage\r\n && this.baggage.pieceWeight == 0\r\n && this.baggage.pieces == 0;\r\n }\r\n\r\n public get transportIconName() {\r\n switch (this.transport) {\r\n case 'Air': {\r\n return 'plane';\r\n break;\r\n }\r\n case 'Bus': {\r\n return 'bus';\r\n break;\r\n }\r\n case 'Train': {\r\n return 'train';\r\n break;\r\n }\r\n default:{\r\n return 'plane';\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class LegModel {\r\n public arrivalDate: moment.Moment;\r\n public arrivalDestination: api.Destination;\r\n\r\n public get baggage(): api.FlightBaggage {\r\n return utils.first(this.segments).baggage;\r\n }\r\n\r\n public get baggageCabin(): api.FlightBaggage {\r\n return utils.first(this.segments).baggageCabin;\r\n }\r\n\r\n public baggageBySegments: boolean;\r\n public bookingClass: string;\r\n public departureDate: moment.Moment;\r\n public departureDestination: api.Destination;\r\n public duration: moment.Duration;\r\n public durationMinutes: number;\r\n public flightKind: api.FlightKind;\r\n public groupingId: string;\r\n public isNextDayArrival: boolean;\r\n public segments: SegmentModel[];\r\n public stopCount: number;\r\n public maintenanceStopCount: number;\r\n\r\n constructor(l: api.Leg, d: api.FlightDictionaries) {\r\n this.segments = l.segments.map(segment => new SegmentModel(segment, d));\r\n\r\n this.groupingId = l.groupingId;\r\n this.baggageBySegments = l.baggageBySegments;\r\n this.bookingClass = l.bookingClass;\r\n this.departureDate = utils.first(this.segments).departureDate;\r\n this.departureDestination = utils.first(this.segments).departureDestination;\r\n this.arrivalDate = utils.last(this.segments).arrivalDate;\r\n this.arrivalDestination = utils.last(this.segments).arrivalDestination;\r\n this.stopCount = this.segments.length - 1;\r\n this.isNextDayArrival = this.departureDate.date() !== this.arrivalDate.date();\r\n // use UTC dates from source api.Segment\r\n this.duration = moment.duration(moment(utils.last(l.segments).arrivalDate).diff(utils.first(l.segments).departureDate));\r\n // use UTC dates from source api.Segment\r\n this.durationMinutes = moment(utils.last(l.segments).arrivalDateUtc).diff(utils.first(l.segments).departureDateUtc, 'minute');\r\n this.flightKind = l.flightKind;\r\n\r\n // Build connections.\r\n for (let i = 0; i < this.segments.length - 1; i++) {\r\n const curSegment = this.segments[i];\r\n const nextSegment = this.segments[i + 1];\r\n // Use source api.Segment for UTC dates.\r\n const cd = moment.duration(moment(l.segments[i + 1].departureDate).diff(moment(l.segments[i].arrivalDate)));\r\n curSegment.connection = new ConnectionModel(\r\n cd,\r\n nextSegment.departureDestination.iataCode !== curSegment.arrivalDestination.iataCode,\r\n nextSegment.departureTerminal !== curSegment.arrivalTerminal\r\n );\r\n }\r\n\r\n // Count maintenance stops\r\n this.maintenanceStopCount = 0;\r\n this.segments.forEach(segment => {\r\n if (segment.stops && segment.stops.length > 0) {\r\n this.maintenanceStopCount += segment.stops.length;\r\n }\r\n });\r\n }\r\n\r\n get is2OWorIncut(): boolean {\r\n return !!this.segments.find(segment => segment.nextSegmentStop == api.FlightStopKind.ByPassenger);\r\n }\r\n\r\n get segmentsSplittedByNextSegmentStop2OWorIncut() {\r\n const result: SegmentModel[][] = [];\r\n let memo: SegmentModel[] = [];\r\n\r\n this.segments.forEach((segment, segmentIndex) => {\r\n memo = memo.concat(segment);\r\n if (segment.nextSegmentStop == api.FlightStopKind.ByPassenger\r\n || segmentIndex == this.segments.length - 1) {\r\n result.push(([]).concat(memo));\r\n memo = [];\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n get transportTypes() {\r\n const legTransportTypes: api.SegmentTransport[] = [];\r\n\r\n this.segments.forEach((segment) => {\r\n if (!legTransportTypes.includes(segment.transport)) {\r\n legTransportTypes.push(segment.transport);\r\n }\r\n });\r\n\r\n return legTransportTypes;\r\n }\r\n\r\n get transportIconNames() {\r\n const legTransportIconNames: string[] = [];\r\n\r\n this.segments.forEach((segment) => {\r\n if (!legTransportIconNames.includes(segment.transportIconName)) {\r\n legTransportIconNames.push(segment.transportIconName);\r\n }\r\n });\r\n\r\n return legTransportIconNames;\r\n }\r\n}\r\n\r\nexport class FlightModel {\r\n adapter: string;\r\n allFlightAirlinesCode: string[];\r\n airlines: api.Airline[];\r\n area: string;\r\n adapterData: string;\r\n basePrice = 0;\r\n billingPrice = 0;\r\n billingPricePerMonth = 0;\r\n bookingClass: string;\r\n bookingChecked: boolean;\r\n bookingPossible: boolean;\r\n brand: api.FlightBrand;\r\n currencyCode?: string;\r\n countryCrossing: string;\r\n customBaggage: api.CustomBaggage = {\r\n bookable: false,\r\n options: null\r\n };\r\n exchangeRules: api.FlightModifyRules;\r\n expanded: boolean;\r\n externalOffers: api.FlightSearchExternalOffer[];\r\n externalPartner: api.FlightSearchPartner;\r\n farePrice = 0;\r\n flightFlags: api.SegmentFlags[];\r\n flightKind: api.FlightKind;\r\n hasMaintenanceStop: boolean;\r\n legs: LegModel[];\r\n seatMaps: api.SeatMap[] | null;\r\n multiFRType: number;\r\n priority: number;\r\n refundRules: api.FlightModifyRules;\r\n stopDuration: number[] = [0, 0]; // Used by StopDurationFilter\r\n fee = 0;\r\n promo_coupon_name: string | null;\r\n taxes = 0;\r\n tfid: number | null;\r\n uniqueId: string;\r\n validatingAirline: api.Airline;\r\n url: string;\r\n hasBusSegment: boolean;\r\n additionalOfferKeys: string[];\r\n\r\n constructor(f?: api.Flight, d?: api.FlightDictionaries) {\r\n if (f && d) {\r\n this.legs = f.legs.map(leg => new LegModel(leg, d));\r\n this.seatMaps = f.seatMaps?.map((seatMap) => ({\r\n ...seatMap\r\n }));\r\n \r\n\r\n this.airlines = [];\r\n this.allFlightAirlinesCode = [];\r\n this.legs.forEach((leg) => {\r\n leg.segments.forEach(segment => {\r\n if (utils.find(this.airlines,\r\n (airline: api.Airline) => {\r\n return airline.iataCode === segment.operatingAirline.iataCode;\r\n })) {\r\n this.airlines.push(segment.operatingAirline);\r\n }\r\n if (!this.allFlightAirlinesCode.includes(segment.operatingAirline.iataCode)) {\r\n this.allFlightAirlinesCode.push(segment.operatingAirline.iataCode);\r\n }\r\n if (segment.transport === api.SegmentTransport.bus) {\r\n this.hasBusSegment = true;\r\n }\r\n });\r\n\r\n if (leg.maintenanceStopCount > 0) {\r\n this.hasMaintenanceStop = true;\r\n }\r\n });\r\n\r\n this.customBaggage = f.customBaggage;\r\n this.adapter = f.adapter;\r\n this.area = f.area;\r\n this.bookingClass = f.bookingClass;\r\n this.flightFlags = f.flightFlags;\r\n this.flightKind = f.flightKind == 'RegularSpecial' ? api.FlightKind.charter : f.flightKind;\r\n this.billingPrice = f.billingPrice;\r\n this.billingPricePerMonth = f.billingPricePerMonth;\r\n this.basePrice = f.basePrice;\r\n this.bookingChecked = f.bookingChecked;\r\n this.bookingPossible = f.bookingPossible;\r\n this.brand = f.brand;\r\n this.currencyCode = f.currencyCode;\r\n this.exchangeRules = f.exchangeRules;\r\n this.expanded = false;\r\n this.externalOffers = f.externalOffers;\r\n this.externalPartner = f.externalPartner;\r\n this.farePrice = f.farePrice;\r\n this.taxes = f.taxes;\r\n this.fee = f.fee;\r\n this.multiFRType = f.multiFRType;\r\n this.priority = f.priority;\r\n // eslint-disable-next-line @typescript-eslint/camelcase\r\n this.promo_coupon_name = f.promo_coupon_name;\r\n this.refundRules = f.refundRules;\r\n this.tfid = f.tfid;\r\n this.uniqueId = f.uniqueId;\r\n this.validatingAirline = d.airlines[f.validatingCarrierUID];\r\n this.stopDuration = this.calculateStopDuration();\r\n\r\n // Disable baggage if missing baggage options\r\n if (this.customBaggage\r\n && this.customBaggage.bookable\r\n && this.customBaggage.options\r\n && this.customBaggage.options.length === 0) {\r\n this.customBaggage.bookable = false;\r\n }\r\n\r\n this.additionalOfferKeys = f?.additionalOfferKeys ?? [];\r\n }\r\n }\r\n\r\n public get hasNoBaggage(): boolean {\r\n return this.legs[0].segments[0].baggage\r\n && this.legs[0].segments[0].baggage.pieceWeight == 0\r\n && this.legs[0].segments[0].baggage.pieces == 0;\r\n }\r\n\r\n public get destinations(): api.Destination[] {\r\n const allDestinations = this.legs\r\n .map(leg => leg.segments)\r\n .reduce((memo, value) => memo.concat(value), [])\r\n .map(segment => [segment.departureDestination, segment.arrivalDestination])\r\n .reduce((memo, value) => memo.concat(value), []);\r\n const result: api.Destination[] = [];\r\n const map = new Map();\r\n\r\n for (const destination of allDestinations) {\r\n if (!map.has(destination.uniqueId)) {\r\n map.set(destination.uniqueId, true);\r\n result.push(destination);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public get airlinesCode(): string {\r\n let result = '';\r\n\r\n if (this.legs.length > 0) {\r\n result += this.legs[0].segments[0].airline.iataCode;\r\n\r\n if (this.legs.length > 1\r\n && this.legs[0].segments[0].airline.iataCode !== this.legs[1].segments[0].airline.iataCode) {\r\n result += '_' + this.legs[1].segments[0].airline.iataCode;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public get is2OWorIncut(): boolean {\r\n return !!this.legs.filter(leg => leg.is2OWorIncut).length;\r\n }\r\n\r\n public get transportTypes() {\r\n const flightsTransportTypes: api.SegmentTransport[] = [];\r\n\r\n this.legs.forEach((leg) => {\r\n leg.segments.forEach((segment) => {\r\n if (!flightsTransportTypes.includes(segment.transport)) {\r\n flightsTransportTypes.push(segment.transport);\r\n }\r\n });\r\n });\r\n\r\n return flightsTransportTypes;\r\n }\r\n\r\n public get transportIconNames() {\r\n const flightTransportIconNames: string[] = [];\r\n\r\n this.legs.forEach((leg) => {\r\n leg.segments.forEach((segment) => {\r\n if (!flightTransportIconNames.includes(segment.transportIconName)) {\r\n flightTransportIconNames.push(segment.transportIconName);\r\n }\r\n });\r\n });\r\n\r\n return flightTransportIconNames;\r\n }\r\n\r\n private calculateStopDuration(): number[] {\r\n let minStopLength = 0;\r\n let maxStopLength = 0;\r\n\r\n this.legs.forEach(l => {\r\n for (let i = 0; i < l.segments.length - 1; i++) {\r\n const stopBeginTime = l.segments[i].arrivalDate;\r\n const stopEndTime = l.segments[i + 1].departureDate;\r\n const d = stopEndTime.diff(stopBeginTime, 'minute');\r\n\r\n if (!minStopLength || minStopLength > d) {\r\n minStopLength = d;\r\n }\r\n\r\n if (!maxStopLength || maxStopLength < d) {\r\n maxStopLength = d;\r\n }\r\n }\r\n });\r\n\r\n return [minStopLength, maxStopLength];\r\n }\r\n\r\n public getDestinationByUniqueId(id: string | number): api.Destination | null {\r\n return this.destinations.find(destination => destination.uniqueId == id) || null;\r\n }\r\n\r\n public getAvailableCustomBaggageItems(): api.CustomBaggageItem[] {\r\n if (this.customBaggage && this.customBaggage.options) {\r\n return this.customBaggage.options\r\n .reduce((memo: api.CustomBaggageOption[], value) => memo.concat(value), [])\r\n .map((option: api.CustomBaggageOption) => option.baggageOptions)\r\n .reduce((memo: api.CustomBaggageItem[], value) => memo.concat(value), []);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public getAvailableCustomBaggageItemsByFlightDirection(flightDirection: api.CustomBaggageFlightDirection): api.CustomBaggageItem[] {\r\n if (this.customBaggage && this.customBaggage.options) {\r\n return this.customBaggage.options\r\n .filter(option => option.customBaggageFlightDirection == flightDirection)\r\n .reduce((memo: api.CustomBaggageOption[], value) => memo.concat(value), [])\r\n .map((option: api.CustomBaggageOption) => option.baggageOptions)\r\n .reduce((memo: api.CustomBaggageItem[], value) => memo.concat(value), []);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public getAvailableCustomBaggageItemsByDestinationUIDs(destinationFromUID: string, destinationToUID: string): api.CustomBaggageItem[] {\r\n if (this.customBaggage && this.customBaggage.options) {\r\n return this.customBaggage.options\r\n .filter(option => option.destinationFromUID == destinationFromUID\r\n && option.destinationToUID == destinationToUID)\r\n .reduce((memo: api.CustomBaggageOption[], value) => memo.concat(value), [])\r\n .map((option: api.CustomBaggageOption) => option.baggageOptions)\r\n .reduce((memo: api.CustomBaggageItem[], value) => memo.concat(value), []);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public isAirline(iataCode: string): boolean {\r\n let is = true;\r\n\r\n if (this.legs) {\r\n this.legs.forEach(l => {\r\n l.segments.forEach(s => {\r\n if (s.airline.iataCode != iataCode\r\n || s.operatingAirline.iataCode != iataCode) {\r\n is = false;\r\n }\r\n });\r\n });\r\n }\r\n\r\n return is;\r\n }\r\n\r\n /**\r\n * Updates flight with new details after check booking possibility.\r\n */\r\n public update(flight: api.Flight) {\r\n this.bookingChecked = flight.bookingChecked;\r\n this.bookingPossible = flight.bookingPossible;\r\n this.adapterData = flight.adapterData;\r\n this.customBaggage = flight.customBaggage;\r\n this.exchangeRules = flight.exchangeRules;\r\n this.refundRules = flight.refundRules;\r\n\r\n if(!this.seatMaps && flight.seatMaps){\r\n this.seatMaps = flight.seatMaps;\r\n }\r\n\r\n flight.legs.forEach((leg, legIndex) => {\r\n leg.segments.forEach((segment, segmentIndex) => {\r\n this.legs[legIndex].segments[segmentIndex].baggage = segment.baggage;\r\n this.legs[legIndex].segments[segmentIndex].baggageCabin = segment.baggageCabin;\r\n });\r\n });\r\n }\r\n\r\n get detailsLabel() {\r\n return this.hasBusSegment ? i18next.t('button_route_details') : i18next.t('button_flight_details');\r\n }\r\n}\r\n\r\nexport class FlightGroupModel {\r\n public brandGroupGuid: string;\r\n public selectedFlightId: string;\r\n public defaultFlightId: string;\r\n public flights: FlightModel[];\r\n public brandChangeState: string;\r\n\r\n get selectedFlight() {\r\n if (this.selectedFlightId) {\r\n return this.flights.find(flight => flight.uniqueId === this.selectedFlightId) || null;\r\n }\r\n return null;\r\n }\r\n}\r\n","import * as api from '../api';\r\n\r\nexport class CoachPlaceModel {\r\n number: string;\r\n gender: 'None';\r\n placeType: 'Lower';\r\n fare: {\r\n amount: number;\r\n currency: string;\r\n };\r\n selected = false;\r\n\r\n constructor(coachPlace: api.CoachPlace) {\r\n this.number = String(coachPlace.number);\r\n this.gender = coachPlace.gender;\r\n this.placeType = coachPlace.placeType;\r\n this.fare = coachPlace.fare;\r\n }\r\n}\r\n\r\nexport class CoachModel {\r\n schemaId: string | null;\r\n number: string;\r\n type: string;\r\n isTwoStorey: boolean;\r\n isCanChooseBedding: boolean;\r\n hasDynamicPricing: boolean;\r\n isPetsAllowed: boolean;\r\n isPetInCoachAllowed: boolean;\r\n electronicTicket: boolean;\r\n isBranded: boolean;\r\n beddingTariff: null;\r\n loyaltyCards: string[] = [];\r\n fareInfo: null;\r\n places: CoachPlaceModel[] = [];\r\n placesInfo: {\r\n lowerSide: null;\r\n upperSide: null;\r\n upperCoupe: number;\r\n lowerCoupe: number;\r\n total: null;\r\n };\r\n serviceClass: {\r\n code: string;\r\n name: string;\r\n description: string;\r\n };\r\n selectedPlacesQueue: CoachPlaceModel[] = [];\r\n\r\n constructor(coach: api.Coach) {\r\n this.schemaId = coach.schemaId;\r\n this.number = coach.number;\r\n this.type = coach.type;\r\n this.isTwoStorey = coach.isTwoStorey;\r\n this.isCanChooseBedding = coach.isCanChooseBedding;\r\n this.hasDynamicPricing = coach.hasDynamicPricing;\r\n this.isPetsAllowed = coach.isPetsAllowed;\r\n this.isPetInCoachAllowed = coach.isPetInCoachAllowed;\r\n this.electronicTicket = coach.electronicTicket;\r\n this.isBranded = coach.isBranded;\r\n this.beddingTariff = coach.beddingTariff;\r\n coach.loyaltyCards?.forEach((loyaltyCard) => {\r\n this.loyaltyCards.push(loyaltyCard);\r\n });\r\n this.fareInfo = coach.fareInfo;\r\n coach.places.forEach((coachPlace) => {\r\n this.places.push(new CoachPlaceModel(coachPlace));\r\n });\r\n this.placesInfo = coach.placesInfo;\r\n this.serviceClass = coach.serviceClass;\r\n }\r\n\r\n get selectedPlacesCount() {\r\n const selectedPlacesCount = this.places.filter(place => place.selected).length;\r\n\r\n if (selectedPlacesCount) {\r\n return selectedPlacesCount;\r\n }\r\n\r\n return 0;\r\n }\r\n}\r\n\r\nexport class TrainModel {\r\n number: string;\r\n name: string | null;\r\n provider: string;\r\n isSuburban: boolean;\r\n direction: 'Outward' | 'Return' | 'Both';\r\n coaches: CoachModel[] = [];\r\n selectedCoach: CoachModel;\r\n\r\n constructor(train: api.Train) {\r\n this.number = train.number;\r\n this.name = train.name;\r\n this.provider = train.provider;\r\n this.isSuburban = train.isSuburban;\r\n this.direction = train.direction;\r\n train.coaches.forEach((coach) => {\r\n this.coaches.push(new CoachModel(coach));\r\n });\r\n if (this.coaches.length) {\r\n this.selectedCoach = this.coaches[0];\r\n }\r\n }\r\n\r\n get selectedPlaces() {\r\n let trainPlaces: api.TrainPlace[] = [];\r\n\r\n this.selectedCoach.selectedPlacesQueue.forEach((place) => {\r\n trainPlaces.push({\r\n train: this.number,\r\n coach: this.selectedCoach.number,\r\n place: place.number,\r\n placeType: place.placeType,\r\n gender: place.gender\r\n });\r\n });\r\n\r\n return trainPlaces;\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport { G2S } from '../g2s';\r\nimport * as flights from '../flights';\r\nimport * as api from '../api';\r\nimport * as utils from '../utils';\r\n\r\nexport class FlightSearchService {\r\n private searchHistoryKey = 'g2sH';\r\n private searchHistoryMaxItems = 5;\r\n\r\n addHistoryItem(searchParams: flights.FlightSearchParams) {\r\n if (!searchParams) {\r\n return;\r\n }\r\n\r\n let url = new flights.FlightNavigationService().getSearchResultsUrl(searchParams);\r\n\r\n // Store only url params\r\n url = url.replace('/flights', '');\r\n\r\n new api.DestinationService().list([searchParams.from, searchParams.to]).then(\r\n (result: api.Destination[]) => {\r\n // 2 destinations required\r\n if (result.length === 2) {\r\n let items = this.loadHistoryItems();\r\n\r\n items = items.filter((i) => {\r\n return url !== i.url;\r\n });\r\n\r\n // new item\r\n const item: flights.SearchHistoryItem = {\r\n from: result[0].localizedName,\r\n to: result[1].localizedName,\r\n departure: searchParams.departure!,\r\n return: searchParams.roundtrip ? searchParams.return : null,\r\n passengers: searchParams.passengers.adults + searchParams.passengers.children + searchParams.passengers.infants,\r\n class: searchParams.class,\r\n url: url,\r\n timestamp: new Date().getTime(),\r\n expires: moment(searchParams.departure!).add(1, 'day').startOf('day').toDate().getTime()\r\n };\r\n items.unshift(item);\r\n\r\n // save history\r\n this.saveHistoryItems(items);\r\n }\r\n }\r\n );\r\n }\r\n\r\n public deleteAllHistoryItems() {\r\n try {\r\n if (window.localStorage) {\r\n window.localStorage[this.searchHistoryKey] = '[]';\r\n }\r\n }\r\n catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n\r\n /**\r\n * Gets all history items from localStorage.\r\n */\r\n getHistoryItems(): flights.SearchHistoryItem[] {\r\n const items = this.loadHistoryItems();\r\n\r\n // Save updated items without expired\r\n this.saveHistoryItems(items);\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Loads history items from localStorage and removes expired items.\r\n */\r\n private loadHistoryItems(): flights.SearchHistoryItem[] {\r\n let items: flights.SearchHistoryItem[];\r\n\r\n try {\r\n items = JSON.parse(window.localStorage[this.searchHistoryKey]);\r\n } catch (e) {\r\n return [];\r\n }\r\n\r\n if (Object.prototype.toString.call(items) !== '[object Array]') {\r\n return [];\r\n }\r\n\r\n // Cleanup old-school history\r\n if (items && items.length > 0 && !items[0].class) {\r\n window.localStorage[this.searchHistoryKey] = '[]';\r\n return [];\r\n }\r\n\r\n const now = new Date().getTime();\r\n\r\n items = items.filter((i) => {\r\n return i.expires > now;\r\n });\r\n\r\n items = items.slice(0, this.searchHistoryMaxItems);\r\n\r\n // Fix old enum booking classes\r\n items.forEach((item) => {\r\n if (item.class == '0') {\r\n item.class = 'Business';\r\n } else if (item.class == '1') {\r\n item.class = 'Economic';\r\n } else if (item.class == '2') {\r\n item.class = 'EconomicPremium';\r\n } else if (item.class == '3') {\r\n item.class = 'EconomicTourist';\r\n } else if (item.class == '4') {\r\n item.class = 'First';\r\n }\r\n });\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Saves history items.\r\n */\r\n private saveHistoryItems(items: flights.SearchHistoryItem[]) {\r\n try {\r\n if (window.localStorage) {\r\n if (Object.prototype.toString.call(items) !== '[object Array]') {\r\n window.localStorage[this.searchHistoryKey] = '[]';\r\n return [];\r\n }\r\n\r\n const now = new Date().getTime();\r\n\r\n items = items.filter((i) => {\r\n return i.expires > now;\r\n });\r\n\r\n items = items.slice(0, this.searchHistoryMaxItems);\r\n\r\n window.localStorage[this.searchHistoryKey] = JSON.stringify(items);\r\n }\r\n }\r\n catch(err) {\r\n console.error(err);\r\n }\r\n }\r\n\r\n /**\r\n * Searches flights.\r\n */\r\n search(request: flights.FlightSearchParams): Promise {\r\n const searchRequest: api.FlightSearchRequest = {\r\n sections: [\r\n {\r\n from: request.from,\r\n to: request.to,\r\n date: moment(request.departure!).format('YYYY-MM-DDT00:00:00')\r\n }\r\n ],\r\n adults: request.passengers.adults,\r\n children: request.passengers.children,\r\n babies: request.passengers.infants,\r\n bookingClass: request.class,\r\n isRangeSearch: false,\r\n partnerCookie: utils.Cookies.getPartnerCookie()\r\n };\r\n\r\n if (request.roundtrip) {\r\n searchRequest.sections.push({\r\n from: request.to,\r\n to: request.from,\r\n date: moment(request.return!).format('YYYY-MM-DDT00:00:00')\r\n });\r\n }\r\n\r\n const searchStarted = moment();\r\n\r\n return new Promise((resolve, reject) => {\r\n new api.FlightService().search(searchRequest)\r\n .then((response: api.FlightSearchResult) => {\r\n const searchResult = this.processResults(request, response);\r\n\r\n searchResult.duration = moment().diff(searchStarted);\r\n\r\n resolve(searchResult);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Searches flights.\r\n */\r\n processResults(searchParams: flights.FlightSearchParams, response: api.FlightSearchResult): flights.FlightSearchResult {\r\n const searchResult: {\r\n searchId: string;\r\n flights: flights.FlightModel[];\r\n flightsToFilter: {\r\n uniqueId: string;\r\n visible: boolean;\r\n parentId: string;\r\n childCount: number;\r\n }[];\r\n banners: api.Banner[];\r\n duration: number;\r\n } = {\r\n searchId: response.searchId,\r\n flights: [],\r\n flightsToFilter: [],\r\n banners: response.banners,\r\n duration: 0\r\n };\r\n\r\n const flightNavigationService: flights.FlightNavigationService = new flights.FlightNavigationService();\r\n\r\n response.flights.forEach(function (f) {\r\n const flightModel = new flights.FlightModel(f, response);\r\n\r\n // #4908\r\n if (flightModel.priority > 0\r\n && flightModel.airlinesCode.includes('SU')) {\r\n const u = '/flights/search/results/priority/' + flightModel.airlinesCode;\r\n\r\n if (window['ym']\r\n && window['__ymCounterIdBanners']) {\r\n window['ym'](window['__ymCounterIdBanners'], 'hit', u);\r\n }\r\n\r\n if (G2S.isDev) {\r\n console.log('YM hit ' + u);\r\n }\r\n }\r\n\r\n flightModel.url = flightNavigationService.getBookingUrl(searchParams, response.searchId, f.uniqueId);\r\n\r\n searchResult.flights.push(flightModel);\r\n\r\n searchResult.flightsToFilter.push({\r\n uniqueId: f.uniqueId,\r\n visible: true,\r\n parentId: '',\r\n childCount: 0\r\n });\r\n });\r\n\r\n return searchResult;\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport * as i18next from 'i18next';\r\nimport * as api from '../api';\r\nimport * as flights from '../flights';\r\nimport * as payment from '../payment';\r\nimport * as utils from '../utils';\r\nimport { Filters } from 'core/filters';\r\nimport { G2S } from '../g2s';\r\n\r\nexport interface ProductConfirmationData {\r\n product?: flights.ProductModel;\r\n popup: api.ProductPopup;\r\n}\r\n\r\nexport interface ProductDiscountConfirmationData {\r\n productDiscount?: flights.ProductModel;\r\n popup: api.ProductPopup;\r\n}\r\n\r\nexport interface ProductServiceBrand {\r\n services?: api.ProductBrand[];\r\n popup: api.ProductPopup;\r\n}\r\n\r\nexport interface BaggageConfirmationData {\r\n baggageData?: flights.ConfirmBaggageData | null;\r\n popup: api.ProductPopup;\r\n}\r\n\r\nexport interface ConfirmBaggageData {\r\n baggage: string;\r\n price: string;\r\n}\r\n\r\nconst NO_BAGGAGE_GUID = '00000000-0000-0000-0000-000000000000';\r\n\r\nexport class ProductPopupModel implements api.ProductPopup {\r\n backgroundColor: number;\r\n brandedKitId: number | null;\r\n buttonAction1: string;\r\n buttonAction2: string;\r\n buttonAction3: string;\r\n buttonText1: string;\r\n buttonText2: string;\r\n buttonText3: string;\r\n buttonColor1: string;\r\n buttonColor2: string;\r\n buttonColor3: string;\r\n buttonIcon1?: string;\r\n buttonIcon2?: string;\r\n buttonIcon3?: string;\r\n buttonStyle1: string;\r\n buttonStyle2: string;\r\n buttonStyle3: string;\r\n discountId?: number;\r\n displayType?: any;\r\n emTextColor?: string;\r\n isCloseIconVisible: boolean;\r\n kitId: number;\r\n markerText: string;\r\n popupId: number;\r\n position: api.ProductPopupPosition;\r\n productId: number;\r\n productName?: string | null;\r\n reverse?: boolean;\r\n reservationPriceText?: string | null;\r\n secondProductId?: number;\r\n targetProductId: number;\r\n text: string;\r\n type: api.ProductPopupType;\r\n userInteractionDone: boolean;\r\n popupTypeNumber: number;\r\n crossedOutPrice?: number | null;\r\n timerText?: string | null;\r\n timerDuration?: number | null;\r\n\r\n constructor(sourceProductPopup: api.ProductPopup) {\r\n this.backgroundColor = sourceProductPopup.backgroundColor;\r\n this.brandedKitId = sourceProductPopup.brandedKitId;\r\n this.buttonText1 = sourceProductPopup.buttonText1;\r\n this.buttonText2 = sourceProductPopup.buttonText2;\r\n this.buttonText3 = sourceProductPopup.buttonText3;\r\n this.buttonAction1 = sourceProductPopup.buttonAction1;\r\n this.buttonAction2 = sourceProductPopup.buttonAction2;\r\n this.buttonAction3 = sourceProductPopup.buttonAction3;\r\n this.buttonColor1 = sourceProductPopup.buttonColor1;\r\n this.buttonColor2 = sourceProductPopup.buttonColor2;\r\n this.buttonColor3 = sourceProductPopup.buttonColor3;\r\n this.buttonIcon1 = sourceProductPopup.buttonIcon1;\r\n this.buttonIcon2 = sourceProductPopup.buttonIcon2;\r\n this.buttonIcon3 = sourceProductPopup.buttonIcon3;\r\n this.buttonStyle1 = sourceProductPopup.buttonStyle1;\r\n this.buttonStyle2 = sourceProductPopup.buttonStyle2;\r\n this.buttonStyle3 = sourceProductPopup.buttonStyle3;\r\n this.discountId = sourceProductPopup.discountId;\r\n this.emTextColor = sourceProductPopup.emTextColor;\r\n this.isCloseIconVisible = sourceProductPopup.isCloseIconVisible;\r\n this.kitId = sourceProductPopup.kitId;\r\n this.markerText = sourceProductPopup.markerText;\r\n this.popupId = sourceProductPopup.popupId;\r\n this.position = sourceProductPopup.position;\r\n this.productId = sourceProductPopup.productId;\r\n this.productName = sourceProductPopup.productName;\r\n this.reservationPriceText = sourceProductPopup.reservationPriceText;\r\n this.secondProductId = sourceProductPopup.secondProductId;\r\n this.targetProductId = sourceProductPopup.targetProductId;\r\n this.text = sourceProductPopup.text;\r\n this.type = sourceProductPopup.type;\r\n this.userInteractionDone = false;\r\n this.displayType = sourceProductPopup.displayType;\r\n this.crossedOutPrice = sourceProductPopup.crossedOutPrice;\r\n this.timerText = sourceProductPopup.timerText;\r\n this.timerDuration = sourceProductPopup.timerDuration;\r\n\r\n switch (sourceProductPopup.type){\r\n case 'Product':\r\n this.popupTypeNumber = 0;\r\n break;\r\n case 'FlightBaggage':\r\n this.popupTypeNumber = 1;\r\n break;\r\n case 'Discount':\r\n this.popupTypeNumber = 2;\r\n break;\r\n case 'Gift':\r\n this.popupTypeNumber = 3;\r\n break;\r\n }\r\n\r\n // Test reverse order for buttons\r\n const testKits = [83, 84, 85, 86, 87, 88, 89, 90, 91, 92];\r\n\r\n if (testKits.indexOf(this.kitId) >= 0) {\r\n this.reverse = true;\r\n }\r\n }\r\n}\r\n\r\nexport class SeatMapModel {\r\n columns: number;\r\n flightCode: string;\r\n rows: any;\r\n rowsCount: number;\r\n seatBrands: api.SeatBrand[];\r\n segmentFlightCode: string;\r\n\r\n constructor(sourceSeatMap: api.SeatMap) {\r\n this.columns = sourceSeatMap.columns;\r\n this.flightCode = sourceSeatMap.flightCode;\r\n this.rows = sourceSeatMap.rows;\r\n this.rowsCount = sourceSeatMap.rowsCount;\r\n this.seatBrands = sourceSeatMap.seatBrands;\r\n this.segmentFlightCode = sourceSeatMap.segmentFlightCode;\r\n }\r\n}\r\n\r\nexport class ProductModel {\r\n product: api.Product;\r\n favorite: boolean;\r\n label = '';\r\n selected: boolean;\r\n backgroundColor: string | undefined;\r\n selectedOptions: string[];\r\n choiceType: api.ProductChoiceType;\r\n needToSelect = false;\r\n \r\n constructor(sourceProduct: api.Product) {\r\n this.product = sourceProduct;\r\n this.backgroundColor = utils.String.camelToKebab(sourceProduct.backgroundColor);\r\n this.selected = sourceProduct.selectedByDefault;\r\n this.selectedOptions = ['', '', '']; // Support 3 options\r\n this.choiceType = api.ProductChoiceType.notSet;\r\n\r\n if (this.product.externalId === 'MegoPackageAllInclusive') {\r\n this.favorite = true;\r\n }\r\n\r\n if (this.product.acceptOrDenyRequired) {\r\n this.needToSelect = true;\r\n }\r\n //switch (this.product.externalId) {\r\n // case 'GO2SEE-NS-BG-BUSINESS':\r\n // case 'GO2SEE-NS-BG-ZR':\r\n // case 'GO2SEE-NS-BG-ZR-ECONOM':\r\n // case 'GO2SEE-NS-BG-ZR-BUSINESS':\r\n // this.label = 'Безопасное путешествие';\r\n // break;\r\n // case 'GO2SEE-NSP-TRAVEL':\r\n // this.label = 'Спокойствие';\r\n // break;\r\n // case 'Go2SeeNotification':\r\n // this.label = 'Удобно!';\r\n // break;\r\n // case 'Go2SeeRefund':\r\n // this.label = 'Защита денег';\r\n // break;\r\n // case 'Go2SeeServiceFlightSickRefund':\r\n // this.label = 'Забота о здоровье';\r\n // break;\r\n // case 'Go2SeeServiceFlightFlexBooking':\r\n // case 'Go2SeeRefundGuaranty':\r\n // this.label = 'Легкость изменений';\r\n // break;\r\n // case 'Go2SeeServiceFreeSupport':\r\n // this.label = 'Все включено';\r\n // break;\r\n // case 'MegoPackageAllInclusive':\r\n // this.label = 'Выгодно + подарок!';\r\n // break;\r\n //}\r\n }\r\n}\r\n\r\nexport class PassengerValidationConstraints {\r\n allowCyrillicDocumentNumber: boolean;\r\n allowCyrillicName: boolean;\r\n citizenshipConstraints: api.CitizenshipConstraint[];\r\n countriesCitizenshipConstrain: any;\r\n isRequiredCitizenshipConstrains: boolean;\r\n orderFormNewDocumentNumberRuValidationEnabled: boolean;\r\n maxDateOfBirth: moment.Moment;\r\n middleNameRequired: boolean;\r\n mileCardVisible: boolean;\r\n minDateOfBirth: moment.Moment;\r\n minDocumentValidTill: moment.Moment;\r\n requiredCitizenshipCountries: number[];\r\n documents: any[];\r\n documentPassportForeign: any[];\r\n documentPassportRu: any[];\r\n documentOtherDocument: any[];\r\n documentBirthCertificate: any[];\r\n}\r\n\r\nexport class PassengerModel {\r\n index = 0;\r\n type: api.PassengerType | null = null;\r\n firstName = '';\r\n middleName = '';\r\n lastName = '';\r\n birthday = ''; // string used because of timezone problems with Date\r\n gender = '';\r\n card = '';\r\n cardAirlineId = '';\r\n selectedFlightSeats: any = {};\r\n seatWithInfant = false;\r\n citizenship = 0;\r\n allowCyrillicName = true;\r\n documentType = '';\r\n documentNumber = '';\r\n documentValidTillRequired: boolean;\r\n documentValidTillVisible: boolean;\r\n documentLastNameRequired: boolean;\r\n documentLastNameVisible: boolean;\r\n documentValidTill = ''; // string used because of timezone problems with Date\r\n documentValidTillEnabled = true;\r\n baggageOptions: string[] = [];\r\n\r\n validationConstraints: PassengerValidationConstraints;\r\n\r\n constructor() {\r\n this.validationConstraints = new PassengerValidationConstraints();\r\n }\r\n\r\n checkDocType(countryCrossing: string, citizenship: number, type: api.PassengerType | null) {\r\n // citizenship === 0 приходит для sirena 30\r\n if (citizenship === 168 || citizenship === 0) {\r\n if (type === 'adult' && this.validationConstraints['documentPassportRu']) {\r\n if ((/[0-9IVX]{1,4}[а-яА-Я]{2}[0-9]{6}$/).test(this.documentNumber) && this.validationConstraints['documentBirthCertificate']) {\r\n this.documentType = 'documentBirthCertificate';\r\n // } else if ((/[а-яА-Я]/).test(this.documentNumber) && this.validationConstraints['documentOtherDocument']) {\r\n // this.documentType = 'documentOtherDocument';\r\n // this.allowCyrillicName = true;\r\n } else {\r\n if ((/^[0-9]{9}$/).test(this.documentNumber)) {\r\n this.documentType = 'documentPassportForeign';\r\n this.allowCyrillicName = false;\r\n } else {\r\n this.documentType = 'documentPassportRu';\r\n this.allowCyrillicName = true;\r\n }\r\n }\r\n } else {\r\n if (!this.validationConstraints['documentBirthCertificate'] || (/^[0-9]{9}$/).test(this.documentNumber) || countryCrossing.includes('AM')) {\r\n this.documentType = 'documentPassportForeign';\r\n this.allowCyrillicName = false;\r\n } else {\r\n this.documentType = 'documentBirthCertificate';\r\n this.allowCyrillicName = true;\r\n }\r\n }\r\n } else {\r\n this.documentType = 'documentPassportForeign';\r\n this.allowCyrillicName = false;\r\n }\r\n\r\n const constrainByDoc = this.validationConstraints[this.documentType] || this.validationConstraints['documentPassportForeign'];\r\n\r\n const docLastNameConstrains = constrainByDoc.constraints\r\n .find((constrain) => constrain.nameProperty === 'LastName');\r\n\r\n this.documentLastNameVisible = docLastNameConstrains.nameConstraint !== 'NotAllowed';\r\n this.documentLastNameRequired = docLastNameConstrains.nameConstraint === 'Required';\r\n\r\n const docPeriodConstrains = constrainByDoc.constraints\r\n .find((constrain) => constrain.nameProperty === 'ValidityPeriodOfDocument');\r\n\r\n this.documentValidTillVisible = docPeriodConstrains.nameConstraint !== 'NotAllowed';\r\n this.documentValidTillRequired = docPeriodConstrains.nameConstraint === 'Required';\r\n }\r\n\r\n isValid(): boolean {\r\n if (!this.gender) {\r\n return false;\r\n }\r\n if (!this.lastName) {\r\n return false;\r\n }\r\n if (!this.firstName) {\r\n return false;\r\n }\r\n if (!this.birthday) {\r\n return false;\r\n } else {\r\n const m = moment(this.birthday, 'YYYY-MM-DD');\r\n\r\n if (m.isValid()\r\n && (m.isBefore(this.validationConstraints.minDateOfBirth) || m.isAfter(this.validationConstraints.maxDateOfBirth))) {\r\n return false;\r\n }\r\n }\r\n if (!this.documentNumber) {\r\n return false;\r\n }\r\n if (this.documentValidTillEnabled) {\r\n if (!this.documentValidTill) {\r\n return false;\r\n } else {\r\n const m = moment(this.documentValidTill, 'YYYY-MM-DD');\r\n\r\n if (m.isValid()\r\n && m.isBefore(this.validationConstraints.minDocumentValidTill)) {\r\n return false;\r\n }\r\n }\r\n }\r\n // const regExpBirthCert = /^(?[0-9IVX]{1,4})(?[a-zA-Zа-яА-Я]{2})(?[0-9]{6})$/;\r\n\r\n return true;\r\n }\r\n}\r\n\r\nexport class ReservationModel {\r\n private maxPopupAmount = 5;\r\n private maxPopupAmountOnOneStep = 3;\r\n private currentPopupAmount = 0;\r\n\r\n contacts: ContactsModel = {\r\n email: '',\r\n phone: ''\r\n };\r\n\r\n // Applied coupon. Id used for GA, Guid used on booking.\r\n couponId: number | null = null;\r\n couponGuid: string | null = null;\r\n couponDiscountAmount = 0;\r\n couponDataExpiring: any = 0;\r\n couponDataActivate: any = null;\r\n couponProductId: number | null = null;\r\n couponDiscountAmountOld = 0;\r\n couponProduct: any | null = null;\r\n couponProductAdd: any | null = null;\r\n\r\n bookingSessionId: number | null = null;\r\n\r\n surchargeInfo: api.SurchargeInfo;\r\n passengers: PassengerModel[] = [];\r\n rawProducts: ProductModel[] = [];\r\n seatMaps: SeatMapModel[];\r\n flatSelectedSeats: {} = {};\r\n \r\n productPopups: ProductPopupModel[] = [];\r\n productPopupsDiscount: ProductPopupModel[] = [];\r\n\r\n needToSelectToGoToNextStep = false;\r\n\r\n flights: flights.FlightModel[] = [];\r\n trains: flights.TrainModel[] = [];\r\n trainCoaches: { [schemaId: string]: string } = {};\r\n\r\n markerOwner = '';\r\n\r\n termsAccepted = false;\r\n\r\n countries: api.Destination[] = [];\r\n\r\n payment: payment.PaymentModel;\r\n paymentData: payment.YandexPaymentData;\r\n\r\n selectedFlightId = '';\r\n // Initial flight selected by url\r\n defaultFlightId = '';\r\n\r\n baggageOptions: string[] = [];\r\n\r\n baggageChoiceType: api.BaggageChoiceType = api.BaggageChoiceType.notSet;\r\n brandChoiceType: api.FlightBrandChoiceType = api.FlightBrandChoiceType.notSet;\r\n brandGroups: flights.FlightGroupModel[] = [];\r\n brandedProductKits?: api.ProductBrand[];\r\n forwardKits: (api.ProductBrand & { wasShown?: boolean })[] = [];\r\n // Flag to check that process before booking will be made only once\r\n processedBeforeBooking = false;\r\n\r\n productExternalIdsForStep: {\r\n passengers: string[];\r\n payment: string[];\r\n } = {\r\n passengers: [\r\n 'Go2SeeRefund'//, 'Go2SeeNotification'\r\n /*'GO2SEE-NSP-TRAVEL', 'GO2SEE-NS-BG-BUSINESS', 'GO2SEE-NS-BG-ZR', 'GO2SEE-NS-BG-ZR-ECONOM', 'GO2SEE-NS-BG-ZR-BUSINESS', 'ON_BG_NS500_185_290', 'ON_BG_ZV_NS500_250_390'*/\r\n ],\r\n payment: [\r\n 'Go2SeeServiceFlightSickRefund'//, 'Go2SeeNotification'\r\n ]\r\n }\r\n\r\n additionalDocs = {\r\n TKP_AAM: [\r\n {\r\n text: i18next.t('title_offer'),\r\n link: '/d/mixvel/OfferAAM.pdf',\r\n },\r\n {\r\n \r\n text: i18next.t('title_additional_flight_info'),\r\n link: '/d/mixvel/AdditionalInfoAAM.pdf',\r\n \r\n },\r\n ],\r\n };\r\n\r\n packageRelatedProducts = {\r\n 'Go2SeeRefund':[\r\n { externalId: 'MegoPackageAllInclusive', criterion: 'equal' },\r\n { externalId: 'MegoPackagePremium', criterion: 'popup' },\r\n { externalId: 'MegoPackageCalm', criterion: 'equal' }\r\n ],\r\n 'Go2SeeNotification': [\r\n { externalId: 'MegoPackagePremium', criterion: 'popup' },\r\n { externalId: 'MegoPackageSuperSms', criterion: 'equal' },\r\n { externalId: 'MegoPackageAllInclusive', criterion: 'equal' }\r\n ],\r\n 'Go2SeeServiceFreeSupport': [\r\n { externalId: 'MegoPackageOptimum', criterion: 'equal' },\r\n { externalId: 'MegoPackagePremium', criterion: 'equal' }\r\n ],\r\n 'MegoPackageSuperSms': [\r\n { externalId: 'Go2SeeNotification', criterion: 'equal' },\r\n { externalId: 'MegoPackageAllInclusive', criterion: 'equal' },\r\n { externalId: 'MegoPackagePremium', criterion: 'equal' }\r\n ],\r\n 'MegoPackageAllInclusive': [\r\n { externalId: 'Go2SeeServiceFlightFlexBooking', criterion: 'equal' },\r\n { externalId: 'Go2SeeRefund', criterion: 'equal' },\r\n { externalId: 'Go2SeeNotification', criterion: 'equal' },\r\n { externalId: 'MegoPackagePremium', criterion: 'equal' }\r\n ],\r\n // MegoPackageCalm продуктов нет на продакшне\r\n 'MegoPackageCalm': [\r\n { externalId: 'GO2SEE-NS-BG-ZR', criterion: 'startsWith' },\r\n { externalId: 'Go2SeeRefund', criterion: 'equal' },\r\n { externalId: 'Go2SeeNotification', criterion: 'equal' }\r\n ],\r\n 'MegoPackageOptimum': [\r\n { externalId: 'Go2SeeServiceFreeSupport', criterion: 'equal' }\r\n ],\r\n 'MegoPackagePremium': [\r\n { externalId: 'Go2SeeRefund', criterion: 'equal' },\r\n { externalId: 'Go2SeeNotification', criterion: 'equal' },\r\n { externalId: 'Go2SeeServiceFreeSupport', criterion: 'equal' },\r\n { externalId: 'MegoSmsTicket', criterion: 'equal' },\r\n { externalId: 'MegoPackageSuperSms', criterion: 'equal' },\r\n { externalId: 'MegoPackageAllInclusive', criterion: 'equal' }\r\n ]\r\n }\r\n\r\n constructor(reservationDesc?: api.FlightBookingDetails) {\r\n if (reservationDesc) {\r\n this.bookingSessionId = reservationDesc.bookingSessionId;\r\n this.selectedFlightId = reservationDesc.selectedFlightUniqueId;\r\n this.defaultFlightId = reservationDesc.selectedFlightUniqueId;\r\n this.surchargeInfo = reservationDesc.surchargeInfo;\r\n \r\n this.brandedProductKits = reservationDesc.brandedProductKits?.map(kit => {\r\n kit.needToSelect = kit.acceptOrDenyRequired;\r\n kit.products.sort((a, b) => (a.sortOrder ?? 0) - (b.sortOrder ?? 0));\r\n return kit;\r\n });\r\n reservationDesc.flights.forEach(f => {\r\n this.flights.push(new flights.FlightModel(f, reservationDesc));\r\n });\r\n reservationDesc.trains.forEach(t => {\r\n this.trains.push(new flights.TrainModel(t));\r\n });\r\n if (reservationDesc.trainCoaches) {\r\n for (const schemaId in reservationDesc.trainCoaches) {\r\n this.trainCoaches[schemaId.toUpperCase()] = reservationDesc.trainCoaches[schemaId];\r\n }\r\n }\r\n\r\n const documentValidTillEnabled = this.selectedFlight!.area !== 'RU';\r\n \r\n\r\n this.buildPassengers(\r\n reservationDesc.search.adults,\r\n api.PassengerType.adult,\r\n reservationDesc.defaultCitizenshipId,\r\n documentValidTillEnabled,\r\n this.buildPassengerConstraints(reservationDesc.constraints, api.PassengerType.adult)\r\n );\r\n\r\n this.buildPassengers(\r\n reservationDesc.search.children,\r\n api.PassengerType.child,\r\n reservationDesc.defaultCitizenshipId,\r\n documentValidTillEnabled,\r\n this.buildPassengerConstraints(reservationDesc.constraints, api.PassengerType.child)\r\n );\r\n\r\n this.buildPassengers(\r\n reservationDesc.search.babies,\r\n api.PassengerType.infant,\r\n reservationDesc.defaultCitizenshipId,\r\n documentValidTillEnabled,\r\n this.buildPassengerConstraints(reservationDesc.constraints, api.PassengerType.infant)\r\n );\r\n\r\n this.rawProducts = [];\r\n\r\n reservationDesc.products.forEach(p => {\r\n this.rawProducts.push(new ProductModel(p));\r\n });\r\n\r\n this.seatMaps = [];\r\n\r\n reservationDesc.flights.forEach(f => {\r\n f.seatMaps?.forEach(s => {\r\n this.seatMaps.push(new SeatMapModel(s));\r\n });\r\n });\r\n\r\n reservationDesc.productPopups.forEach(pp => {\r\n this.productPopups.push(new ProductPopupModel(pp));\r\n });\r\n\r\n reservationDesc.productPopups.forEach(pp => {\r\n if (pp.type === 'Discount') {\r\n this.productPopupsDiscount.push(new ProductPopupModel(pp));\r\n }\r\n });\r\n\r\n this.countries = reservationDesc.countries;\r\n this.payment = new payment.PaymentModel(reservationDesc.paymentTypes);\r\n this.resetAllSelectedBaggage();\r\n\r\n // For UI depending on marker owner\r\n this.markerOwner = utils.Cookies.getMarkerOwner();\r\n\r\n // Init brand groups for MultiFR brands.\r\n if (this.defaultFlight?.flightKind === 'Multi') {\r\n const flightIds = this.defaultFlightId.split('_');\r\n\r\n if (flightIds.length > 1) {\r\n for (let i = 0; i < this.flights.length; i++) {\r\n const f = this.flights[i];\r\n\r\n if (f.uniqueId !== this.defaultFlightId && f.flightKind !== 'Multi') {\r\n const fg = this.brandGroups.find(g => g.brandGroupGuid === f.brand.brandGroupGuid);\r\n\r\n if (fg) {\r\n fg.flights.push(f);\r\n }\r\n else {\r\n const bg = new flights.FlightGroupModel();\r\n\r\n bg.brandGroupGuid = f.brand.brandGroupGuid;\r\n bg.selectedFlightId = f.uniqueId;\r\n bg.defaultFlightId = f.uniqueId;\r\n bg.flights = [f];\r\n\r\n this.brandGroups.push(bg);\r\n }\r\n }\r\n }\r\n\r\n // Init brandGroup default/selected flight from defaultFlightId\r\n flightIds.forEach((id) => {\r\n this.brandGroups.forEach((brandGroup) => {\r\n brandGroup.flights.forEach((flight) => {\r\n if (flight.uniqueId == id) {\r\n brandGroup.defaultFlightId = id;\r\n brandGroup.selectedFlightId = id;\r\n }\r\n });\r\n });\r\n });\r\n }\r\n else {\r\n console.error('Could not parse flight ids from defaultFlightId ' + this.defaultFlightId);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private get selectedCustomBaggageIds(): string[] {\r\n let selectedIds = this.baggageOptions.filter(id => id && id != '' && id != NO_BAGGAGE_GUID);\r\n const result: string[] = [];\r\n\r\n this.passengers.forEach((passenger) => {\r\n selectedIds = selectedIds.concat(passenger.baggageOptions.filter(id => id && id != '' && id != NO_BAGGAGE_GUID));\r\n });\r\n selectedIds.forEach((id) => {\r\n if (!result.some(resultId => resultId == id)) {\r\n result.push(id);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n \r\n public getSelectedCustomBaggageIds(){\r\n let selectedIds = this.baggageOptions.filter(id => id && id != '' && id != NO_BAGGAGE_GUID);\r\n const result: string[] = [];\r\n\r\n this.passengers.forEach((passenger) => {\r\n selectedIds = selectedIds.concat(passenger.baggageOptions.filter(id => id && id != '' && id != NO_BAGGAGE_GUID));\r\n });\r\n selectedIds.forEach((id) => {\r\n if (!result.some(resultId => resultId == id)) {\r\n result.push(id);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public hasSeatMaps(){\r\n let result = false;\r\n for (let i = 0; i < this.flights.length; i++) {\r\n if (this.flights[i].seatMaps?.length){\r\n result = true;\r\n break;\r\n } else {\r\n result = false;\r\n }\r\n \r\n }\r\n\r\n return result;\r\n }\r\n\r\n get hasBrands(): boolean {\r\n return this.flights && this.flights.length > 1;\r\n }\r\n\r\n get additionalDocsFlat(): any {\r\n const localAdditionalDocs = this.additionalDocs;\r\n const allDocs = this.flights.map(flight => flight.additionalOfferKeys).flat();\r\n const flatDocsList = allDocs\r\n .map(key => localAdditionalDocs[key as keyof typeof localAdditionalDocs])\r\n .filter(Boolean)\r\n .flat(1);\r\n\r\n const uniqFlatDocsList = Array.from(new Set(flatDocsList));\r\n\r\n return uniqFlatDocsList;\r\n }\r\n\r\n get hasFlightSeatMaps(): boolean {\r\n let found = false;\r\n \r\n for (let i = 0; i < this.flights.length; i++) {\r\n if (this.flights[i].uniqueId == this.selectedFlightId && this.flights[i].seatMaps?.length) {\r\n for (let j = 0; j < this.flights[i].legs.length; j++) {\r\n for (let ji = 0; ji < this.flights[i].legs[j].segments.length; ji++) {\r\n found = this.hasSegmentAvaliableSeatMaps(this.flights[i].legs[j].segments[ji].flightCode);\r\n if (found) return found;\r\n } \r\n }\r\n }\r\n }\r\n \r\n return found;\r\n }\r\n\r\n // Check if MultiFR brands should be displayed and used.\r\n get hasBrandGroups(): boolean {\r\n return this.hasBrands && this.defaultFlight?.flightKind === 'Multi' && this.brandGroups.length > 0;\r\n }\r\n\r\n get bookingNotification(): string {\r\n // if (this.selectedFlight\r\n // && this.selectedFlight.destinations.find(d => d.country.iataCode == 'TR')) {\r\n // return i18next.t('label_notification_covid19');\r\n // }\r\n return '';\r\n }\r\n\r\n get customBaggagePrice(): number {\r\n let result = 0;\r\n\r\n if (this.selectedFlight\r\n && this.selectedFlight.customBaggage\r\n && this.selectedFlight.customBaggage.options\r\n && this.selectedFlight.customBaggage.options.length) {\r\n this.baggageOptions.forEach((baggageOption, baggageOptionIndex) => {\r\n if (baggageOption) {\r\n const baggageItem = this.selectedFlight!.customBaggage.options![baggageOptionIndex]\r\n .baggageOptions.find(x => x.id == baggageOption);\r\n\r\n if (baggageItem && baggageItem.price) {\r\n result += baggageItem.price;\r\n }\r\n }\r\n });\r\n this.passengers.forEach((passenger) => {\r\n passenger.baggageOptions.forEach((baggageOption, baggageOptionIndex) => {\r\n if (baggageOption) {\r\n const baggageItem = this.selectedFlight!.customBaggage.options![baggageOptionIndex]\r\n .baggageOptions.find(x => x.id == baggageOption);\r\n\r\n if (baggageItem && baggageItem.price) {\r\n result += baggageItem.price;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get flightRegistrationRowItems() {\r\n return [\r\n {\r\n label: i18next.t('label_no_matter'),\r\n value: ''\r\n },\r\n {\r\n label: i18next.t('label_flight_row_start'),\r\n value: 'start'\r\n },\r\n {\r\n label: i18next.t('label_flight_row_middle'),\r\n value: 'middle'\r\n },\r\n {\r\n label: i18next.t('label_flight_row_tail'),\r\n value: 'tail'\r\n }\r\n ];\r\n }\r\n\r\n get flightRegistrationSeatItems() {\r\n return [\r\n {\r\n label: i18next.t('label_no_matter'),\r\n value: ''\r\n },\r\n {\r\n label: i18next.t('label_flight_seat_window'),\r\n value: 'window'\r\n },\r\n {\r\n label: i18next.t('label_flight_seat_middle'),\r\n value: 'middle'\r\n },\r\n {\r\n label: i18next.t('label_flight_seat_aisle'),\r\n value: 'aisle'\r\n }\r\n ];\r\n }\r\n\r\n get selectedFlight() {\r\n if (this.selectedFlightId) {\r\n return this.flights.find(flight => flight.uniqueId === this.selectedFlightId) || null;\r\n }\r\n return null;\r\n }\r\n\r\n get selectedFlightBillingPrice(): number {\r\n // Override flight price for multiFR brands.\r\n if (this.hasBrandGroups) {\r\n return this.getBrandGroupsBillingPrice();\r\n }\r\n else {\r\n if (this.selectedFlightId) {\r\n const f = this.flights.find(flight => flight.uniqueId === this.selectedFlightId);\r\n\r\n if (f) {\r\n return f.billingPrice;\r\n }\r\n }\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n get selectedFlightBasePrice(): number {\r\n // Override flight price for multiFR brands.\r\n if (this.hasBrandGroups) {\r\n return this.getBrandGroupsBasePrice();\r\n }\r\n else {\r\n if (this.selectedFlightId) {\r\n const f = this.flights.find(flight => flight.uniqueId === this.selectedFlightId);\r\n\r\n if (f) {\r\n return f.basePrice;\r\n }\r\n }\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n get selectedFlightBrandName(): string {\r\n let result = '';\r\n\r\n if (this.hasBrandGroups) {\r\n this.brandGroups.forEach((brandGroup) => {\r\n const f = this.flights.find(f => f.uniqueId == brandGroup.selectedFlightId);\r\n\r\n if (f && f.brand) {\r\n if (result) {\r\n result += ' + ';\r\n }\r\n\r\n result += f.brand.nameUI;\r\n }\r\n });\r\n }\r\n else {\r\n if (this.selectedFlight && this.selectedFlight.brand) {\r\n result = this.selectedFlight.brand.nameUI;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n get selectedFlightFee(): number {\r\n // Override flight price for multiFR brands.\r\n if (this.hasBrandGroups) {\r\n return this.getBrandGroupsFee();\r\n }\r\n else {\r\n if (this.selectedFlightId) {\r\n const f = this.flights.find(flight => flight.uniqueId === this.selectedFlightId);\r\n\r\n if (f) {\r\n return f.fee;\r\n }\r\n }\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n get defaultFlight() {\r\n return this.flights.find(flight =>\r\n flight.uniqueId === this.defaultFlightId);\r\n }\r\n\r\n get selectedFlightIdForProducts() {\r\n if (this.brandGroups.length > 0) {\r\n const ids = this.brandGroups.map(g => parseInt(g.selectedFlightId));\r\n ids.sort((a, b) => a - b);\r\n return ids.join('_');\r\n } else {\r\n return this.selectedFlightId;\r\n }\r\n }\r\n\r\n get products(): ProductModel[] {\r\n const result = {};\r\n let productDiscount: ProductModel | null = null;\r\n\r\n for (const product of this.rawProducts) {\r\n if (product.product.flightId === this.selectedFlightIdForProducts || !product.product.flightId) {\r\n if (product.product.discountRuleId) {\r\n productDiscount = product;\r\n } else if (!result[product.product.id]) {\r\n result[product.product.id] = product;\r\n }\r\n }\r\n }\r\n\r\n const resultArray = Object.values(result);\r\n\r\n if (productDiscount) {\r\n resultArray.push(productDiscount);\r\n }\r\n\r\n return resultArray;\r\n }\r\n\r\n get selectedProducts(): ProductModel[] {\r\n return this.products.filter(p => p.selected);\r\n }\r\n\r\n get passengersForBaggage(): flights.PassengerModel[] {\r\n return this.passengers.filter(passenger =>\r\n passenger.type === api.PassengerType.adult\r\n || passenger.type === api.PassengerType.child\r\n );\r\n }\r\n\r\n get productsOfTypeInsurance(): ProductModel[] {\r\n return this.products.filter(p => p.product.saleType === api.ProductSaleType.bookingForm\r\n && p.product.type === api.ProductType.insurance);\r\n }\r\n\r\n get productsOfYandex(): ProductModel[] {\r\n return this.products.filter(p => p.product.saleType === api.ProductSaleType.yandex\r\n && p.product.type === api.ProductType.package);\r\n }\r\n\r\n get productsOfTypeService(): ProductModel[] {\r\n return this.products.filter(p => p.product.saleType === api.ProductSaleType.bookingForm\r\n && p.product.type === api.ProductType.service);\r\n }\r\n\r\n get productsOfTypePackage(): ProductModel[] {\r\n return this.products.filter(p => p.product.saleType === api.ProductSaleType.bookingForm\r\n && p.product.type === api.ProductType.package);\r\n }\r\n\r\n get productsOfGrouped(): ProductModel[] {\r\n return this.products.filter(p => p.product.saleType === api.ProductSaleType.bookingForm\r\n && p.product.displayType === api.ProductDisplayType.grouped);\r\n }\r\n\r\n get productsNotGrouped(): ProductModel[] {\r\n return this.products.filter(p => p.product.saleType === api.ProductSaleType.bookingForm\r\n && p.product.displayType !== api.ProductDisplayType.grouped);\r\n }\r\n\r\n get productsOfTypeServiceOrPackage(): ProductModel[] {\r\n return this.products.filter(p => p.product.saleType === api.ProductSaleType.bookingForm\r\n && (\r\n p.product.type === api.ProductType.service\r\n || p.product.type === api.ProductType.package\r\n )\r\n && p.product.displayType !== api.ProductDisplayType.grouped);\r\n }\r\n\r\n get hasSelectedBothCustomBaggage(): boolean {\r\n return this.checkCustomBaggageSelection(\r\n this.selectedCustomBaggageIds,\r\n this.getAvailableCustomBaggageItemsByFlightDirection(api.CustomBaggageFlightDirection.both)\r\n );\r\n }\r\n\r\n get hasSelectedOutwardCustomBaggage(): boolean {\r\n return this.checkCustomBaggageSelection(\r\n this.selectedCustomBaggageIds,\r\n this.getAvailableCustomBaggageItemsByFlightDirection(api.CustomBaggageFlightDirection.outward)\r\n );\r\n }\r\n\r\n get hasSelectedReturnCustomBaggage(): boolean {\r\n return this.checkCustomBaggageSelection(\r\n this.selectedCustomBaggageIds,\r\n this.getAvailableCustomBaggageItemsByFlightDirection(api.CustomBaggageFlightDirection.return)\r\n );\r\n }\r\n\r\n get hasSelectedAnyCustomBaggage() {\r\n return this.selectedCustomBaggageIds.length && this.selectedCustomBaggageIds.length > 0;\r\n }\r\n\r\n get hasOnlyTwoCustomBaggageLists() {\r\n if (this.selectedFlight) {\r\n if ((this.getCustomBaggageOptionsByFlightDirection(api.CustomBaggageFlightDirection.outward).length == 1\r\n && this.getCustomBaggageOptionsByFlightDirection(api.CustomBaggageFlightDirection.return).length == 1\r\n && this.getCustomBaggageOptionsByFlightDirection(api.CustomBaggageFlightDirection.both).length == 0)\r\n ||\r\n (this.getCustomBaggageOptionsByFlightDirection(api.CustomBaggageFlightDirection.outward).length == 1\r\n && this.getCustomBaggageOptionsByFlightDirection(api.CustomBaggageFlightDirection.return).length == 0\r\n && this.getCustomBaggageOptionsByFlightDirection(api.CustomBaggageFlightDirection.both).length == 1)\r\n ||\r\n (this.getCustomBaggageOptionsByFlightDirection(api.CustomBaggageFlightDirection.outward).length == 0\r\n && this.getCustomBaggageOptionsByFlightDirection(api.CustomBaggageFlightDirection.return).length == 1\r\n && this.getCustomBaggageOptionsByFlightDirection(api.CustomBaggageFlightDirection.both).length == 1)) {\r\n return true;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n get passengersWithSeatCount() {\r\n const passengersCount = this.getPassengersCount();\r\n\r\n return passengersCount.adults + passengersCount.children;\r\n }\r\n\r\n get cleanSelectedProducts() {\r\n const internalProductIds: number[] = [];\r\n\r\n for (const product of this.selectedProducts) {\r\n if (product.product.internalProducts) {\r\n internalProductIds.push(...product.product.internalProducts.map(p => p.id));\r\n }\r\n }\r\n\r\n return this.selectedProducts.filter(p => !internalProductIds.includes(p.product.id));\r\n }\r\n\r\n get calculatedCleanSelectedProducts() {\r\n const cleanSelectedProducts: ProductModel[] = JSON.parse(JSON.stringify(this.cleanSelectedProducts));\r\n\r\n const groups: Record = {};\r\n\r\n for (const product of cleanSelectedProducts) {\r\n if (product.product.internalProducts && product.product.internalProducts.length > 0) {\r\n for (const internalProduct of product.product.internalProducts) {\r\n if (groups[internalProduct.id]) {\r\n groups[internalProduct.id].push(internalProduct);\r\n } else {\r\n groups[internalProduct.id] = [internalProduct];\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const id of Object.keys(groups)) {\r\n groups[id].sort((a, b) => a.billingPrice - b.billingPrice);\r\n \r\n for (const internalProduct of groups[id].slice(1)) {\r\n internalProduct.billingPrice = 0;\r\n }\r\n }\r\n\r\n for (let i = 0; i < cleanSelectedProducts.length; i++) {\r\n const product = cleanSelectedProducts[i];\r\n\r\n if (product.product.internalProducts && product.product.internalProducts.length > 0) {\r\n const totalInternalProductsCost = this.cleanSelectedProducts[i].product.internalProducts.reduce((acc, p) => acc + p.billingPrice, 0);\r\n\r\n if (totalInternalProductsCost > 0) {\r\n product.product.billingPrice = product.product.internalProducts.reduce((acc, p) => acc + p.billingPrice, 0);\r\n }\r\n }\r\n }\r\n\r\n return cleanSelectedProducts;\r\n }\r\n\r\n hasPaymentTypeById(id: string) {\r\n return !!this.payment.paymentTypes.find(paymentType => paymentType.paymentTypeId === id);\r\n }\r\n\r\n getPackageRelatedProductsByExternalId(externalId: string) {\r\n return this.packageRelatedProducts[externalId] ?? [];\r\n }\r\n\r\n getProductsForStep(step: 'passengers' | 'services' | 'payment') {\r\n return this.products.filter(product => this.productExternalIdsForStep[step].includes(product.product.externalId));\r\n }\r\n\r\n getCustomBaggageOptionsByFlightDirection(flightDirection: api.CustomBaggageFlightDirection) {\r\n if (flightDirection && this.selectedFlight\r\n && this.selectedFlight.customBaggage\r\n && this.selectedFlight.customBaggage.options\r\n && this.selectedFlight.customBaggage.options.length) {\r\n return this.selectedFlight.customBaggage.options?.filter(\r\n customBaggageOption => customBaggageOption.customBaggageFlightDirection == flightDirection\r\n );\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n hasSelectedCustomBaggageBySegment(segment: flights.SegmentModel) {\r\n return this.checkCustomBaggageSelection(\r\n this.selectedCustomBaggageIds,\r\n this.getAvailableCustomBaggageItemsByDestinationUIDs(\r\n '' + segment.departureDestination.uniqueId,\r\n '' + segment.arrivalDestination.uniqueId\r\n )\r\n );\r\n }\r\n\r\n hasSelectedCustomBaggageBySegmentsBunch(segmentsBunch: flights.SegmentModel[]) {\r\n const departureDestinationUniqueId = '' + segmentsBunch[0].departureDestination.uniqueId;\r\n const arrivalDestinationUniqueId = '' + segmentsBunch[segmentsBunch.length - 1].arrivalDestination.uniqueId;\r\n\r\n return this.checkCustomBaggageSelection(\r\n this.selectedCustomBaggageIds,\r\n this.getAvailableCustomBaggageItemsByDestinationUIDs(\r\n departureDestinationUniqueId,\r\n arrivalDestinationUniqueId\r\n )\r\n );\r\n }\r\n\r\n public getAvailableCustomBaggageItems(): api.CustomBaggageItem[] {\r\n if (this.selectedFlight) {\r\n return this.selectedFlight.getAvailableCustomBaggageItems();\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public getAvailableCustomBaggageItemsByFlightDirection(flightDirection: api.CustomBaggageFlightDirection): api.CustomBaggageItem[] {\r\n if (this.selectedFlight) {\r\n return this.selectedFlight.getAvailableCustomBaggageItemsByFlightDirection(flightDirection);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public getAvailableCustomBaggageItemsByDestinationUIDs(destinationFromUID: string, destinationToUID: string): api.CustomBaggageItem[] {\r\n if (this.selectedFlight) {\r\n return this.selectedFlight.getAvailableCustomBaggageItemsByDestinationUIDs(destinationFromUID, destinationToUID);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private checkCustomBaggageSelection(customBaggageItemIds: string[], customBaggageItems: api.CustomBaggageItem[]): boolean {\r\n return customBaggageItemIds.some(id => customBaggageItems.some(customBaggage => customBaggage.id == id));\r\n }\r\n\r\n public getConfirmationDataForUndonePopupByPosition(position: api.ProductPopupPosition) {\r\n const popupAmountBySteps: Record = {\r\n [api.ProductPopupPosition.afterStep1]: 0,\r\n [api.ProductPopupPosition.afterStep2]: 0,\r\n [api.ProductPopupPosition.afterOrder]: 0\r\n };\r\n\r\n function getOffset(pos: api.ProductPopupPosition) {\r\n switch (pos) {\r\n case api.ProductPopupPosition.afterStep2: {\r\n return popupAmountBySteps[api.ProductPopupPosition.afterStep1];\r\n }\r\n case api.ProductPopupPosition.afterOrder: {\r\n return popupAmountBySteps[api.ProductPopupPosition.afterStep1] + popupAmountBySteps[api.ProductPopupPosition.afterStep2];\r\n }\r\n default: {\r\n return 0;\r\n }\r\n }\r\n }\r\n\r\n const productPopupsWithUniqGroups: ProductPopupModel[] = [];\r\n\r\n for (const productPopup of this.productPopups) {\r\n if (productPopup.displayType === 'Grouped') {\r\n const popup = productPopupsWithUniqGroups.find(p => p.brandedKitId === productPopup.brandedKitId);\r\n\r\n if (!popup) {\r\n productPopupsWithUniqGroups.push(productPopup);\r\n }\r\n } else {\r\n productPopupsWithUniqGroups.push(productPopup);\r\n }\r\n }\r\n\r\n const groupedProductPopups: Record = {\r\n [api.ProductPopupPosition.afterStep1]: [],\r\n [api.ProductPopupPosition.afterStep2]: [],\r\n [api.ProductPopupPosition.afterOrder]: []\r\n };\r\n\r\n for (const popup of productPopupsWithUniqGroups) {\r\n if (popup.targetProductId) {\r\n const product = this.products.find(p => p.product.id === popup.targetProductId);\r\n\r\n if (product) {\r\n if (product.product.stepNumber === 1) {\r\n groupedProductPopups[api.ProductPopupPosition.afterStep1].push(popup);\r\n popupAmountBySteps[api.ProductPopupPosition.afterStep1]++;\r\n } else if (product.product.stepNumber === 2) {\r\n groupedProductPopups[api.ProductPopupPosition.afterStep2].push(popup);\r\n popupAmountBySteps[api.ProductPopupPosition.afterStep2]++;\r\n } else if (product.product.stepNumber === 3) {\r\n groupedProductPopups[api.ProductPopupPosition.afterOrder].push(popup);\r\n popupAmountBySteps[api.ProductPopupPosition.afterOrder]++;\r\n }\r\n }\r\n } else if (popup.position) {\r\n groupedProductPopups[popup.position].push(popup);\r\n popupAmountBySteps[popup.position]++;\r\n }\r\n }\r\n\r\n const sortedProductPopups = [\r\n ...groupedProductPopups[api.ProductPopupPosition.afterStep1],\r\n ...groupedProductPopups[api.ProductPopupPosition.afterStep2],\r\n ...groupedProductPopups[api.ProductPopupPosition.afterOrder]\r\n ];\r\n\r\n const selectedProducts = this.products.filter(p => p.selected);\r\n const selectedProductIds: number[] = [];\r\n\r\n for (const product of selectedProducts) {\r\n selectedProductIds.push(product.product.id);\r\n\r\n if (product.product.type === 'Package') {\r\n selectedProductIds.push(...product.product.internalProducts.map(p => p.id));\r\n }\r\n }\r\n\r\n const availableProductPopups = sortedProductPopups.filter(popup => this.products.find(p => p.product.id === popup.productId)).slice(getOffset(position));\r\n\r\n const filteredProductPopups = availableProductPopups.filter(p => {\r\n return !selectedProductIds.includes(p.productId) && !selectedProductIds.includes(p.targetProductId);\r\n });\r\n\r\n const truncatedProductPopups: ProductPopupModel[] = [];\r\n\r\n for (const productPopup of filteredProductPopups) {\r\n if (productPopup.popupId === 0 || (truncatedProductPopups.length < this.maxPopupAmountOnOneStep && this.currentPopupAmount < this.maxPopupAmount)) {\r\n truncatedProductPopups.push(productPopup);\r\n }\r\n }\r\n\r\n const popupForPosition = truncatedProductPopups.find(popup => {\r\n const notDone = !popup.userInteractionDone;\r\n\r\n if (!popup.targetProductId) {\r\n return notDone && popup.position == position;\r\n } else {\r\n const product = this.products.find(p => p.product.id === popup.targetProductId);\r\n \r\n if (product) {\r\n if (position === api.ProductPopupPosition.afterStep1 && product.product.stepNumber === 1) {\r\n return notDone;\r\n } else if (position === api.ProductPopupPosition.afterStep2 && product.product.stepNumber === 2) {\r\n return notDone;\r\n } else if (position === api.ProductPopupPosition.afterOrder && product.product.stepNumber === 3) {\r\n return notDone;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n });\r\n\r\n let confirmationData: (ProductConfirmationData & BaggageConfirmationData & ProductDiscountConfirmationData & ProductServiceBrand) | undefined;\r\n \r\n if (popupForPosition) {\r\n popupForPosition.userInteractionDone = true;\r\n this.currentPopupAmount++;\r\n }\r\n\r\n if (popupForPosition?.displayType == 'Grouped') {\r\n //тут надо задать confirmationData как это сделано ниже\r\n confirmationData = this.getProductConfirmationDataForBrand(popupForPosition);\r\n if (confirmationData?.services?.filter(Boolean).length) {\r\n return confirmationData;\r\n }\r\n\r\n return 'skipPopupAndGo';\r\n }\r\n \r\n\r\n if (popupForPosition?.type == api.ProductPopupType.product) {\r\n confirmationData = this.getProductConfirmationDataForPopup(popupForPosition);\r\n if (confirmationData?.product) {\r\n return confirmationData;\r\n }\r\n\r\n return 'skipPopupAndGo';\r\n }\r\n if (popupForPosition?.type == api.ProductPopupType.discount || popupForPosition?.type == api.ProductPopupType.gift) {\r\n confirmationData = this.getProductDiscountConfirmationDataForPopup(popupForPosition);\r\n if (confirmationData?.productDiscount) {\r\n return confirmationData;\r\n }\r\n\r\n return 'skipPopupAndGo';\r\n }\r\n if (popupForPosition?.type == api.ProductPopupType.flightBaggage) {\r\n confirmationData = this.getBaggageConfirmationDataForPopup(popupForPosition);\r\n if (confirmationData?.baggageData) {\r\n return confirmationData;\r\n }\r\n\r\n return 'skipPopupAndGo';\r\n }\r\n\r\n return confirmationData;\r\n }\r\n\r\n public getProductDiscountConfirmationDataForPopup(productPopup: api.ProductPopup): ProductDiscountConfirmationData | undefined {\r\n const productToConfirm = this.products.find(\r\n product =>\r\n product.product.discountRuleId === productPopup.discountId\r\n && product.product.id === productPopup.productId\r\n && product.choiceType == api.ProductChoiceType.notSet\r\n && !product.selected \r\n );\r\n const secondProduct = this.products.find(\r\n product =>\r\n product.product.id === productPopup.secondProductId && productPopup.type !== 'Gift'\r\n );\r\n\r\n if (productToConfirm && this.selectedProducts.length === 0 || secondProduct) {\r\n return {\r\n productDiscount: productToConfirm,\r\n popup: productPopup\r\n };\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n public getProductConfirmationDataForPopup(productPopup: api.ProductPopup): ProductConfirmationData | undefined {\r\n const productToConfirm = this.products.find(\r\n product =>\r\n product.product.id === productPopup.productId\r\n && product.choiceType == api.ProductChoiceType.notSet\r\n && !product.selected\r\n );\r\n\r\n if (productToConfirm) {\r\n return {\r\n product: productToConfirm,\r\n popup: productPopup\r\n };\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n public getProductConfirmationDataForBrand(productPopup: api.ProductPopup): ProductServiceBrand | undefined {\r\n if (this.forwardKits) {\r\n for (const element of this.forwardKits) {\r\n for (const item of element.products) {\r\n const res = this.selectedProducts.find(n => n.product.id == item.productId || n.product.internalProductIds?.includes(item.productId));\r\n\r\n if (res) {\r\n element.wasShown = true;\r\n }\r\n }\r\n }\r\n }\r\n \r\n const productToConfirm = this.forwardKits?.filter(kit => !kit.wasShown);\r\n \r\n if (productToConfirm) {\r\n return {\r\n services: productToConfirm,\r\n popup: productPopup\r\n };\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private getCheapestCustomBaggageItemsWithSameParams(): api.CustomBaggageItem[] {\r\n const availableCustomBaggageItems = this.getAvailableCustomBaggageItems()\r\n .sort((baggageOptionA, baggageOptionB) => baggageOptionA.price - baggageOptionB.price)\r\n .filter(baggageOption => baggageOption.price > 0);\r\n let baggageOptionsWithSameParams: api.CustomBaggageItem[] = [];\r\n\r\n if (this.selectedFlight\r\n && this.selectedFlight.customBaggage.options\r\n && this.selectedFlight.customBaggage.options.length) {\r\n availableCustomBaggageItems.some((availableBaggageItem) => {\r\n\r\n this.selectedFlight!.customBaggage.options!.forEach((option) => {\r\n const baggageOptionWithSameParams = option.baggageOptions.find(baggageItem =>\r\n baggageItem.bagsQuantity == availableBaggageItem.bagsQuantity\r\n && baggageItem.bagsWeight == availableBaggageItem.bagsWeight\r\n && baggageItem.currency == availableBaggageItem.currency);\r\n\r\n if (baggageOptionWithSameParams) {\r\n baggageOptionsWithSameParams.push(baggageOptionWithSameParams);\r\n }\r\n });\r\n\r\n const cheapestBaggageOptionsWithSameParamsHasFound =\r\n baggageOptionsWithSameParams.length == this.selectedFlight!.customBaggage.options!.length;\r\n\r\n if (cheapestBaggageOptionsWithSameParamsHasFound) {\r\n return true;\r\n } else {\r\n baggageOptionsWithSameParams = [];\r\n\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n return baggageOptionsWithSameParams;\r\n }\r\n\r\n public getCheapestBaggageUpgradeMethod(): {\r\n method: 'brand' | 'customBaggage';\r\n price: number;\r\n firstFlightWithBaggage?: flights.FlightModel;\r\n baggageItemsWithSameParams?: api.CustomBaggageItem[];\r\n } | null {\r\n if (this.selectedFlight) {\r\n const firstFlightWithBaggage = this.flights.find(x => !x.hasNoBaggage);\r\n let priceUpgradeWithBrand = 0;\r\n\r\n if (firstFlightWithBaggage) {\r\n priceUpgradeWithBrand = firstFlightWithBaggage.billingPrice - this.selectedFlight.billingPrice;\r\n }\r\n\r\n const baggageItemsWithSameParams = this.getCheapestCustomBaggageItemsWithSameParams();\r\n let priceUpgradeWithCustomBaggage = 0;\r\n\r\n if (baggageItemsWithSameParams.length) {\r\n baggageItemsWithSameParams.forEach((baggageItem) => {\r\n baggageItem.perPassenger\r\n ? priceUpgradeWithCustomBaggage += baggageItem.price * this.passengersForBaggage.length\r\n : priceUpgradeWithCustomBaggage += baggageItem.price;\r\n });\r\n }\r\n\r\n if (priceUpgradeWithBrand > 0\r\n && (priceUpgradeWithBrand <= priceUpgradeWithCustomBaggage\r\n || priceUpgradeWithCustomBaggage == 0)) {\r\n return {\r\n method: 'brand',\r\n price: priceUpgradeWithBrand,\r\n firstFlightWithBaggage\r\n };\r\n } else if (priceUpgradeWithCustomBaggage > 0\r\n && (priceUpgradeWithCustomBaggage <= priceUpgradeWithBrand\r\n || priceUpgradeWithBrand == 0)) {\r\n return {\r\n method: 'customBaggage',\r\n price: priceUpgradeWithCustomBaggage,\r\n baggageItemsWithSameParams\r\n };\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getBaggageValue(baggageParams: {\r\n pieces: number;\r\n pieceWeight: number;\r\n }) {\r\n let baggage = '';\r\n\r\n if (baggageParams && (baggageParams.pieceWeight === 0 && baggageParams.pieces === 0)) {\r\n return i18next.t('label_baggage_without_short');\r\n }\r\n\r\n if (baggageParams) {\r\n if (baggageParams.pieceWeight > 0) {\r\n baggage = baggageParams.pieceWeight + G2S.nbsp + i18next.t('label_kg');\r\n\r\n if (baggageParams.pieces > 1) {\r\n baggage = baggageParams.pieces + G2S.nbsp + 'x' + G2S.nbsp + baggage;\r\n }\r\n } else {\r\n if (baggageParams.pieces > 0) {\r\n baggage = i18next.t('numerous_baggage_piece', { count: baggageParams.pieces });\r\n }\r\n }\r\n }\r\n\r\n return baggage;\r\n }\r\n\r\n public getConfirmBaggage(productPopup: api.ProductPopup): ConfirmBaggageData | null {\r\n if (this.selectedFlight\r\n && this.selectedFlight.hasNoBaggage\r\n && !this.hasSelectedAnyCustomBaggage) {\r\n\r\n const cheapestUpgradeMethod = this.getCheapestBaggageUpgradeMethod();\r\n\r\n if (cheapestUpgradeMethod) {\r\n if (cheapestUpgradeMethod.method == 'brand'\r\n && cheapestUpgradeMethod.firstFlightWithBaggage) {\r\n return {\r\n baggage: this.getBaggageValue({\r\n pieces: cheapestUpgradeMethod.firstFlightWithBaggage.legs[0].baggage.pieces,\r\n pieceWeight: cheapestUpgradeMethod.firstFlightWithBaggage.legs[0].baggage.pieceWeight\r\n }),\r\n price: Filters.price(cheapestUpgradeMethod.price, false)\r\n };\r\n } else if (cheapestUpgradeMethod.method == 'customBaggage'\r\n && cheapestUpgradeMethod.baggageItemsWithSameParams\r\n && cheapestUpgradeMethod.baggageItemsWithSameParams.length) {\r\n return {\r\n baggage: this.getBaggageValue({\r\n pieces: cheapestUpgradeMethod.baggageItemsWithSameParams[0].bagsQuantity,\r\n pieceWeight: Number(cheapestUpgradeMethod.baggageItemsWithSameParams[0].bagsWeight)\r\n }),\r\n price: Filters.price(cheapestUpgradeMethod.price, false)\r\n };\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getBaggageConfirmationDataForPopup(productPopup: api.ProductPopup): BaggageConfirmationData | undefined {\r\n const cheapestUpgradeMethod = this.getCheapestBaggageUpgradeMethod();\r\n const confirmBaggageData = this.getConfirmBaggage(productPopup);\r\n\r\n console.log('BaggageConfirmationData: cheapestUpgradeMethod=' + cheapestUpgradeMethod + ', brandChoiceType=' + this.brandChoiceType);\r\n\r\n if (cheapestUpgradeMethod) {\r\n if (cheapestUpgradeMethod.method == 'brand' || cheapestUpgradeMethod.method == 'customBaggage') {\r\n return {\r\n baggageData: confirmBaggageData,\r\n popup: productPopup\r\n };\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n public getBrandGroupsBillingPrice(): number {\r\n let total = 0;\r\n\r\n this.brandGroups.forEach((brandGroup) => {\r\n total += this.getFlightBillingPrice(brandGroup.selectedFlightId);\r\n });\r\n\r\n return total;\r\n }\r\n\r\n public getBrandGroupsBasePrice(): number {\r\n let total = 0;\r\n\r\n this.brandGroups.forEach((brandGroup) => {\r\n total += this.getFlightBasePrice(brandGroup.selectedFlightId);\r\n });\r\n\r\n return total;\r\n }\r\n\r\n public getBrandGroupsFee(): number {\r\n let total = 0;\r\n\r\n this.brandGroups.forEach((brandGroup) => {\r\n total += this.getFlightFee(brandGroup.selectedFlightId);\r\n });\r\n\r\n return total;\r\n }\r\n\r\n public upgradeBaggage() {\r\n const cheapestUpgradeMethod = this.getCheapestBaggageUpgradeMethod();\r\n\r\n if (cheapestUpgradeMethod) {\r\n if (cheapestUpgradeMethod.method == 'brand'\r\n && cheapestUpgradeMethod.firstFlightWithBaggage) {\r\n this.selectedFlightId = cheapestUpgradeMethod.firstFlightWithBaggage.uniqueId;\r\n } else if (cheapestUpgradeMethod.method == 'customBaggage'\r\n && cheapestUpgradeMethod.baggageItemsWithSameParams\r\n && cheapestUpgradeMethod.baggageItemsWithSameParams.length) {\r\n const flightBaggageOptions: string[] = [];\r\n const perPassengerBaggageOptions: string[] = [];\r\n\r\n cheapestUpgradeMethod.baggageItemsWithSameParams.forEach((baggageItem) => {\r\n if (baggageItem.perPassenger) {\r\n flightBaggageOptions.push('');\r\n perPassengerBaggageOptions.push(baggageItem.id);\r\n } else {\r\n flightBaggageOptions.push(baggageItem.id);\r\n perPassengerBaggageOptions.push('');\r\n }\r\n });\r\n\r\n this.baggageOptions = flightBaggageOptions;\r\n this.passengersForBaggage.forEach((passenger) => {\r\n passenger.baggageOptions = ([]).concat(perPassengerBaggageOptions);\r\n });\r\n }\r\n }\r\n }\r\n\r\n public getFlightBillingPrice(flightId: string): number {\r\n const flight = this.flights.find(f => f.uniqueId == flightId);\r\n\r\n if (flight) {\r\n return flight.billingPrice;\r\n } else {\r\n console.error('getFlightBillingPrice: flight not found ' + flightId);\r\n\r\n return 0;\r\n }\r\n }\r\n\r\n public getFlightBasePrice(flightId: string): number {\r\n const flight = this.flights.find(f => f.uniqueId == flightId);\r\n\r\n if (flight) {\r\n return flight.basePrice;\r\n } else {\r\n console.error('getFlightBasePrice: flight not found ' + flightId);\r\n\r\n return 0;\r\n }\r\n }\r\n\r\n public getFlightFee(flightId: string): number {\r\n const flight = this.flights.find(f => f.uniqueId == flightId);\r\n\r\n if (flight) {\r\n return flight.fee;\r\n } else {\r\n console.error('getFlightBasePrice: flight not found ' + flightId);\r\n\r\n return 0;\r\n }\r\n }\r\n public getDiscountAmount(){\r\n // let dateNow = Date.now();\r\n // if(this.couponDiscountAmount && this.couponDataExpiring - dateNow > 0){\r\n // return this.couponDiscountAmount;\r\n // } else{\r\n // this.couponDiscountAmount = 0;\r\n // return 0;\r\n // } \r\n return this.couponDiscountAmount;\r\n }\r\n public getTotalPrice(useCalculatedCleanSelectedProducts = false): number {\r\n let total = this.selectedFlightBillingPrice;\r\n total += this.getTotalPlacesPrice();\r\n\r\n total += this.getTotalProductsPrice(useCalculatedCleanSelectedProducts);\r\n\r\n total += this.getTotalSeatsPrice();\r\n\r\n total += this.customBaggagePrice;\r\n\r\n total -= this.getDiscountAmount();\r\n const pt = this.payment!.selectedPaymentType;\r\n\r\n if (pt) {\r\n total += this.payment!.selectedPaymentType.commission;\r\n }\r\n total -= this.payment!.bonusAmount;\r\n\r\n return total;\r\n }\r\n \r\n public getTotalSeatsPrice(): number {\r\n let total = 0;\r\n \r\n\r\n this.passengers.forEach(pass=>{\r\n if (pass.selectedFlightSeats){\r\n for (const seat in pass.selectedFlightSeats){\r\n if(pass.selectedFlightSeats[seat].price){\r\n total += pass.selectedFlightSeats[seat].price;\r\n } \r\n }\r\n }\r\n });\r\n\r\n return total;\r\n }\r\n\r\n public getTotalPlacesPrice(): number {\r\n let total = 0;\r\n\r\n if (this.trains.length) {\r\n this.trains.forEach((train) => {\r\n train.selectedCoach.selectedPlacesQueue.forEach((place) => {\r\n total += place.fare.amount;\r\n });\r\n });\r\n }\r\n\r\n return total;\r\n }\r\n\r\n public getTotalProductsPrice(useCalculatedCleanSelectedProducts = false): number {\r\n let total = 0;\r\n\r\n if (useCalculatedCleanSelectedProducts) {\r\n this.calculatedCleanSelectedProducts.forEach(p => {\r\n total += this.getProductPrice(p);\r\n });\r\n } else {\r\n this.selectedProducts.forEach(p => {\r\n total += this.getProductPrice(p);\r\n });\r\n }\r\n\r\n return total;\r\n }\r\n\r\n public hasSegmentAvaliableSeatMaps(flightCode: string) {\r\n for (let seatMapIndex = 0; seatMapIndex < this.seatMaps.length; seatMapIndex++) {\r\n const seatMap = this.seatMaps[seatMapIndex];\r\n if (seatMap.segmentFlightCode == flightCode) {\r\n for (let i = 0; i < seatMap.rows.length; i++) {\r\n for (let index = 0; index < seatMap.rows[i].seats.length; index++) {\r\n if (seatMap.rows[i].seats[index].available && seatMap.rows[i].seats[index].price > 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n } \r\n }\r\n \r\n return false;\r\n }\r\n\r\n public getChepestSeatInFlight(flightId: string) {\r\n const prices: number[] = [];\r\n \r\n this.flights.forEach(flight => {\r\n if (flight.uniqueId === this.selectedFlightId) {\r\n flight.seatMaps?.forEach(seatMap => {\r\n if (seatMap.segmentFlightCode == flightId) {\r\n seatMap.rows.forEach(row => {\r\n row.seats.forEach(seat => {\r\n if (seat.price > 0) {\r\n prices.push(seat.price);\r\n }\r\n });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n return Math.min(...prices);\r\n }\r\n\r\n public getMoneywallPrice() {\r\n return utils.Payment.calcMoneyWallPrice(this.getTotalPrice(), this.selectedFlight!.legs[0].segments[0].departureDate);\r\n }\r\n\r\n public getMoneywallTotalPrice() {\r\n return this.getMoneywallPrice() * 3;\r\n }\r\n\r\n public getPassengersCount(): flights.PassengersCount {\r\n return {\r\n adults: this.passengers.filter(passenger => passenger.type == api.PassengerType.adult).length,\r\n children: this.passengers.filter(passenger => passenger.type == api.PassengerType.child).length,\r\n infants: this.passengers.filter(passenger => passenger.type == api.PassengerType.infant).length\r\n };\r\n }\r\n\r\n public getProductPrice(product: ProductModel): number {\r\n return product.product.billingPrice;\r\n }\r\n\r\n public getProductByExternalId(externalId: string): ProductModel {\r\n return utils.find(this.products,\r\n (p: ProductModel) => {\r\n return p.product.externalId === externalId;\r\n });\r\n }\r\n\r\n public deleteOutOfStockFlight(outOfStockFlightId: string) {\r\n // Dot not delete last flight\r\n if (this.flights.length > 1) {\r\n let deleteFlightIndex: number | null = null;\r\n\r\n for (let i = 0; i < this.flights.length; i++) {\r\n if (this.flights[i].uniqueId === outOfStockFlightId) {\r\n deleteFlightIndex = i;\r\n break;\r\n }\r\n }\r\n\r\n // Select another flight if required\r\n if (deleteFlightIndex && deleteFlightIndex >= 0) {\r\n if (this.flights[deleteFlightIndex].uniqueId === this.selectedFlightId) {\r\n for (let i = 0; i < this.flights.length; i++) {\r\n if (this.flights[i].uniqueId !== this.flights[deleteFlightIndex].uniqueId) {\r\n this.selectedFlightId = this.flights[i].uniqueId;\r\n this.brandChoiceType = api.FlightBrandChoiceType.notSet;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Delete out of stock flight\r\n this.flights.splice(deleteFlightIndex, 1);\r\n }\r\n }\r\n }\r\n\r\n private buildPassengers(\r\n passengerCount: number,\r\n passengerType: api.PassengerType,\r\n citizenship: number,\r\n documentValidTillEnabled: boolean,\r\n validationConstraints: PassengerValidationConstraints\r\n ) {\r\n for (let i = 0; i < passengerCount; i++) {\r\n const passenger = new PassengerModel();\r\n\r\n passenger.index = this.passengers.length;\r\n passenger.type = passengerType;\r\n passenger.validationConstraints = validationConstraints;\r\n passenger.citizenship = citizenship;\r\n passenger.documentValidTillEnabled = documentValidTillEnabled;\r\n this.passengers.push(passenger);\r\n }\r\n }\r\n\r\n private buildPassengerConstraints(reservationConstraints: api.ReservationConstraints, passengerType: string): PassengerValidationConstraints {\r\n const result = new PassengerValidationConstraints();\r\n\r\n result.allowCyrillicDocumentNumber = reservationConstraints.allowCyrillicDocumentNumber;\r\n result.allowCyrillicName = reservationConstraints.allowCyrillicPassengerName;\r\n \r\n result.middleNameRequired = reservationConstraints.middleNameRequired;\r\n result.mileCardVisible = reservationConstraints.mileCardVisible;\r\n result.minDocumentValidTill = moment(reservationConstraints.lastFlightDate);\r\n result.requiredCitizenshipCountries = reservationConstraints.requiredCitizenshipCountries;\r\n result.orderFormNewDocumentNumberRuValidationEnabled = reservationConstraints.orderFormNewDocumentNumberRuValidationEnabled;\r\n result.documentPassportForeign = reservationConstraints.documents ? utils.find(reservationConstraints.documents,\r\n (item: api.ReservationDocuments) => item.nameDocument === 'PassportForeign') : null;\r\n result.documentPassportRu = reservationConstraints.documents ? utils.find(reservationConstraints.documents,\r\n (item: api.ReservationDocuments) => item.nameDocument === 'PassportRu') : null;\r\n result.documentBirthCertificate = reservationConstraints.documents ? utils.find(reservationConstraints.documents,\r\n (item: api.ReservationDocuments) => item.nameDocument === 'BirthCertificate') : null;\r\n result.documentOtherDocument = reservationConstraints.documents ? utils.find(reservationConstraints.documents,\r\n (item: api.ReservationDocuments) => item.nameDocument === 'OtherDocument') : null;\r\n \r\n if (Array.isArray(reservationConstraints.citizenshipConstraints)) {\r\n result.isRequiredCitizenshipConstrains = reservationConstraints.citizenshipConstraints.some((citizenship) => {\r\n return citizenship.type.toLowerCase() === 'required';\r\n });\r\n } else {\r\n result.isRequiredCitizenshipConstrains = false;\r\n }\r\n\r\n result.countriesCitizenshipConstrain = reservationConstraints.citizenshipConstraints \r\n ? reservationConstraints\r\n .citizenshipConstraints.reduce((countries: number[], value) => {\r\n countries.push(value.countryId);\r\n return countries;\r\n }, [])\r\n : [];\r\n \r\n\r\n switch (passengerType) {\r\n case 'adult':\r\n result.maxDateOfBirth = moment(reservationConstraints.maxAdultDateOfBirth);\r\n result.minDateOfBirth = moment(reservationConstraints.minAdultDateOfBirth);\r\n break;\r\n case 'child':\r\n result.maxDateOfBirth = moment(reservationConstraints.maxChildDateOfBirth);\r\n result.minDateOfBirth = moment(reservationConstraints.minChildDateOfBirth);\r\n break;\r\n case 'infant':\r\n result.maxDateOfBirth = moment(reservationConstraints.maxInfantDateOfBirth);\r\n result.minDateOfBirth = moment(reservationConstraints.minInfantDateOfBirth);\r\n break;\r\n }\r\n\r\n return result;\r\n }\r\n \r\n public resetAllSelectedSeats() {\r\n if (Object.keys(this.flatSelectedSeats)?.length) {\r\n this.passengers.forEach(pass => {\r\n for (const seat in pass.selectedFlightSeats) delete pass.selectedFlightSeats[seat];\r\n });\r\n for (const seat in this.flatSelectedSeats) delete this.flatSelectedSeats[seat];\r\n }\r\n }\r\n\r\n public resetAllSelectedBaggage() {\r\n if (this.selectedFlight\r\n && this.selectedFlight.customBaggage\r\n && this.selectedFlight.customBaggage.options\r\n && this.selectedFlight.customBaggage.options.length) {\r\n const newBaggageIdsPerPassenger: string[] = [];\r\n const newBaggageIds: string[] = [];\r\n\r\n this.selectedFlight.customBaggage.options.forEach((option) => {\r\n if (option.baggageOptions && option.baggageOptions.length) {\r\n const selectedOption = option.baggageOptions.find(x => x.selected);\r\n if (option.baggageOptions[0].perPassenger) {\r\n newBaggageIdsPerPassenger.push(selectedOption ? selectedOption.id : option.baggageOptions[0].id);\r\n newBaggageIds.push('');\r\n } else {\r\n newBaggageIdsPerPassenger.push('');\r\n newBaggageIds.push(selectedOption ? selectedOption.id : option.baggageOptions[0].id);\r\n }\r\n } else {\r\n newBaggageIds.push('');\r\n newBaggageIdsPerPassenger.push('');\r\n }\r\n });\r\n this.passengersForBaggage.forEach((passenger) => {\r\n passenger.baggageOptions = ([]).concat(newBaggageIdsPerPassenger);\r\n });\r\n this.baggageOptions = newBaggageIds;\r\n }\r\n }\r\n\r\n public selectCustomBaggageByQueryParam(value: string) {\r\n // [places]-[weight]-[price]\r\n if (!/^\\d*-\\d*-\\d*$/.test(value)) { return; }\r\n\r\n\r\n if (this.selectedFlight\r\n && this.selectedFlight.customBaggage\r\n && this.selectedFlight.customBaggage.options\r\n && this.selectedFlight.customBaggage.options.length) {\r\n const paramParts = value.split('-');\r\n const newBaggageIdsPerPassenger: string[] = [];\r\n const newBaggageIds: string[] = [];\r\n\r\n this.selectedFlight.customBaggage.options.forEach((option) => {\r\n if (option.baggageOptions && option.baggageOptions.length) {\r\n const matchedBaggageOption = option.baggageOptions.find(\r\n baggageOption => baggageOption.bagsQuantity == Number(paramParts[0])\r\n && baggageOption.bagsWeight == paramParts[1]\r\n && Math.floor(baggageOption.price) <= Number(paramParts[2])\r\n );\r\n\r\n if (option.baggageOptions[0].perPassenger) {\r\n newBaggageIdsPerPassenger.push(\r\n matchedBaggageOption\r\n ? matchedBaggageOption.id\r\n : option.baggageOptions[0].id\r\n );\r\n newBaggageIds.push('');\r\n } else {\r\n newBaggageIdsPerPassenger.push('');\r\n newBaggageIds.push(\r\n matchedBaggageOption\r\n ? matchedBaggageOption.id\r\n : option.baggageOptions[0].id\r\n );\r\n }\r\n } else {\r\n newBaggageIds.push('');\r\n newBaggageIdsPerPassenger.push('');\r\n }\r\n });\r\n this.passengersForBaggage.forEach((passenger) => {\r\n passenger.baggageOptions = ([]).concat(newBaggageIdsPerPassenger);\r\n });\r\n this.baggageOptions = newBaggageIds;\r\n }\r\n }\r\n\r\n static getTicketUrl(reservation: api.ReservationInfo, passenger: api.PassengerInfo): string {\r\n return `/go/flights/tickets/${reservation.reservationPublicId}/${passenger.passengerId}`;\r\n }\r\n\r\n static getAllTicketsUrl(reservation: api.ReservationInfo): string {\r\n return `/go/flights/tickets/${reservation.reservationPublicId}`;\r\n }\r\n\r\n static getReceiptUrl(reservation: api.ReservationInfo): string {\r\n return `/go/flights/receipt/${reservation.reservationPublicId}`;\r\n }\r\n\r\n getMarkerOwner() {\r\n return utils.Cookies.getMarkerOwner();\r\n }\r\n}\r\n\r\nexport class ContactsModel {\r\n email = '';\r\n phone = '';\r\n\r\n constructor(contactEmail: string, contactPhone: string) {\r\n this.email = contactEmail;\r\n this.phone = contactPhone;\r\n }\r\n}\r\n\r\nexport class PaymentTypeModel {\r\n paymentTypeId: string;\r\n kind: string;\r\n commission: number;\r\n isDirectPayment: boolean;\r\n paymentTypeOptions: any;\r\n selected: boolean;\r\n\r\n constructor(paymentType: api.PaymentTypeDesc) {\r\n this.paymentTypeId = paymentType.paymentTypeId;\r\n this.kind = paymentType.kind;\r\n this.commission = paymentType.commission;\r\n this.isDirectPayment = paymentType.isDirectPayment;\r\n this.paymentTypeOptions = paymentType.paymentTypeOptions;\r\n this.selected = false;\r\n }\r\n}\r\n"],"sourceRoot":""}