{"version":3,"sources":["components/ExchangeMessage/index.js","auth/auth0-variables.js","auth/AuthService.js","components/CMS/Paragraph/Paragraph.js","pages/index.js","styled/constants.js","utils/fetcher.js","utils/types.js","pages/NotFound/NotFound.styled.js","pages/NotFound/NotFound.page.js","pages/NotFound/index.js","reducers/global.reducer.js","reducers/siteConfiguration.reducer.js","reducers/searchCars.reducer.js","reducers/bookings.reducer.js","reducers/infractions.reducer.js","reducers/user.reducer.js","store.js","reducers/index.js","utils/userFetcher.js","components/assets/arrow.png","sections/home/HeroBanner/HeroBanner.styled.js","sections/home/HeroBanner/HeroBanner.prop.js","sections/home/HeroBanner/HeroBanner.styled.modern.js","sections/home/HeroBanner/index.js","sections/home/HeroBanner/HeroBanner.js","sections/home/Slider/SliderComponent.prop.js","sections/home/Slider/SliderComponent.styled.js","sections/home/Slider/SliderComponent.js","sections/home/Slider/index.js","sections/home/Promociones/Promociones.props.js","sections/home/Promociones/Promotions.styled.js","sections/home/Promociones/Promotions.styled.modern.js","sections/home/Promociones/Promociones.js","sections/home/Promociones/index.js","sections/home/PagaEnCuotas/PagaEnCuotas.props.js","sections/home/PagaEnCuotas/Default/index.styles.js","sections/home/PagaEnCuotas/Default/index.js","sections/home/PagaEnCuotas/Modern/index.styles.js","sections/home/PagaEnCuotas/Modern/index.js","sections/home/PagaEnCuotas/PagaEnCuotas.js","sections/home/PagaEnCuotas/index.js","sections/home/Flota/Flota.props.js","sections/home/Flota/Default/index.styled.js","sections/home/Flota/FlotaItem/Default/index.js","sections/home/Flota/FlotaItem/FlotaItem.props.js","sections/home/Flota/FlotaItem/Modern/index.js","sections/home/Flota/FlotaItem/FlotaItem.js","sections/home/Flota/Default/index.js","sections/home/Flota/Modern/index.styled.js","sections/home/Flota/Modern/index.js","sections/home/Flota/Flota.js","sections/home/Flota/index.js","sections/home/CalidadServicio/calidadServicio.props.js","sections/home/CalidadServicio/calidadServicio.styled.js","sections/home/CalidadServicio/calidadServicio.styled.modern.js","sections/home/CalidadServicio/CalidadServicio.js","sections/home/CalidadServicio/index.js","sections/home/CallToAction/CallToAction.styled.js","sections/home/CallToAction/CallToAction.props.js","sections/home/CallToAction/index.js","sections/home/CallToAction/CallToAction.js","sections/home/Testimonies/Testimonies.props.js","sections/home/Testimonies/Testimonies.styled.js","sections/home/Testimonies/Testimonies.js","sections/home/Testimonies/index.js","sections/promociones/PromocionesSection/PromocionesSection.props.js","sections/promociones/PromocionesSection/PromocionesSection.styled.js","sections/promociones/PromocionesSection/PromocionesSection.styled.modern.js","sections/promociones/PromocionesSection/PromocionesSection.js","sections/promociones/PromocionesSection/index.js","sections/servicios/ServiciosSection/ServiceItem.styled.js","sections/servicios/ServiciosSection/ServiceItem.styled.modern.js","sections/servicios/ServiciosSection/ServiceItem.js","sections/servicios/ServiciosSection/ServiciosSection.styled.js","sections/servicios/ServiciosSection/ServiciosSection.styled.modern.js","sections/servicios/ServiciosSection/ServiciosSection.js","sections/servicios/ServiciosSection/index.js","sections/landing/LandingSection/LandingSection.styled.js","sections/landing/LandingSection/LandingSection.props.js","sections/landing/LandingSection/LandingSection.styled.modern.js","sections/landing/LandingSection/LandingSection.js","sections/landing/LandingSection/index.js","sections/contacts/ContactSection/ContactSection.styled.js","sections/contacts/ContactSection/ContactSection.styled.modern.js","sections/contacts/ContactSection/ContactSection.js","sections/contacts/ContactSection/index.js","sections/payment/mercadoPago/MercadoPagoSection.styled.js","sections/payment/mercadoPago/MercadoPagoSection.js","sections/payment/mercadoPago/index.js","actions/infractions.actions.js","sections/payment/credomatic/CredomaticSection.styled.js","sections/payment/basePaymentComponent/BasePaymentSection.js","sections/payment/credomatic/CredomaticSection.js","sections/payment/credomatic/index.js","sections/payment/promerica/PromericaSection.styled.js","services/promericaService.js","sections/payment/promerica/PromericaSection.js","sections/payment/promerica/index.js","sections/payment/paypal/PaypalButton.js","sections/payment/paypal/PaypalSection.styled.js","sections/payment/paypal/PaypalSection.js","sections/payment/transbank/TransbankSection.styled.js","sections/payment/transbank/TransbankSection.js","sections/payment/transbank/Transbank.js","sections/payment/prisma/PrismaSection.styled.js","sections/payment/prisma/PrismaSection.js","sections/payment/prisma/index.js","sections/payment/creditcard-confirmation/CreditCardConfirmationSection.styled.js","sections/payment/creditcard-confirmation/CreditCardConfirmationSection.js","sections/payment/creditcard-confirmation/index.js","sections/payment/stripe/StripeSection.styled.js","sections/payment/stripe/CheckoutForm.js","sections/payment/stripe/StripeSection.js","sections/payment/stripe/StripeSuccess.js","sections/payment/fiservIpg/FiservIpgSection.styled.js","sections/payment/fiservIpg/FiservIpgSection.js","sections/payment/fiservIpg/index.js","sections/payment/poynt/PoyntCollect.js","sections/payment/poynt/PoyntSection.styled.js","sections/payment/poynt/PoyntSection.js","sections/payment/cecabank/CecabankSection.styled.js","sections/payment/cecabank/CecabankSection.js","sections/payment/cecabank/CecabankSuccess.js","sections/payment/cecabank/CecabankFail.js","sections/payment/globalPaymentsGenius/GeniusSection.styled.js","sections/payment/globalPaymentsGenius/GeniusSection.js","sections/payment/globalPaymentsGenius/index.js","sections/payment/redsys/RedsysSection.styled.js","sections/payment/redsys/RedsysSection.js","sections/payment/redsys/RedsysSuccess.js","sections/payment/redsys/RedsysFail.js","sections/payment/paymentOptions/PaymentOptionsSection.styled.js","sections/payment/paymentOptions/PaymentOptionsSection.js","utils/PaymentMethodHelper.js","sections/payment/onlinePayment/index.js","sections/payment/onlinePayment/OnlinePaymentSection.js","sections/cancel/CancelSection/CancelSection.styled.js","sections/cancel/CancelSection/CancelSection.js","sections/cancel/CancelSection/index.js","sections/flota/FlotaSection/FlotaSection.styled.js","sections/flota/FlotaSection/FlotaBigItem.styled.js","sections/flota/FlotaSection/FlotaBigItem.styled.modern.js","sections/flota/FlotaSection/FlotaBigItem.js","sections/flota/FlotaSection/FlotaSection.styled.modern.js","sections/flota/FlotaSection/FlotaSection.js","sections/flota/FlotaSection/index.js","sections/franchise/FranchiseSection.styled.js","sections/franchise/FranchiseSection.js","sections/franchise/index.js","sections/payment/booking/BookingSection.js","sections/payment/booking/index.js","sections/payment/wrapper/OnlinePaymentWrapper.js","sections/payment/wrapper/index.js","sections/payment/detail/BookingDetails.styled.js","sections/payment/detail/BookingDetailSection.js","sections/payment/detail/index.js","sections/payment/infraction/InfractionDetails.styled.js","sections/payment/infraction/InfractionDetailSection.js","sections/payment/toll/TollDetailSection.styled.js","sections/payment/toll/TollDetailSection.js","sections/payment/feedbackbox/FeedbackBox.js","sections/condiciones/CondicionesSection/CondicionesSection.styled.js","sections/condiciones/CondicionesSection/CondicionesSection.styled.modern.js","sections/condiciones/CondicionesSection/CondicionesSection.props.js","sections/condiciones/CondicionesSection/CondicionesSection.js","sections/condiciones/CondicionesSection/index.js","sections/associates/AssociatesSection.styled.js","sections/associates/AssociatesSection.js","sections/photolink/PhotoLinkSection/PhotoLinkSection.styled.js","sections/photolink/PhotoLinkSection/PhotoLinkSection.js","sections/photolink/PhotoLinkSection/index.js","sections/search/SearchFilter/SearchFilter.prop.js","sections/search/SearchFilter/SearchFilter.styled.js","sections/search/SearchFilter/SearchFilter.styled.modern.js","sections/search/SearchFilter/SearchFilter.js","sections/search/SearchFilter/index.js","sections/search/SearchItems/SearchItems.prop.js","sections/search/SearchItems/SearchItems.styled.js","sections/search/SearchItems/SearchItemRow/SearchItemRow.props.js","sections/search/SearchItems/SearchItemRow/Default/index.styled.js","sections/search/SearchItems/SearchItemRow/Default/index.js","sections/search/SearchItems/SearchItemRow/Modern/index.styled.js","sections/search/SearchItems/SearchItemRow/Modern/index.js","sections/search/SearchItems/SearchItemRow/SearchItemRow.js","sections/search/SearchItems/SearchItems.styled.modern.js","sections/search/SearchItems/SearchItems.js","sections/search/SearchItems/index.js","sections/checkout/CheckoutAdditionals/CheckoutAdditionals.props.js","sections/checkout/CheckoutAdditionals/CheckoutAdditionals.styled.js","sections/checkout/CheckoutAdditionals/AdditionalRow.js","sections/checkout/CheckoutAdditionals/CheckoutAdditionals.style.modern.js","sections/checkout/CheckoutAdditionals/AdditionalCard.js","sections/checkout/CheckoutAdditionals/CheckoutAdditionals.js","utils/debounceHelper.js","sections/checkout/CheckoutAdditionals/index.js","sections/checkout/CheckoutDetails/CheckoutDetails.props.js","sections/checkout/CheckoutDetails/CheckoutDetails.styled.js","sections/checkout/CheckoutDetails/CheckoutDetails.styled.modern.js","sections/checkout/CheckoutDetails/CheckoutDetails.js","sections/checkout/CheckoutDetails/index.js","sections/checkout/CheckoutMobileDetails/CheckoutMobileDetails.props.js","sections/checkout/CheckoutMobileDetails/CheckoutMobileDetails.styled.js","sections/checkout/CheckoutMobileDetails/CheckoutMobileDetails.styled.modern.js","sections/checkout/CheckoutMobileDetails/CheckoutMobileDetails.js","sections/checkout/CheckoutMobileDetails/index.js","sections/checkout/CheckoutFilter/CheckoutFilter.props.js","sections/checkout/CheckoutFilter/CheckoutFilter.styled.js","sections/checkout/CheckoutFilter/CheckoutFilter.styled.modern.js","sections/checkout/CheckoutFilter/CheckoutFilter.js","sections/checkout/CheckoutFilter/index.js","sections/bookingResponse/BookingSuccess/BookingSuccess.props.js","sections/bookingResponse/BookingSuccess/BookingSuccess.styled.js","sections/bookingResponse/BookingSuccess/BookingSuccess.js","sections/bookingResponse/BookingSuccess/index.js","services/api.js","SettingsContext.js","components/Title/Title.props.js","utils/googleTagsHelper.js","assets/images/user.svg","actions/user.actions.js","components/TranslatedComponent/index.js","components/TranslatedComponent/TranslatedComponent.js","components/CompositeComponent/CompositeComponent.js","components/CompositeComponent/index.js","components/PagesBase/BasePage/BasePage.props.js","components/PagesBase/BasePage/BasePage.js","components/PagesBase/BasePage/index.js","components/AccordionCard/AccordionCard.props.js","components/AccordionCard/AccordionCard.styled.js","components/AccordionCard/AccordionCard.styled.modern.js","components/AccordionCard/AccordionCard.js","components/AccordionCard/index.js","components/Btn/Btn.props.js","components/Btn/Btn.styled.js","components/Btn/Btn.styled.modern.js","components/Btn/Btn.js","components/Btn/index.js","components/NavBar/NavBar.props.js","components/NavBar/NavBar.styled.js","components/NavBar/NavBar.styled.modern.js","components/NavBar/NavBar.js","components/NavBar/index.js","components/logo/Logo.props.js","components/logo/Logo.styled.js","components/logo/Logo.js","components/logo/index.js","components/TranslatedLink/TranslatedLink.js","components/TranslatedLink/index.js","components/NavBarHeader/NavBarHeader.props.js","components/NavBarHeader/NavBarHeader.styled.js","components/CurrenciesDropdown/CurrenciesDropdown.styled.js","components/CurrenciesDropdown/CurrenciesDropdown.js","components/CurrenciesDropdown/index.js","components/NavBarHeader/NavBarHeader.js","components/NavBarHeader/index.js","components/TopBar/TopBar.props.js","components/TopBar/TopBar.styled.js","components/SocialList/SocialList.props.js","components/SocialList/SocialList.styled.js","components/SocialList/SocialList.styled.modern.js","assets/images/logos/tiktok.svg","assets/images/logos/x.svg","assets/images/logos/linkedin.svg","assets/images/logos/tripadvisor.svg","components/SocialList/SocialList.js","components/SocialList/index.js","components/TopBar/TopBar.js","components/TopBar/index.js","components/Header/header.props.js","components/Header/header.styled.js","components/Header/header.styled.modern.js","components/Header/HeaderItem.js","components/Header/HeaderSlogan.js","components/Header/Header.js","components/Header/index.js","components/Footer/Footer.props.js","components/Footer/Footer.styled.js","components/Footer/Footer.js","components/Footer/index.js","components/Footer/RentlyFooter.styled.js","components/Footer/RentlyFooter.styled.modern.js","components/Footer/RentlyFooter.js","components/LinkList/LinkList.props.js","components/LinkList/LinkList.styled.js","components/LinkList/index.js","components/LinkList/LinkList.js","components/Loading/SectionLoading/Loading.props.js","components/Loading/SectionLoading/Loading.styled.js","components/Loading/SectionLoading/Loading.js","components/Loading/PageLoading/PageLoading.js","components/Loading/PageLoading/PageLoading.props.js","components/Title/Title.styled.js","components/Title/Title.js","components/Title/index.js","components/Loading/CustomLoading/CustomLoading.props.js","components/Loading/CustomLoading/CustomLoading.js","components/Loading/index.js","components/CheckBoxInput/CheckboxInput.props.js","components/CheckBoxInput/CheckboxInput.styled.js","components/CheckBoxInput/CheckboxInput.styled.modern.js","components/CheckBoxInput/CheckboxInput.js","components/CheckBoxInput/index.js","components/DateInput/DateInput.props.js","components/DateInput/DateInput.styled.js","components/date-picker/DatePicker.props.js","components/date-picker/DatePicker.js","components/DateInput/index.js","components/DateInput/DateInput.js","components/RangeDateInput/RangeDateInput.props.js","components/RangeDateInput/RangeDateInput.styled.js","components/range-date-picker/RangeDatePicker.js","components/range-date-picker/RangeDatePicker.props.js","components/RangeDateInput/index.js","components/RangeDateInput/RangeDateInput.js","components/TextInput/TextInput.props.js","components/TextInput/TextInput.styled.js","components/TextInput/TextInput.styled.modern.js","components/TextInput/index.js","components/TextInput/TextInput.js","components/TextareaInput/TextAreaInput.props.js","components/TextareaInput/TextAreaInput.styled.js","components/TextareaInput/index.js","components/TextareaInput/TextAreaInput.js","components/NumberInput/NumberInput.props.js","components/NumberInput/NumberInput.styled.js","components/NumberInput/index.js","components/NumberInput/NumberInput.js","components/SelectInput/SelectInput.props.js","components/SelectInput/SelectInput.styled.js","components/SelectInput/SelectInput.styled.modern.js","components/SelectInput/SelectInput.js","components/SelectInput/index.js","components/CompanyInfo/CompanyInfo.props.js","components/CompanyInfo/CompanyInfo.styled.js","components/CompanyInfo/index.js","components/CompanyInfo/CompanyInfo.js","components/LangDropdown/langDropdown.props.js","components/LangDropdown/langDropdown.styled.js","components/LangDropdown/LangDropdown.js","components/Breadcrumb/BreadcrumbItem.props.js","components/Breadcrumb/BreadcrumbItem.js","components/Breadcrumb/Breadcrumb.props.js","components/Breadcrumb/Breadcrumb.styled.js","components/Breadcrumb/Breadcrumb.js","components/Breadcrumb/index.js","components/PageTitle/PageTitle.props.js","components/PageTitle/PageTitle.styled.js","components/PageTitle/index.js","components/PageTitle/PageTitle.js","components/ParallaxSection/ParallaxSection.js","components/ParallaxSection/index.js","components/CMS/Columns/ColumnsSection.js","components/CMS/Image/Image.js","components/CMS/Separator/SeparatorComponent.js","components/CMS/Columns/ColumnComponent.js","components/CMS/Icon/Icon.js","components/CMS/CustomHTML/CustomHTML.js","components/CMS/index.js","components/CustomerCarrousel/CustomerCarrousel.styled.js","components/CustomerCarrousel/CustomerCarrousel.styled.modern.js","components/CustomerCarrousel/CustomerCarrousel.js","components/CustomerCarrousel/index.js","components/ContactList/ContactList.js","components/ContactList/index.js","components/CancelModal/CancelModal.styled.js","components/CancelModal/CancelModal.props.js","components/CancelModal/CancelModal.js","components/CancelModal/index.js","components/ContactForm/ContactForm.styled.js","components/ContactForm/ContactForm.styled.modern.js","components/ContactForm/ContactForm.js","components/ContactForm/index.js","components/QuoteForm/QuoteForm.styled.js","components/QuoteForm/QuoteForm.js","components/QuoteForm/index.js","components/CancelForm/CancelForm.js","components/CancelForm/index.js","components/PagesBase/PageWithTitle/PageWithTitle.props.js","components/PagesBase/PageWithTitle/PageWithTitle.styled.js","styled/page.js","components/PagesBase/PageWithTitle/PageWithTitle.js","components/PagesBase/PageWithTitle/index.js","components/BaseLayout/BaseLayout.js","components/AfipLogo/AfipLogo.js","components/AfipLogo/index.js","components/GoDaddyLogo/GoDaddyLogo.js","components/GoDaddyLogo/index.js","components/McAfeeLogo/McAfee.js","components/McAfeeLogo/index.js","components/SearchBoxPlace/SearchBoxPlace.props.js","components/SearchBoxPlace/SearchBoxPlace.styled.js","components/SearchBoxPlace/SearchBoxPlace.js","components/SearchBoxPlace/index.js","utils/branchOfficeHelper.js","components/SearchForm/Vertical/index.styled.js","components/SearchForm/Vertical/index.js","components/SearchForm/Horizontal/index.styled.js","components/SearchForm/Horizontal/index.js","components/SearchForm/Luxury/index.styled.js","components/SearchForm/Luxury/index.js","components/SearchForm/SearchForm.js","components/SearchForm/index.js","components/SearchFormWhatsApp/SearchFormWhatsApp.styled.js","components/SearchFormWhatsApp/SearchFormWhatsApp.js","components/SearchFormWhatsApp/index.js","components/CategoriesFilter/CategoriesFilter.styled.js","components/CategoriesFilter/CategoriesFilter.styled.modern.js","components/CategoriesFilter/CategoriesFilter.js","components/CategoriesFilter/index.js","components/SearchMap/SearchMap.styled.js","components/SearchMap/SearchMap.js","components/SearchMap/index.js","assets/images/cars/details/person.svg","assets/images/cars/details/luggage-lg.svg","assets/images/cars/details/luggage-xs.svg","assets/images/cars/details/caja.svg","assets/images/cars/details/airconditioner.svg","assets/images/cars/details/abs.svg","assets/images/cars/details/direction.svg","assets/images/cars/details/airbug.svg","components/ModelDetail/Default/index.js","assets/modern/images/cars/details/person.svg","assets/modern/images/cars/details/luggage-lg.svg","assets/modern/images/cars/details/luggage-xs.svg","assets/modern/images/cars/details/caja.svg","assets/modern/images/cars/details/speed.svg","components/ModelDetail/Modern/index.js","components/ModelDetail/ModelDetail.js","components/ModelDetail/index.js","components/NumberDisplay/NumberDisplay.js","components/NumberDisplay/index.js","components/paymentMethods/PaymentMethods.styled.js","components/paymentMethods/PaymentMethods.styled.modern.js","components/paymentMethods/PaymentMethods.js","components/paymentMethods/index.js","components/PromotionModal/PromotionModal.styled.js","components/PromotionModal/PromotionModal.js","components/PromotionModal/index.js","components/OurPeople/OurPeople.styled.js","components/OurPeople/OurPeople.js","components/OurPeople/index.js","components/RelatedRoutes/RelatedRoutes.js","components/RelatedRoutes/index.js","components/RegisterForm/RegisterForm.styled.js","components/RegisterForm/RegisterForm.styled.modern.js","components/RegisterForm/RegisterForm.js","components/RegisterForm/index.js","components/RegisterCompanyForm/RegisterCompanyForm.styled.js","components/RegisterCompanyForm/RegisterCompanyForm.styled.modern.js","components/RegisterCompanyForm/RegisterCompanyForm.js","components/RegisterCompanyForm/index.js","components/LoginForm/LoginForm.props.js","components/LoginForm/LoginForm.styled.js","components/LoginForm/LoginForm.styled.modern.js","components/LoginForm/LoginForm.js","components/LoginForm/index.js","components/Card/Card.props.js","components/Card/Card.styled.js","components/Card/Card.js","components/Card/index.js","components/AccountPrivateRoute/index.js","components/AccountPrivateRoute/AccountPrivateRoute.js","components/BookingPreview/BookingPreview.props.js","components/BookingPreview/BookingPreview.styled.js","components/BookingPreview/BookingPreview.js","components/BookingPreview/index.js","components/CustomAlert/CustomAlert.props.js","components/CustomAlert/CustomAlert.styled.js","components/CustomAlert/CustomAlert.styled.modern.js","components/CustomAlert/CustomAlert.js","components/CustomAlert/index.js","components/MyAccountNavLink/MyAccountNavLink.styled.js","components/MyAccountNavLink/MyAccountNavLink.style.modern.js","components/MyAccountNavLink/MyAccountNavLink.props.js","components/MyAccountNavLink/MyAccountNavLink.js","components/MyAccountNavLink/index.js","components/BookingStatus/BookingStatus.styled.js","components/BookingStatus/BookingStatus.js","components/BookingStatus/index.js","components/CancelConfirmationModal/CancelConfirmationModal.styled.js","components/CancelConfirmationModal/CancelConfirmationModal.props.js","components/CancelConfirmationModal/CancelConfirmationModal.js","components/CancelConfirmationModal/index.js","components/ReviewsCarousel/ReviewsCarousel.props.js","components/ReviewsCarousel/ReviewsCarousel.styled.js","components/ReviewsCarousel/ReviewsCarousel.js","components/ReviewsCarousel/index.js","components/ForgotPasswordForm/ForgotPasswordForm.styled.js","components/ForgotPasswordForm/ForgotPasswordForm.styled.modern.js","components/ForgotPasswordForm/ForgotPasswordForm.js","components/ForgotPasswordForm/index.js","components/ResetPasswordForm/ResetPasswordForm.styled.js","components/ResetPasswordForm/ResetPasswordForm.styled.modern.js","components/ResetPasswordForm/ResetPasswordForm.js","components/ResetPasswordForm/index.js","components/FloatingWhatsapp/FloatingWhatsapp.styled.js","components/FloatingWhatsapp/index.js","components/FloatingWhatsapp/FloatingWhatsapp.props.js","components/FloatingWhatsapp/FloatingWhatsapp.js","components/BackToTopButton/BackToTopButton.props.js","components/BackToTopButton/BackToTopButton.styled.js","components/BackToTopButton/index.js","components/BackToTopButton/BackToTopButton.js","components/CookiesConsent/CookiesConsent.styled.js","components/CookiesConsent/index.js","components/CookiesConsent/CookiesConsent.props.js","components/CookiesConsent/CookiesConsent.js","components/PreHeader/PreHeader.styled.js","components/PreHeader/ContactCard/PreHeaderContactCard.js","components/PreHeader/PreHeader.js","components/PreHeader/index.js","components/HubspotForm/index.js","components/HubspotForm/HubspotForm.props.js","components/HubspotForm/HubspotForm.js","actions/siteConfiguration.actions.js","actions/searchCar.actions.js","services/userCompanyService.js","utils/priceHelper.js","utils/dataHelper.js","utils/storage.js","styled/theme.js","components/PrivateRoute/PrivateRoute.js","utils/constants.js","utils/jsonMocks/site-config.json","utils/jsonMocks/site-config-modern.json","utils/jsonMocks/search-response.json","utils/jsonMocks/checkout-response.json","utils/jsonMocks/list-categories.json","utils/jsonMocks/list-holidays.json","utils/jsonMocks/get-attention-schedules.json","utils/jsonMocks/list-places.json","utils/jsonMocks/list-countries.json","utils/jsonMocks/list-cities.json","utils/jsonMocks/promotions.json","utils/jsonMocks/list-additionals.json","utils/jsonMocks/additionals-price.json","utils/jsonMocks/price.json","utils/jsonMocks/book.json","utils/jsonMocks/list-languages-info.json","utils/jsonMocks/list-currencies.json","utils/jsonMocks/list-document-type.json","utils/documentHelper.js","utils/jsonMocks/profile.json","utils/jsonMocks/user-infractions.json","utils/jsonMocks/user-bookings.json","components/CMS/ScriptComponent/ScriptComponent.js","actions/global.actions.js","sections/payment/partialPayWarning/index.js","services/userService.js","utils/windowHelper.js","actions/bookings.actions.js","utils/translationHelper.js","utils/categoryGroupHelper.js","App.container.styled.js","App.container.styled.modern.js","App.container.js","App.js","serviceWorker.js","i18n.js","index.js"],"names":["withTranslation","defaultCurrency","currentCurrency","chargedMsg","chargedMsg2","t","firstLine","tt","secondLine","exchangeMessage","defaultCurrencyIsoCode","exchangeCurrencyIsoCode","exchangeRate","exchangeAmount","parseFloat","toFixed","getExchangeMessage","isoCode","className","color","bold","AUTH_CONFIG","process","AuthService","auth0","WebAuth","domain","clientID","redirectUri","window","location","origin","audience","responseType","scope","this","login","bind","logout","handleAuthentication","isAuthenticated","getAccessToken","getIdToken","renewSession","authorize","parseHash","err","authResult","accessToken","idToken","setSession","history","replace","alert","error","localStorage","getItem","Error","setItem","scopes","requestedScopes","expiresAt","expiresIn","Date","getTime","JSON","stringify","checkSession","error_description","removeItem","returnTo","parse","grantedScopes","split","every","includes","StyledParagraph","style","p","props","theme","font","colors","primary","italic","weight","fontSize","lineHeight","ParagraphComponent","text","noMedia","nonTranslate","varText","undefined","indexOf","routerProps","state","dangerouslySetInnerHTML","__html","children","TranslatedComponent","propTypes","THIRD","INPUT_BORDER_COLOR","MODERN_THEME","Fetcher","apiInstance","axios","config","headers","dispatch","headersArray","Object","keys","length","forEach","prop","value","append","endpoint","needsAuthentication","get","getConfig","payload","post","data","put","delete","addAuthHeader","GLOBAL_SET_LIST_PLACES","GLOBAL_SET_LIST_CATEGORIES","GLOBAL_SET_LIST_PROMOTIONS","GLOBAL_SET_LIST_ADDITIONALS","GLOBAL_SET_LIST_HOLIDAYS","GLOBAL_SET_LIST_SCHEDULES","GLOBAL_SET_LIST_LANGUAGES","GLOBAL_SET_LIST_CURRENCIES","GLOBAL_SET_LIST_LANGUAGES_INFO","GLOBAL_SET_LIST_COUNTRIES","GLOBAL_SET_LIST_CITIES","GLOBAL_SET_LIST_DOCUMENT_TYPES","GLOBAL_SET_LIST_FISCAL_CONDITIONS","GLOBAL_SET_GENERAL_SETTINGS","GLOBAL_SET_SPINNER","GLOBAL_SET_WEB_CURRENCY","CHANGE_CURRENCY","SITE_CONFIGURATION_SET_SETTINGS","SEARCH_CARS_SET_CARS","SEARCH_CARS_SET_PARAMS","SEARCH_CARS_SET_CHECKOUT","BOOKING_SET_BOOK","BOOKING_SET_ADDITIONALS","SET_BOOKING_PAY_INSTALLMENT","BOOKING_SET_CONFIGURATION","BOOKING_GET_ATTACHMENTS","BOOKING_ADD_ATTACHMENTS","SET_INFRACTION","SET_INFRACTION_PAY_INSTALLMENT","LOG_IN","LOG_OUT","GET_USER_BOOKINGS","GET_USER_FILES","UPLOAD_USER_FILES","GET_USER_INFRACTIONS","UPDATE_PROFILE","RESET_PASSWORD","StyledNotFound","section","NotFoundPage","configurations","settings","document","title","id","type","Component","connect","siteConfiguration","NotFound","INITIAL_STATE","listPlaces","listCategories","listPromotions","listAdditionals","listSchedules","listHolidays","listCurrencies","listLanguages","listLanguagesInfo","listCountries","listCities","listDocumentTypes","listFiscalConditions","currentLanguage","spinner","generalSettings","webCurrency","action","find","currency","isSystemDefault","START_DATE","moment","add","cars","params","categories","pickUp","hour","dropOff","customPromotionCode","checkout","booking","prices","loading","confirmation","installment","configuration","bookingAttachments","infraction","current","profile","userBookings","userInfractions","userFiles","createBrowserHistory","middlewares","thunk","routerMiddleware","composeEnhancers","compose","createStore","combineReducers","router","connectRouter","global","searchCars","bookings","infractions","user","applyMiddleware","UserFetcher","credentials","Accept","module","exports","StyledHeroBanner","background","screens","xl","fontWeight","titleColor","secondary","PropTypes","string","any","bool","func","StyledHeroBannerModern","HeroBanner","withSettingsContext","backgroundAlt","mobileBackground","noParallax","showSecondColumn","secondColumnConfig","columnSeparation","setParallax","contentPosition","setContentPosition","StyledSection","template","isMobile","useWindowDimensions","width","sections","array","object","StyledLazyLoadImage","styled","LazyLoadImage","slideHeight","md","slideMobileHeight","StyledSlider","quotedMobileColor","quotedColor","dotsColor","dotsSize","StyledItem","div","sliderSettings","dots","infinite","slidesToScroll","slidesToShow","autoplay","adaptiveHeight","responsive","breakpoint","SliderComponent","handleResize","itemsRef","innerWidth","setState","addEventListener","itemRef","itemSrc","getAttribute","observer","IntersectionObserver","entries","entry","isIntersecting","backgroundImage","unobserve","target","threshold","observe","removeEventListener","items","sliderCustomSettings","map","item","i","Link","key","to","link","ref","el","alt","src","mobileImg","image","effect","React","isRequired","titleSecondLine","subTitle","buttonText","buttonLink","bgColor","interval","number","titleStyle","titleWeight","buttonBkg","buttonColor","buttonBkgHover","buttonColorHover","titleTransform","secondaryBtn","StyledPromotions","lg","StyledPromotionsModern","btnDisplay","xs","Promotions","handleButtonClick","i18n","push","tlink","langConfig","scrollTo","fetchPromotions","language","prevState","titleType","excludedPromotions","includedPromotions","getTemplateStyledComponent","listPromotionsAux","filter","f","onClick","Carousel","controls","show","promo","Item","name","imagePath","wrapperClassName","withRouter","Promociones","leftTitle","leftStrongTitle","leftLinkText","leftLinkUrl","leftLinkHover","StyledPagaEnCuotas","bg","StyledBanksSection","showBorder","borderColor","third","DefaultPagaEnCuotas","hideTitle","rel","href","imgSrc","ModernPagaEnCuotas","height","PagaEnCuotas","Modern","Default","slideSpeed","autoplaySpeed","showModelDetail","defaultProps","StyledFlota","xxl","DefaultFlotaItem","shape","brand","doors","category","passengers","bigLuggage","smallLuggage","steering","gearbox","airConditioner","dailyPrice","multimedia","lowerPrice","model","getCategoryOrGroupName","getCarImage","prefixForNumeric","featureFlags","oneSlide","distanceUnit","showTooltip","showFleetPrice","fleetUseLowerPrice","prefix","bookingButtonText","setSearchCarParams","ModernFlotaItem","fleetSection","FlotaItem","bookLink","carModel","showSipp","categoryGroups","categoryGroupName","getSippByCategory","toUpperCase","sipp","speed","pauseOnHover","initialSlide","DefaultFlota","newValues","showOnlyDefaultModels","getFlotaItems","disableTitleButton","disableTitle","flotaItems","getSliderSettings","index","models","StyledFlotaModern","ModernFlota","fetchCategories","Flota","defaultModels","principalModel","m","principalModelId","showOnlyDefaultModelsInverse","statement","textContentSize","statementSize","StyledCalidadServicio","buttonPrimaryBg","StyledCalidadServicioModern","CalidadServicio","handleIntersection","backgroundLoaded","root","rootMargin","styledSectionRef","modernImage","customContent","actualBackground","backgroundPosition","backgroundSize","backgroundRepeat","minHeight","getContentColumnWidth","justifyContent","alignContent","alignMobileContent","justifyMobileContent","CallToAction","titleFontWeight","titleFontSize","subTitleFontWeight","subTitleFontSize","subTitleColor","selfLink","subtitleType","useTranslation","setParalax","StyledTitleRow","StyledTestimoniesWrapper","primaryTransparent","Testimonies","mobileBackgroundImage","columnsNumber","faceSrc","customername","source","StyledPromocionesSection","StyledPromocionesModernSection","PromocionesSection","noPromotionText","getColumnWidth","getTitleSize","description","StyledServiceItem","sizeHover","size","padding","borderRadius","StyledServiceItemModern","ServiceItem","expanded","service","descriptionMaxLength","descriptionCharsSplit","fullDescription","collapsedDescription","slice","seeMore","seeLess","getServiceDescription","getComponentClasses","Collapse","in","Button","variant","aria-controls","aria-expanded","price","isPriceByDay","StyledServiciosSection","StyledServiciosSectionModern","ServiciosSection","fetchAdditionals","additionals","additionalId","additional","ad","groups","group","GroupTitle","services","j","getService","nameSplitNumber","StyledLandingSection","kmColor","offices","formBkg","formBkgAlt","formTitle","StyledLandingSectionModern","LandingSection","placeId","pickUpEndpoint","relatedRoutes","showCity","formSection","component","searchRoute","formOrientation","form","getFirstColumnWidth","subtitle_1","subtitle_2","subtitle_3","p1","Paragraph","p2","img","getSndColumnWidth","subtitle","routes","km","customLocation","btnText","maplink","StyledContactSection","StyledContactSectionModern","ContactSection","border","leaveamessage","customText","office","getMapClassNames","mapUrl","frameBorder","getIframeStyles","allowFullScreen","getOfficeDetailsClassNames","city","address","hours","first","second","contacts","contact","url","icon","StyledMercadoPagoSection","MercadoPagoSection","withBillingInformation","fiscalConditionValidation","setCurrencySymbol","currencySymbol","onLoaded","publicToken","getPublicToken","mp","MercadoPago","fields","create","placeholder","mount","on","getPaymentMethods","identificationHandler","status","response","newDocuments","paymentInfo","showDoc","documents","documentSelection","documentType","sampleDocFormat","getDocumentSample","bankSelection","bank","a","showInstallments","amount","getTotalToPay","paymentMethodId","paymentMethodID","getInstallments","bin","paymentTypeId","installments","installmentHandler","installmentsSelection","storeInstallment","installmentObject","originalInstallments","inst","Number","setBookingInstallment","setInfractionInstallment","isPayingBooking","isPayingInfraction","handleCardholderName","cardholderName","formErrors","handleDocument","cleanId","cleanRUT","handleFirstName","firstName","billingInfoCheckbox","handleLastName","lastName","handleEmailAddress","emailAddress","handleAddress","handleAddressNumber","addressNumber","handleAddressDepartment","addressDepartment","handleZipCode","zipCode","handleCellphone","cellPhone","handleFiscalCondition","fiscalConditionId","validDocumentIds","billingDocumentType","handleBillingDocumentType","sampleBillingDocFormat","handleDocumentId","getDocumentTypeName","documentId","payer_costs","recommended_message","issuersHandler","banks","handleSubmit","e","preventDefault","formLoading","paymentInfoFormSchema","validate","abortEarly","then","valid","createCardToken","identificationType","identificationNumber","token","tokenHandler","catch","inner","reduce","prevErrors","currentError","path","message","errorObject","field","formRef","offsetTop","googleTagManager","gatewayId","executePayment","res","bookingId","booking_id","is_gtag_enabled","gtag_purchase","messageObject","errorData","error_message","hereLink","bookingid","infractionid","infractionId","customerid","customerId","link_to","code","payBooking","payInfraction","showOrderIdentifier","confirmedOrderText","paymentConfiguration","toString","padStart","bookingStatus","currentStatus","BookingStatus","reserved","confirmed","act","queryString","search","parseQs","getPayButtonText","setExchangeRate","showTotalToPayWithInstallments","returnFinalPriceOnly","qsamount","finalPrice","Math","abs","balance","total_amount","Fragment","overwrittenSymbol","handleCheckboxUseContactInfoChange","checked","customer","getCustomerInfo","disableBillingFields","documentTypeId","parseBillingInfoSection","billingSubtitle","billingConditions","onChange","parseBillingFields","billingDocInputFocus","inputClass","options","autoComplete","showBillingInfo","selected","transformFiscalConditionsToSelectOptions","fiscalConditions","defaultOption","transformDocTypesToSelectOptions","onFocus","onBlur","legend","format_expected","mask","getDocumentMask","results","cardIcon","getIssuers","issuers","branchOfficeName","branchOfficeIATA","branchOfficeId","promotionId","noPendingPayTransactions","currencyCode","cardNumber","year","month","secCode","docInputFocus","yup","test","parent","tenantDocumentTypes","isValidDocument","fiscalCondition","taxPayerValidation","when","is","required","nullable","hasValidDocumentType","isValidDocumentId","typeError","email","createRef","getFullYear","years","Array","from","val","months","partial","workWithInstallments","fetchDocumentTypes","fetchFiscalConditions","listTaxPayerTypes","tenantFiscalConditions","mustShowInstallments","gtag_checkout_process","option","gtag_checkout_option","deliveryPlace","branchOfficeIATACode","promotionid","getInfractionTotalToPay","symbol","totalToPay","handleGetTotalToPay","customerBalance","percentageToPay","numberOfDecimals","getCashBoxConfigurationNumberOfDecimals","round","cashBoxConfiguration","script","paymentLegend","hideInstallmentLink","installmentsHelperText","applyExchangeRate","applyCurrencyExchangeRate","showExchangeMsg","showInstalmentsLink","getPriceWithExchangeRate","Typography","onSubmit","securityCode","expirationDate","disabled","loadLibrary","async","Promise","resolve","StyledCredomaticSection","BasePaymentSection","getPayablePrice","showTotalToPay","bookingPayableAmount","useWebCurrency","useRound","CreditCardValidator","require","CredomaticSection","handleCardNumber","ccObject","ccIcon","getCreditCardIcon","card","ccType","handleSecCode","handleMonth","handleYear","paymentParams","makePayment","errorMessage","transactionId","qsamout","creditCardNumber","ccNumber","isValid","isValidCreditCard","isValidSecCode","StyledPromericaSection","api","getConfiguration","PromericaSection","handleCountry","country","handleState","handleCity","handleStreet","street","handlePostalCode","postalCode","handleEmail","handlePhone","phone","cardObject","codeError","getCountries","countries","isoCode3166","label","clientIpAddress","sessionId","countryObject","stateName","selectedCountry","some","c","isValidCardHolderName","isValidCountry","isValidState","fetchCountries","setClientIpAddress","setClientSessionId","publicIp","v4","reject","createElement","onload","onerror","sourceUrl","head","appendChild","PaypalButton","onPaypalLoaded","event","showButton","ReactDOM","isRendered","total","onSuccess","paypal","Buttons","createOrder","actions","order","purchase_units","currency_code","onApprove","capture","details","render","env","payment","onCancel","onError","StyledPaypalSection","PaypalSection","paypalIsValidISOCode","useForcedCurrencyIfNecessary","currencyISOForcedToPay","currencies","bookingCurrency","forced","currentIsoCode","forcedCurrency","convertedPrice","forcedCurrencyPrice","forcedExchangeRate","forcedCurrencyCode","orderID","paypalScript","clientId","lang","newUrl","buildNewUrl","role","parsedLang","join","parsedCurrentLang","toLowerCase","handleChangeLanguage","StyledTransbankSection","LoadingWrapperStyled","TransbankSection","GetToken","getTransBankUri","Storage","setElement","tokenLoading","result","method","Transbank","dolarPrice","getElement","isInfraction","getBooking","loadingGif","loadingMessage","StyledPrismaSection","PrismaSection","handleDocumentType","handleCreditCardType","creditCardType","querySelector","sandboxEnv","productionEnv","inhabilitarCS","decidir","Decidir","isSandbox","setPublishableKey","publicApiKey","setTimeout","createToken","prismaResponseHandler","matchErrorParamKey","request","param","establishmentName","extraData","parseToPrismaMonths","parseToPrismaYears","y","substring","creditCardTypes","genericPrismaError","StyledCreditCardConfirmationSection","CreditCardConfirmationSection","creditCardCode","creditCardExpirationMonth","creditCardExpirationYear","creditCardPlaceHolder","confirmBooking","confirmMessage","StyledStripeSection","stripe","useStripe","elements","useElements","useState","setMessage","isLoading","setIsLoading","url_redirect","useEffect","clientSecret","URLSearchParams","retrievePaymentIntent","paymentIntent","confirmPayment","confirmParams","return_url","layout","StripeSection","paymentParamsCopy","messageError","loadStripePromise","stripePromise","loadStripe","createPaymentIntent","renderBillingInfoSection","renderBillingFields","stripeCreatePaymentIntent","sanitizeName","setClientSecret","setSuccessStorageElements","appearance","StripeSuccess","payment_intent","redirectStatus","redirect_status","storage","transactionParams","StyledFiservIpgSection","FiservIpgSection","parseToFiservMonths","parseToFiservYears","PoyntCollect","businessId","applicationId","collect","useRef","useLayoutEffect","poyntCollect","displayComponents","labels","iFrame","locale","additionalFieldsToValidate","customCss","container","inputDefault","rowFirstName","rowLastName","rowCardNumber","rowExpiration","rowCVV","rowEmailAddress","TokenizeJs","console","log","nonce","unmount","getNonce","StyledPoyntSection","PoyntSection","currencyConversion","dolarRate","paymentNonce","StyledCecabankSection","CecabankSection","GetTransactionURL","getCecabankTransUri","operationNumber","urlAction","transactionLoading","merchantID","acquirerBIN","terminalID","urlOK","urlNOK","sign","encType","CecabankSuccess","operationnumber","CecabankFail","StyledGeniusSection","GeniusSection","CayanCheckoutPlus","setWebApiKey","webApiKey","createPaymentToken","success","successCallback","failureCallback","genericGeniusError","tokenResponse","matchErrorReason","reason","matchErrorCode","currentErrorReason","error_code","parseToGeniusMonths","parseToGeniusYears","scriptType","StyledRedsysSection","RedsysSection","dsMerchantParameters","dsSignatureVersion","dsSignature","customerLastName","chars","charAt","floor","random","generateOrderId","getRedsysInitializeRedirect","getInitializeRedirect","formAction","connectionUrl","RedsysSuccess","Ds_MerchantParameters","ds_MerchantParameters","ds_Signature","Ds_Signature","Ds_SignatureVersion","getRedsysValidateRedirectSignature","errorCode","RedsysFail","StyledPaymentOptionsSection","PaymentOptionsSection","onPaymentMethodChange","paymentMethod","paymentMethodObj","userInfo","userInfoFormSchema","oneOf","isBookingPay","String","showIdMessage","paymentMethods","hasCredentials","payMethodObject","getPayMethodCode","getConfigurationObject","publicKey","isSandBox","sandBoxCliendID","productionClientID","collectApplicationId","OnlinePaymentSection","setPayMethodObject","newPayMethodObject","getPayMethodConfiguration","checkForCredentials","initiate","sharedComponents","element","paymentOption","getGatewayInformation","newCredentials","PaymentComponent","ComponentToRender","Pages","Sects","Comps","findComponent","StyledCancelSection","CancelSection","StyledFlotaSection","StyledFlotaGrid","buttonPrimaryColor","buttonPrimaryBgHover","StyledFlotaBigItem","StyledFlotaBigItemModern","FlotaBigItem","StyledFlotaSectionModern","StyledFlotaGridModern","FlotaSection","filteredModels","filteredEntities","showAllModels","getAllModelsFromCategoryGroups","getModelsFromCategoriesList","getFilteredCategories","list","filteredCategories","includedCategoryIds","excludedCategoryIds","flatMap","cat","getModelsFromCategory","entityIndex","categoryIds","getAllCategoryIdsInCollection","getAllModelsFromCategoryGroup","categoryGroupIndex","ids","handleFilterChange","bookingsConfiguration","ins","centerItems","StyledGrid","getTemplateStyledGrid","Nav","defaultActiveKey","eventKey","entity","Accordion","lenght","Card","Toggle","as","Header","data-toggle","data-target","Body","slider","slickGoTo","StyledFranchiseSection","FranchiseSection","parseFranchises","availabilityGroup","parseByCategory","parseByModel","franchise","damage","franchiseDamage","accidents","franchiseRollover","hail","franchiseHail","findPrincipalModel","franchiseTitle","franchiseDescription","creditTitle","creditDescription","accidentsTitle","accidentsDescription","hailTitle","hailDescription","class","align","BookingSection","GetBook","isWidget","x","canceled","isNewApi","priceItems","unitPrice","SetBook","top","postMessage","body","scrollHeight","scrollWidth","OnlinePaymentWrapper","isToll","isPayingToll","getBookingInfo","quoted","getInfractionInfo","getCustomerInfraction","infractionStatus","currentCollectionStatus","InfractionStatus","collected","collectionNotPossible","getTollInfo","getBreadcrumbObject","isActive","hasPartialAmount","partialAmount","showBreadcrumb","acceptBooking","acceptInfraction","currentBooking","currentInfraction","franchiseText","detailsLegend","getInfraction","StyledDetails","priceBackground","priceColor","PriceComponent","BookingDetailSection","goBack","showBookingLenght","diasDeAlquiler","bookingLength","isInteger","totalDays","totalDaysString","getModel","car","bookingCategory","categoryFound","getPriceItemsContent","getDescription","isBookingPrice","openRate","days","quantity","customerPriceItems","payer","commissionPercentage","bookingPriceItems","extraPriceItems","bookingPriceItemsAmount","getPriceWithCommission","sumBy","showDeposit","kmText","ilimitedKm","maxAllowedDistanceByDay","data-original-title","Moment","fromDate","format","returnPlace","toDate","averageDayPrice","StyledInfractionDetails","InfractionDetailSection","creationDate","attachment","FeedbackBox","createBoxItems","defaultSubtitle","detailedError","buttonInfo","messageType","paramsObj","display","StyledCondicionesSection","highlightColor","highlight","StyledCondicionesSectionModern","faqs","conditions","CondicionesSection","showImage","faq","question","answer","keyValue","ceil","faqTag","mainEntity","q","acceptedAnswer","defaultLang","conditionsPageSchemaTags","translations","schemaTags","onlyFaq","titleFaq","accordionContent","conditionsColClass","modernTheme","conditionCol","conditionMargin","condition","cItem","cKey","faqsSection","StyledAssociatesSection","AssociatesSection","renderHeader","header","logoUrl","logoAlt","renderItem","renderFooter","footer","StyledPhotoLinkSection","PhotoLinkSection","linkTo","placeShape","rentlyEndpointName","arrayOf","StyledFilter","backgroud","StyledFilterModern","SearchFilter","categoriesSelected","handleCategoryChange","updateParametersState","closeAccordion","click","accordion","dateFrom","dateTo","promotionCodeText","dateFormat","dateDisplayFormat","mobileSearchForm","accordionHeader","dateFormatEdition","categoriesFilter","onCategoriesChanged","resultsPage","trigger","modal","close","aria-hidden","withTheme","places","fetchBookeableCars","StyledSearchItems","SearchItemRowStyled","sm","DefaultSearchItemRow","showDailyPrice","smallDecimals","franquicia","franchiseLink","itemMiddleColumnExtraContent","alquilerPor","checkoutButton","customCheckOutButtons","isOnlyQuote","getCarName","hasLimitedAvailability","parsePartialAvailabilityAlert","checkoutLink","handleCheckoutLink","handleCheckoutBtn","loggedAsAgency","agencyPrice","customerPrice","salesCommision","franchiseAmount","franchiseInCurrency","FranchiseInfo","franchiseContent","tooltipText","ExchangeMessage","buttonPrice","showNoVatPrice","noVatPrice","Price","showPriceToRequest","button","SearchItemRowStyledModern","ModernSearchItemRow","NoVatPrice","SearchItemRow","goToCheckout","onlinePayment","promotion","setCheckout","checkoutRoute","isPartial","isOnline","getCarDateHour","gtag_product_click","partialPaymentAmountIsPercentage","partialPaymentAmount","onlyQuote","generateCheckoutLink","mainBtnIsCounter","Value","counterBtnIsDisabled","showPayOnCounterBtn","isCompany","Promotion","isCustom","Icon","Text","getButtonName","selectButtonName","selectOnlineButtonName","availablePromotions","date","startParam","hourFrom","endParam","hourTo","startCar","endCar","isAfter","isBefore","obj","customPromotionId","priceChanger","bookingFinalPrice","ValidPaymentTypeEnum","freeze","Both","Counter","Online","promotions","promoId","onlinePromotion","counterPromotion","getPromotion","isValidForBoth","validForPayment","isValidForCounter","isValidForOnline","partialAvailabilityMessage","customMessage","showOrSimilar","ShowOrSimilar","onlinePayments","onlyQuoteBtn","carNotAvailableText","subText","checkoutCustomButtons","getPriceWithoutVat","isOnlinePaymentHighligthed","changePrice","fetchPrices","StyledSearchItemsModern","SearchItems","componentDidUpdate","prevProps","gtag_car_impressions","hideAlert","showAlert","orderCarsBy","orderBy","sortFunctions","b","orderedPricedCars","sort","orderedRequirableCars","flat","getFilteredCarList","carList","categoryId","isAgencyUser","noAvailabilityImage","noAvailabilityMessage","searchGif","searchMessage","franchiseTooltip","backgroundItems","fewUnitsText","fewCarUnits","onClose","allCategoriesSelected","StyledAdditionals","AdditionalRow","handleRowClick","classList","contains","availableStock","maxQuantityPerBooking","onRowCheckedChange","onRowValueChange","onAdditionalChange","maxValue","input","getElementById","focus","select","onNumberChange","newValue","priceWithoutTaxes","nameMaxLength","fullName","collapsedName","getAdditionalName","parseInt","wrapperClass","min","pattern","inputMode","max","getPrice","StyledAdditionalsModern","insuranceImage","additionalImage","setExpanded","renderAdditionalWithIcon","renderAdditionalWithImage","renderImage","getInsuranceComponent","getAdditionalComponent","CheckoutAdditionals","hideZipCode","showIsCompany","myAccountConfiguration","debouncedAdditionalChange","callback","delay","timer","args","clearTimeout","debounce","actionObject","globalId","agencyGuid","isInsuranceSelected","mustHaveAtLeastOneInsurance","fullInfoAdditional","gtag_manage_shopping_cart","getAdditionalInfo","excludes","exists","parseActionObject","splice","notExcludedInCurrent","notExcludedInOthers","isExcludedAdditional","previousAdditional","currentAdditional","logIn","typeId","region","registerMe","loggedAsCompany","isCompanyUser","showLoginModal","logOut","handleLogOut","newUserInfo","hideDocumentField","isOnRequest","idValue","popUpErrorShow","handleLogIn","step","userInfoWithGlobalId","driverAge","profileIsCompany","isAgency","profileGlobalId","register","password","book","handlesendQuotation","sendQuotation","info","bookingParams","quotationLoading","bookOnCounterNeedsConfirmation","isPaymentsConfig","needsCreditCardInformation","openModal","modalState","isCheckoutFilterVisible","closeModal","filterByAgreement","commercialAgreementCode","commercialAgreementExtras","additionalList","extras","matchedExtrasIds","agreementId","groupByAdditionals","orderedListAdditionals","groupBy","parseTermsAndConditionsBlock","customTermsAndConditions","getConditionsLink","getPrivacyLink","onUserFirstNameChange","onUserLastNameChange","onUserBirthday","birthDay","toISOString","onUserMailChange","onUserCountryChange","cities","fetchCities","countryInfo","onUserDriverLicenseExpiration","driverLicenseExpiration","onUserDriverLicenseCountry","driverLicenseCountry","onUserDriverLicenseNumber","driverLicenseNumber","onUserCityInputChange","cityInput","onUserStateInputChange","stateInput","onUserPhoneChange","onUserFligthNumberChange","flightNumber","onUserAddressChange","onUserCustomDeliveryAddressChange","customDeliveryAddress","isCustomDeliveryAddress","isCustomAddress","onUserCustomDeliveryCityChange","customDeliveryCity","isCustomDeliveryCity","onUserCustomReturnAddressChange","customReturnAddress","isCustomReturnAddress","onUserCustomReturnCityChange","customReturnCity","isCustomReturnCity","onUserAddressNumberChange","onUserAddressDepartmentChange","onUserZipCodeChange","onUserIDChange","onUserCityChange","cityInfo","onTCChange","tcAccept","onDocumentTypeChange","onFiscalConditionChange","onIsCompanyChange","typeIdAux","docType","onUserPasswordChange","onUserRepeatPasswordChange","repeatPassword","onDriverFirstNameChange","driverFirstName","onDriverLastNameChange","driverLastName","onDriverMailChange","driverEmail","onDriverCountryChange","driverCountry","driverCity","driverRegion","driverState","onDriverPhoneChange","driverPhone","onDriverAddressChange","driverAddress","onDriverAddressNumberChange","driverAddressNumber","onDriverAddressDepartmentChange","driverAddressDepartment","onDriverZipCodeChange","driverZipCode","onDriverIDChange","driverId","driverTypeId","onDriverCityChange","onDriverDocumentTypeChange","sampleDriverDocFormat","handleRequirePurchaseOrder","withPurchaseOrder","withPurchaseOrderFile","purchaseOrder","companyFiles","handleWithPurchaseOrderFile","onPurchaseOrderChange","onFileNameChange","newName","newFiles","idx","handleDeleteFile","onCompanyFilesChange","files","currentTarget","base64Files","formattedFiles","all","file","convertToBase64","base64","onNotesChange","notes","renderAddressFields","addressText","addressNumberText","addressDepartmentText","zipCodeText","hideAddressField","showBillingFields","showAddressAllFields","wrapperId","renderCompanyExtraDocumentsFields","bookingBackupInformationTitle","notesText","showCompanyExtraDocumentsFields","hidePurchaseOrderFields","FormFile","renderDriverFields","cityText","hideCountryField","transformCountriesToSelectOptions","renderDriverAddressFields","renderDriverDocumentFields","documentText","docDriverInputFocus","documentTypes","customDelivery","canAddCustomAddress","customReturn","hideTermsCheckbox","showPaymentMethod","hideFiscalCondition","hideFlightNumber","hidePhoneField","airlineField","enableLicenseData","enableCityInput","enableStateInput","showBirthDateField","birthDate","forceRutWhenChile","requireNotes","driverAgeAllowedMin","driverAgeAllowedMax","diff","isAgeAllowed","licenseValidDays","toDateMoment","driverLicenseExpirationMoment","isSameOrBefore","otherwise","isValidCity","isValidPassword","isValidRepeatPassword","isValidDriverDocument","isValidDriverCity","areCompanyFilesValid","isWithPurchaseOrderSelected","isWithPurchaseOrderFileUndefined","fetchBookingAdditionals","isDefault","groupedAdditionals","gtag_additional_impresions","payBookingButtonText","bookBookingButtonText","quoteBtn","conditionsLink","privacyLink","rutDocumentType","additionalComponentVersion","customerNameText","customerLastNameText","mailText","phoneText","flightNumberText","acceptConditionsLegend","usePhoneWithCountry","showPrintButton","showQuotationLink","insuranceMessage","customerTitle","paymentTitle","nameCharsSplit","customAddressText","customAddressTexts","sendQuotationMsg","insuranceTitle","additionalTitle","filteredAdditionals","listAdditionalsByType","showCustomAddressessFields","additionalComponentVersionEnum","1","2","Modal","aria-labelledby","centered","closeButton","Title","loginCallBack","Footer","insurance","other","customerRegistration","onDateChange","onFocusChange","showClearDate","small","readOnly","international","renderDocumentFields","showNotesFieldOnCheckout","customAddressAlertContent","Alert","CustomAddressAlert","getBookingButtonText","isQuotationHighligthed","print","NoBookingDivStyled","StyledDetailsModern","CheckoutDetails","getDailyFinalPrice","showFranchiseValues","franchiseDamagesText","franchiseRolloverText","franchiseTheftText","franchiseHailText","showFranchiseDetails","showFranchiseDamages","showFranchiseRollover","showFranchiseTheft","showFranchiseHail","franchiseTheft","isError","totalPayText","StyledComponent","showCovidBox","showDailyFinalPrice","totalPrice","getModelName","StyledMobileDetails","StyledMobileDetailsModern","CheckoutMobileDetails","open","closeOnDocumentClick","CheckoutMobileDetailsComp","StyledCheckoutFilter","StyledCheckoutFilterModern","CheckoutFilter","shapeCarName","refe","StyledBookingSuccess","BookingSuccess","whenLoggedAsCompany","whenLoggedAsUser","defaultContent","Row","Col","span","offset","getTitleText","getSubtitleText","getMessageText","default","fetchInitialSettings","version","isdraft","listStates","countryIsoCode","cancelBooking","branchOffice","remove","fetchCars","pickUpId","dropOffId","dropOffEndpoint","showFinalPrice","onlyFullAvailability","promotionsQS","customerAge","caCode","fetchPrice","modelId","serializedAdditionals","getBookingWithPromotion","createBooking","payInfo","roundPayInfo","confirmInfo","cancelReservation","reservation","sendContact","sendCompanyContact","getBookingsConfiguration","getBookingAdditionals","requestObject","fromPlace","toPlace","getValidPromotionCode","promotionCode","listWebFiles","uploadWebFiles","formData","getBookingAttachments","attachBookingFiles","getGeneralSettings","customerName","customerEmail","getAxleIgnitionUrlToken","setAxleAuthCode","guid","authCode","SettingsContext","createContext","context","contextType","useSettingsContext","useContext","gtag_report_conversion","eventId","gtag","send_to","event_callback","gtmConfiguration","enableGtmEcommerce","additionalTypes","readSettings","insurances","others","parseAdditionalItem","gtag_product_impressions","parseCarItem","parseItemPriceToProduct","layer","dataLayer","ecommerce","eventAction","eventCategory","actionField","products","checkout_option","purchase","customerGlobalId","affiliation","pickupDate","dropoffDate","revenue","coupon","tax","getBookingTaxAmount","shipping","eventName","priceItem","parseNightPriceItem","parseOneWayDropOffPriceItem","parseAdditionalPriceItem","parseDeliveryPriceItem","taxItems","pi","prev","curr","impressions","position","listType","handleRegister","lastname","getUserProfile","remember","handleLoginWithMicrosoft","loginWithMicrosoft","handleGetMicrosoftLoginUrl","getMicrosoftAuthorizationUrl","handleGetUserBookings","limit","getUserBookings","handleGetUserFiles","getUserFiles","handleUploadUserFile","parsedFiles","content","attachUserFile","handleUpdateUserProfile","updateUserProfile","handleRegisterCompany","registerCompany","handleForgotPassword","forgotPassword","handleResetPassword","resetPassword","forceTranslate","translate","CompositeComponent","withWrapper","renderChilds","shared","childProps","renderComponent","node","metaTitle","BasePage","backgroundColor","robots","ogTags","Helmet","property","itemprop","site_name","video","audio","published_time","facebook","fb_app_id","fb_admins","fb_page_id","fb_profile_id","fb_publisher","fb_section","fb_tag","twitter","twitter_card","twitter_site","twitter_creator","twitter_title","twitter_description","twitter_image","twitter_image_alt","linkedin","linkedin_title","linkedin_description","linkedin_image","linkedin_image_alt","linkedin_url","linkedin_author","linkedin_publisher","linkedin_section","linkedin_article_tag","linkedin_article_published_time","linkedin_article_author","linkedin_article_section","linkedin_article_publisher","pinterest","pinterest_article","pinterest_article_author","pinterest_article_section","pinterest_article_tag","pinterest_article_published_time","pinterest_article_publisher","tiktok","tiktok_title","tiktok_description","tiktok_image","tiktok_image_alt","tiktok_url","tiktok_author","tiktok_publisher","tiktok_section","tiktok_article_tag","stringSchemaTags","customHeadContent","pathForCanonical","isArray","hreflang","getLanguagePath","getRobotsTag","renderHeaders","getOgTags","getSchemaTags","oneOfType","StyledAccordionCard","StyledAccordionCardModern","AccordionCard","getBackgroundColor","getColor","getBorderColor","buttonPrimaryBorder","StyledBtn","borderWidth","noShadow","textTransform","hoverColor","buttonPrimaryColorHover","iconColor","StyledBtnModern","Btn","iconSize","internalLink","rest","goToLink","getCustomButton","active","hover","isNavOpen","navItems","socialNetworks","mobileMenuItems","langs","handleLangChange","sticky","basicFlex","StyledNavBar","nav","dropDownborderRadius","subItemColor","subItemHover","dropdownBkgHover","StyledNavBarModern","NavBar","handleStickyNavbar","stickyNav","mainNav","pageYOffset","showMenu","showDropdown","closeMenu","dropdownMenu","links","sitemap","mobileLinks","logo","mobileLogo","comm","showMyAccount","showCurrenciesDropdown","isNavBarOpen","navItem","noShowInHeader","dropdown","NavDropdown","isDropdownActive","subItems","subItem","toogleNavBar","margins","hoverBkg","classNames","handleOnChange","changeCurrencyAction","changeLanguage","onscroll","pathname","NavBarComp","newCurrency","StyledLogo","Logo","route","logoNavigateLink","TranslatedLink","behavior","isExternal","getLink","StyledHeader","activeColor","rightBtnColor","StyledCurrenciesDropdown","dropOpen","setDropOpen","handleChangeCurrency","urlCurrency","userCurrency","toggleDropdown","checkCurrency","getCurrencyName","changeCurrency","CurrenciesDropdown","NavBarHeaderComp","logoWidth","rightNav","settingsCurrency","Navbar","collapseOnSelect","expand","cancelBookingButton","NavBarHeader","StyledSocialList","ul","StyledSocialListModern","_extends","assign","arguments","prototype","hasOwnProperty","call","apply","d","viewBox","fill","cx","cy","r","xmlnsXlink","xmlSpace","SocialList","getIcon","renderNewIcons","fontAwesomeClass","TopBar","contactLinks","socialHoverColor","includeSocialNetworks","showTopBarPhone","bgcolor","mobileMenuColor","mobileHeader","mobileHeaderIcons","StyledHeaderSlogan","labelColor","labelFontSize","labelStyle","displayIcon","labelColorHover","subLabelWeight","subLabelColor","StyledHeaderItem","iconHover","StyledHeaderModern","HeaderItem","iconItem","faIcon","socialItemFlag","faIconFb","contentType","contentText","wpUrl","GTMEventId","HeaderSlogan","subLabel","subLabelHover","label2","slogan","associates","stickyMenu","headerRef","isOpen","handleOutsideClick","Slogan","StyledFooter","borderSize","borderStyle","companyInfoTitleColor","companyInfoTextColor","socialColor","showSocialsOnRight","collapsible","compInfo","companyInfo","textColor","customSitemap","access","doubts","safeSite","FooterComp","StyledBottomFooter","StyledBottomFooterModern","RentlyFooter","hideRentlyFooter","companyName","StyledLinkList","imgHeight","LinkList","certificates","isFirstRender","scroll","comps","branchOffices","logos","stopPropagation","comp","cProps","getComponentList","StyledLoadingContainer","LoadingComponent","overflow","margin","textAlign","paddingTop","imgStyle","h1Style","fontFamily","PageLoadingComponent","getFontSize","defaultSize","StyledTitle","headerTypes","h1","attr","h2","h3","h4","h5","h6","translatedText","CustomLoadingComponent","Loading","PageLoading","CustomLoading","StyledInput","StyledInputModern","CheckboxInput","stateChecked","changeState","disable","DatePicker","returnYears","currentYear","renderMonthElement","onYearSelect","focused","numberOfMonths","showDefaultInputIcon","block","noBorder","verticalHeight","inputIconPosition","isOutsideRange","displayFormat","handleDateChange","handleFocusChange","DateInput","datePickerOptions","RangeDatePicker","momentPropTypes","momentObj","END_DATE","handleDatesChange","startDate","endDate","onDatesChange","focusedInput","handleWeekDays","day","_locale","_weekdaysMin","handleMonthsName","_months","startDateId","endDateId","isDayBlocked","renderDayContents","renderMonthText","nextProps","showInputs","RangeDatePickerComp","RangeDateInput","htmlFor","TextInput","maskChar","TextAreaInput","cols","rows","NumberInput","arrow","SelectInput","opt","selectedValue","createOption","StyledCompanyInfo","CompanyInfo","logoHeight","addressPath","StyledLangDropdown","LangDropdown","currentLang","componentWillMount","changeLanguague","checkLang","getLanguageText","BreadcrumbItem","StyledBreadcrumb","Breadcrumb","w","showHome","getLocation","BreadCrumb","StyledPageTitle","PageTitle","subTitleSize","titleSize","StyledParallaxSection","xxxl","ParallaxSection","StyledRow","bb","ColumnsSectionComponent","column","myProps","mobileOrder","Column","noWrapper","ImageComponent","StyledSeparator","separator","SeparatorComponent","ColumnComponent","col","matchMedia","matches","orderStyle","orderMobileStyle","getColStyle","StyledI","IconComponent","CustomHtmlComponent","withoutTranslation","ColumnsSection","Image","Separator","ScriptTagComponent","ScriptComponent","CustomHtml","StyledCustomerCarrousel","StyledCustomerCarrouselModern","CustomerCarrousel","ContactList","horizontal","StyledCancelModal","CancelModal","sitekey","hl","onHide","CancelModalComp","StyledContactForm","StyledContactFormModern","ContactForm","onFullNameChange","fullname","onAgencyNameChange","agency","onProvinceChange","province","onMailChange","mail","onTelephoneChange","onMessageChange","onGuestAmountChange","guestAmount","handleDateFocus","rangeDatePicker","handleDateSelect","pickUpDate","dropOffDate","handleContact","formType","isVerified","parsedContact","telephone","reCAPTCHA","captcha","ReCAPTCHAErrorMessage","ReCAPTCHAError","ReCAPTCHARef","reset","recaptchaVerify","needAgencyName","needStateName","needGuestAmount","needRangeDate","listProvinces","orientation","screen","withFullScreenPortal","agencyName","askForAgency","askForState","askForGuestAmount","askForRangeDate","prov","minimumNights","customArrowIcon","startDatePlaceholderText","endDatePlaceholderText","hideKeyboardShortcutsPanel","contactForm","thanksUrl","pushState","successMessage","errorUrl","StyledQuoteForm","QuoteForm","onCompanyNameChange","onCompanyIdChange","companyId","onCountryChange","onBusinessAddressChange","businessAddress","onTermsConditionsChange","termsConditions","submit","companyInfoFormSchema","companyIdType","termsConditionsText","CancelForm","onLastNameChange","onReservationNumberChange","reservationNumber","handleCancel","parsedCancel","BookingId","Lastname","Captcha","btnStyles","getBtnStyles","page","StyledPageWithTitle","StyledPageWithTitleModern","StyledBanner","bannerImage","StyledMap","mapContainerHeight","StyledPage","searchBg","PageWithTitle","breadCrumItems","showBanner","showMap","mapHeight","hideGradient","subTitleType","BaseLayoutComponent","nextState","renderLayout","BaseLayout","Route","matchProps","StyledAfipLogo","AfipLogo","StyledGoDaddyLogo","GoDaddyLogo","StyledMcAfeeLogo","McAfee","StyledMarker","Option","airport","AirportNames","IATA","showIATA","OfficeNames","PortNames","PointNames","BusNames","icons","marginLeft","ValueContainer","SearchBoxPlace","themeContext","ThemeContext","sortedItems","useBackendSort","_","sortBy","defaultStyles","control","base","boxShadow","isFocused","singleValue","modernStyles","bottom","menu","zIndex","styles","inputId","isClearable","placeSelected","components","selectedOption","placeChangeHandler","filterOption","keywords","branchName","citysearch","countrysearch","th","primary25","getSchedule","schedules","s","calculateStartDate","globalSchedules","holidays","pickUpBranchOfficeId","tentativeDay","checkTimes","branchSchedules","isDayAvailable","clone","scheduleConf","gap","branchSchedule","schedule","blockedByHoliday","isBlockedByHoliday","blockedByClosedDay","isBlockedByCloseDay","daySchedules","getScheduleForDay","utcOffsetDiff","getTimeZoneDiff","timezoneUTCOffset","timeAvailable","isTimeAvailable","holiday","h","closedDays","cd","isSame","schedulesConf","scheduledDates","scheduleDates","specificScheduleForDay","sch","range","originalGap","limitHour","hoursToAdd","sameDay","isSameDay","afterHoursConf","allowAfterHours","afterHoursMaxMinutes","modifiedDay","firstOpenedFrom","lastOpenedTo","getLastOpenedForDay","originalOpenedTo","openedToHour","openedToMinutes","dummyDate","minute","dummyDateModified","calculateEndDate","daysInBetween","tentativeEndDate","_calculatePickDropHours","dropOffBranchOfficeId","pickUpHours","dropOffHours","pickUpSchedules","dropOffSchedules","pickUpSchedulesConfigured","areSchedulesConfigured","dropOffSchedulesConfigured","pickUpRanges","pickUpIsToday","afterHoursConfig","beforeHoursConfig","beforeHoursMaxMinutes","hoursGap","minutesBetween","gapForBookingTime","timeRange","getHoursFromDay","calculatePickUpTime","openedFrom","openedTo","dropOffRanges","Set","branchUtcOffset","hoursFromNow","tentativeHour","minOpenFrom","minsDiff","tentativeFrom","modifiedTime","time","localOffset","branchOffset","local","branch","splitResult","decimalToMin","hourlyFrom","hourlyTo","finalFrom","finalTo","modifiedFrom","modifiedTo","minutes","stillHasAvailableTime","parseHourToMoment","newHour","newMin","set","StyledSearchForm","transparent","DefaultSearchForm","submitSearch","searchText","checkoutText","showDifferentDropPlace","showInvalidPromotionMessage","kmFilter","minStayLength","pickUpSelect","toggleDropInput","dropOffSelect","filteredDropPlaces","pickUpHourSelection","dropOffHourSelection","onPromotionCodeChange","handleKmFilter","disableSubmit","driverMinAge","driverMaxAge","driverAgeWarning","invalidDriverAge","handleDriverAgeChange","isHome","commercialAgreements","onCommercialAgreementChange","useDriverAgeWithoutCaution","pickUpPlaces","place","checkoutTime","whiteSpace","showPromotionCode","kilometerFilters","showDriverAge","betweenMinAndMax","Tooltip","placement","age","ModernSearchForm","kmCheckbox","LuxurySearchForm","onCategoryIdChange","categoriesOptions","noGutters","transformPlaceToSelectOption","getFilteredPlaces","placesList","filteredBranchOffices","includedBranchIds","excludedBranchIds","filteredPlaces","includedPlaceIds","excludedPlaceIds","values","isEmpty","getFilteredPickUpPlaces","availableOperationOptions","getFilteredDropOffPlaces","isADropOffPlace","SearchForm","getDropOffPlaceAvailable","tentativePlace","allowForDeliveryPlaces","dropOffBranchOffice","branchOfficeIdForEnd","newStartDate","newEndDate","calculatePickDropHours","changeOfDayWithFixedSchedule","checkOutTime","cleanEndDate","maxDate","getMaximumStay","prevDropOffMaxDay","v","maximumStay","oldDropOffDate","oldDropOffBranchOffice","oldPickUpDate","oldPickUpBranchOffice","newDropOffHour","isInvalidDriverAge","isLessThanMinLength","maxStay","today","startOf","isBeforeToday","isAfterMaximumStay","dateType","selectedPlace","isDayBlockedByHoliday","scheduledDays","pickUpDay","maxBookingLength","maxDays","getAvailableDropOffPlaces","availableReturnPlaces","possiblePlaces","parseDate","stringDate","searchQueryStrings","submitLuxurySearch","isSelectingStartDate","minBookingLength","minDays","activeIlimitedKm","fetchPlaces","fetchHolidays","fetchSchedules","setWebCurrencyAction","paramsOrDefault","paramsString","extra","submitOnNewTab","submitToExternalUrl","encodeURIComponent","promos","urlSite","finalUrl","driverAgeWithoutCautionMin","driverAgeWithoutCautionMax","searchFormProps","Luxury","dropOffPlaces","selectedEndpoint","selectedDropPlace","selectedDropEndpoint","disableDefaultBranchOffice","defaultPickUpPlaceValue","pickUpPlace","defaultDropOffPlaceValue","dropOffPlace","pickUpPlaceOption","dropOffPlaceOption","defaultDateFrom","defaultDateTo","defaultKmFilter","isNaN","defaultDropOffHr","defaultPickUpHr","fetchLanguages","StyledSearchFormWhatsApp","SearchFormWhatsApp","oldDropOffBranchOfficeId","oldPickUpBranchOfficeId","dropOffHour","encodeURI","StyledCategoriesFilter","StyledCategoriesFilterModern","CategoriesFilter","workWithCategoryGroups","filterEntities","entityIdentifier","getEntityUniqueId","allCategoriesInGroup","handleAllCategoriesChange","isItemSelected","isAllChecked","StyledSearchMap","SearchMap","fillRule","clipRule","_ref6","_ref7","_ref8","StyledDetail","DefaultModelDetail","sanatizeDetailText","HideCarDetailIcons","airBag","css","ModernModelDetail","unlimitedKilometers","propType","ModelDetail","NumberDisplay","displayType","cur","thousandSeparator","decimalSeparator","decimalScale","useCurrenciesDropdown","decimalScaleOverride","generalOverrides","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","integerPart","decimalPart","showSymbolAsSuffix","suffix","fixedDecimalScale","renderText","getSmallDecimalsPrice","getNormalDecimalsPrice","StyledPaymentMethod","StyledPaymentMethodModern","PaymentMethods","paymentMethodsList","selectedMethodId","paymentMethodsListFiltered","onAddingItem","isChecked","getPaymentTypeIdByComponentName","componentName","getFilteredAvailablePaymentMethodsByBranchOffice","toPay","paymentGatewayConfigs","gatewayConfigs","paymentType","gc","branchOfficeIds","getBookTotalToPay","StyledPromotionModal","PromotionModal","StyledOurPeople","OurPeople","getItems","picture","renderStars","stars","StyledRelatedRoutes","RelatedRoutes","StyledRegisterForm","StyledModernRegisterForm","RegisterForm","setLoading","setName","setLastname","setEmail","setPassword","setRepeatPassword","nameBlur","setNameBlur","lastnameBlur","setLastnameBlur","emailBlur","setEmailBlur","passwordBlur","setPasswordBlur","repeatPasswordBlur","setRepeatPasswordBlur","setError","privateSite","referrer","disableRegister","isValidEmail","dismissible","Form","StyledRegisterCompanyForm","StyledModernRegisterCompanyForm","RegisterCompanyForm","queryParams","StyledLoginForm","StyledModernLoginForm","LoginForm","setRemember","hideLoginForm","hasMsLogin","handleMicrosoft","startsWith","disableLogin","StyledCard","AccountPrivateRoute","Redirect","StyledBookingPreview","getBalanceColor","BookingPreview","dateTimeFormat","dateTimeDisplayFormat","deliveryInfo","dropoffInfo","totalPayed","invertValueSign","StyledCustomAlert","CustomAlertModern","CustomAlert","StyledMyAccountNavLink","StyledModernMyAccountNavLink","MyAccountNavLink","hideLoginBtn","showCompanyLoginBtn","companyLoginEnable","showAgencyLoginBtn","agencyLoginEnable","Dropdown","UserIcon","Menu","StyledBookingStatus","getStatusColor","StyledCancelConfirmationModal","loadingCancel","setLoadingCancel","userCancelReservation","finally","CancelConfirmationModal","StyledReviewsCarousel","bgImage","bgSize","bgPosition","bgAttachment","bgRepeat","itemMargin","descriptionSize","descriptionColor","ReviewsCarousel","showControls","showIndicators","fade","getStarIcons","rate","rating","output","indicators","Caption","StyledForgotPasswordForm","StyledModernForgotPasswordForm","ForgotPasswordForm","setSuccess","StyledResetPasswordForm","StyledModernResetPasswordForm","ResetPasswordForm","StyledWhatsappContainer","FloatingWhatsapp","phoneNumber","whatsappImage","messageText","defaultImg","StyledBackToTopButtonContainer","BackToTopButton","StyledCookiesConsentContainter","CookiesConsent","btnBackground","btnColor","policyLink","isAccepted","setIsAccepted","storedValue","flexGrow","Trans","i18nKey","StyledPreHeaderContainer","StyledContactCard","defaultIconBg","defaultIcon","iconBg","PreHeader","headerText","PreHeaderContactCard","HubspotForm","portalId","formId","hbspt","forms","fetchSettings","refreshCache","removeElement","getOrUpdateItem","hoursFrom","minutesFrom","hoursTo","minutesTo","_isAMomentObject","refreshStore","userFetcher","validateInvitation","match","isProvider","isHotel","fileReader","FileReader","readAsDataURL","getCommissionAmount","acc","onlyPayCommission","isLocal","sessionStorage","useSession","clear","sItem","expiresOn","now","newItem","setMinutes","getMinutes","BaseTheme","hightlight","PrivateRoute","isLoggedIn","delivered","closed","notCollected","doc","findDocumentType","isValidCUIT","isValidDNI","isValidRUT","cuit","acumulado","digitos","digito","pop","verif","dni","rut","verifyDigit","sum","multiple","expectedDigit","getScript","loadLibraryInHead","scriptNode","eval","textContent","innerHTML","setAttributes","setAttribute","fetchCurrencies","parsedData","fetchGeneralSettings","partialPayCustomMessage","partialPayMessage","getUserInfractions","forgotPasswordValidation","validateCustomerGuidToken","hasWindow","getWindowDimensions","innerHeight","windowDimensions","setWindowDimensions","isQuotation","ModelId","IlimitedKm","parsedBooking","Customer","FirstName","LastName","FiscalConditionId","DocumentId","DocumentTypeId","EmailAddress","Address","AddressNumber","AddressDepartment","CellPhone","ZipCode","Country","City","Region","State","IsCompany","Age","DriverLicenceNumber","DriverLicenceCountry","DriverLicenseExpiration","CustomDeliveryCity","CustomDeliveryAddress","CustomReturnCity","CustomReturnAddress","IsCustomDeliveryAddress","IsCustomReturnAddress","From","To","IsQuotation","PickupEndpoint","PickupId","ReturnEndPoint","ReturnId","Additionals","Quantity","AdditionalId","fullResponse","DeliveryTransportationId","AgencyGuid","CommercialAgreementCode","MaxAllowedDistance","maxAllowedDistance","MaxAllowedDistanceByDay","GlobalId","Driver","fetchBookingsConfiguration","getAttachments","attachFiles","bookingFiles","getFixedT","fallbackLng","stringParams","categoryGroupCollection","cg","StyledApp","StyledError","StyledModernApp","LoginSection","lazy","RegisterSection","CompanyValidateInvitationSection","ForgotPasswordSection","ForgotPasswordValidationSection","ProfileSection","BookingsSection","BookingDetails","InfractionsSection","BlogList","BlogPage","AxleVerificationSection","AppContainer","mobileNavBarShow","pathComponents","createLayoutRoute","createLayoutPageComponent","removeLoading","fetchApiData","tagManagerArgs","gtmId","TagManager","initialize","parentNode","removeChild","fontLink","favicon","customcss","reactDatesCss","pushHistory","retry","isOldVersion","fetch","addResourceBundle","lng","langPath","matchingCurrency","PageComponents","Sections","Components","translatePath","layouts","l","LayoutRoute","compProps","getCommObject","layoutProps","exact","LayoutComponent","comppp","pages","CustomRoute","__Routes","currentRouteName","endsWith","newRoute","substr","googleLocalBusiness","tag","errorPage","setTheme","facebookDomainVerification","blogSettings","googleSearchConsole","StyledTemplatedApp","companyLogin","agencyLogin","Provider","http-equiv","getGoogleLocalBusiness","getOldVersionNavigationMessage","Switch","renderRoutes","enabled","AppContainerComp","AsyncAdminContainer","App","hash","store","Boolean","hostname","use","Backend","LanguageDetector","initReactI18next","init","preload","debug","detection","interpolation","escapeValue","react","wait","appInsights","ApplicationInsights","instrumentationKey","loadAppInsights","trackPageView","setChonkyDefaults","iconComponent","ChonkyIconFA","rootApp","fallback","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.8d11f75f.chunk.js","sourcesContent":["import Paragraph from 'components/CMS/Paragraph/Paragraph';\nimport React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { tt } from 'utils/translationHelper';\n\nconst ExchangeMessage = ({ defaultCurrency, currentCurrency, chargedMsg, chargedMsg2, t }) => {\n const firstLine = tt(chargedMsg, t) || t('chargedMsg');\n const secondLine = tt(chargedMsg2, t) || t('chargedMsg2');\n\n function getExchangeMessage(defaultCurrencyIsoCode, exchangeCurrencyIsoCode, exchangeRate) {\n // the exchange rate is formatted to have the more valuable currency first for more readability\n if (exchangeRate < 1) {\n const exchangeAmount = parseFloat((1 / exchangeRate).toFixed(2));\n return `1 ${exchangeCurrencyIsoCode} = ${exchangeAmount} ${defaultCurrencyIsoCode}`;\n }\n return `1 ${defaultCurrencyIsoCode} = ${exchangeRate} ${exchangeCurrencyIsoCode}`;\n }\n\n const exchangeMessage = getExchangeMessage(\n defaultCurrency?.isoCode,\n currentCurrency?.isoCode,\n currentCurrency?.exchangeRate,\n );\n\n return (\n \n {`${firstLine} ${currentCurrency?.isoCode} ${secondLine} ${exchangeMessage}`}\n \n );\n};\n\nexport default withTranslation()(ExchangeMessage);\n","export const AUTH_CONFIG = {\n domain: 'rentlynetwork.auth0.com',\n clientId: 's9dmRw72Ch40GalR1mg0juG0gprXQ7Mm',\n callbackUrl: process.env.REACT_APP_AUTH_CALLBACK,\n};\n","import { history } from '../store';\nimport auth0 from 'auth0-js';\nimport { AUTH_CONFIG } from './auth0-variables';\n\nclass Auth {\n auth0 = new auth0.WebAuth({\n domain: AUTH_CONFIG.domain,\n clientID: AUTH_CONFIG.clientId,\n redirectUri: window.location.origin + AUTH_CONFIG.callbackUrl,\n audience: 'https://www.rentlynetwork.com/api',\n responseType: 'token id_token',\n scope: 'openid profile customer:support superadmin customer:configure',\n });\n\n constructor() {\n this.login = this.login.bind(this);\n this.logout = this.logout.bind(this);\n this.handleAuthentication = this.handleAuthentication.bind(this);\n this.isAuthenticated = this.isAuthenticated.bind(this);\n this.getAccessToken = this.getAccessToken.bind(this);\n this.getIdToken = this.getIdToken.bind(this);\n this.renewSession = this.renewSession.bind(this);\n }\n\n login() {\n this.auth0.authorize();\n }\n\n handleAuthentication() {\n this.auth0.parseHash((err, authResult) => {\n if (authResult && authResult.accessToken && authResult.idToken) {\n this.setSession(authResult);\n } else if (err) {\n history.replace('/admin');\n\n alert(`Error: ${err.error}. Check the console for further details.`);\n }\n });\n }\n\n getAccessToken() {\n const accessToken = localStorage.getItem('access_token');\n if (!accessToken) {\n throw new Error('No access token found');\n }\n return accessToken;\n }\n\n getIdToken() {\n const idToken = localStorage.getItem('id_token');\n if (!idToken) {\n throw new Error('No access token found');\n }\n return idToken;\n }\n\n setSession(authResult) {\n // Set isLoggedIn flag in localStorage\n localStorage.setItem('isLoggedIn', 'true');\n\n const scopes = authResult.scope || this.requestedScopes || '';\n\n // Set the time that the access token will expire at\n let expiresAt = authResult.expiresIn * 1000 + new Date().getTime();\n\n localStorage.setItem('access_token', authResult.accessToken);\n localStorage.setItem('id_token', authResult.idToken);\n localStorage.setItem('expires_at', expiresAt);\n localStorage.setItem('scopes', JSON.stringify(scopes));\n // navigate to the home route\n history.replace('/admin');\n }\n\n renewSession() {\n this.auth0.checkSession({}, (err, authResult) => {\n if (authResult && authResult.accessToken && authResult.idToken) {\n this.setSession(authResult);\n } else if (err) {\n this.logout();\n\n alert(`Could not get a new token (${err.error}: ${err.error_description}).`);\n }\n });\n }\n\n logout() {\n // Remove tokens and expiry time\n localStorage.removeItem('access_token');\n localStorage.removeItem('id_token');\n localStorage.removeItem('expires_at');\n localStorage.removeItem('scopes');\n\n // Remove isLoggedIn flag from localStorage\n localStorage.removeItem('isLoggedIn');\n\n const returnTo = window.location.origin;\n this.auth0.logout({ returnTo });\n }\n\n isAuthenticated() {\n // Check whether the current time is past the\n // access token's expiry time\n let expiresAt = JSON.parse(localStorage.getItem('expires_at'));\n return new Date().getTime() < expiresAt;\n }\n\n userHasScopes(scopes) {\n const grantedScopes = (JSON.parse(localStorage.getItem('scopes')) || '').split(' ');\n return scopes.every(scope => grantedScopes.includes(scope));\n }\n}\n\nconst AuthService = new Auth();\n\nexport default AuthService;\n","import React from 'react';\nimport { props } from 'components/Title/Title.props';\nimport style from 'styled-components';\nimport { withTranslation } from 'react-i18next';\nimport { TranslatedComponent } from 'components/';\n\nconst StyledParagraph = style.p`\n color: ${props => props.color || props.theme.font.colors.primary};\n ${props => props.italic && `font-style: italic !important;`}\n ${props => `font-weight: ${props.bold ? '900' : props.weight || '400'}`}\n ${props => `font-size: ${props.fontSize || '12px'};`}\n ${props => `line-height: ${props.lineHeight || '22px'};`}\n\n &.centered {\n text-align: center;\n }\n &.left {\n text-align: left;\n }\n &.right {\n text-align: right;\n }\n`;\n\nclass ParagraphComponent extends TranslatedComponent {\n static propTypes = props;\n\n render() {\n const {\n text,\n bold,\n italic,\n className,\n color,\n weight,\n fontSize,\n noMedia,\n nonTranslate,\n lineHeight,\n style,\n } = this.props;\n const hasText = text !== undefined;\n\n let varText = text;\n if (hasText) {\n //TODO: Sacar esto a una clase y agregar soporte para navegar en las propiedades del objeto\n if (text.indexOf('ROUTERPROPS') === 0) {\n try {\n varText = this.props.routerProps.state[text.replace('ROUTERPROPS.', '')];\n } catch {\n varText = text;\n }\n }\n\n return (\n \n );\n } else {\n return (\n \n {this.props.children}\n \n );\n }\n }\n}\n\nexport default withTranslation()(ParagraphComponent);\n","export { default as NotFound } from 'pages/NotFound';\n","export const THIRD = '#fff';\nexport const BORDER_COLOR = '#e7e7e7';\nexport const INPUT_BORDER_COLOR = '#e7e7e7';\nexport const MODERN_THEME = 'modern';\n","import axios from 'axios';\nimport mockApi from 'utils/mockApi'; // uncomment this to try mocks\nimport AuthService from 'auth/AuthService';\n\nclass Fetcher {\n /**\n * @desc Metodo nativo de React.js\n *\n * @doc https://reactjs.org/docs/react-component.html#constructor\n * @return { void }\n */\n constructor() {\n this.apiInstance =\n process.env.NODE_ENV === 'development' && process.env.REACT_APP_USE_MOCK === 'true'\n ? mockApi\n : axios; // uncomment this to try mocks\n this.config = {\n /**\n *\n * HEADER WAS HARDCODED TO TEST PURPOSES *\n * */\n\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Content-Type': 'application/json',\n },\n };\n // headers\n this.dispatch = false;\n }\n\n /**\n * add headers\n * @param { Object } headersArray\n * @return { Headers }\n */\n addHeaders(newHeaders = {}) {\n //\n let { headersArray } = this;\n\n // add headers\n Object.keys(headersArray).length > 0 &&\n headersArray.forEach((prop, value) => {\n headersArray.append(prop, value);\n });\n }\n\n /**\n * perform get request\n * @param { String } endpoint\n * @return { Promise }\n */\n async get(endpoint, needsAuthentication = false) {\n return await this.apiInstance.get(endpoint, this.getConfig(needsAuthentication));\n }\n\n /**\n * perform a post\n * @param { String } endpoint\n * @param { Object } data\n * @return { Promise }\n */\n async post(endpoint, payload, needsAuthentication) {\n const { data } = await this.apiInstance.post(\n endpoint,\n payload,\n this.getConfig(needsAuthentication),\n );\n return data;\n }\n\n /**\n * perform a put\n * @param { String } endpoint\n * @param { Object } data\n * @return { Promise }\n */\n async put(endpoint, payload, needsAuthentication) {\n const { data } = await this.apiInstance.put(\n endpoint,\n payload,\n this.getConfig(needsAuthentication),\n );\n return data;\n }\n\n /**\n * perform a remove request\n * @param { String } endpoint\n * @return { Promise }\n */\n async remove(endpoint, needsAuthentication) {\n let { data } = await this.apiInstance.delete(endpoint, this.getConfig(needsAuthentication));\n return data;\n }\n\n getConfig(addAuthHeader) {\n let config = { ...this.config };\n\n if (addAuthHeader && AuthService.isAuthenticated()) {\n config.headers['authorization'] = `bearer ${AuthService.getAccessToken()}`;\n }\n\n return config;\n }\n}\n\nexport default Fetcher;\n","// Global types\nexport const GLOBAL_SET_LIST_PLACES = 'global_set_places';\nexport const GLOBAL_SET_LIST_CATEGORIES = 'global_set_categories';\nexport const GLOBAL_SET_LIST_PROMOTIONS = 'global_set_promotions';\nexport const GLOBAL_SET_LIST_ADDITIONALS = 'global_set_additionals';\nexport const GLOBAL_SET_LIST_HOLIDAYS = 'global_set_holidays';\nexport const GLOBAL_SET_LIST_SCHEDULES = 'global_set_schedules';\nexport const GLOBAL_SET_LIST_LANGUAGES = 'global_set_languages';\nexport const GLOBAL_SET_LIST_CURRENCIES = 'global_set_currencies';\nexport const GLOBAL_SET_LIST_LANGUAGES_INFO = 'global_set_languages_info';\nexport const GLOBAL_SET_LIST_COUNTRIES = 'global_set_countries';\nexport const GLOBAL_SET_LIST_CITIES = 'global_set_cities';\nexport const GLOBAL_SET_LIST_DOCUMENT_TYPES = 'global_set_document_types';\nexport const GLOBAL_SET_LIST_FISCAL_CONDITIONS = 'global_set_fiscal_conditions';\nexport const GLOBAL_SET_GENERAL_SETTINGS = 'globla_set_general_settings';\nexport const GLOBAL_SET_SPINNER = 'global_set_spinner';\nexport const GLOBAL_SET_WEB_CURRENCY = 'global_set_web_currency';\n\nexport const CHANGE_CURRENCY = 'change_currency';\n\n// Site Configuration types\n\nexport const SITE_CONFIGURATION_SET_SETTINGS = 'site_configuration_set_settings';\n\n// Search Cars types\nexport const SEARCH_CARS_SET_CARS = 'search_cars_set_cars';\nexport const SEARCH_CARS_SET_PARAMS = 'search_cars_set_params';\nexport const SEARCH_CARS_SET_CHECKOUT = 'search_cars_set_checkout';\n\n// Bookings\nexport const BOOKING_SET_BOOK = 'booking_set_book';\nexport const BOOKING_SET_ADDITIONALS = 'booking_set_additionals';\nexport const SET_BOOKING_PAY_INSTALLMENT = 'booking_set_pay_installment';\nexport const BOOKING_SET_CONFIGURATION = 'booking_set_configuration';\nexport const BOOKING_GET_ATTACHMENTS = 'booking_get_attachments';\nexport const BOOKING_ADD_ATTACHMENTS = 'booking_add_attachments';\n\n// Infractions\nexport const SET_INFRACTION = 'set_infraction';\nexport const SET_INFRACTION_PAY_INSTALLMENT = 'infraction_set_pay_installment';\n\n// User Account\nexport const LOG_IN = 'log_in';\nexport const LOG_OUT = 'log_out';\nexport const REGISTER = 'register';\nexport const GET_USER_BOOKINGS = 'get_user_bookings';\nexport const GET_USER_FILES = 'get_user_files';\nexport const UPLOAD_USER_FILES = 'upload_user_files';\nexport const GET_USER_INFRACTIONS = 'get_user_infractions';\nexport const UPDATE_PROFILE = 'update_profile';\nexport const RESET_PASSWORD = 'reset_password';\n","import style from 'styled-components';\n\nexport const StyledNotFound = style.section`\n\tflex:1;\n \t#notfound {width: 100%;}\n\n\t\t#notfound .notfound {\n\t text-align: center;\n\t margin: auto;\n\t margin-top: 7%;\n\t margin-bottom: 6%;\n\t\t}\n\n\t\t.notfound {\n\t\t max-width: 560px;\n\t\t width: 100%;\n\t\t text-align: center;\n\t\t line-height: 1.4;\n\t\t}\n\n\t\t.notfound .notfound-404 {\n\t\t position: relative;\n\t\t width: 180px;\n\t\t height: 180px;\n\t\t margin: 50px auto;\n\t\t}\n\n\t\t.notfound .notfound-404>div:first-child {\n\t\t position: absolute;\n\t\t left: 0;\n\t\t right: 0;\n\t\t top: 0;\n\t\t bottom: 0;\n\t\t background: #ffa200;\n\t\t -webkit-transform: rotate(45deg);\n\t\t -ms-transform: rotate(45deg);\n\t\t transform: rotate(45deg);\n\t\t border: 5px dashed #000;\n\t\t border-radius: 5px;\n\t\t}\n\n\t\t.notfound .notfound-404>div:first-child:before {\n\t\t content: '';\n\t\t position: absolute;\n\t\t left: -5px;\n\t\t right: -5px;\n\t\t bottom: -5px;\n\t\t top: -5px;\n\t\t -webkit-box-shadow: 0px 0px 0px 5px rgba(0, 0, 0, 0.1) inset;\n\t\t box-shadow: 0px 0px 0px 5px rgba(0, 0, 0, 0.1) inset;\n\t\t border-radius: 5px;\n\t\t}\n\n\t\t.notfound .notfound-404 h1 {\n\t\t font-family: 'Montserrat', sans-serif;\n\t\t color: #000;\n\t\t font-weight: 700;\n\t\t margin: 0;\n\t\t font-size: 90px;\n\t\t position: absolute;\n\t\t top: 50%;\n\t\t -webkit-transform: translate(-50%, -50%);\n\t\t -ms-transform: translate(-50%, -50%);\n\t\t transform: translate(-50%, -50%);\n\t\t left: 50%;\n\t\t text-align: center;\n\t\t height: 40px;\n\t\t line-height: 40px;\n\t\t}\n\n\t\t.notfound h2 {\n\t\t font-size: 33px;\n\t\t margin-bottom: 10px;\n\t\t}\n\n\t\t.notfound p {\n\t\t font-size: 16px;\n\t\t color: #000;\n\t\t margin-bottom: 30px;\n }\n `;\n","import React, { Component } from 'react';\nimport { StyledNotFound } from './NotFound.styled';\nimport { withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { PropTypes } from 'prop-types';\nimport { Title } from 'components';\n\nclass NotFoundPage extends Component {\n static propTypes = {\n settings: PropTypes.shape({ title: PropTypes.string }),\n t: PropTypes.func,\n };\n\n componentDidMount() {\n const {\n settings: { configurations },\n t,\n } = this.props;\n\n document.title = `${t('PageNotFound')} | ${configurations.title}`;\n }\n\n render() {\n const { t } = this.props;\n\n return (\n \n
\n
\n
\n
\n

404

\n
\n \n <p>{t('PageNotFoundDescription')}</p>\n </div>\n </div>\n </StyledNotFound>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps)(withTranslation()(NotFoundPage));\n","import NotFound from './NotFound.page';\nexport default NotFound;\n","import {\n GLOBAL_SET_LIST_PLACES,\n GLOBAL_SET_LIST_CURRENCIES,\n GLOBAL_SET_LIST_CATEGORIES,\n GLOBAL_SET_LIST_PROMOTIONS,\n GLOBAL_SET_LIST_ADDITIONALS,\n GLOBAL_SET_SPINNER,\n GLOBAL_SET_LIST_LANGUAGES,\n GLOBAL_SET_LIST_LANGUAGES_INFO,\n GLOBAL_SET_LIST_HOLIDAYS,\n GLOBAL_SET_LIST_SCHEDULES,\n GLOBAL_SET_LIST_COUNTRIES,\n GLOBAL_SET_LIST_CITIES,\n GLOBAL_SET_LIST_DOCUMENT_TYPES,\n GLOBAL_SET_LIST_FISCAL_CONDITIONS,\n GLOBAL_SET_GENERAL_SETTINGS,\n GLOBAL_SET_WEB_CURRENCY,\n CHANGE_CURRENCY,\n} from '../utils/types';\n\nconst INITIAL_STATE = {\n listPlaces: null,\n listCategories: null,\n listPromotions: null,\n listAdditionals: null,\n listSchedules: null,\n listHolidays: null,\n listCurrencies: null,\n defaultCurrency: null,\n listLanguages: null,\n listLanguagesInfo: null,\n listCountries: null,\n listCities: null,\n listDocumentTypes: null,\n listFiscalConditions: null,\n currentLanguage: 'es',\n spinner: false,\n generalSettings: null,\n currentCurrency: null,\n webCurrency: null,\n};\n\nexport default (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case GLOBAL_SET_LIST_PLACES: {\n return {\n ...state,\n listPlaces: action.payload,\n };\n }\n case GLOBAL_SET_LIST_CURRENCIES: {\n const defaultCurrency = action.payload.find(currency => currency.isSystemDefault === true);\n return {\n ...state,\n listCurrencies: action.payload,\n defaultCurrency,\n };\n }\n\n case GLOBAL_SET_WEB_CURRENCY: {\n return {\n ...state,\n webCurrency: action.payload,\n };\n }\n\n case CHANGE_CURRENCY: {\n return {\n ...state,\n currentCurrency: action.payload,\n };\n }\n\n case GLOBAL_SET_LIST_CATEGORIES: {\n return {\n ...state,\n listCategories: action.payload,\n };\n }\n case GLOBAL_SET_LIST_PROMOTIONS: {\n return {\n ...state,\n listPromotions: action.payload,\n };\n }\n case GLOBAL_SET_LIST_ADDITIONALS: {\n return {\n ...state,\n listAdditionals: action.payload,\n };\n }\n case GLOBAL_SET_LIST_HOLIDAYS: {\n return {\n ...state,\n listHolidays: action.payload,\n };\n }\n case GLOBAL_SET_LIST_SCHEDULES: {\n return {\n ...state,\n listSchedules: action.payload,\n };\n }\n case GLOBAL_SET_LIST_LANGUAGES: {\n return {\n ...state,\n listLanguages: action.payload,\n };\n }\n case GLOBAL_SET_LIST_LANGUAGES_INFO: {\n return {\n ...state,\n listLanguagesInfo: action.payload,\n };\n }\n case GLOBAL_SET_LIST_COUNTRIES: {\n return {\n ...state,\n listCountries: action.payload,\n };\n }\n case GLOBAL_SET_LIST_CITIES: {\n return {\n ...state,\n listCities: action.payload,\n };\n }\n case GLOBAL_SET_SPINNER: {\n return {\n ...state,\n spinner: action.payload,\n };\n }\n case GLOBAL_SET_LIST_DOCUMENT_TYPES: {\n return {\n ...state,\n listDocumentTypes: action.payload,\n };\n }\n case GLOBAL_SET_LIST_FISCAL_CONDITIONS: {\n return {\n ...state,\n listFiscalConditions: action.payload,\n };\n }\n case GLOBAL_SET_GENERAL_SETTINGS: {\n return {\n ...state,\n generalSettings: action.payload,\n };\n }\n\n default:\n return state;\n }\n};\n","import { SITE_CONFIGURATION_SET_SETTINGS } from '../utils/types';\n\nconst INITIAL_STATE = { settings: {} };\n\nexport default (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case SITE_CONFIGURATION_SET_SETTINGS: {\n return {\n ...state,\n settings: action.payload,\n };\n }\n default:\n return state;\n }\n};\n","import moment from 'moment';\nimport {\n SEARCH_CARS_SET_CARS,\n SEARCH_CARS_SET_PARAMS,\n SEARCH_CARS_SET_CHECKOUT,\n} from '../utils/types';\n\nconst START_DATE = moment(new Date()).add(3, 'd');\nconst START_HOUR = '12';\n\nconst INITIAL_STATE = {\n cars: [],\n params: {\n categories: [],\n pickUp: {\n moment: moment(START_DATE),\n hour: START_HOUR,\n },\n dropOff: {\n moment: moment(START_DATE).add(4, 'd'),\n hour: START_HOUR,\n },\n customPromotionCode: null,\n },\n checkout: {\n booking: null,\n },\n prices: {},\n};\n\nexport default (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case SEARCH_CARS_SET_CARS: {\n return {\n ...state,\n cars: action.payload.cars,\n loading: action.payload.loading,\n error: action.payload.error,\n };\n }\n case SEARCH_CARS_SET_PARAMS: {\n return {\n ...state,\n params: action.payload,\n };\n }\n case SEARCH_CARS_SET_CHECKOUT: {\n return {\n ...state,\n checkout: action.payload,\n };\n }\n default:\n return state;\n }\n};\n","import {\n BOOKING_SET_BOOK,\n BOOKING_SET_ADDITIONALS,\n SET_BOOKING_PAY_INSTALLMENT,\n BOOKING_SET_CONFIGURATION,\n BOOKING_GET_ATTACHMENTS,\n} from '../utils/types';\n\nconst INITIAL_STATE = {\n confirmation: null,\n listAdditionals: null,\n installment: null,\n configuration: null,\n bookingAttachments: null,\n};\n\nexport default (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case BOOKING_SET_BOOK: {\n return {\n ...state,\n confirmation: action.payload,\n };\n }\n\n case BOOKING_SET_ADDITIONALS: {\n return {\n ...state,\n listAdditionals: action.payload,\n };\n }\n\n case SET_BOOKING_PAY_INSTALLMENT: {\n return {\n ...state,\n installment: action.payload,\n };\n }\n\n case BOOKING_SET_CONFIGURATION: {\n return {\n ...state,\n configuration: action.payload,\n };\n }\n\n case BOOKING_GET_ATTACHMENTS: {\n return {\n ...state,\n bookingAttachments: action.payload,\n };\n }\n\n default:\n return state;\n }\n};\n","import { SET_INFRACTION, SET_INFRACTION_PAY_INSTALLMENT } from '../utils/types';\n\nconst INITIAL_STATE = {\n infraction: null,\n};\n\nexport default (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case SET_INFRACTION: {\n return {\n ...state,\n current: action.payload,\n };\n }\n\n case SET_INFRACTION_PAY_INSTALLMENT: {\n return {\n ...state,\n installment: action.payload,\n };\n }\n\n default:\n return state;\n }\n};\n","import {\n LOG_IN,\n LOG_OUT,\n GET_USER_BOOKINGS,\n GET_USER_INFRACTIONS,\n UPDATE_PROFILE,\n RESET_PASSWORD,\n GET_USER_FILES,\n} from '../utils/types';\n\nconst INITIAL_STATE = {\n isAuthenticated: false,\n profile: null,\n userBookings: {},\n userInfractions: {},\n userFiles: {},\n};\n\nexport default (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case LOG_IN: {\n return {\n ...state,\n isAuthenticated: true,\n profile: action.payload,\n };\n }\n\n case LOG_OUT: {\n return {\n ...state,\n isAuthenticated: false,\n profile: null,\n };\n }\n\n case GET_USER_BOOKINGS: {\n return {\n ...state,\n userBookings: action.payload,\n };\n }\n\n case GET_USER_INFRACTIONS: {\n return {\n ...state,\n userInfractions: action.payload,\n };\n }\n\n case GET_USER_FILES: {\n return {\n ...state,\n userFiles: action.payload,\n };\n }\n\n case UPDATE_PROFILE: {\n return {\n ...state,\n profile: action.payload,\n };\n }\n\n case RESET_PASSWORD: {\n return {\n ...state,\n isAuthenticated: false,\n profile: null,\n };\n }\n\n default:\n return state;\n }\n};\n","import { createStore, applyMiddleware, compose } from 'redux';\nimport thunk from 'redux-thunk';\nimport { routerMiddleware } from 'connected-react-router';\nimport { createBrowserHistory } from 'history';\nimport rootReducer from 'reducers';\nimport { logger } from 'redux-logger';\n\nexport const history = createBrowserHistory();\nconst middlewares = [thunk, routerMiddleware(history)];\n\nlet devTool = null;\n\nif (process.env.NODE_ENV === 'development') {\n devTool = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n : null;\n middlewares.push(logger);\n}\nconst composeEnhancers = devTool || compose;\n\nexport default createStore(rootReducer(history), composeEnhancers(applyMiddleware(...middlewares)));\n","import { combineReducers } from 'redux';\nimport { connectRouter } from 'connected-react-router';\nimport global from './global.reducer';\nimport siteConfiguration from './siteConfiguration.reducer';\nimport searchCars from './searchCars.reducer';\nimport bookings from './bookings.reducer';\nimport infractions from './infractions.reducer';\nimport user from './user.reducer';\n\nexport default history =>\n combineReducers({\n router: connectRouter(history),\n global,\n searchCars,\n siteConfiguration,\n bookings,\n infractions,\n user,\n });\n","import axios from 'axios';\nimport mockApi from 'utils/mockApi'; // uncomment this to try mocks\n\nclass UserFetcher {\n constructor() {\n this.apiInstance =\n process.env.NODE_ENV === 'development' && process.env.REACT_APP_USE_MOCK === 'true'\n ? mockApi\n : axios; // uncomment this to try mocks\n this.config = {\n credentials: true,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n };\n // headers\n this.dispatch = false;\n }\n\n /**\n * add headers\n * @param { Object } headersArray\n * @return { Headers }\n */\n addHeaders(newHeaders = {}) {\n //\n let { headersArray } = this;\n\n // add headers\n Object.keys(headersArray).length > 0 &&\n headersArray.forEach((prop, value) => {\n headersArray.append(prop, value);\n });\n }\n\n /**\n * perform get request\n * @param { String } endpoint\n * @return { Promise }\n */\n async get(endpoint) {\n return await this.apiInstance.get(endpoint, this.config);\n }\n\n /**\n * perform a post\n * @param { String } endpoint\n * @param { Object } data\n * @return { Promise }\n */\n async post(endpoint, payload, needsAuthentication) {\n const { data } = await this.apiInstance.post(endpoint, payload, this.config);\n return data;\n }\n\n /**\n * perform a put\n * @param { String } endpoint\n * @param { Object } data\n * @return { Promise }\n */\n async put(endpoint, payload, needsAuthentication) {\n const { data } = await this.apiInstance.put(endpoint, payload, this.config);\n return data;\n }\n\n /**\n * perform a remove request\n * @param { String } endpoint\n * @return { Promise }\n */\n async remove(endpoint) {\n let { data } = await this.apiInstance.delete(endpoint, this.config);\n return data;\n }\n}\n\nexport default UserFetcher;\n","module.exports = \"data:image/png;base64,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\"","import style from 'styled-components';\n\nexport const StyledHeroBanner = style.section`\n\tbackground: ${props => (props.background ? `url(${props.background}) no-repeat` : `#ccc`)};\n\tbackground-size: cover;\n\tmin-height: 600px;\n\tpadding: 30px 20px;\n \n .home-form {\n \n @media only screen and (max-width: 1800px)\n {\n flex: auto !important;\n max-width: fit-content;\n }\n @media only screen and (min-width: ${props => props.theme.screens.xl}){\n max-width: 50%;\n }\n }\n\n .quoted h3 {\n font-weight: ${props => props.fontWeight || 300};\n font-size: ${props => props.fontSize || '30px'};\n color: ${props => props.titleColor || props.theme.font.colors.secondary};\n text-transform: none;\n margin-bottom: 15px;\n margin-left: 10px;\n\n @media only screen and (max-width: 766px) {\n font-size: 23px;\n \tmargin-bottom: 10px;\n \tmargin-top: 10px;\n }\n }\n`;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n title: PropTypes.string,\n titleColor: PropTypes.string,\n background: PropTypes.string,\n backgroundAlt: PropTypes?.string,\n mobileBackground: PropTypes?.string,\n fontWeight: PropTypes.string,\n fontSize: PropTypes.any,\n noParallax: PropTypes.bool,\n t: PropTypes.func,\n showSecondColumn: PropTypes.bool,\n secondColumnConfig: PropTypes.any,\n};\n","import style from 'styled-components';\n\nexport const StyledHeroBannerModern = style.section`\n\tbackground: ${props => (props.background ? `url(${props.background}) no-repeat` : `#ccc`)};\n\tbackground-size: cover !important;\n background-attachment: initial !important;\n\tpadding: 50px 20px;\n \n \n .home-form{\n min-width:85%;\n margin:0 auto;\n\n @media only screen and (max-width: 766px) {\n top:0\n }\n \n @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 1) {\n top:0\n }\n }\n\n .home-form {\n \n @media only screen and (max-width: 1800px)\n {\n flex: auto !important;\n max-width: 100%;\n }\n @media only screen and (min-width: ${props => props.theme.screens.xl}){\n max-width: 50%;\n }\n }\n\n .quoted h3 {\n font-weight: ${props => props.fontWeight || 400};\n font-size: 40px !important;\n color: ${props => props.titleColor || props.theme.font.colors.secondary};\n text-transform: none;\n margin-left: 10px;\n\n @media only screen and (max-width: 766px) {\n font-size: 29px !important;\n \tmargin-bottom: 10px;\n \tmargin-top: 10px;\n }\n }\n`;\n","import HeroBanner from './HeroBanner';\nexport default HeroBanner;\n","import React from 'react';\nimport { StyledHeroBanner } from './HeroBanner.styled';\nimport { props } from './HeroBanner.prop';\nimport { Title, CompositeComponent } from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport { StyledHeroBannerModern } from './HeroBanner.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport withSettingsContext from 'SettingsContext';\nimport useWindowDimensions from 'utils/windowHelper';\nimport { tt } from 'utils/translationHelper';\n\nconst HeroBanner = props => {\n const setContentPosition = () => {\n switch (props.contentPosition) {\n case 'right':\n return 'justify-content-end';\n case 'center':\n return 'justify-content-center';\n default:\n return 'justify-content-start';\n }\n };\n\n const getTemplateStyledComponent = () => {\n if (props.settings.theme.template === MODERN_THEME) {\n return StyledHeroBannerModern;\n }\n return StyledHeroBanner;\n };\n\n const {\n title,\n background,\n backgroundAlt,\n mobileBackground,\n type,\n t,\n titleColor,\n fontWeight,\n fontSize,\n noParallax,\n showSecondColumn,\n secondColumnConfig,\n } = props;\n\n const columnSeparation = showSecondColumn ? 'col-md-6' : 'col-md-5';\n const setParallax = noParallax ? 'row row-p pb-5' : 'row row-p parallax pb-5';\n const contentPosition = setContentPosition();\n const StyledSection = getTemplateStyledComponent();\n const { width } = useWindowDimensions();\n const isMobile = width < 768;\n\n return (\n <StyledSection\n background={(isMobile && t(mobileBackground)) || t(background)}\n className={`${setParallax} ${contentPosition}`}\n titleColor={titleColor}\n fontWeight={fontWeight}\n fontSize={fontSize}\n title={tt(backgroundAlt, t)}\n >\n <div className={`home-form ${columnSeparation}`}>\n <Title\n type={type ? type : 'h3'}\n text={title}\n italic={false}\n className=\"quoted\"\n fontSize={fontSize}\n />\n <CompositeComponent sections={props.sections} />\n </div>\n {showSecondColumn && (\n <div className={`book-form ${columnSeparation}`}>\n <Title\n type={type ? type : 'h3'}\n text={secondColumnConfig.title}\n italic={false}\n className=\"quoted\"\n fontSize={fontSize}\n />\n <CompositeComponent sections={secondColumnConfig.sections} />\n </div>\n )}\n </StyledSection>\n );\n};\n\nHeroBanner.propTypes = props;\n\nexport default withSettingsContext(withTranslation()(HeroBanner));\n","import PropTypes from 'prop-types';\n\nexport const props = {\n t: PropTypes.func,\n title: PropTypes.string,\n items: PropTypes.array,\n className: PropTypes.string,\n settings: PropTypes.object,\n slideHeight: PropTypes.string,\n slideMobileHeight: PropTypes.string,\n quotedColor: PropTypes.string,\n quotedMobileColor: PropTypes.string,\n dotsColor: PropTypes.string,\n dotsSize: PropTypes.string,\n sliderCustomSettings: PropTypes.object,\n};\n","import style from 'styled-components';\nimport styled from 'styled-components';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\n\nexport const StyledLazyLoadImage = styled(LazyLoadImage)`\n width: 100%;\n height: ${props => props.slideHeight || '600px'};\n object-fit: cover;\n object-position: center right;\n\n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n height: ${props => props.slideMobileHeight || '250px'};\n }\n`;\n\nexport const StyledSlider = style.section`\n margin-right: -15px;\n margin-left: -15px; \n\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n display: flex;\n flex-direction: column;\n }\n\n .slider{\n height: ${props => props.slideHeight || '600px'};\n z-index: 0;\n order: 1;\n overflow: hidden;\n\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n height: ${props => props.slideMobileHeight || '250px'};\n \n }\n }\n .row{\n order: 2;\n }\n .home-form {\n position: absolute;\n z-index: 1;\n max-width: fit-content;\n \n @media only screen and (max-width: 1800px) {\n flex: auto !important;\n }\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n position: relative; \n padding: 0;\n margin-top: 2rem !important;\n\n .quoted {\n color: ${props => props.quotedMobileColor || props.theme.font.colors.primary};\n text-align: center; \n border-bottom: 1px solid #f2f2f2;\n width: 87%;\n margin: auto;\n }\n form {\n box-shadow: 0px 8px 11px rgba(0,0,0,0.05);\n }\n }\n }\n .quoted {\n color: ${props => props.quotedColor || '#fff'};\n }\n\n .lazy-load-image-background.blur.lazy-load-image-loaded {\n width: 100% !important;\n }\n\n .slick-dots {\n bottom: 25px;\n\n li button:before {\n color: ${props => props.dotsColor || '#fff'};\n font-size: ${props => props.dotsSize || '11px'};\n }\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n bottom: 15px;\n\n li button:before {\n font-size: 9px;\n }\n }\n }\n`;\n\nexport const StyledItem = style.div`\n width: 100%;\n background-image: url(${props => props['data-src'] || ''});\n background-size: cover;\n height: ${props => props.slideHeight || '600px'};\n background-position: center right;\n\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n height: ${props => props.slideMobileHeight || '250px'};\n \n }\n`;\n","import React from 'react';\nimport { props } from './SliderComponent.prop';\nimport Slider from 'react-slick';\nimport { StyledSlider, StyledItem, StyledLazyLoadImage } from './SliderComponent.styled';\nimport { withTranslation } from 'react-i18next';\nimport { CompositeComponent, Title } from 'components/';\nimport { Link } from 'react-router-dom';\nimport { tt } from 'utils/translationHelper';\n\nconst sliderSettings = {\n dots: true,\n infinite: false,\n slidesToScroll: 1,\n slidesToShow: 1,\n autoplay: true,\n adaptiveHeight: false,\n responsive: [\n {\n breakpoint: 1000,\n settings: {\n slidesToShow: 1,\n },\n },\n ],\n};\n\nclass SliderComponent extends React.Component {\n static propTypes = props;\n\n constructor(props) {\n super(props);\n this.state = {\n isMobile: false,\n };\n this.handleResize = this.handleResize.bind(this);\n this.itemsRef = [];\n }\n\n handleResize() {\n const isMobile = window.innerWidth <= 600;\n this.setState({ isMobile });\n }\n\n setContentPosition = () => {\n switch (this.props.contentPosition) {\n case 'right':\n return 'justify-content-end';\n case 'center':\n return 'justify-content-center';\n default:\n return 'justify-content-start';\n }\n };\n\n componentDidMount() {\n window.addEventListener('resize', this.handleResize);\n this.handleResize();\n this.itemsRef.forEach(itemRef => {\n if (itemRef) {\n const itemSrc = itemRef.getAttribute('data-src');\n const observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n // Load the background image\n itemRef.style.backgroundImage = `url(${itemSrc})`;\n observer.unobserve(entry.target);\n }\n });\n },\n { threshold: 0.9 },\n );\n observer.observe(itemRef);\n }\n });\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.handleResize);\n }\n\n render() {\n const {\n t,\n items,\n className,\n type,\n title,\n italic,\n weight,\n slideHeight,\n quotedColor,\n dotsColor,\n dotsSize,\n slideMobileHeight,\n quotedMobileColor,\n sliderCustomSettings,\n } = this.props;\n\n const { isMobile } = this.state;\n\n const settings = {\n ...sliderSettings,\n ...(sliderCustomSettings ? sliderCustomSettings : {}),\n };\n\n return (\n <StyledSlider\n slideHeight={slideHeight}\n quotedColor={quotedColor}\n dotsColor={dotsColor}\n dotsSize={dotsSize}\n slideMobileHeight={slideMobileHeight}\n quotedMobileColor={quotedMobileColor}\n className={`${className && className} `}\n >\n <div className={`row row-p ${this.setContentPosition()}`}>\n <div className=\"home-form col-md-5 mt-5\">\n <Title\n type={type ? type : 'h3'}\n text={title}\n italic={italic ? italic : false}\n weight={weight}\n className=\"quoted\"\n />\n <CompositeComponent sections={this.props.sections} />\n </div>\n </div>\n <Slider {...settings} className=\"slider\">\n {items.map((item, i) => (\n <Link key={i} to={tt(item.link, t) || '/'}>\n <StyledItem ref={el => (this.itemsRef[i] = el)}>\n <StyledLazyLoadImage\n alt={t(item.alt)}\n src={(isMobile && t(item.mobileImg)) || t(item.image)}\n effect=\"blur\"\n />\n </StyledItem>\n </Link>\n ))}\n </Slider>\n </StyledSlider>\n );\n }\n}\n\nexport default withTranslation()(SliderComponent);\n","import SliderComponent from './SliderComponent';\nexport default SliderComponent;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n title: PropTypes.string.isRequired,\n titleSecondLine: PropTypes.string,\n subTitle: PropTypes.string.isRequired,\n buttonText: PropTypes.string.isRequired,\n buttonLink: PropTypes.string.isRequired,\n listPromotions: PropTypes.array,\n color: PropTypes.string,\n bgColor: PropTypes.string,\n interval: PropTypes.number,\n titleStyle: PropTypes.string,\n titleWeight: PropTypes.string,\n buttonBkg: PropTypes.string,\n buttonColor: PropTypes.string,\n buttonBkgHover: PropTypes.string,\n buttonColorHover: PropTypes.string,\n titleTransform: PropTypes.string,\n secondaryBtn: PropTypes.bool,\n};\n","import styled from 'styled-components';\n\nexport const StyledPromotions = styled.section`\n background-color: ${props => props.bgColor || '#f2f2f2'};\n color: ${props => props.color || '#6f6f6f'} !important;\n\n h3,\n div h3 {\n font-weight: ${props => props.titleWeight || 'bold'};\n font-style: ${props => props.titleStyle || 'normal'};\n text-transform: ${props => props.titleTransform || 'uppercase'};\n color: ${props => props.color || '#6f6f6f'} !important;\n }\n\n p.lead {\n margin-top: 0;\n font-size: 1.25rem;\n font-weight: 300;\n margin-bottom: 3rem;\n color: ${props => props.color || '#6f6f6f'} !important;\n\n @media (max-width: ${props => props.theme.screens.lg}) {\n font-size: 1rem;\n }\n }\n\n .section-promo-carousel-container {\n margin: 3rem 0;\n }\n\n .promo-image {\n max-height: 500px;\n }\n button {\n color: ${props => props.buttonColor || '#fff'};\n background: ${props => props.buttonBkg || props.theme.colors.primary};\n &:hover {\n background: ${props => props.buttonBkgHover || 'inhearit'};\n color: ${props => props.buttonColorHover || '#inhearit'};\n }\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n padding-top: 2rem !important;\n\n div.promo-title {\n padding: 4% !important;\n }\n }\n\n p,\n button {\n @media (max-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n`;\n","import styled from 'styled-components';\n\nexport const StyledPromotionsModern = styled.section`\n background-color: ${props => props.bgColor || '#f4f4f4'};\n color: ${props => props.color || '#6f6f6f'} !important;\n margin: 50px;\n border-radius: 12px;\n\n h3,\n div h3 {\n font-weight: ${props => props.titleWeight || '400'};\n font-style: ${props => props.titleStyle || 'normal'};\n color: ${props => props.color || props.theme.colors.primary} !important;\n margin-bottom: 50px;\n }\n\n p.lead {\n margin-top: 0;\n font-size: 1.25rem;\n font-weight: 400;\n margin-bottom: 3rem;\n color: ${props => props.color || '#656970'} !important;\n\n @media (max-width: ${props => props.theme.screens.lg}) {\n font-size: 1rem;\n }\n }\n\n button {\n color: ${({ buttonColor, secondaryBtn, theme }) =>\n buttonColor || secondaryBtn ? theme.colors.primary : '#fff'};\n background: ${({ buttonBkg, secondaryBtn, theme }) =>\n buttonBkg || secondaryBtn ? 'transparent' : theme.colors.primary};\n border: ${({ secondaryBtn, theme }) =>\n secondaryBtn ? `1px solid ${theme.colors.primary}` : ''};\n &:hover {\n background: ${({ buttonBkgHover, secondaryBtn, theme }) =>\n buttonBkgHover || secondaryBtn ? theme.colors.primary : 'inhearit'};\n color: ${({ buttonColorHover, secondaryBtn }) =>\n buttonColorHover || secondaryBtn ? '#fff' : '#inhearit'};\n }\n }\n\n .promo-title {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n }\n\n .carousel-wrapper {\n display: flex;\n align-items: center;\n\n .carousel {\n width: 100%;\n }\n }\n\n .carousel-inner {\n border-radius: 15px;\n }\n\n .carousel-item span img {\n width: 100%;\n }\n\n .section-promo-carousel-container {\n margin: 3rem 0;\n }\n\n .promo-image {\n max-height: 500px;\n border-radius: 12px;\n }\n\n button {\n display: ${props => props.btnDisplay || 'flex'};\n padding: 15px;\n border-radius: 8px;\n }\n\n @media (max-width: ${props => props.theme.screens.xs}) {\n margin: 25px 5px;\n\n h3,\n div h3 {\n font-size: 25px !important;\n }\n .promo-image {\n border-radius: 5px;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n padding-top: 2rem !important;\n\n div.promo-title {\n padding: 4% !important;\n }\n }\n\n @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 1) {\n margin: 25px 0;\n }\n`;\n","import React from 'react';\nimport { props } from './Promociones.props';\nimport { Carousel } from 'react-bootstrap';\nimport { TranslatedComponent, Btn, Title, Paragraph, Loading } from 'components/';\nimport { StyledPromotions } from './Promotions.styled';\nimport { withTranslation } from 'react-i18next';\nimport { tlink } from 'utils/translationHelper';\nimport withSettingsContext from 'SettingsContext';\nimport { StyledPromotionsModern } from './Promotions.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\n\nclass Promotions extends TranslatedComponent {\n state = {\n loading: true,\n };\n\n async componentDidMount() {\n const { fetchPromotions, i18n } = this.props;\n\n try {\n await fetchPromotions(i18n.language);\n } catch {}\n\n this.setState(prevState => ({\n ...prevState,\n loading: false,\n }));\n }\n\n handleButtonClick = () => {\n const { history, buttonLink, t, i18n, settings } = this.props;\n history.push(tlink(buttonLink, t, i18n, null, settings.configurations.langConfig));\n window.scrollTo(0, 0);\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledPromotionsModern;\n }\n return StyledPromotions;\n }\n\n render() {\n const {\n title,\n titleType,\n titleSecondLine,\n subTitle,\n buttonText,\n color,\n listPromotions,\n bgColor,\n buttonBkg,\n buttonColor,\n buttonBkgHover,\n buttonColorHover,\n titleWeight,\n titleStyle,\n interval,\n titleTransform,\n secondaryBtn,\n excludedPromotions,\n includedPromotions,\n } = this.props;\n\n const StyledSection = this.getTemplateStyledComponent();\n\n let listPromotionsAux = listPromotions;\n\n if (\n listPromotionsAux != null &&\n listPromotionsAux.length > 0 &&\n includedPromotions !== undefined &&\n includedPromotions.length > 0\n ) {\n listPromotionsAux = listPromotions.filter(f => includedPromotions.includes(f.id));\n } else if (\n listPromotionsAux != null &&\n listPromotionsAux.length > 0 &&\n excludedPromotions !== undefined\n ) {\n listPromotionsAux = listPromotions.filter(f => !excludedPromotions.includes(f.id));\n } else {\n listPromotionsAux = listPromotions;\n }\n\n return (\n <StyledSection\n className=\"row row-p pt-5 pb-5\"\n color={color}\n bgColor={bgColor}\n buttonBkg={buttonBkg}\n buttonBkgHover={buttonBkgHover}\n buttonColor={buttonColor}\n buttonColorHover={buttonColorHover}\n titleWeight={titleWeight}\n titleStyle={titleStyle}\n titleTransform={titleTransform}\n secondaryBtn={secondaryBtn}\n >\n <div className=\"col-md-4 pt-5 pb-5 promo-title\">\n <Title type={titleType || 'h3'} text={this.tt(title)} />\n <Title type=\"h3\" text={this.tt(titleSecondLine)} />\n <Paragraph className=\"mb-5 lead\" text={subTitle} />\n {buttonText && <Btn text={this.tt(buttonText)} onClick={this.handleButtonClick} />}\n </div>\n <div className=\"col-md-7 offset-md-1 carousel-wrapper\">\n <Carousel controls={false} interval={interval || 2000}>\n {this.state.loading ? (\n <Loading show />\n ) : (\n listPromotionsAux &&\n listPromotionsAux.map((promo, key) => (\n <Carousel.Item key={`${key}-${promo.name}`}>\n <LazyLoadImage\n alt={`${key}-${promo.name}`}\n src={promo.imagePath}\n threshold={100}\n effect=\"blur\"\n wrapperClassName=\"d-block w-100 promo-image\"\n />\n </Carousel.Item>\n ))\n )}\n </Carousel>\n </div>\n </StyledSection>\n );\n }\n}\n\nPromotions.propTypes = props;\nexport default withSettingsContext(withTranslation()(Promotions));\n","import Promociones from './Promociones';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { fetchPromotions } from 'actions';\n\nconst mapStateToProps = ({ global }) => ({\n listPromotions: global.listPromotions,\n});\n\nexport default withRouter(\n connect(mapStateToProps, {\n fetchPromotions,\n })(Promociones),\n);\n","import PropTypes from 'prop-types';\n\nexport const props = {\n title: PropTypes.string.isRequired,\n subTitle: PropTypes.string,\n leftTitle: PropTypes.string,\n leftStrongTitle: PropTypes.string,\n leftLinkText: PropTypes.string,\n leftLinkUrl: PropTypes.string,\n leftLinkHover: PropTypes.string,\n items: PropTypes.array.isRequired,\n};\n","import style from 'styled-components';\n\nexport const StyledPagaEnCuotas = style.section`\n background: ${(props) => props.bg || props.theme.colors.bg};\n text-align: center;\n overflow-x: hidden;\n\n .home-title {\n margin-top: 5em;\n line-height: 1.5;\n\n h1{\n margin-bottom:0px;\n }\n\n p {\n line-height: 22px;\n font-size: 21px;\n font-weight: 400;\n margin-bottom: 1rem;\n }\n }\n`;\n\nexport const StyledBanksSection = style.section`\n\n border-bottom: ${(props) => (props.showBorder ? '3px' : 0)} solid ${(props) =>\n props.borderColor || props.theme.colors.primary};\n padding-bottom: ${(props) => (props.showBorder ? '30px' : 0)};\n\n h4 {\n font-size: 20px;\n font-style: normal;\n font-weight: 400;\n margin-top: 2em;\n\n strong {\n font-weight: 700;\n }\n }\n p{\n text-transform: uppercase;\n font-size: 0.8rem;\n padding: 0 30px;\n }\n\n a {\n font-size: 13px !important;\n color: ${(props) => props.theme.font.colors.third};\n transition: all .2s;\n }\n\n a:hover {\n text-decoration: none;\n color: ${(props) => props.leftLinkHover || props.theme.font.colors.third} !important; \n }\n\n img {\n cursor: grab;\n }\n\n div.img {\n height: fit-content;\n text-align: center;\n height: 100px;\n width: 150px;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n margin: auto;\n }\n\n .slick-track{\n margin: auto auto;\n }\n\n .slick-next{\n right: -10px;\n }\n \n .slick-prev{\n left: -10px;\n }\n\n .slick-next:before {\n content: \"\\f105\" !important;\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n color: #ccc\n \n }\n\n .slick-prev:before {\n content: \"\\f104\" !important;\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n color: #ccc\n }\n\n`;\n","import React from 'react';\nimport { props } from '../PagaEnCuotas.props';\nimport { StyledPagaEnCuotas, StyledBanksSection } from './index.styles';\nimport Slider from 'react-slick';\nimport { TranslatedComponent, Title } from 'components/';\nimport { withTranslation } from 'react-i18next';\n\nconst sliderSettings = {\n dots: false,\n infinite: false,\n slidesToScroll: 1,\n slidesToShow: 6,\n autoplay: true,\n responsive: [\n {\n breakpoint: 1000,\n settings: {\n slidesToShow: 4,\n },\n },\n {\n breakpoint: 770,\n settings: {\n slidesToShow: 3,\n },\n },\n {\n breakpoint: 600,\n settings: {\n slidesToShow: 2,\n },\n },\n ],\n};\n\nclass DefaultPagaEnCuotas extends TranslatedComponent {\n static propTypes = props;\n\n render() {\n const {\n title,\n titleType,\n subTitle,\n leftTitle,\n leftStrongTitle,\n leftLinkText,\n leftLinkUrl,\n items,\n showBorder,\n borderColor,\n leftLinkHover,\n hideTitle,\n } = this.props;\n return (\n <>\n {hideTitle === true ? (\n ''\n ) : (\n <StyledPagaEnCuotas className=\"row row-p\">\n <div className=\"home-title text-center ml-auto mr-auto mt-5 mb-2\">\n <Title text={this.tt(title)} type={titleType || 'h1'} />\n <p>{this.tt(subTitle)}</p>\n </div>\n </StyledPagaEnCuotas>\n )}\n <StyledBanksSection\n className=\"home-banks row row-p mb-4 pt-4 mt-2\"\n showBorder={showBorder}\n borderColor={borderColor}\n leftLinkHover={leftLinkHover}\n >\n {leftTitle && (\n <div className=\"col-md-3 col-lg-2 mb-3 text-center\">\n <h4>\n {this.tt(leftTitle)}\n <br />\n <strong>{this.tt(leftStrongTitle)}</strong>\n </h4>\n <a target=\"_blank\" rel=\"noreferrer noopener\" href={this.tt(leftLinkUrl)}>\n <i className=\"fa fa-angle-right\" /> {this.tt(leftLinkText)}\n </a>\n </div>\n )}\n <div className={leftTitle ? 'col-md-9 col-lg-10' : 'col-md-12 centered'}>\n <Slider {...sliderSettings}>\n {items.map((promo, key) => (\n <div key={key}>\n <div\n className=\"img\"\n style={{\n backgroundImage: 'url(' + this.tt(promo.imgSrc) + ')',\n }}\n />\n {this.tt(promo.name) && <p className=\"text-center\">{this.tt(promo.name)}</p>}\n </div>\n ))}\n </Slider>\n </div>\n </StyledBanksSection>\n </>\n );\n }\n}\n\nexport default withTranslation()(DefaultPagaEnCuotas);\n","import style from 'styled-components';\n\nexport const StyledPagaEnCuotas = style.section`\n background: ${props => props.bg || props.theme.colors.bg};\n text-align: center;\n overflow-x: hidden;\n\n .home-title {\n margin-top: 5em;\n line-height: 1.5;\n position:relative;\n left:50px;\n\n h1{\n text-align:left;\n font-size:30px !important;\n font-weight:400;\n color:${props => props.theme.colors.primary};\n }\n\n p {\n line-height: 22px;\n font-size: 21px;\n font-weight: 400;\n margin-bottom: 1rem;\n }\n\n @media (max-width: ${props => props.theme.screens.xs}){\n padding:10px;\n left:0;\n }\n \n @media(max-width:767px){\n h1{\n font-size:25px !important;\n }\n }\n`;\n\nexport const StyledBanksSection = style.section`\n\n border-bottom: ${props => (props.showBorder ? '3px' : 0)} solid ${props =>\n props.borderColor || props.theme.colors.primary};\n padding-bottom: 100px;\n \n h4 {\n margin-bottom:50px;\n text-align:left;\n font-size:20px !important;\n font-weight:400;\n color:${props => props.theme.colors.primary};\n\n strong {\n font-weight: 700;\n }\n }\n p{\n font-size: 0.9rem;\n padding: 0 30px;\n text-align:left !important;\n color:#2E2D35;\n }\n\n .textbold{\n font-weight:bold;\n font-size:17px;\n text-align:center !important;\n border:1px solid #2E2D35;\n border-radius: 20px;\n margin: 15px 30px;\n padding:2px 0;\n }\n\n .textbold:hover{\n background: #ECEEF0;\n border:1px solid ${props => props.theme.colors.primary};\n transition: 0.2s\n }\n\n a {\n font-size: 13px !important;\n color: ${props => props.theme.font.colors.third};\n transition: all .2s;\n }\n\n a:hover {\n text-decoration: none;\n color: ${props => props.leftLinkHover || props.theme.colors.primary} !important; \n }\n\n img {\n cursor: grab;\n }\n\n div.img {\n height: fit-content;\n text-align: center;\n height: 100px;\n width: 170px;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n margin: 0 auto;\n\n img{\n width:100%;\n }\n }\n \n .slick-track{\n margin: auto auto;\n }\n\n .slick-next{\n right: -10px;\n }\n \n .slick-prev{\n left: -10px;\n }\n\n .slick-next:before {\n content: \"\\f105\" !important;\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n color: #ccc\n \n }\n\n .slick-prev:before {\n content: \"\\f104\" !important;\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n color: #ccc\n }\n\n \n@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 1) {\n .home-title {\n left:30px;\n}\n}\n`;\n","import React from 'react';\nimport { props } from '../PagaEnCuotas.props';\nimport { StyledPagaEnCuotas, StyledBanksSection } from './index.styles';\nimport Slider from 'react-slick';\nimport { TranslatedComponent, Title } from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\nimport 'react-lazy-load-image-component/src/effects/blur.css';\n\nclass ModernPagaEnCuotas extends TranslatedComponent {\n static propTypes = props;\n\n render() {\n const {\n title,\n titleType,\n subTitle,\n leftLinkText,\n leftLinkUrl,\n items,\n showBorder,\n borderColor,\n leftLinkHover,\n hideTitle,\n } = this.props;\n\n const sliderSettings = {\n dots: true,\n infinite: true,\n slidesToScroll: 1,\n slidesToShow: items.length < 6 ? items.length : 6,\n autoplay: true,\n responsive: [\n {\n breakpoint: 1000,\n settings: {\n slidesToShow: 4,\n },\n },\n {\n breakpoint: 770,\n settings: {\n slidesToShow: 3,\n },\n },\n {\n breakpoint: 600,\n settings: {\n slidesToShow: 1,\n },\n },\n ],\n };\n\n return (\n <>\n {hideTitle === true ? (\n ''\n ) : (\n <StyledPagaEnCuotas className=\"row row-p\">\n <div className=\"home-title text-left \">\n <Title text={this.tt(title)} type={titleType || 'h1'} />\n <p>{this.tt(subTitle)}</p>\n <a target=\"_blank\" rel=\"noreferrer noopener\" href={this.tt(leftLinkUrl)}>\n {this.tt(leftLinkText)}\n </a>\n </div>\n </StyledPagaEnCuotas>\n )}\n <StyledBanksSection\n className=\"homeBanks row row-p mb-4 pt-4 mt-2 mb-4\"\n showBorder={showBorder}\n borderColor={borderColor}\n leftLinkHover={leftLinkHover}\n >\n <div className=\"col-md-12 centered\">\n <Slider {...sliderSettings}>\n {items.map((promo, key) => (\n <div key={key}>\n <div className=\"img\">\n <LazyLoadImage\n src={this.tt(promo.imgSrc)}\n alt={`promo`}\n threshold={100}\n effect=\"blur\"\n height={'100px'}\n />\n </div>\n </div>\n ))}\n </Slider>\n </div>\n </StyledBanksSection>\n </>\n );\n }\n}\n\nexport default withTranslation()(ModernPagaEnCuotas);\n","import React from 'react';\nimport { props } from './PagaEnCuotas.props';\nimport { TranslatedComponent } from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport DefaultPagaEnCuotas from './Default';\nimport ModernPagaEnCuotas from './Modern';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\n\nclass PagaEnCuotas extends TranslatedComponent {\n static propTypes = props;\n\n render() {\n return this.props.settings.theme.template === MODERN_THEME ? (\n <ModernPagaEnCuotas {...this.props} />\n ) : (\n <DefaultPagaEnCuotas {...this.props} />\n );\n }\n}\n\nexport default withSettingsContext(withTranslation()(PagaEnCuotas));\n","import PagaEnCuotas from './PagaEnCuotas';\nexport default PagaEnCuotas;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n title: PropTypes.string.isRequired,\n subTitle: PropTypes.string,\n buttonText: PropTypes.string,\n buttonLink: PropTypes.string,\n t: PropTypes.func,\n slideSpeed: PropTypes.number,\n autoplaySpeed: PropTypes.number,\n slidesToShow: PropTypes.number,\n showModelDetail: PropTypes.bool,\n};\n\nexport const defaultProps = {\n showModelDetail: false,\n};\n","import styled from 'styled-components';\n\nexport const StyledFlota = styled.section`\n background: ${props => props.theme.colors.bg};\n overflow: hidden;\n p.lead {\n margin-top: 0;\n font-size: 1.25rem;\n font-weight: 300;\n margin-bottom: 3rem;\n\n @media (max-width: ${props => props.theme.screens.lg}) {\n font-size: 1rem;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n padding-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .slick-next:before,\n .slick-prev:before {\n color: #e1e1e1 !important;\n }\n\n .slick-next:before {\n content: '\\f105';\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n }\n\n .slick-prev:before {\n content: '\\f104' !important;\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n }\n\n .section-flota-title p,\n .section-flota-title button {\n @media (max-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n\n p.car-category {\n font-weight: 300;\n margin-bottom: 0.5rem;\n }\n\n .car-item.one-slide {\n width: 80%;\n margin: 0 auto;\n }\n\n .car-item {\n .car-details {\n .car-name h2 {\n margin-top: 0px;\n margin-bottom: 0px;\n font-size: 20px;\n white-space: nowrap;\n text-overflow: ellipsis;\n display: block;\n overflow: hidden;\n\n @media only screen and (max-width: ${props =>\n props.theme.screens.xxl}) and (min-width: ${props => props.theme.screens.xl}) {\n font-size: 18px;\n }\n }\n .btn {\n display: ${props => props.btnDisplay || 'flex'};\n }\n }\n\n .car-image.one-slide {\n border: none !important;\n height: 350px;\n background-size: contain;\n }\n\n .car-image {\n border: 1px solid #cbcbcb;\n height: fit-content;\n text-align: center;\n height: 170px;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n\n .lazy-load-image-loaded > img {\n object-fit: cover;\n height: 100%;\n min-height: 100%;\n }\n }\n\n .car-image-wrapper {\n img {\n height: 100%;\n }\n }\n\n .price p {\n font-size: 13px;\n text-transform: uppercase;\n span {\n font-weight: bold;\n font-size: 15px;\n }\n strong span {\n font-size: 20px;\n }\n }\n\n .car-details {\n .details {\n margin-bottom: 5px;\n\n .details-item {\n display: inline-block;\n text-align: center;\n margin-right: 5px;\n width: 10.5%;\n\n @media only screen and (max-width: 330px) {\n width: 16%;\n }\n\n p {\n margin-bottom: 0;\n }\n\n img {\n width: 100%;\n display: block;\n border: 1px solid #cccccc;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n\n @media only screen and (max-width: ${props =>\n props.theme.screens.xxl}) and (min-width: ${props => props.theme.screens.xl}) {\n width: 27px !important;\n }\n }\n }\n }\n }\n }\n`;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nimport { withRouter } from 'react-router-dom';\nimport { setSearchCarParams } from 'actions';\nimport { Btn, Title, Paragraph, ModelDetail, NumberDisplay } from 'components/';\nimport { props } from './../FlotaItem.props';\nimport { LazyLoadImage } from 'react-lazy-load-image-component'; // Removed LazyLoadImage import\nimport 'react-lazy-load-image-component/src/effects/blur.css';\nclass DefaultFlotaItem extends React.Component {\n static propTypes = props;\n\n render() {\n const {\n t,\n model,\n currency,\n handleButtonClick,\n getCategoryOrGroupName,\n getCarImage,\n prefixForNumeric,\n featureFlags,\n oneSlide,\n showModelDetail,\n distanceUnit,\n } = this.props;\n\n return (\n <div className=\"car-item-container\">\n <div className={`car-item pl-4 pr-4 ${oneSlide ? 'one-slide' : ''}`}>\n <div className={`car-image mb-4 ${oneSlide ? 'one-slide' : ''}`}>\n <LazyLoadImage\n src={getCarImage(model)}\n alt={`${model.brand.name} ${model.name}`}\n threshold={100}\n effect=\"blur\"\n width={'100%!important'}\n height={'10rem'}\n wrapperClassName=\"car-image-wrapper\"\n />\n </div>\n\n <div className=\"car-details\">\n <Title\n className=\"car-name\"\n text={`${model.brand.name} ${model.name}`}\n italic={false}\n type=\"p\"\n fontSize={18}\n weight=\"700\"\n showTooltip\n />\n <Paragraph\n className=\"car-category\"\n text={`${t('category')} ${getCategoryOrGroupName(model)}`}\n nonTranslate\n />\n <ModelDetail\n model={model}\n prefixForNumeric={prefixForNumeric}\n showModelDetail={showModelDetail === false ? showModelDetail : true}\n distanceUnit={distanceUnit}\n />\n\n <div className=\"price\">\n {featureFlags &&\n featureFlags.showFleetPrice &&\n (!featureFlags.fleetUseLowerPrice && model.dailyPrice > 0 ? (\n <p>\n {t('from')} <span>{currency != null ? currency.prefix : 'ARS'} </span>\n <strong>\n <NumberDisplay value={model.dailyPrice} />\n </strong>{' '}\n {t('perday')}\n </p>\n ) : (\n featureFlags.showFleetPrice &&\n featureFlags.fleetUseLowerPrice &&\n model.lowerPrice > 0 && (\n <p>\n {t('from')} <span>{currency != null ? currency.prefix : 'ARS'} </span>\n <strong>\n <NumberDisplay value={model.lowerPrice} />\n </strong>{' '}\n {t('perday')}\n </p>\n )\n ))}\n <Btn\n text={(featureFlags && t(featureFlags.bookingButtonText)) || t('booknow')}\n onClick={handleButtonClick}\n />\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps, { setSearchCarParams })(\n withRouter(withTranslation()(DefaultFlotaItem)),\n);\n","import PropTypes from 'prop-types';\n\nexport const props = {\n model: PropTypes.shape({\n imagePath: PropTypes.string,\n brand: PropTypes.shape({ name: PropTypes.string }),\n doors: PropTypes.number,\n category: PropTypes.shape({ name: PropTypes.string }),\n passengers: PropTypes.number,\n bigLuggage: PropTypes.number,\n smallLuggage: PropTypes.number,\n steering: PropTypes.string,\n gearbox: PropTypes.string,\n airConditioner: PropTypes.string,\n dailyPrice: PropTypes.number,\n name: PropTypes.string,\n multimedia: PropTypes.string,\n t: PropTypes.func,\n lowerPrice: PropTypes.number,\n }),\n prefixForNumeric: PropTypes.string,\n btnDisplay: PropTypes.string,\n oneSlide: PropTypes.bool,\n};\n\nexport const defaultProps = {\n showModelDetail: true,\n};\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { props } from './../FlotaItem.props';\nimport { withTranslation } from 'react-i18next';\nimport { withRouter, Route } from 'react-router-dom';\nimport { setSearchCarParams } from 'actions';\nimport { Btn, Title, Paragraph, NumberDisplay, ModelDetail } from 'components/';\nimport { tlink } from 'utils/translationHelper';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\nimport 'react-lazy-load-image-component/src/effects/blur.css';\n\nclass ModernFlotaItem extends React.Component {\n static propTypes = props;\n\n render() {\n const {\n t,\n model,\n currency,\n handleButtonClick,\n getCategoryOrGroupName,\n getCarImage,\n featureFlags,\n prefixForNumeric,\n showModelDetail,\n distanceUnit,\n } = this.props;\n\n return (\n <div className=\"car-item-container\">\n <div className=\"car-item pl-4 pr-4\">\n <div className=\"car-image mb-4\">\n <LazyLoadImage\n src={getCarImage(model)}\n alt={`${model.brand.name} ${model.name}`}\n threshold={100}\n effect=\"blur\"\n width={'100%!important'}\n height={'170px'}\n />\n </div>\n\n <div className=\"car-details\">\n <Title\n className=\"car-name\"\n text={`${model.brand.name} ${model.name}`}\n italic={false}\n type=\"p\"\n fontSize={18}\n weight=\"700\"\n showTooltip\n />\n <Paragraph\n className=\"car-category\"\n text={`${t('category')} ${getCategoryOrGroupName(model)}`}\n nonTranslate\n />\n\n <ModelDetail\n model={model}\n prefixForNumeric={prefixForNumeric}\n fleetSection={showModelDetail}\n showModelDetail={showModelDetail}\n distanceUnit={distanceUnit}\n />\n\n <div className=\"price\">\n {featureFlags &&\n featureFlags.showFleetPrice &&\n (!featureFlags.fleetUseLowerPrice & (model.dailyPrice > 0) ? (\n <p>\n {t('from')} <span>{currency != null ? currency.prefix : 'ARS'} </span>\n <strong>\n <NumberDisplay value={model.dailyPrice} />\n </strong>{' '}\n {t('perday')}\n </p>\n ) : (\n featureFlags.showFleetPrice &&\n featureFlags.fleetUseLowerPrice &&\n model.lowerPrice > 0 && (\n <p>\n {t('from')} <span>{currency != null ? currency.prefix : 'ARS'} </span>\n <strong>\n <NumberDisplay value={model.lowerPrice} />\n </strong>{' '}\n {t('perday')}\n </p>\n )\n ))}\n <Btn\n text={(featureFlags && t(featureFlags.bookingButtonText)) || t('booknow')}\n onClick={handleButtonClick}\n />\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps, { setSearchCarParams })(\n withRouter(withTranslation()(ModernFlotaItem)),\n);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { tlink } from '../../../../utils/translationHelper';\nimport { setSearchCarParams } from 'actions';\nimport { getSippByCategory } from '../../../../utils/categoryGroupHelper';\nimport DefaultFlotaItem from './Default';\nimport ModernFlotaItem from './Modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { props, defaultProps } from './FlotaItem.props';\nimport { withTranslation } from 'react-i18next';\n\nclass FlotaItem extends React.Component {\n static propTypes = props;\n static defaultProps = defaultProps;\n constructor() {\n super();\n this.handleButtonClick = this.handleButtonClick.bind(this);\n this.getCategoryOrGroupName = this.getCategoryOrGroupName.bind(this);\n this.getCarImage = this.getCarImage.bind(this);\n }\n\n handleButtonClick = () => {\n const { history, bookLink, t, i18n, setSearchCarParams, model, settings } = this.props;\n setSearchCarParams({ categories: [model.category.id] });\n\n history.push(tlink(bookLink, t, i18n, null, settings.configurations.langConfig));\n window.scrollTo(0, 0);\n };\n\n getCategoryOrGroupName = carModel => {\n const {\n showSipp,\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n if (!categoryGroups) return carModel.category.name;\n\n const categoryGroupName = getSippByCategory(categoryGroups, carModel.category).toUpperCase();\n return showSipp && carModel.sipp\n ? `${categoryGroupName} - ${carModel.sipp}`\n : categoryGroupName;\n };\n\n getCarImage = model => {\n if (model.imagePath) return model.imagePath;\n return model.category.imagePath;\n };\n\n render() {\n const {\n model,\n settings: { currency, theme, featureFlags },\n prefixForNumeric,\n oneSlide,\n showModelDetail,\n distanceUnit,\n } = this.props;\n\n return theme.template === MODERN_THEME ? (\n <ModernFlotaItem\n model={model}\n currency={currency}\n prefixForNumeric={prefixForNumeric}\n handleButtonClick={this.handleButtonClick}\n getCategoryOrGroupName={this.getCategoryOrGroupName}\n getCarImage={this.getCarImage}\n featureFlags={featureFlags && featureFlags}\n oneSlide={oneSlide}\n showModelDetail={showModelDetail || false}\n distanceUnit={distanceUnit}\n />\n ) : (\n <DefaultFlotaItem\n model={model}\n currency={currency}\n prefixForNumeric={prefixForNumeric}\n handleButtonClick={this.handleButtonClick}\n getCategoryOrGroupName={this.getCategoryOrGroupName}\n getCarImage={this.getCarImage}\n featureFlags={featureFlags}\n oneSlide={oneSlide}\n showModelDetail={showModelDetail}\n distanceUnit={distanceUnit}\n />\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps, { setSearchCarParams })(\n withRouter(withTranslation()(FlotaItem)),\n);\n","import React from 'react';\nimport Slider from 'react-slick';\nimport { withTranslation } from 'react-i18next';\nimport { withRouter } from 'react-router-dom';\nimport { props } from '../Flota.props';\nimport { StyledFlota } from './index.styled';\nimport FlotaItem from '../FlotaItem/FlotaItem';\nimport { Btn, Title, TranslatedComponent, Paragraph, Loading } from 'components/';\nimport withSettingsContext from 'SettingsContext';\n\nconst sliderSettings = {\n dots: false,\n infinite: true,\n speed: 1000,\n slidesToShow: 2,\n slidesToScroll: 2,\n autoplay: true,\n autoplaySpeed: 3000,\n pauseOnHover: true,\n initialSlide: 0,\n responsive: [\n {\n breakpoint: 770,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1,\n },\n },\n ],\n};\n\nclass DefaultFlota extends TranslatedComponent {\n static propTypes = props;\n\n getSliderSettings() {\n const { slideSpeed, autoplaySpeed, slidesToShow } = this.props;\n let newValues = {};\n\n if (slideSpeed) newValues.speed = slideSpeed;\n if (autoplaySpeed) newValues.autoplaySpeed = autoplaySpeed;\n if (slidesToShow) newValues.slidesToShow = slidesToShow;\n\n return {\n ...sliderSettings,\n ...newValues,\n };\n }\n\n render() {\n const {\n title,\n subTitle,\n listCategories,\n t,\n loading,\n btnDisplay,\n showOnlyDefaultModels,\n bookLink,\n getFlotaItems,\n handleButtonClick,\n titleType,\n disableTitleButton,\n disableTitle,\n slidesToShow,\n } = this.props;\n const flotaItems = !loading ? getFlotaItems() : [];\n const sliderSettings = this.getSliderSettings();\n\n return (\n <StyledFlota className=\"row row-p pt-5 pb-5\" btnDisplay={btnDisplay}>\n <div className=\"section-flota-title col-lg-4 col-md-5 mt-5\">\n {!disableTitle && (\n <>\n <Title text={title} type={titleType || 'h3'} />{' '}\n <Paragraph className=\"mb-4 lead\" text={subTitle} />\n </>\n )}\n {!disableTitleButton && <Btn text={t('seeallfleet')} onClick={handleButtonClick} />}\n </div>\n <div className=\"col-lg-7 col-md-6 offset-md-1\">\n {loading ? (\n <Loading show />\n ) : (\n <Slider\n {...sliderSettings}\n infinite={\n flotaItems.length < sliderSettings.slidesToShow ? false : sliderSettings.infinite\n }\n >\n {listCategories && showOnlyDefaultModels\n ? flotaItems.map((model, index) => (\n <FlotaItem\n key={index}\n model={model}\n bookLink={bookLink}\n oneSlide={slidesToShow && slidesToShow === 1}\n />\n ))\n : flotaItems.map(category => {\n return category.models.map((model, index) => (\n <FlotaItem\n key={index}\n model={model}\n bookLink={bookLink}\n oneSlide={slidesToShow && slidesToShow === 1}\n />\n ));\n })}\n </Slider>\n )}\n </div>\n </StyledFlota>\n );\n }\n}\n\nexport default withSettingsContext(withRouter(withTranslation()(DefaultFlota)));\n","import styled from 'styled-components';\n\nexport const StyledFlotaModern = styled.section`\nbackground: ${props => props.theme.colors.bg};\noverflow: hidden;\np.lead {\n margin-top: 0;\n font-size: 1.25rem;\n font-weight: 300;\n margin-bottom: 3rem;\n\n @media (max-width: ${props => props.theme.screens.lg}) {\n font-size: 1rem;\n }\n}\n\n\n@media (max-width: ${props => props.theme.screens.md}) {\n padding-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.slick-next:before,\n.slick-prev:before {\n color: #e1e1e1 !important;\n}\n\n.slick-next:before {\n content: '\\f';\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n \n}\n\n.slick-prev:before {\n content: '\\f' !important;\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n}\n\n.section-flota-title{\n margin-bottom:50px !important;\n margin:0 auto;\n}\n\n.section-flota-title h3{\n text-align:center;\n font-size:30px !important;\n font-weight:400;\n color: #2E2D35;\n}\n\n.section-flota-title button{\n background-color:transparent;\n color:${props => props.theme.colors.primary};\n border: 1px solid ${props => props.theme.colors.primary};\n border-radius:5px;\n font-size:16px;\n margin:20px auto;\n font-weight:500;\n}\n\n.section-flota-title button:hover{\n color:${props => props.theme.colors.secondary};\n border: 1px solid ${props => props.theme.colors.secondary};\n}\n\n@media (max-width: ${props => props.theme.screens.xs}) {\n .section-flota-title h3{\n text-align:left;\n font-size:25px !important;\n }\n\n .section-flota-title button{\n float:left;\n }\n}\n\n\n@media (max-width: 767px) {\n.section-flota-title h3{\n left:0\n margin-top:50px\n}\n\n.section-flota-title button{\n left:0\n}\n}\n\n\n@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 1) {\n .section-flota-title h3 {\n text-align: left;\n}\n.section-flota-title button{\n margin:0;\n}\n}\n\np.car-category {\n font-weight: 400;\n margin-bottom: .5rem;\n text-align: center;\n font-size:14px;\n color:#858C99;\n\n}\n\n.car-item {\n .car-details {\n .car-name p {\n margin-top: 0px;\n margin-bottom: 0px;\n font-size: 20px;\n white-space: nowrap;\n text-overflow: ellipsis;\n display: block;\n overflow: hidden;\n text-align: center;\n color: ##2E2D35;\n @media only screen and (max-width: ${props =>\n props.theme.screens.xxl}) and (min-width: ${props => props.theme.screens.xl}) {\n font-size: 18px;\n }\n }\n\n\n .btn{\n display: ${props => props.btnDisplay || 'flex'};\n padding:15px\n border-radius:8px;\n margin:0 auto;\n }\n }\n\n .car-image {\n border: none;\n height: fit-content;\n text-align: center;\n height: 170px;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n\n .lazy-load-image-loaded > img {\n object-fit: cover;\n height: 100%;\n min-height: 100%;\n }\n }\n\n .price p {\n font-size: 13px;\n text-transform:uppercase;\n span{\n font-weight: bold;\n font-size:15px;\n }\n strong span{\n font-size: 20px;\n }\n }\n\n .car-details {\n .details {\n margin-bottom: 5px;\n\n .details-item {\n display: inline-block;\n text-align: center;\n margin-right: 5px;\n width: 10.5%;\n\n @media only screen and (max-width: 330px) {\n width: 16%;\n }\n\n p{\n margin-bottom:0 ;\n }\n\n img {\n width: 100%;\n display: block;\n border: 1px solid #cccccc;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n\n @media only screen and (max-width: ${props =>\n props.theme.screens.xxl}) and (min-width: ${props => props.theme.screens.xl}) {\n width: 27px !important;\n }\n }\n }\n }\n }\n \n}\n`;\n","import React from 'react';\nimport Slider from 'react-slick';\nimport { withTranslation } from 'react-i18next';\nimport { withRouter } from 'react-router-dom';\nimport { props, defaultProps } from '../Flota.props';\nimport { StyledFlotaModern } from './index.styled';\nimport FlotaItem from '../FlotaItem/FlotaItem';\nimport { Btn, Title, TranslatedComponent, Loading } from 'components/';\nimport withSettingsContext from 'SettingsContext';\n\nconst sliderSettings = {\n dots: false,\n infinite: true,\n speed: 1000,\n slidesToShow: 3,\n slidesToScroll: 2,\n autoplay: true,\n autoplaySpeed: 3000,\n pauseOnHover: true,\n initialSlide: 0,\n responsive: [\n {\n breakpoint: 770,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1,\n },\n },\n ],\n};\n\nclass ModernFlota extends TranslatedComponent {\n static propTypes = props;\n static defaultProps = defaultProps;\n state = {\n loading: true,\n };\n\n getSliderSettings() {\n const { slideSpeed, autoplaySpeed, slidesToShow } = this.props;\n let newValues = {};\n\n if (slideSpeed) newValues.speed = slideSpeed;\n if (autoplaySpeed) newValues.autoplaySpeed = autoplaySpeed;\n if (slidesToShow) newValues.slidesToShow = slidesToShow;\n\n return {\n ...sliderSettings,\n ...newValues,\n };\n }\n\n async componentDidMount() {\n const { fetchCategories, i18n } = this.props;\n\n try {\n await fetchCategories(i18n.language);\n } catch {}\n this.setState(prevState => ({\n ...prevState,\n loading: false,\n }));\n }\n\n render() {\n const {\n title,\n titleType,\n listCategories,\n t,\n btnDisplay,\n bookLink,\n loading,\n showOnlyDefaultModels,\n getFlotaItems,\n handleButtonClick,\n disableTitleButton,\n disableTitle,\n showModelDetail,\n } = this.props;\n const flotaItems = !loading ? getFlotaItems() : [];\n const sliderSettings = this.getSliderSettings();\n\n return (\n <StyledFlotaModern className=\"row row-p pt-5 pb-5\" btnDisplay={btnDisplay}>\n <div className=\"section-flota-title col-lg-6 col-md-5\">\n {!disableTitle && <Title text={title} type={titleType || 'h3'} />}\n {!disableTitleButton && <Btn text={t('seeallfleet')} onClick={handleButtonClick} />}\n </div>\n <div className=\"col-lg-12 col-md-6\">\n {loading ? (\n <Loading show />\n ) : (\n <Slider\n {...sliderSettings}\n infinite={\n flotaItems.length < sliderSettings.slidesToShow ? false : sliderSettings.infinite\n }\n >\n {listCategories && showOnlyDefaultModels\n ? flotaItems.map((model, index) => (\n <FlotaItem\n key={index}\n model={model}\n bookLink={bookLink}\n showModelDetail={showModelDetail}\n />\n ))\n : flotaItems.map(category => {\n return category.models.map((model, index) => (\n <FlotaItem\n key={index}\n model={model}\n bookLink={bookLink}\n showModelDetail={showModelDetail}\n />\n ));\n })}\n </Slider>\n )}\n </div>\n </StyledFlotaModern>\n );\n }\n}\n\nexport default withSettingsContext(withRouter(withTranslation()(ModernFlota)));\n","import React from 'react';\nimport { props, defaultProps } from './Flota.props';\nimport { TranslatedComponent } from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport { withRouter } from 'react-router-dom';\nimport { tlink } from '../../../utils/translationHelper';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\nimport DefaultFlota from './Default';\nimport ModernFlota from './Modern';\n\nclass Flota extends TranslatedComponent {\n static propTypes = props;\n static defaultProps = defaultProps;\n\n constructor() {\n super();\n\n this.getFlotaItems = this.getFlotaItems.bind(this);\n }\n\n state = {\n loading: true,\n };\n\n async componentDidMount() {\n const { fetchCategories, i18n } = this.props;\n\n try {\n await fetchCategories(i18n.language);\n } catch {}\n this.setState(prevState => ({\n ...prevState,\n loading: false,\n }));\n }\n\n handleButtonClick = () => {\n const { history, buttonLink, t, i18n, settings } = this.props;\n history.push(tlink(buttonLink, t, i18n, null, settings.configurations.langConfig));\n window.scrollTo(0, 0);\n };\n\n getFlotaItems = () => {\n const { listCategories, showOnlyDefaultModels } = this.props;\n let showOnlyDefaultModelsInverse = showOnlyDefaultModels == undefined ? true : showOnlyDefaultModels;\n\n if (!showOnlyDefaultModelsInverse) return listCategories;\n\n const defaultModels = [];\n\n listCategories.forEach(category => {\n const principalModel = category.models.find(m => m.id === category.principalModelId);\n if (principalModel) defaultModels.push(principalModel);\n else defaultModels.push(category.models[0]);\n });\n\n return defaultModels;\n };\n\n render() {\n const {\n title,\n disableTitleButton,\n disableTitle,\n subTitle,\n listCategories,\n t,\n btnDisplay,\n showOnlyDefaultModels,\n settings: { theme },\n slideSpeed,\n slidesToShow,\n autoplaySpeed,\n bookLink,\n titleType,\n showModelDetail,\n } = this.props;\n\n let showOnlyDefaultModelsInverse = showOnlyDefaultModels == undefined ? true : showOnlyDefaultModels;\n\n return theme.template === MODERN_THEME ? (\n <ModernFlota\n title={title}\n listCategories={listCategories}\n btnDisplay={btnDisplay}\n showOnlyDefaultModels={showOnlyDefaultModelsInverse}\n slideSpeed={slideSpeed}\n autoplaySpeed={autoplaySpeed}\n bookLink={bookLink}\n disableTitleButton={disableTitleButton}\n disableTitle={disableTitle}\n loading={this.state.loading}\n getFlotaItems={this.getFlotaItems}\n handleButtonClick={this.handleButtonClick}\n titleType={titleType}\n slidesToShow={slidesToShow}\n showModelDetail={showModelDetail}\n />\n ) : (\n <DefaultFlota\n title={title}\n subTitle={subTitle}\n listCategories={listCategories}\n btnDisplay={btnDisplay}\n showOnlyDefaultModels={showOnlyDefaultModelsInverse}\n slideSpeed={slideSpeed}\n autoplaySpeed={autoplaySpeed}\n bookLink={bookLink}\n disableTitleButton={disableTitleButton}\n disableTitle={disableTitle}\n loading={this.state.loading}\n getFlotaItems={this.getFlotaItems}\n handleButtonClick={this.handleButtonClick}\n titleType={titleType}\n slidesToShow={slidesToShow}\n />\n );\n }\n}\n\nexport default withSettingsContext(withRouter(withTranslation()(Flota)));\n","import Flota from './Flota';\nimport { connect } from 'react-redux';\nimport { fetchCategories, setSearchCarParams } from 'actions';\n\nconst mapStateToProps = ({ global }) => ({\n listCategories: global.listCategories,\n});\n\nexport default connect(mapStateToProps, { fetchCategories, setSearchCarParams })(Flota);\n","import PropTypes from 'prop-types';\n\nexport const props = {\n title: PropTypes.string,\n background: PropTypes.string,\n text: PropTypes.string,\n statement: PropTypes.string,\n textContentSize: PropTypes.string,\n statementSize: PropTypes.string,\n};\n","import style from 'styled-components';\nimport { THIRD } from 'styled/constants';\n\nexport const StyledCalidadServicio = style.section`\n background: ${props => (props.background ? `url(${props.background}) no-repeat` : `black`)};\n background-size: cover;\n background-attachment: fixed;\n background-position: center;\n\tmin-height: 360px;\n padding: 4rem 0px;\n text-align: center;\n color: ${THIRD};\n display: flex;\n justify-content: center;\n align-item: center; \n padding-right: 2% !important;\n padding-left: 2% !important;\n\n .contentBox {\n padding: 24px 25px;\n display: flex;\n flex-direction: column;\n\n .stars {\n color: ${props => props.color || props.theme.colors.buttonPrimaryBg};\n font-size: 17px;\n margin-bottom: 18px;\n line-height: 26px;\n \n .fa-star {\n margin: 0 3px;\n }\n }\n \n .textContent{\n text-align: center;\n font-weight: 400;\n font-size: ${props => props.textContentSize || '12px'};\n line-height: 20px;\n text-size-adjust: 100%;\n color: #fff;\n }\n .statement {\n text-align: center;\n font-weight: 400;\n font-size: ${props => props.statementSize || '12px'};\n line-height: 20px;\n text-size-adjust: 100%;\n color: #fff;\n }\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledCalidadServicioModern = style.section`\n background: ${props => (props.background ? `url(${props.background}) no-repeat` : `#FFF`)};\n background-size: cover;\n background-attachment: fixed;\n background-position: center;\n\tmin-height: 360px;\n padding: 0;\n text-align: left;\n color:${props => props.theme.colors.primary};\n display: flex;\n justify-content: center;\n align-item: center;\n margin:100px 0;\n\n\n\n .title h3{\n color:${props => props.theme.colors.primary};\n font-size:30px\n font-weight:400;\n }\n\n .imgHighlight{\n position:relative;\n right:60px\n }\n\n .imgHighlight img{\n border-radius:0 500px 500px 0;\n max-width: 100%;\n height: auto;\n }\n\n .contentBox {\n display: flex;\n flex-direction: column;\n\n .stars {\n color: ${props => props.color || props.theme.colors.buttonPrimaryBg};\n font-size: 17px;\n margin-bottom: 18px;\n line-height: 26px;\n \n .fa-star {\n margin: 0 3px;\n }\n }\n \n .textContent{\n text-align: left;\n font-weight: 400;\n font-size: ${props => props.textContentSize || '12px'};\n line-height: 20px;\n text-size-adjust: 100%;\n color:#656970;\n font-size:20px;\n }\n .statement {\n text-align: left;\n font-weight: 400;\n font-size: ${props => props.statementSize || '12px'};\n line-height: 20px;\n text-size-adjust: 100%;\n color:#2E2D35;\n }\n }\n\n @media(max-width:767px){\n .title h3{\n font-size:25px !important;\n }\n .contentBox {\n padding:0\n right:0\n }\n\n .imgHighlight{\n order:2\n }\n \n }\n\n \n@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 1) {\n .contentBox {\n right:0\n }\n\n .imgHighlight{\n order:2\n }\n}\n`;\n","import React from 'react';\nimport { props } from './calidadServicio.props';\nimport { StyledCalidadServicio } from './calidadServicio.styled';\nimport { Title, TranslatedComponent } from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport { StyledCalidadServicioModern } from './calidadServicio.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport withSettingsContext from 'SettingsContext';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\nimport 'react-lazy-load-image-component/src/effects/blur.css';\n\nclass CalidadServicio extends TranslatedComponent {\n static propTypes = props;\n\n constructor(props) {\n super(props);\n this.state = {\n backgroundLoaded: false,\n };\n }\n\n componentDidMount() {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: 0.1,\n };\n\n const observer = new IntersectionObserver(this.handleIntersection, options);\n observer.observe(this.styledSectionRef);\n }\n\n handleIntersection = entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n // Component is in view, set backgroundLoaded to true\n this.setState({ backgroundLoaded: true });\n }\n });\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledCalidadServicioModern;\n }\n return StyledCalidadServicio;\n }\n\n getContentColumnWidth() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return 'col-lg-5';\n }\n return 'col-lg-6';\n }\n\n render() {\n const {\n background,\n title,\n titleType,\n text,\n modernImage,\n statement,\n color,\n textContentSize,\n statementSize,\n customContent,\n className = '',\n settings,\n } = this.props;\n const { backgroundLoaded } = this.state;\n\n const stars = [1, 2, 3, 4, 5];\n const StyledSection = this.getTemplateStyledComponent();\n\n // Define the placeholder background image\n const placeholderBackground = 'url(\"\")'; // Replace with your placeholder image URL\n\n // Define the actual background image\n const actualBackground = `url(\"${background}\")`;\n\n return (\n <StyledSection\n ref={ref => (this.styledSectionRef = ref)}\n className={`${className} CalidadServicio row`}\n style={{\n backgroundImage: backgroundLoaded ? actualBackground : placeholderBackground,\n backgroundPosition: 'center center',\n backgroundSize: 'cover',\n backgroundRepeat: 'no-repeat',\n minHeight: '360px',\n }}\n color={color}\n textContentSize={textContentSize}\n statementSize={statementSize}\n >\n {settings.theme.template === MODERN_THEME && (\n <div className=\"col-lg-7 imgHighlight\">\n <LazyLoadImage src={modernImage} alt=\"quality service\" effect=\"blur\" />\n </div>\n )}\n <div className={`contentBox ${this.getContentColumnWidth()} pb-4 pt-4`}>\n <div className=\"stars\">\n {stars.map(id => (\n <i className=\"fa fa-star\" key={`id_${id}`} />\n ))}\n </div>\n <Title\n className=\"title mb-1\"\n type={titleType || 'h3'}\n italic={false}\n bold={false}\n text={title}\n fontSize={27}\n noMedia\n color=\"#fff\"\n />\n {customContent ? (\n <div dangerouslySetInnerHTML={{ __html: `${this.tt(customContent)}` }} />\n ) : (\n <>\n <p className=\"textContent mb-4\">{this.tt(text)}</p>\n <p className=\"statement\">{this.tt(statement)}</p>\n </>\n )}\n </div>\n </StyledSection>\n );\n }\n}\n\nexport default withSettingsContext(withTranslation()(CalidadServicio));\n","import CalidadServicio from './CalidadServicio';\nexport default CalidadServicio;\n","import style from 'styled-components';\n\nexport const StyledSection = style.section`\nbackground: ${props => (props.background ? `url(${props.background}) no-repeat` : `#fff`)};\nbackground-size: cover;\nmin-height: 600px;\ndisplay: flex;\njustify-content: ${props => (props.justifyContent || `center`)};\nalign-items: ${props => (props.alignContent || `center`)};\n\n .call-to-action-content {\n align-items: ${props => (props.justifyContent || `center`)};\n padding: 1.5rem;\n flex-direction: column;\n display: flex;\n }\n\n @media only screen and (max-width: 780px)\n {\n align-items: ${props => (props.alignMobileContent || `center`)};\n justify-content: ${props => (props.justifyMobileContent || `center`)};\n\n .call-to-action-content {\n align-items: ${props => (props.justifyMobileContent || `center`)};\n display: flex;\n flex-direction: column;\n width: 100%;\n }\n}\n\n`;","import PropTypes from 'prop-types';\n\nexport const props = {\n background: PropTypes.string,\n title: PropTypes.string,\n titleFontWeight: PropTypes.string,\n titleFontSize: PropTypes.string,\n titleColor: PropTypes.string,\n subTitle: PropTypes.string,\n subTitleFontWeight: PropTypes.string,\n subTitleFontSize: PropTypes.string,\n subTitleColor: PropTypes.string,\n buttonText: PropTypes.string,\n buttonLink: PropTypes.string,\n buttonSize: PropTypes.string,\n buttonIcon: PropTypes.string,\n buttonIconColor: PropTypes.string,\n buttonIconSize: PropTypes.string,\n buttonVariant: PropTypes.string,\n mobileBackground: PropTypes.string,\n titleType: PropTypes.string,\n subtitleType: PropTypes.string,\n contentAlignment: PropTypes.string,\n t: PropTypes.func,\n noParallax: PropTypes.bool,\n showSecondColumn: PropTypes.bool,\n};\n","import CallToAction from \"./CallToAction\";\nexport default CallToAction;","import React from 'react';\nimport { StyledSection } from './CallToAction.styled';\nimport { props } from './CallToAction.props';\nimport { Title, Btn } from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport { useTranslation } from 'react-i18next';\nimport withSettingsContext from 'SettingsContext';\nimport useWindowDimensions from 'utils/windowHelper';\nimport { tt } from 'utils/translationHelper';\n\nconst CallToAction = props => {\n\n const {\n title,\n titleFontWeight,\n titleFontSize,\n titleColor,\n subTitle,\n subTitleFontWeight,\n subTitleFontSize,\n subTitleColor,\n buttonText,\n buttonLink,\n selfLink,\n background,\n mobileBackground,\n titleType,\n subtitleType,\n justifyContent,\n alignContent,\n alignMobileContent,\n noParallax,\n justifyMobileContent,\n } = props;\n\n const { t } = useTranslation();\n\n const setParalax = noParallax ? 'row' : 'row row-p parallax pb-5';\n const { width } = useWindowDimensions();\n const isMobile = width < 768;\n\n return (\n <StyledSection\n background={(isMobile && tt(mobileBackground,t)) || tt(background,t)}\n className={`${setParalax} call-to-action-wrapper`}\n justifyContent={justifyContent}\n alignContent={alignContent}\n alignMobileContent={alignMobileContent}\n justifyMobileContent={justifyMobileContent}\n >\n <div className={`call-to-action-content`}>\n <Title\n type={titleType ? titleType : 'h3'}\n text={tt(title,t)}\n italic={false}\n className=\"quoted title\"\n fontSize={titleFontSize}\n color={titleColor}\n weight={titleFontWeight}\n />\n <Title\n type={subtitleType ? subtitleType : 'p'}\n text={tt(subTitle,t)}\n italic={false}\n className=\"quoted subtitle\"\n fontSize={subTitleFontSize}\n color={tt(subTitleColor,t)}\n weight={subTitleFontWeight}\n />\n <Btn className={`btn btn-primary btn-lg call-to-action-button`} link={buttonLink} text={tt(buttonText,t)} selfLink={selfLink}/>\n </div>\n </StyledSection>\n );\n};\n\nCallToAction.propTypes = props;\n\nexport default withSettingsContext(withTranslation()(CallToAction));\n","import PropTypes from 'prop-types';\n\nexport const props = {\n title: PropTypes.string.isRequired,\n subTitle: PropTypes.string,\n leftStrongTitle: PropTypes.string,\n leftLinkHover: PropTypes.string,\n items: PropTypes.array.isRequired,\n};\n","import style from 'styled-components';\n\nexport const StyledTitleRow = style.section`\n background: ${props => props.bg || props.theme.colors.bg};\n text-align: center;\n overflow-x: hidden;\n\n .home-title {\n margin-top: 5em;\n line-height: 1.5;\n position:relative;\n left:50px;\n\n h1{\n text-align:left;\n font-size:30px !important;\n font-weight:400;\n color:${props => props.theme.colors.primary};\n }\n\n p {\n line-height: 22px;\n font-size: 21px;\n font-weight: 400;\n margin-bottom: 1rem;\n }\n\n @media (max-width: ${props => props.theme.screens.xs}){\n padding:10px;\n left:0;\n }\n\n @media(max-width:767px){\n h1{\n font-size:25px !important;\n }\n }\n\n @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 1) {\n h1 {\n position:relative;\n right:25px !important;\n }\n }\n`;\n\nexport const StyledTestimoniesWrapper = style.section`\n\n border-bottom: ${props => (props.showBorder ? '3px' : 0)} solid ${props =>\n props.borderColor || props.theme.colors.primary};\n padding-bottom: 100px;\n background-image: url(${props => props.backgroundImage});\n background-repeat: no-repeat;\n background-size: cover;\n\n .oneSlide {\n padding: 1rem;\n background-color: ${props => props.theme.colors.primaryTransparent };\n border-radius: 20px;\n\n .slick-dots {\n bottom: -10px;\n\n li button:before{\n color: ${props => props.theme.font.colors.secondary};\n }\n } \n\n p {\n color: ${props => props.theme.font.colors.secondary};\n text-align:center!important;\n }\n }\n \n h4 {\n margin-bottom:50px;\n text-align:left;\n font-size:20px !important;\n font-weight:400;\n color:${props => props.theme.colors.primary};\n\n strong {\n font-weight: 700;\n }\n }\n p{\n font-size: 0.9rem;\n padding: 0 30px;\n text-align:left !important;\n color:#656970;\n }\n\n .source{\n font-style: italic;\n text-align: center!important;\n }\n\n .textbold{\n font-weight:bold;\n font-size:17px;\n text-align:center !important;\n border-radius: 20px;\n margin: 15px 30px;\n padding:2px 0;\n }\n\n .textbold:hover{\n color:${props => props.theme.colors.primary};\n transition: 0.2s\n }\n\n a {\n font-size: 13px !important;\n color: ${props => props.theme.font.colors.third};\n transition: all .2s;\n }\n\n a:hover {\n text-decoration: none;\n color: ${props => props.leftLinkHover || props.theme.colors.primary} !important; \n }\n\n img {\n cursor: grab;\n }\n\n div.img {\n height: fit-content;\n text-align: center;\n height: 70px;\n width: 170px;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n margin: 0 auto;\n }\n \n\n div.face {\n height: fit-content;\n text-align: center;\n height: 90px;\n width: 160px;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n margin: 0 auto 10px;\n }\n\n .slick-track{\n margin: auto auto;\n }\n\n .slick-next{\n right: -10px;\n }\n \n .slick-prev{\n left: -10px;\n }\n\n .slick-next:before {\n content: \"\\f105\" !important;\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n color: #ccc\n \n }\n\n .slick-prev:before {\n content: \"\\f104\" !important;\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n color: #ccc\n }\n\n`;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { props } from './Testimonies.props';\nimport { StyledTitleRow, StyledTestimoniesWrapper } from './Testimonies.styled';\nimport Slider from 'react-slick';\nimport { Title } from 'components/';\nimport withSettingsContext from 'SettingsContext';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\nimport 'react-lazy-load-image-component/src/effects/blur.css';\nimport useWindowDimensions from 'utils/windowHelper';\n\nconst sliderSettings = {\n dots: true,\n infinite: true,\n slidesToScroll: 1,\n slidesToShow: 4,\n autoplay: true,\n responsive: [\n {\n breakpoint: 1000,\n settings: {\n slidesToShow: 4,\n },\n },\n {\n breakpoint: 770,\n settings: {\n slidesToShow: 3,\n },\n },\n {\n breakpoint: 600,\n settings: {\n slidesToShow: 1,\n },\n },\n ],\n};\n\nconst Testimonies = ({\n title,\n titleType,\n subTitle,\n items,\n showBorder,\n borderColor,\n leftLinkHover,\n hideTitle,\n sliderCustomSettings,\n backgroundImage,\n mobileBackgroundImage,\n}) => {\n const { t } = useTranslation();\n\n const settings = {\n ...sliderSettings,\n ...(sliderCustomSettings ? sliderCustomSettings : {}),\n };\n\n const { width } = useWindowDimensions();\n const isMobile = width < 600;\n\n return (\n <>\n {!hideTitle && (\n <StyledTitleRow className=\"row row-p\">\n <div className=\"home-title text-left \">\n <Title text={t(title)} type={titleType || 'h1'} />\n <p>{t(subTitle)}</p>\n </div>\n </StyledTitleRow>\n )}\n <StyledTestimoniesWrapper\n className=\"homeTestimonies row row-p mb-4 pt-4 mt-2 mb-4\"\n showBorder={showBorder}\n borderColor={borderColor}\n leftLinkHover={leftLinkHover}\n backgroundImage={isMobile && mobileBackgroundImage || backgroundImage}\n >\n <div className={sliderCustomSettings?.slidesToShow === 1 ? `col-md-${sliderCustomSettings?.columnsNumber || 12} oneSlide` :\"col-md-12 centered\"}>\n <Slider {...settings}>\n {items.map((promo, key) => (\n <div key={key}>\n <div className=\"img\">\n <LazyLoadImage\n src={t(promo.imgSrc)}\n alt={`promo`}\n threshold={100}\n effect=\"blur\"\n height={'30px'}\n width={'170px'}\n />\n </div>\n <div className=\"face\">\n <LazyLoadImage\n src={t(promo.faceSrc)}\n alt={`promo`}\n threshold={100}\n effect=\"blur\"\n height={'100px'}\n />\n </div>\n\n {t(promo.customername) && (\n <p className=\"text-center textbold\">{t(promo.customername)}</p>\n )}\n {t(promo.source) && (\n <p className=\"text-center source\">{t(promo.source)}</p>\n )}\n {t(promo.name) && <p className=\"text-center\">{t(promo.name)}</p>}\n </div>\n ))}\n </Slider>\n </div>\n </StyledTestimoniesWrapper>\n </>\n );\n};\n\nTestimonies.propTypes = props;\n\nexport default withSettingsContext(Testimonies);\n","import Testimonies from './Testimonies';\nexport default Testimonies;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n listPromotions: PropTypes.array,\n};\n","import style from 'styled-components';\n\nexport const StyledPromocionesSection = style.div`\n\tbackground: ${props => (props.background ? `url(${props.background}) no-repeat` : `white`)};\n min-height: 600px;\n padding-left: -15px;\n padding-right: -15px;\n \n h2 {\n margin-bottom: 16px;\n }\n\n h1 {\n margin-bottom: 8px;\n }\n\n p {\n font-size: 12px;\n }\n\n .no-promotion-text{\n font-size: 20px;\n text-align: center;\n }\n\n .card-promotion {\n padding:50px;\n\n &:hover {\n padding:45px;\n border-radius:12px;\n transition: all 0.2s ease 0s;\n } \n\n .card-promotion__img {\n span {\n display: flex!important;\n height: 100%!important;\n position: relative;\n img {\n max-width: 100%;\n height: auto;\n border-radius:12px;\n\n &:hover {\n box-shadow: rgb(45 62 80 / 35%) 0px 1px 6px 0px;\n border-radius:12px;\n }\n }\n }\n }\n }\n }\n\n @media (max-width: 768px) {\n .card-promotion {\n padding: 20px;\n }\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledPromocionesModernSection = style.div`\nbackground: #FFF;\n min-height: 600px;\n padding-left: -15px;\n padding-right: -15px;\n \n h2 {\n margin-bottom: 16px;\n }\n \n .card-promotion {\n padding:50px;\n\n &:hover {\n padding:45px;\n border-radius:12px;\n transition: all 0.2s ease 0s;\n } \n\n .card-promotion__img {\n span {\n display: flex!important;\n height: 100%!important;\n position: relative;\n img {\n max-width: 100%;\n height: auto;\n border-radius:12px;\n\n &:hover {\n box-shadow: rgb(45 62 80 / 35%) 0px 1px 6px 0px;\n border-radius:12px;\n }\n }\n }\n }\n }\n }\n\n h4{\n font-size:21px;\n font-weight:bold;\n color:${props => props.theme.colors.primary};\n }\n\n h1 {\n margin-bottom: 8px;\n }\n\n p {\n font-size: 16px;\n }\n\n .no-promotion-text{\n font-size: 20px;\n text-align: center;\n }\n\n @media (max-width: ${props => props.theme.screens.xs}) {\n\n .card-promotion{\n padding:10px;\n }\n\n .card-promotion:hover{\n padding:12px;\n }\n \n }\n\n \n @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 1) {\n\n .card-promotion{\n padding:10px;\n }\n\n .card-promotion:hover{\n padding:12px;\n }\n \n }\n\n`;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { props } from './PromocionesSection.props';\nimport { Title, Loading } from 'components/';\nimport { StyledPromocionesSection } from './PromocionesSection.styled';\nimport { StyledPromocionesModernSection } from './PromocionesSection.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\nimport 'react-lazy-load-image-component/src/effects/blur.css';\n\nclass PromocionesSection extends React.Component {\n static propTypes = props;\n\n state = {\n loading: true,\n };\n\n async componentDidMount() {\n const { fetchPromotions, i18n } = this.props;\n\n await fetchPromotions(i18n.language);\n\n this.setState(prevState => ({\n ...prevState,\n loading: false,\n }));\n }\n\n noPromotionText() {\n const { t, noPromotionText } = this.props;\n return (\n <div className=\"col-md-12\">\n <p className=\"no-promotion-text\"> {t(noPromotionText || 'noPromotionsText')} </p>\n </div>\n );\n }\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledPromocionesModernSection;\n }\n return StyledPromocionesSection;\n }\n\n getColumnWidth() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return 'col-lg-6 col-md-6';\n }\n return 'col-lg-4 col-md-6';\n }\n\n getTitleSize() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return 21;\n }\n return 16;\n }\n\n render() {\n const { listPromotions, excludedPromotions, includedPromotions } = this.props;\n const StyledSection = this.getTemplateStyledComponent();\n\n let listPromotionsAux = listPromotions;\n\n if (\n listPromotionsAux != null &&\n listPromotionsAux.length > 0 &&\n includedPromotions !== undefined &&\n includedPromotions.length > 0\n ) {\n listPromotionsAux = listPromotions.filter(f => includedPromotions.includes(f.id));\n } else if (\n listPromotionsAux != null &&\n listPromotionsAux.length > 0 &&\n excludedPromotions !== undefined\n ) {\n listPromotionsAux = listPromotions.filter(f => !excludedPromotions.includes(f.id));\n } else {\n listPromotionsAux = listPromotions;\n }\n\n return (\n <StyledSection>\n <div className=\"col-md-12 p-0 mb-5\">\n <div className=\"\">\n <div className=\"row\">\n {this.state.loading ? (\n <Loading show />\n ) : listPromotionsAux.length === 0 ? (\n this.noPromotionText()\n ) : (\n listPromotionsAux.map((promo, key) => (\n <div\n key={`${key}-${promo.name}`}\n className={`${this.getColumnWidth()} mb-4 card-promotion`}\n >\n <div className=\"card-promotion__img\">\n <LazyLoadImage\n src={promo.imagePath}\n alt={promo.name}\n threshold={100}\n effect=\"blur\"\n width={'100%!important'}\n height={'50px'}\n wrapperClassName=\"img-fluid mb-4\"\n />\n </div>\n <Title\n type=\"h4\"\n className=\"mb-3 mt-2\"\n text={promo.name}\n weight=\"700\"\n fontSize={this.getTitleSize()}\n noMedia\n italic={false}\n />\n <div className=\"card-promotion__text\">\n <p\n dangerouslySetInnerHTML={{\n __html: `${promo.description}`,\n }}\n />\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n </StyledSection>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps)(PromocionesSection);\n","import PromocionesSection from './PromocionesSection';\nimport { connect } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nimport { fetchPromotions } from 'actions';\n\nconst mapStateToProps = ({ global }) => ({\n listPromotions: global.listPromotions,\n});\n\nexport default connect(mapStateToProps, {\n fetchPromotions,\n})(withTranslation()(PromocionesSection));\n","import style from 'styled-components';\n\nexport const StyledServiceItem = style.div`\n &:hover img {\n width: ${props => props.sizeHover || '83px'};\n height: ${props => props.sizeHover || '83px'};\n box-shadow: 0px 0px 5px #0000001c;\n margin-bottom: 1.3rem !important;\n }\n img{\n width: ${props => props.size || '80px'};\n height: ${props => props.size || '80px'};\n padding: ${props => props.padding || '20px'};\n border: 2px solid ${props => props.theme.colors.buttonPrimaryBg};\n border-radius: ${props => props.borderRadius || '100%'};\n transition: all 0.3s;\n }\n\n h4{\n font-size: 15px;\n font-weight: 700;\n text-transform: uppercase;\n color: ${props => props.theme.font.colors.primary};\n min-height: 2.4em;\n }\n\n p{\n color: ${props => props.theme.font.colors.primary};\n font-weight: 400;\n font-size: 12px;\n min-height:100px;\n }\n\n button{\n width:auto;\n text-align: center;\n display: inline-block;\n }\n\n`;\n","import style from 'styled-components';\n\nexport const StyledServiceItemModern = style.div`\n background-color:#FAFBFC;\n border-radius:12px\n padding:20px 10px;\n box-shadow: -1px 0px 13px 1px rgba(0,0,0,0.06);\n max-width:400px;\n margin:30px auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n\n img{\n width: 90px;\n height: 90px;\n padding: ${props => props.padding || '10px'};\n border:none;\n border-radius: ${props => props.borderRadius || '100%'};\n transition: all 0.3s;\n filter:none !important;\n }\n\n img:hover {\n width: 100px;\n height: 100px;\n box-shadow: 0px 0px 5px #0000001c;\n margin-bottom: 1.3rem !important;\n }\n\n h4{\n font-size: 18px;\n font-weight: 700;\n color: ${props => props.theme.font.colors.primary};\n \n }\n\n p{\n color: ${props => props.theme.font.colors.primary};\n font-weight: 400;\n font-size: 14px;\n min-height:auto;\n }\n\n button{\n width:auto;\n background:none;\n border: 1px solid #2E2D35;\n color: #2E2D35;\n text-align: center;\n display: inline-block;\n padding:10px 15px;\n }\n\n button:hover{\n background-color: ${props => props.theme.colors.primary};\n border: 1px solid ${props => props.theme.colors.primary};\n }\n\n\n`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Collapse, Button } from 'react-bootstrap';\nimport { StyledServiceItem } from './ServiceItem.styled';\nimport { NumberDisplay, Btn, TranslatedComponent } from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport withSettingsContext from 'SettingsContext';\nimport { StyledServiceItemModern } from './ServiceItem.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\n\nclass ServiceItem extends TranslatedComponent {\n constructor(props) {\n super(props);\n this.state = {\n expanded: false,\n };\n }\n\n static propTypes = {\n item: PropTypes.object.isRequired,\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledServiceItemModern;\n }\n return StyledServiceItem;\n }\n\n getComponentClasses() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return 'col-lg-4 text-center service-item';\n }\n return 'col-md-4 col-lg-3 text-center service-item';\n }\n\n getServiceDescription(service, descriptionMaxLength, descriptionCharsSplit) {\n const { name, description } = service;\n const fullDescription = description\n ? `${this.tt(name)} - ${this.tt(description)}`\n : description;\n const collapsedDescription =\n fullDescription.length > descriptionMaxLength\n ? fullDescription.slice(0, descriptionCharsSplit) + '...'\n : fullDescription;\n return { fullDescription, collapsedDescription };\n }\n\n render() {\n const {\n item,\n t,\n size,\n padding,\n sizeHover,\n borderRadius,\n descriptionMaxLength,\n descriptionCharsSplit,\n seeMore,\n seeLess,\n } = this.props;\n const StyledSection = this.getTemplateStyledComponent();\n const { fullDescription, collapsedDescription } = this.getServiceDescription(\n item,\n descriptionMaxLength,\n descriptionCharsSplit,\n );\n const { expanded } = this.state;\n\n return (\n <StyledSection\n className={this.getComponentClasses()}\n size={size}\n padding={padding}\n sizeHover={sizeHover}\n borderRadius={borderRadius}\n >\n <img className=\"mb-4\" src={item.imagePath} alt={this.tt(item.name)} />\n <h4>{this.tt(item.name)}</h4>\n <Collapse in={expanded}>\n <div>{expanded ? fullDescription : collapsedDescription}</div>\n </Collapse>\n {!expanded && (\n <div className=\"description\">\n {fullDescription.length > descriptionMaxLength ? collapsedDescription : fullDescription}\n </div>\n )}\n {fullDescription.length > descriptionMaxLength && (\n <Button\n variant=\"link\"\n onClick={() => this.setState({ expanded: !expanded })}\n aria-controls=\"service-description-collapse\"\n aria-expanded={expanded}\n className={`service-description-button ${expanded && seeLess ? 'see-less' : ''}`}\n >\n {expanded ? seeLess : seeMore}\n </Button>\n )}\n {item.price != null && item.price > 0 && (\n <Btn\n className=\"mb-5\"\n text={\n <>\n <NumberDisplay value={item.price} />\n {' ' + (item.isPriceByDay ? t('perDay') : t('perBooking'))}\n </>\n }\n />\n )}\n </StyledSection>\n );\n }\n}\n\nexport default withSettingsContext(withTranslation()(ServiceItem));\n","import style from 'styled-components';\n\nexport const StyledServiciosSection = style.section`\n background: ${props => props.theme.colors.bg};\n min-height: 600px;\n width: 100%;\n\n .service-description-button{\n font-size: 0.8rem;\n text-decoration: none!important;\n vertical-align: middle;\n color: ${({ theme }) => theme.colors.secondary}!important;\n\n &:hover, & > i { \n text-decoration: none!important; \n }\n }\n\n .see-less{\n padding-left: 0px;\n }\n\n .group-title{\n border-bottom: 2px solid #f2f2f2;\n margin-bottom: 20px;\n padding: .75rem 1.25rem;\n \n h5{\n text-transform: uppercase;\n font-size: 17px;\n font-weight: 700;\n color: ${props => props.theme.font.colors.primary};\n }\n\n \n }\n\n`;\n","import style from 'styled-components';\n\nexport const StyledServiciosSectionModern = style.section`\n background: #FFF !important;\n min-height: 600px;\n width: 100%;\n\n .service-description-button{\n font-size: 0.8rem;\n text-decoration: none!important;\n vertical-align: middle;\n color: ${({ theme }) => theme.colors.secondary}!important;\n\n &:hover, & > i { \n text-decoration: none!important; \n }\n }\n\n .see-less {\n padding-left: 0px;\n }\n\n .description {\n min-height: 120px;\n }\n\n button {\n margin-top: 10px;\n }\n\n .group-title{\n border-bottom: 2px solid #f2f2f2;\n margin-bottom: 20px;\n padding: .75rem 1.25rem;\n display:none;\n \n h5{\n font-size: 17px;\n font-weight: 700;\n color: ${props => props.theme.font.colors.primary};\n } \n\n h1{\n font-size: 17px;\n font-weight: 700;\n color: ${props => props.theme.font.colors.primary};\n } \n }\n\n`;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { fetchAdditionals } from 'actions';\nimport { Loading, TranslatedComponent } from 'components/';\nimport ServiceItem from './ServiceItem';\nimport { withTranslation } from 'react-i18next';\nimport { StyledServiciosSection } from './ServiciosSection.styled';\nimport { PropTypes } from 'prop-types';\nimport { StyledServiciosSectionModern } from './ServiciosSection.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { tt } from '../../../utils/translationHelper';\n\nclass ServiciosSection extends TranslatedComponent {\n static propTypes = {\n groups: PropTypes.array,\n listAdditionals: PropTypes.array,\n t: PropTypes.func,\n };\n\n state = {\n loading: true,\n };\n\n async componentDidMount() {\n try {\n const { fetchAdditionals, i18n } = this.props;\n\n await fetchAdditionals('', i18n.language);\n\n this.setState(prevState => ({\n ...prevState,\n loading: false,\n }));\n } catch (error) {}\n }\n\n GroupTitle(title) {\n return (\n <div className=\"group-title\">\n <h5>{title}</h5>\n </div>\n );\n }\n\n getService(service, additionals) {\n if (additionals && additionals.length > 0 && service.additionalId) {\n var additional = additionals.find(ad => ad.id === service.additionalId);\n\n return { ...additional, ...service };\n }\n\n return service;\n }\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledServiciosSectionModern;\n }\n return StyledServiciosSection;\n }\n\n render() {\n const {\n groups,\n listAdditionals,\n t,\n size,\n padding,\n sizeHover,\n borderRadius,\n seeLess,\n seeMore,\n descriptionMaxLength,\n descriptionCharsSplit,\n } = this.props;\n const StyledSection = this.getTemplateStyledComponent();\n\n if (this.state.loading) return <Loading show />;\n\n if (!groups) {\n return (\n <StyledSection>\n {this.GroupTitle(t('additionals'))}\n <div className=\"row card-body\">\n {listAdditionals.map((service, j) => (\n <ServiceItem\n item={service}\n key={j}\n size={size}\n sizeHover={sizeHover}\n padding={padding}\n borderRadius={borderRadius}\n seeMore={tt(seeMore, t)}\n seeLess={tt(seeLess, t)}\n descriptionMaxLength={tt(descriptionMaxLength, t)}\n nameSplitNumber={tt(descriptionCharsSplit, t)}\n />\n ))}\n </div>\n </StyledSection>\n );\n }\n\n return (\n <StyledSection size={size} padding={padding}>\n {groups.map((group, index) => (\n <div className=\"mb-4\" key={index}>\n {this.GroupTitle(this.tt(group.name))}\n <div className=\"row card-body\">\n {group.services.map((service, j) => (\n <ServiceItem\n item={this.getService(service, listAdditionals)}\n key={j}\n size={size}\n sizeHover={sizeHover}\n padding={padding}\n borderRadius={borderRadius}\n seeMore={tt(seeMore, t)}\n seeLess={tt(seeLess, t)}\n descriptionMaxLength={tt(descriptionMaxLength, t)}\n nameSplitNumber={tt(descriptionCharsSplit, t)}\n />\n ))}\n </div>\n </div>\n ))}\n </StyledSection>\n );\n }\n}\n\nconst mapStateToProps = ({ global, router, siteConfiguration }) => ({\n listAdditionals: global.listAdditionals,\n router: router,\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps, { fetchAdditionals })(withTranslation()(ServiciosSection));\n","import ServiciosSection from './ServiciosSection';\nexport default ServiciosSection;\n","import style from 'styled-components';\n\nexport const StyledLandingSection = style.section`\n\t.description {\n background-color: #f2f2f2;\n }\n .quoted h2{\n font-weight: 300;\n color: #fff;\n text-transform: none;\n margin-bottom: 15px;\n margin-left: 10px;\n }\n .routes .routes-container{\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n }\n .routes-item {\n display: flex;\n flex: 1;\n flex-basis: 25%;\n max-width: 25%;\n align-items: center;\n text-align: center;\n flex-direction: column;\n\n .km{\n font-size: 1.5rem;\n margin-bottom: 0px;\n font-weight: bold;\n color: ${props => props.kmColor || props.theme.colors.secondary}\n }\n .location {\n font-size: 1rem;\n line-height: 1.1;\n }\n }\n .landing-title-wrapper {\n text-align: center;\n }\n\n .description-subtitle h1, .description-subtitle h2, .description-subtitle h3 {\n margin-top: 0;\n }\n\n @media only screen and (max-width: 800px) {\n .routes-item {\n max-width: 100%;\n .location{\n min-height: 40px;\n }\n }\n }\n`;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n offices: PropTypes.array,\n description: PropTypes.array,\n formBkg: PropTypes.string,\n formBkgAlt: PropTypes.string,\n formTitle: PropTypes.string,\n title: PropTypes.string,\n subTitle: PropTypes.string,\n};\n","import style from 'styled-components';\n\nexport const StyledLandingSectionModern = style.section`\n\n .quoted h1{\n font-weight: 400;\n font-size: 40px !important;\n color: #fff;\n text-transform: none;\n margin-left: 10px;\n }\n\n .titleInfo{\n color:${props => props.theme.colors.primary};\n }\n\n\t.description {\n background-color: #F2F5F7;\n margin:40px;\n border-radius:12px;\n padding:20px;\n }\n\n .description p {\n font-size:16px;\n color:#656970;\n margin-top:20px;\n }\n\n .imgText img{\n border-radius:500px 0 0 500px;\n width:100%;\n position:relative;\n left:105px;\n }\n\n h2{\n font-weight: 400 !important;\n color:${props => props.theme.colors.primary};\n text-transform: none;\n margin-bottom: 15px;\n margin-left: 10px;\n }\n\n .routes .routes-container{\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n }\n\n .routes-item {\n display: flex;\n flex: 1;\n flex-basis: 25%;\n max-width: 25%;\n align-items: center;\n text-align: center;\n flex-direction: column;\n\n .km{\n font-size: 1.5rem;\n margin-bottom: 0px;\n font-weight: bold;\n color: ${props => props.kmColor || props.theme.colors.secondary}\n }\n .location {\n font-size: 1rem;\n line-height: 1.1;\n }\n }\n .landing-title-wrapper {\n text-align: right;\n }\n\n .description-subtitle h1, .description-subtitle h2, .description-subtitle h3 {\n margin-top: 0;\n }\n \n @media (max-width: 767px) {\n .description {\n margin:0;\n padding:0;\n }\n \n .description p {\n padding-right:0;\n }\n\n .imgText img{\n left:51px;\n }\n\n .map{\n padding:0;\n }\n\n`;\n","import React from 'react';\nimport { StyledLandingSection } from './LandingSection.styled';\nimport { props } from './LandingSection.props';\nimport { Title, TranslatedComponent, PageTitle, Separator, Image, Btn } from 'components/';\nimport { HeroBanner, ContactSection } from 'sections/';\nimport { withTranslation } from 'react-i18next';\nimport Paragraph from 'components/CMS/Paragraph/Paragraph';\nimport { StyledLandingSectionModern } from './LandingSection.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport withSettingsContext from 'SettingsContext';\n\nclass LandingSection extends TranslatedComponent {\n static propTypes = props;\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledLandingSectionModern;\n }\n return StyledLandingSection;\n }\n\n getFirstColumnWidth() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return 'col-lg-6';\n }\n return 'col-lg-4 offset-lg-2';\n }\n\n getSndColumnWidth() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return 'col-lg-6';\n }\n return 'col-lg-4';\n }\n\n render() {\n const {\n offices,\n description,\n formBkg,\n formBkgAlt,\n formTitle,\n title,\n subTitle,\n placeId,\n pickUpEndpoint,\n relatedRoutes,\n t,\n kmColor,\n settings,\n showCity,\n formOrientation,\n } = this.props;\n\n const formSection = [\n {\n component: 'SearchForm',\n searchRoute: '__Routes.search',\n formOrientation: formOrientation || 'vertical',\n pickUpEndpoint: pickUpEndpoint,\n placeId: placeId,\n showCity: showCity,\n },\n ];\n\n const theme = settings.theme.template;\n\n const StyledSection = this.getTemplateStyledComponent();\n\n return (\n <>\n <StyledSection kmColor={kmColor}>\n <HeroBanner\n background={formBkg}\n backgroundAlt={formBkgAlt}\n className=\"img-webp\"\n title={this.tt(formTitle)}\n type=\"h2\"\n sections={formSection}\n />\n <div className=\"mt-4 pt-1 mb-5 landing-title-wrapper\">\n <PageTitle\n title={this.tt(title)}\n titleType=\"h1\"\n subTitle={this.tt(subTitle)}\n subtitleType=\"h2\"\n className=\"mt-5 pb-3\"\n />\n </div>\n <ContactSection className=\"mb-5\" offices={offices} form={false} />\n <div className=\"pt-5 pb-5 description row\">\n {description.map((description, i) => (\n <div className=\"col-12 row pr-0 pl-4\" key={i}>\n <div className={this.getFirstColumnWidth()}>\n {description.title && (\n <Title\n fontSize={theme === MODERN_THEME ? '30' : '16'}\n italic={false}\n type=\"h3\"\n weight=\"400\"\n text={description.title}\n className=\"mt-4 titleInfo\"\n />\n )}\n {theme !== MODERN_THEME && description.title && <Separator className=\"pl-3\" />}\n {description.subtitle_1 && (\n <Title\n fontSize={theme === MODERN_THEME ? '28' : '14'}\n italic={false}\n type=\"h1\"\n weight=\"600\"\n text={description.subtitle_1}\n className=\"description-subtitle\"\n />\n )}\n {description.subtitle_2 && (\n <Title\n fontSize={theme === MODERN_THEME ? '28' : '14'}\n italic={false}\n type=\"h2\"\n weight=\"600\"\n text={description.subtitle_2}\n className=\"description-subtitle\"\n />\n )}\n {description.subtitle_3 && (\n <Title\n fontSize={theme === MODERN_THEME ? '28' : '14'}\n italic={false}\n type=\"h3\"\n weight=\"600\"\n text={description.subtitle_3}\n className=\"description-subtitle\"\n />\n )}\n {description.p1 && <Paragraph text={description.p1} />}\n {description.p2 && <Paragraph text={description.p2} />}\n </div>\n {description.img && (\n <div className={`imgText ${this.getSndColumnWidth()}`}>\n <Image\n alt={description.img.alt}\n className=\"img-fluid d-md-none d-lg-block\"\n src={description.img.src}\n />\n </div>\n )}\n </div>\n ))}\n </div>\n {relatedRoutes && (\n <div className=\"container routes pt-5 pb-3\">\n <div className=\"row\">\n <div className=\"w-100\">\n <h3 className=\"text-center w-100\">{this.tt(relatedRoutes.title)}</h3>\n <p className=\"text-center w-100 mb-4\">{this.tt(relatedRoutes.subtitle)}</p>\n </div>\n <div className=\"routes-container w-100\">\n {relatedRoutes.routes.map(item => (\n <div className=\"routes-item mb-5 pl-1 pr-1\">\n <p className=\"km\">{item.km}</p>\n <p className=\"location mb-2\">\n {item.customLocation\n ? this.tt(item.location)\n : `${t('to')} ${item.location}`}\n </p>\n <Btn\n text={relatedRoutes.btnText || t('seeRoute')}\n link={item.maplink}\n fontSize=\"14px\"\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n </StyledSection>\n </>\n );\n }\n}\n\nexport default withSettingsContext(withTranslation()(LandingSection));\n","import LandingSection from './LandingSection';\nexport default LandingSection;\n","import style from 'styled-components';\n\nexport const StyledContactSection = style.div`\n h3{\n font-weight: 600;\n font-style: normal;\n font-size: 18px;\n margin-top: 10px;\n }\n @media only screen and (max-width: ${props => props.theme.screens.lg}) { \n .row:first-child{\n -webkit-flex-flow: column;\n flex-flow: column;\n\n .map {\n -webkit-flex: 1 6 20%;\n flex: 1 6 20%;\n -webkit-order: 2;\n order: 2;\n }\n\n .office-details{\n -webkit-flex: 1 6 20%;\n flex: 1 6 20%;\n -webkit-order: 3;\n order: 3;\n }\n\n .form-div {\n -webkit-flex: 3 1 60%;\n flex: 3 1 60%;\n -webkit-order: 1;\n order: 1;\n margin-bottom: 60px;\n }\n }\n } \n`;\n","import style from 'styled-components';\n\nexport const StyledContactSectionModern = style.div`\n .office-details h3{\n font-weight: 400;\n font-style: normal;\n font-size: 28px !important;\n }\n\n .contact-list{\n font-weight: 400;\n font-style: normal;\n font-size: 28px !important;\n }\n\n\n @media only screen and (max-width: ${props => props.theme.screens.lg}) { \n .row:first-child{\n -webkit-flex-flow: column;\n flex-flow: column;\n\n .map {\n -webkit-flex: 1 6 20%;\n flex: 1 6 20%;\n -webkit-order: 2;\n order: 2;\n }\n\n .office-details{\n -webkit-flex: 1 6 20%;\n flex: 1 6 20%;\n -webkit-order: 3;\n order: 3;\n }\n\n .form-div {\n -webkit-flex: 3 1 60%;\n flex: 3 1 60%;\n -webkit-order: 1;\n order: 1;\n margin-bottom: 60px;\n }\n }\n } \n`;\n","import React from 'react';\nimport { Title, ContactForm } from 'components/';\nimport { PropTypes } from 'prop-types';\nimport { StyledContactSection } from './ContactSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { tt } from '../../../utils/translationHelper';\nimport ReactMarkdownn from 'react-markdown';\nimport withSettingsContext from 'SettingsContext';\nimport { StyledContactSectionModern } from './ContactSection.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\n\nclass ContactSection extends React.Component {\n static propTypes = {\n offices: PropTypes.array,\n t: PropTypes.func,\n leaveamessage: PropTypes.array,\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledContactSectionModern;\n }\n return StyledContactSection;\n }\n\n getMapClassNames(form, theme) {\n if (form !== false) return 'col-lg-4 mb-3 map';\n if (theme === MODERN_THEME) return 'col-lg-5 offset-lg-1 mb-5 map';\n return 'col-lg-4 offset-lg-2 mb-5 map';\n }\n\n getOfficeDetailsClassNames(form, theme) {\n if (form !== false) return 'col-lg-3 office-details';\n if (theme === MODERN_THEME) return 'col-lg-5 office-details';\n return 'col-lg-4 office-details';\n }\n\n getIframeStyles(theme) {\n if (theme === MODERN_THEME) return { borderRadius: '20px', width: '100%' };\n return { border: '0', width: '100%' };\n }\n\n render() {\n const { offices, t, leaveamessage, form, className, customText, settings } = this.props;\n\n const StyledSection = this.getTemplateStyledComponent();\n\n return (\n <StyledSection className={`col-md-12 ${className ? className : `p-0 mb-5`}`}>\n <div className=\"container-fluid\">\n {offices.map((office, index) => (\n <div className=\"row mb-5\" key={index}>\n <div className={this.getMapClassNames(form, settings.theme.template)}>\n <iframe\n title=\"street cars map\"\n src={office.mapUrl}\n height=\"400\"\n frameBorder=\"0\"\n style={this.getIframeStyles(settings.theme.template)}\n allowFullScreen\n />\n </div>\n <div className={this.getOfficeDetailsClassNames(form, settings.theme.template)}>\n <Title text={`${office.name}, ${office.city}`} type=\"h3\" />\n <p>\n <span>{tt(office.address, t)}</span> <br />\n <span>{tt(office.hours.first, t)}</span> <br />\n <span>{tt(office.hours.second, t)}</span>\n </p>\n {customText && (\n <ReactMarkdownn className=\"footerCustomText\" source={tt(customText, t)} />\n )}\n <ul className=\"list-unstyled contact-list\">\n {office.contacts &&\n office.contacts.map((contact, i) => (\n <li key={i}>\n <a href={tt(contact.url, t)} target={contact.target}>\n <i className={`${contact.icon}`} /> {tt(contact.text, t)}\n </a>\n </li>\n ))}\n </ul>\n </div>\n {index === 0 && form !== false ? (\n <div className=\"col-lg-5 form-div\">\n <ContactForm leaveamessage={leaveamessage} />\n </div>\n ) : (\n ''\n )}\n </div>\n ))}\n </div>\n </StyledSection>\n );\n }\n}\n\nexport default withSettingsContext(withTranslation()(ContactSection));\n","import ContactSection from './ContactSection';\nexport default ContactSection;\n","import style from 'styled-components';\n\nexport const StyledMercadoPagoSection = style.section`\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n .mp-inputs {\n height: 38px;\n border: 1px solid #ced4da;\n padding: 5px 10px;\n display: flex;\n align-items: center;\n\n & > div {\n height: 38px;\n }\n\n i {\n margin-right: 10px;\n }\n }\n\n .error {\n width: 100%;\n padding-left: 10px;\n color: #FF4A4A;\n font-style: italic;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n`;\n","/* eslint-disable no-undef */\nimport React from 'react';\nimport {\n Title,\n NumberDisplay,\n TextInput,\n SelectInput,\n Btn,\n ScriptTagComponent,\n CheckboxInput,\n} from 'components/';\nimport { connect } from 'react-redux';\nimport { history } from '/store';\nimport { withRouter } from 'react-router-dom';\nimport { StyledMercadoPagoSection } from './MercadoPagoSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { Paragraph } from 'components/';\nimport { tt, tlink } from '../../../utils/translationHelper';\nimport queryString from 'query-string';\nimport * as yup from 'yup';\nimport { payBooking, payInfraction } from 'services/api';\nimport { setBookingInstallment } from 'actions/bookings.actions';\nimport { setInfractionInstallment } from 'actions/infractions.actions';\nimport { fetchDocumentTypes, fetchFiscalConditions } from '../../../actions/global.actions';\nimport { BookingStatus } from '../../../utils/constants';\nimport { Typography } from '@material-ui/core';\nimport VerifiedUserOutlinedIcon from '@material-ui/icons/VerifiedUserOutlined';\nimport {\n cleanRUT,\n getDocumentSample,\n isValidDocument,\n transformDocTypesToSelectOptions,\n transformFiscalConditionsToSelectOptions,\n} from '../../../utils/documentHelper';\n\nimport {\n is_gtag_enabled,\n gtag_checkout_process,\n gtag_checkout_option,\n gtag_purchase,\n} from '../../../utils/googleTagsHelper';\nimport { getDocumentMask, getDocumentTypeName, handleGetTotalToPay } from 'utils/dataHelper';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\nimport PartialPayWarning from '../partialPayWarning';\n\nconst RENTLY_PAY_NOTIFICACION_FAILED_CODE = 10101;\n\nclass MercadoPagoSection extends React.Component {\n constructor(props) {\n const {\n t,\n withBillingInformation,\n settings: {\n configurations: { fiscalConditionValidation },\n },\n } = props;\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n bookingId: '0',\n qsamount: 0,\n showDoc: false,\n showInstallments: true,\n infractionId: '0',\n customerId: '0',\n act: '',\n branchOfficeName: '',\n branchOfficeIATA: '',\n branchOfficeId: 0,\n promotionId: '',\n noPendingPayTransactions: true,\n showBillingInfo: withBillingInformation !== undefined ? withBillingInformation : false,\n fiscalConditionId: null,\n currencyCode: '',\n exchangeRate: 1,\n bin: '',\n },\n formErrors: {\n installment: '',\n documentType: '',\n bank: '',\n cardNumber: '',\n bin: '',\n document: '',\n cardholderName: '',\n year: '',\n month: '',\n secCode: '',\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: '',\n documentId: '',\n address: '',\n addressNumber: '',\n addressDepartment: '',\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n },\n cardIcon: 'far fa-credit-card',\n formLoading: false,\n disableBillingFields: false,\n fiscalConditions: [],\n docInputFocus: false,\n billingDocInputFocus: false,\n sampleDocFormat: '',\n sampleBillingDocFormat: '',\n mp: null,\n currencySymbol: '',\n };\n\n yup.addMethod(yup.string, 'isValidDocumentId', function(documentId) {\n return this.test(\n 'test-document-id-format',\n t('billingInformation.errors.wrongDocumentFormat'),\n function(documentId) {\n const { tenantDocumentTypes, billingDocumentType } = this.parent;\n return isValidDocument(tenantDocumentTypes, billingDocumentType, documentId);\n },\n );\n });\n\n yup.addMethod(yup.string, 'isValidDocument', function(document) {\n return this.test(\n 'test-document-format',\n t('billingInformation.errors.wrongDocumentFormat'),\n function(document) {\n const { documentType, documents } = this.parent;\n return isValidDocument(documents, documentType, document);\n },\n );\n });\n\n yup.addMethod(yup.string, 'hasValidDocumentType', function(fiscalCondition) {\n return this.test(\n 'test-document-format',\n t('billingInformation.errors.wrongFiscalCondition'),\n function(fiscalCondition) {\n const taxPayerValidation = (fiscalConditionValidation || [])?.find(\n i => `${i.id}` === fiscalCondition,\n );\n\n if (!taxPayerValidation?.validDocumentIds) return true;\n else {\n const validIds = taxPayerValidation?.validDocumentIds;\n if (validIds.includes(this.parent.billingDocumentType)) return true;\n return false;\n }\n },\n );\n });\n\n this.paymentInfoFormSchema = yup.object().shape({\n showDoc: yup.boolean(),\n showInstallments: yup.boolean(),\n installment: yup.string().when('showInstallments', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('cuotas') })),\n }),\n documentType: yup.string().when('showDoc', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('tipodocumento') })),\n }),\n // cardNumber: yup\n // .number()\n // .required(t('inputIsRequired', { field: t('numeroTarjeta') })),\n document: yup.string().when('showDoc', {\n is: true,\n then: yup\n .string()\n .isValidDocument()\n .required(t('inputIsRequired', { field: t('documento') })),\n }),\n cardholderName: yup.string().required(t('inputIsRequired', { field: t('titular') })),\n // year: yup.number().required(t('inputIsRequired', { field: t('año') })),\n // month: yup.number().required(t('inputIsRequired', { field: t('mes') })),\n // securityCode: yup\n // .number()\n // .required(t('inputIsRequired', { field: t('codigo') })),\n firstName: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.firstName'),\n }),\n ),\n }),\n lastName: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.lastName'),\n }),\n ),\n }),\n fiscalConditionId: yup\n .string()\n .nullable()\n .when('showBillingInfo', {\n is: true,\n then: yup\n .string()\n .hasValidDocumentType()\n .required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.fiscalCondition'),\n }),\n ),\n }),\n billingDocumentType: yup.number().when('showBillingInfo', {\n is: true,\n then: yup.number().required(t('inputIsRequired', { field: t('tipodocumento') })),\n }),\n documentId: yup.string().when('showBillingInfo', {\n is: true,\n then: yup\n .string()\n .isValidDocumentId()\n .required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.document'),\n }),\n ),\n }),\n address: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('addressName') })),\n }),\n addressNumber: yup\n .string()\n .nullable(true)\n .when('showBillingInfo', {\n is: true,\n then: yup\n .string()\n .typeError(t('invalidNumber'))\n .required(t('inputIsRequired', { field: t('addressNumber') })),\n }),\n zipCode: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('zipCode') })),\n }),\n cellPhone: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('phone') })),\n }),\n emailAddress: yup\n .string()\n .email(t('validEmail'))\n .when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('mail') })),\n }),\n });\n this.formRef = React.createRef(null);\n const year = new Date().getFullYear();\n this.years = Array.from(new Array(15), (val, index) => index + year);\n this.months = Array.from(new Array(12), (val, index) => index + 1);\n }\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n } catch {}\n }\n }\n\n async componentDidMount() {\n const {\n location,\n bookings,\n infractions,\n noPendingPayTransactions,\n workWithInstallments,\n fetchDocumentTypes,\n fetchFiscalConditions,\n listDocumentTypes,\n listTaxPayerTypes,\n i18n,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n defaultCurrency,\n } = this.props;\n let tenantDocumentTypes = listDocumentTypes || [];\n\n if (this.state.paymentInfo.showBillingInfo && tenantDocumentTypes.length === 0)\n tenantDocumentTypes = (await fetchDocumentTypes('', i18n.language)).payload;\n\n const tenantFiscalConditions =\n listTaxPayerTypes || (await fetchFiscalConditions(i18n.language))?.payload;\n\n this.setState(prevState => ({\n ...prevState,\n fiscalConditions: tenantFiscalConditions,\n }));\n\n const parseQs = queryString.parse(location.search);\n const mustShowInstallments = workWithInstallments !== undefined ? workWithInstallments : true;\n\n const customer = this.getCustomerInfo();\n\n if (this.isPayingBooking()) {\n const booking = bookings.confirmation;\n\n // If the currency is not the system currency and there's an exchange rate\n // use that\n if (bookings.confirmation.currency !== defaultCurrency.isoCode) {\n bookings.confirmation.balance =\n bookings.confirmation.balance * bookings.confirmation.exchangeRate;\n bookings.confirmation.currency = defaultCurrency.isoCode;\n\n if (bookings.confirmation.exchangeRate !== 1) {\n const exchangeRate = 1 / bookings.confirmation.exchangeRate;\n this.setExchangeRate(exchangeRate);\n }\n }\n\n if (is_gtag_enabled(googleTagManager)) {\n gtag_checkout_process({ number: 3, option: 'Online Payment' }, booking, settings);\n gtag_checkout_option({ number: 3, option: 'Mercado Pago' });\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(),\n bookingId: booking.id,\n email: booking.customer.emailAddress,\n branchOfficeName: booking.deliveryPlace.branchOfficeName,\n branchOfficeIATA: booking.deliveryPlace.branchOfficeIATACode,\n branchOfficeId: booking.deliveryPlace.branchOfficeId,\n promotionId: parseQs.promotionid || null,\n noPendingPayTransactions:\n noPendingPayTransactions !== undefined ? noPendingPayTransactions : true,\n showInstallments: mustShowInstallments,\n installment: '1',\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: 0,\n documentId: '',\n document: '',\n address: '',\n addressNumber: null,\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n tenantDocumentTypes,\n billingInfoCheckbox: false,\n disableBillingFields: false,\n currencyCode: booking.currency,\n //exchangeRate: 1,\n },\n sampleDocFormat: getDocumentSample(tenantDocumentTypes, customer.documentType),\n }));\n }\n\n if (this.isPayingInfraction() && parseQs.customerid) {\n const infraction = infractions.current;\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getInfractionTotalToPay(),\n infractionId: infraction.id,\n act: infraction.act,\n customerId: parseQs.customerid,\n email: infraction.booking?.customer?.emailAddress || '',\n branchOfficeName: infraction.booking?.deliveryPlace?.branchOfficeName || null,\n branchOfficeIATA: infraction.booking?.deliveryPlace?.branchOfficeIATACode || null,\n branchOfficeId: infraction.booking?.deliveryPlace?.branchOfficeId || null,\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: 0,\n documentId: '',\n address: '',\n addressNumber: null,\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n tenantDocumentTypes,\n billingInfoCheckbox: false,\n disableBillingFields: false,\n currencyCode: defaultCurrency.isoCode,\n exchangeRate: 1,\n },\n }));\n }\n\n //Mercado Pago always use default currency.\n this.setCurrencySymbol(defaultCurrency.symbol);\n }\n\n setCurrencySymbol = currencySymbol => {\n this.setState(prevState => ({\n ...prevState,\n currencySymbol: currencySymbol,\n }));\n };\n\n getTotalToPay() {\n const {\n bookings: { confirmation },\n settings: { paymentConfiguration },\n } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n let totalToPay = this.isPayingInfraction()\n ? this.getInfractionTotalToPay()\n : handleGetTotalToPay(confirmation.customerBalance, paymentConfiguration, qsamount);\n if (paymentConfiguration?.percentageToPay) {\n const numberOfDecimals = this.getCashBoxConfigurationNumberOfDecimals();\n if (numberOfDecimals == 0) return Math.round(totalToPay);\n else if (numberOfDecimals == 1) return Math.round(totalToPay * 10) / 10;\n else if (numberOfDecimals > 1) return Math.round(totalToPay * 100) / 100;\n }\n\n return totalToPay;\n }\n\n getInfractionTotalToPay() {\n const { infractions } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n const infraction = infractions.current;\n if (qsamount && Math.abs(infraction.amount) >= Math.abs(qsamount)) {\n return Math.abs(qsamount);\n } else {\n return infraction.amount;\n }\n }\n\n getCashBoxConfigurationNumberOfDecimals() {\n const { generalSettings } = this.props;\n return generalSettings && generalSettings.cashBoxConfiguration\n ? generalSettings.cashBoxConfiguration.numberOfDecimals\n : 0;\n }\n\n getPublicToken() {\n const { publicToken, credentials } = this.props;\n if (credentials && credentials.publicToken) return credentials.publicToken;\n\n return publicToken;\n }\n\n onLoaded = () => {\n const publicToken = this.getPublicToken();\n const mp = new MercadoPago(publicToken);\n this.setState({ ...this.state, mp });\n\n mp.fields\n .create('expirationDate', {\n placeholder: 'MM/YY',\n })\n .mount('expirationDate');\n\n mp.fields\n .create('securityCode', {\n placeholder: this.props.t('codigo'),\n })\n .mount('securityCode');\n\n const cardNumberElement = mp.fields\n .create('cardNumber', {\n placeholder: this.props.t('numeroTarjeta'),\n })\n .mount('cardNumber');\n\n cardNumberElement.on('binChange', this.getPaymentMethods);\n };\n\n identificationHandler = (status, response) => {\n const newDocuments = [];\n if (status === 200) {\n for (let i = 0; i < response.length; i++) {\n newDocuments.push({ value: response[i].id, text: response[i].name });\n }\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n showDoc: true,\n documents: newDocuments,\n },\n }));\n }\n };\n\n documentSelection = documentType => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, documentType },\n sampleDocFormat: getDocumentSample(this.state.paymentInfo.documents, documentType),\n }));\n };\n\n bankSelection = async bank => {\n const { paymentInfo, mp } = this.state;\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, bank },\n }));\n\n if (paymentInfo.showInstallments) {\n const amount = `${this.getTotalToPay()}`;\n\n let paymentMethodId =\n paymentInfo.paymentMethodID == 'debvisa' || paymentInfo.paymentMethodID == 'debmaster'\n ? 'debit_card'\n : 'credit_card';\n\n const installments = await mp.getInstallments({\n amount: amount,\n bin: paymentInfo.bin,\n paymentTypeId: paymentMethodId,\n });\n\n this.installmentHandler(installments);\n }\n };\n\n installmentsSelection = installment => {\n if (installment === '1' || installment === 'Seleccionar') {\n this.storeInstallment(null);\n } else {\n const installmentObject = this.state.originalInstallments.find(\n inst => inst.installments === Number(installment),\n );\n if (installmentObject) this.storeInstallment(installmentObject);\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, installment },\n }));\n };\n\n storeInstallment = installment => {\n const { setBookingInstallment, setInfractionInstallment } = this.props;\n\n if (this.isPayingBooking()) return setBookingInstallment(installment);\n if (this.isPayingInfraction()) return setInfractionInstallment(installment);\n };\n\n handleCardholderName = cardholderName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, cardholderName },\n formErrors: { ...prevState.formErrors, cardholderName: null },\n }));\n };\n\n handleDocument = id => {\n let cleanId = id;\n\n if (this.state.paymentInfo.documentType === 'RUT') {\n cleanId = cleanRUT(id);\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, document: cleanId },\n formErrors: { ...prevState.formErrors, document: null },\n }));\n };\n\n handleFirstName = firstName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n firstName,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, firstName: '' },\n }));\n };\n\n handleLastName = lastName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n lastName,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, lastName: '' },\n }));\n };\n\n handleEmailAddress = emailAddress => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n emailAddress,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, emailAddress: '' },\n }));\n };\n\n handleAddress = address => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n address,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, address: '' },\n }));\n };\n\n handleAddressNumber = addressNumber => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n addressNumber,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, addressNumber: '' },\n }));\n };\n\n handleAddressDepartment = addressDepartment => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n addressDepartment,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, addressDepartment: '' },\n }));\n };\n\n handleZipCode = zipCode => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n zipCode,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, zipCode: '' },\n }));\n };\n\n handleCellphone = cellPhone => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n cellPhone,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, cellPhone: '' },\n }));\n };\n\n handleFiscalCondition = fiscalConditionId => {\n const {\n settings: { configurations },\n } = this.props;\n const validDocumentIds = (configurations?.fiscalConditionValidation || []).find(\n i => `${i.id}` === fiscalConditionId,\n )?.validDocumentIds;\n let billingDocumentType = this.state.paymentInfo.billingDocumentType;\n\n if (\n validDocumentIds &&\n (!billingDocumentType || !validDocumentIds?.includes(billingDocumentType))\n ) {\n billingDocumentType = validDocumentIds[0];\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n fiscalConditionId,\n billingDocumentType,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, fiscalConditionId: null },\n }));\n };\n\n handleBillingDocumentType = billingDocumentType => {\n const { listDocumentTypes } = this.props;\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n billingDocumentType,\n billingInfoCheckbox: false,\n },\n formErrors: {\n ...prevState.formErrors,\n billingDocumentType: '',\n fiscalConditionId: null,\n },\n sampleBillingDocFormat: getDocumentSample(listDocumentTypes, billingDocumentType),\n }));\n };\n\n handleDocumentId = id => {\n let cleanId = id;\n const typeName = getDocumentTypeName(\n this.props.listDocumentTypes,\n this.state.paymentInfo.billingDocumentType,\n );\n\n if (typeName === 'RUT') {\n cleanId = cleanRUT(id);\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n documentId: cleanId,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, documentId: '' },\n }));\n };\n\n installmentHandler = response => {\n let installments = [];\n\n for (let i = 0; i < response[0].payer_costs.length; i++) {\n installments.push({\n text: response[0].payer_costs[i].recommended_message,\n value: response[0].payer_costs[i].installments,\n });\n }\n this.setState({\n installments: installments,\n originalInstallments: response[0].payer_costs,\n });\n };\n\n issuersHandler = response => {\n const banks = [];\n for (let i = 0; i < response.length; i++) {\n banks.push({ value: response[i].id, text: response[i].name });\n }\n this.setState({ banks: banks });\n };\n\n handleSubmit = e => {\n e.preventDefault();\n const { mp } = this.state;\n\n this.setState({ formLoading: true });\n const paymentInfo = this.state.paymentInfo;\n\n this.paymentInfoFormSchema\n .validate(paymentInfo, { abortEarly: false })\n .then(async valid => {\n if (valid) {\n const token = await mp.fields.createCardToken({\n cardholderName: paymentInfo.cardholderName,\n identificationType: paymentInfo.documentType,\n identificationNumber: paymentInfo.document,\n });\n if (token.status == 'active') {\n this.tokenHandler(token);\n } else {\n throw 'token is not active';\n }\n }\n })\n .catch(err => {\n this.setState({ formLoading: false });\n\n if (err.inner) {\n const formErrors = err.inner.reduce((prevErrors, currentError) => {\n return {\n ...prevErrors,\n [currentError.path]: currentError.message,\n };\n }, {});\n this.setState(prevState => ({ ...prevState, formErrors }));\n } else {\n const formErrors = err.reduce((errorObject, error) => {\n if (errorObject[error.field]) {\n errorObject = {\n ...errorObject,\n [error.field]: `${errorObject[error.field]} ${error.message}`,\n };\n } else {\n errorObject = { ...errorObject, [error.field]: error.message };\n }\n return errorObject;\n }, {});\n\n this.setState(prevState => ({ ...prevState, formErrors }));\n }\n window.scrollTo(0, this.formRef.current.offsetTop);\n });\n };\n\n tokenHandler = async token => {\n const {\n t,\n i18n,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n bookings,\n } = this.props;\n\n let paymentInfo = this.state.paymentInfo;\n paymentInfo.token = token.id;\n paymentInfo.gatewayId = 'ML';\n\n try {\n const res = await this.executePayment(paymentInfo);\n let subtitle;\n if (res.bookingId !== 0)\n subtitle = t('feedbackBoxMessages.book.successSubtitle', {\n booking_id: res.bookingId,\n });\n\n if (is_gtag_enabled(googleTagManager)) gtag_purchase(bookings.confirmation, settings);\n history.push(\n `${tlink('__Routes.paymentSuccess', t, i18n, null, settings.configurations.langConfig)}`,\n { subtitle },\n );\n } catch (error) {\n let messageObject = {};\n let hereLink;\n const errorData = error.config.data ? JSON.parse(error.config.data) : null;\n\n if (error.response && error.response.data && error.response.data.message)\n messageObject['detailedError'] = t('feedbackBoxMessages.pay.errorDetails', {\n error_message: error.response.data.message,\n });\n\n if (this.isPayingBooking()) {\n messageObject['subtitle'] = t('feedbackBoxMessages.pay.failButConfirmed', {\n booking_id: errorData.bookingId,\n });\n hereLink = tlink(\n '__Routes.onlinePayment',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n { bookingid: errorData.bookingId },\n );\n }\n\n if (this.isPayingInfraction()) {\n hereLink = tlink(\n '__Routes.onlinePayment',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n {\n infractionid: errorData.infractionId,\n customerid: errorData.customerId,\n },\n );\n }\n\n messageObject['buttonInfo'] = {\n text: t('tryAgain'),\n link_to: hereLink,\n };\n\n if (\n error.response &&\n error.response.data &&\n error.response.data.code === RENTLY_PAY_NOTIFICACION_FAILED_CODE\n ) {\n messageObject['detailedError'] = t('feedbackBoxMessages.pay.cannotRegisterPaymentInRently');\n messageObject['buttonInfo'] = null;\n }\n\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n messageObject,\n );\n }\n };\n\n executePayment = paymentInfo => {\n if (this.isPayingBooking()) return payBooking(paymentInfo);\n if (this.isPayingInfraction()) return payInfraction(paymentInfo);\n };\n\n showOrderIdentifier = () => {\n const { t, bookings, settings } = this.props;\n const confirmedOrderText = settings?.paymentConfiguration?.confirmedOrderText;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n const bookingStatus = bookings.confirmation.currentStatus;\n\n if ([BookingStatus.reserved, BookingStatus.confirmed].includes(bookingStatus)) {\n return (\n tt(confirmedOrderText, t, true, { booking_id }) || t('ordenConfirmada', { booking_id })\n );\n }\n\n return t('orden', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n if (!this.state.paymentInfo.act) return null;\n return `ACTA ${this.state.paymentInfo.act?.toString().padStart(7, '0') || ''}`;\n }\n };\n\n isPayingBooking = () => {\n const { bookings, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.bookingid || (bookings && bookings.confirmation);\n };\n\n isPayingInfraction = () => {\n const { infractions, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.infractionid && parseQs.customerid && infractions && infractions.current;\n };\n\n getPayButtonText = () => {\n const { t } = this.props;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n return this.state.formLoading\n ? t('pagandoReserva', { booking_id })\n : t('pagarReserva', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n const act = this.state.paymentInfo.act?.toString().padStart(7, '0');\n return this.state.formLoading ? t('payingInfraction', { act }) : t('payInfraction', { act });\n }\n };\n\n setExchangeRate = exchangeRate => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n exchangeRate: exchangeRate,\n },\n formErrors: { ...prevState.formErrors, exchangeRate: 1 },\n }));\n };\n\n showTotalToPayWithInstallments = returnFinalPriceOnly => {\n const { t, bookings, infractions, location } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n const parseQs = queryString.parse(location.search);\n\n const isPayingInfraction = this.isPayingInfraction();\n let finalPrice = 0;\n if (qsamount && !isPayingInfraction) {\n if (parseQs?.bookingid) {\n finalPrice = Math.abs(bookings.confirmation.balance);\n }\n } else {\n finalPrice = this.state.paymentInfo.price;\n }\n\n if (this.isPayingBooking() && bookings.installment)\n finalPrice = bookings.installment.total_amount;\n\n if (isPayingInfraction && infractions.installment)\n finalPrice = infractions.installment.total_amount;\n\n if (returnFinalPriceOnly) {\n return finalPrice;\n }\n\n if (qsamount) {\n return (\n <React.Fragment>\n <NumberDisplay value={qsamount} overwrittenSymbol={this.state.currencySymbol} />\n {qsamount < finalPrice && (\n <>\n {` ${t('of')} `}\n <NumberDisplay value={finalPrice} overwrittenSymbol={this.state.currencySymbol} />\n </>\n )}\n </React.Fragment>\n );\n } else {\n return <NumberDisplay value={finalPrice} overwrittenSymbol={this.state.currencySymbol} />;\n }\n };\n\n handleCheckboxUseContactInfoChange = checked => {\n const customer = this.getCustomerInfo();\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n billingInfoCheckbox: checked,\n disableBillingFields: checked,\n firstName: checked ? customer.firstName : prevState.paymentInfo.firstName,\n lastName: checked ? customer.lastName : prevState.paymentInfo.lastName,\n fiscalConditionId: checked\n ? customer.fiscalConditionId\n : prevState.paymentInfo.fiscalConditionId,\n billingDocumentType: checked\n ? customer.documentTypeId || 0\n : prevState.paymentInfo.billingDocumentType,\n documentId: checked ? customer.documentId : prevState.paymentInfo.documentId,\n address: checked ? customer.address : prevState.paymentInfo.address,\n addressNumber: checked\n ? customer.addressNumber || null\n : prevState.paymentInfo.addressNumber,\n addressDepartment: checked ? customer.addressDepartment || '' : '',\n zipCode: checked ? customer.zipCode : prevState.paymentInfo.zipCode,\n cellPhone: checked ? customer.cellPhone : prevState.paymentInfo.cellPhone,\n emailAddress: checked ? customer.emailAddress : prevState.paymentInfo.emailAddress,\n },\n formErrors: {\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: '',\n documentId: '',\n address: '',\n addressNumber: '',\n addressDepartment: '',\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n },\n }));\n };\n\n parseBillingInfoSection = () => {\n const { t, billingSubtitle, billingConditions } = this.props;\n\n return (\n <>\n <div className=\"billing-form pb-1 pt-3 payment-code\">\n <hr />\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-2\">\n <strong>{t('billingInformation.title')}</strong>\n </p>\n {billingSubtitle && <p className=\"label mb-2\">{t(billingSubtitle)}</p>}\n <CheckboxInput\n onChange={this.handleCheckboxUseContactInfoChange}\n checked={this.state.paymentInfo.billingInfoCheckbox}\n text={<p className=\"mb-1\">{t('billingInformation.equalToContactInfo')}</p>}\n />\n {this.parseBillingFields()}\n </div>\n {billingConditions && <Paragraph text={billingConditions} />}\n </div>\n </>\n );\n };\n\n parseBillingFields = () => {\n const { t, listDocumentTypes } = this.props;\n const {\n paymentInfo: { billingDocumentType, documentId },\n billingDocInputFocus,\n formLoading,\n } = this.state;\n\n return (\n <>\n <div className=\"row\">\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('billingInformation.fields.firstName')}\n value={this.state.paymentInfo.firstName}\n error={this.state.formErrors.firstName}\n onChange={this.handleFirstName}\n options={{ autoComplete: 'billingInfo.firstName' }}\n />\n </div>\n </div>\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('billingInformation.fields.lastName')}\n value={this.state.paymentInfo.lastName}\n error={this.state.formErrors.lastName}\n onChange={this.handleLastName}\n options={{ autoComplete: 'billingInfo.lastName' }}\n />\n </div>\n </div>\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('mail')}\n value={this.state.paymentInfo.emailAddress}\n error={this.state.formErrors.emailAddress}\n onChange={this.handleEmailAddress}\n options={{ autoComplete: 'billingInfo.emailAddress' }}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('addressName')}\n value={this.state.paymentInfo.address}\n error={this.state.formErrors.address}\n onChange={this.handleAddress}\n options={{ autoComplete: 'address-line1' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('addressNumber')}\n value={this.state.paymentInfo.addressNumber}\n error={this.state.formErrors.addressNumber}\n onChange={this.handleAddressNumber}\n options={{ autoComplete: 'addressNumber' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('addressDepartment')}\n value={this.state.paymentInfo.addressDepartment}\n error={this.state.formErrors.addressDepartment}\n onChange={this.handleAddressDepartment}\n options={{ autoComplete: 'addressDepartment' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('zipCode')}\n value={this.state.paymentInfo.zipCode}\n error={this.state.formErrors.zipCode}\n onChange={this.handleZipCode}\n options={{ autoComplete: 'zipCode' }}\n />\n </div>\n </div>\n <div className={!this.state.paymentInfo.showBillingInfo ? 'col-md-4' : 'col-md-3'}>\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('phone')}\n value={this.state.paymentInfo.cellPhone}\n error={this.state.formErrors.cellPhone}\n onChange={this.handleCellphone}\n options={{ autoComplete: 'tel' }}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.handleFiscalCondition}\n selected={this.state.paymentInfo.fiscalConditionId}\n options={transformFiscalConditionsToSelectOptions(this.state.fiscalConditions, t)}\n error={this.state.formErrors.fiscalConditionId}\n defaultOption={t('billingInformation.fields.fiscalCondition')}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.handleBillingDocumentType}\n options={transformDocTypesToSelectOptions(listDocumentTypes) || []}\n selected={billingDocumentType}\n error={this.state.formErrors.billingDocumentType}\n defaultOption={t('tipodocumento')}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('billingInformation.fields.document')}\n error={this.state.formErrors.documentId}\n value={documentId}\n onChange={this.handleDocumentId}\n options={{\n autoComplete: 'document',\n onFocus: () => {\n this.setState({ billingDocInputFocus: true });\n },\n onBlur: () => {\n this.setState({ billingDocInputFocus: false });\n },\n }}\n legend={\n this.state.sampleBillingDocFormat\n ? t('billingInformation.fields.formatExpected', {\n format_expected: this.state.sampleBillingDocFormat,\n })\n : null\n }\n mask={\n !formLoading &&\n getDocumentMask(\n documentId,\n billingDocumentType,\n billingDocInputFocus,\n listDocumentTypes,\n )\n }\n />\n </div>\n </div>\n </>\n );\n };\n\n getCustomerInfo = () => {\n if (this.isPayingBooking()) return this.props.bookings.confirmation.customer;\n if (this.isPayingInfraction() && this.props.infractions.current) {\n return this.props.infractions.current.booking\n ? this.props.infractions.current.booking.customer\n : {};\n }\n };\n\n getPaymentMethods = async data => {\n const { bin } = data;\n const { mp } = this.state;\n const { results } = await mp.getPaymentMethods({ bin });\n let icon = '';\n\n if (!results || !results[0]) return;\n\n switch (results[0].id) {\n case 'visa':\n case 'debvisa':\n icon = 'fab fa-cc-visa';\n break;\n case 'amex':\n case 'american-express':\n icon = 'fab fab fa-cc-amex';\n break;\n case 'master':\n case 'debmaster':\n icon = 'fab fa-cc-mastercard';\n break;\n default:\n icon = 'far fa-credit-card';\n break;\n }\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n paymentMethodID: results[0].id,\n bin,\n },\n cardIcon: icon,\n }));\n const issuers = await mp.getIssuers({\n paymentMethodId: results[0].id,\n bin,\n });\n this.issuersHandler(issuers);\n };\n\n render() {\n const {\n t,\n title,\n subtitle,\n script,\n paymentLegend,\n hideInstallmentLink,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n installmentsHelperText,\n } = this.props;\n const {\n paymentInfo: { documentType, document, documents },\n docInputFocus,\n formLoading,\n formErrors,\n } = this.state;\n\n const publicToken = this.getPublicToken();\n if (!publicToken) return null;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const showExchangeMsg = applyExchangeRate;\n\n let returnFinalPriceOnly = true;\n\n let showInstalmentsLink = hideInstallmentLink !== undefined ? !hideInstallmentLink : true;\n\n let totalToPay = this.showTotalToPayWithInstallments(returnFinalPriceOnly);\n if (applyExchangeRate)\n totalToPay = getPriceWithExchangeRate(\n totalToPay,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n\n return (\n <StyledMercadoPagoSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"col-md-12 p-0 LogosContainer\">\n <img\n width=\"60\"\n height=\"60\"\n className=\"mr-4\"\n src=\"/images/ssl.jpg\"\n alt={t('CertificadoSSL')}\n />\n <div className=\"SecureLogoContainer\">\n <div className=\"LogoContainer\">\n <VerifiedUserOutlinedIcon />\n </div>\n <div>\n <Typography variant=\"body1\" className=\"CompraTitle\">\n {t('CompraSegura')}\n </Typography>\n <Typography variant=\"body1\"> {t('SafeTransactionsSite')}</Typography>\n </div>\n </div>\n </div>\n <div className=\"adicionales-block pb-1 pt-3 payment-code\">\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-1\">\n <strong>{this.showOrderIdentifier()}</strong>\n </p>\n <p>\n <strong>\n {t('totalToPay')} {this.showTotalToPayWithInstallments()}\n </strong>\n </p>\n <hr />\n <PartialPayWarning />\n </div>\n {showExchangeMsg && (\n <Paragraph className=\"rent-days mb-0 mt-2\" color={'red'}>\n <strong>{`${t('chargedPaymentMsg')} ${\n currentCurrency?.isoCode\n } ${totalToPay.toFixed(2)} `}</strong>\n </Paragraph>\n )}\n </div>\n <div className=\"row adicionales-block mb-5 pt-3\">\n <div className=\"col-md-10 form-pago\">\n <form onSubmit={this.handleSubmit} ref={this.formRef}>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('numeroTarjeta')}</span>\n <div className=\"mp-inputs\">\n <i className={this.state.cardIcon}></i>\n <div id=\"cardNumber\"></div>\n </div>\n </div>\n {formErrors && formErrors.cardNumber && (\n <div className=\"error\">{formErrors.cardNumber}</div>\n )}\n </div>\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <span className=\"label\">{t('codigo')}</span>\n <div className=\"mp-inputs\" id=\"securityCode\"></div>\n </div>\n {formErrors && formErrors.securityCode && (\n <div className=\"error\">{formErrors.securityCode}</div>\n )}\n </div>\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <span className=\"label\">{t('expirationDate')}</span>\n <div className=\"mp-inputs\" id=\"expirationDate\"></div>\n </div>\n {formErrors && formErrors.expirationDate && (\n <div className=\"error\">{formErrors.expirationDate}</div>\n )}\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('banco')}</span>\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.bankSelection}\n selected={this.state.paymentInfo.bank}\n error={this.state.formErrors.bank}\n options={this.state.banks}\n />\n </div>\n </div>\n {this.state.paymentInfo.showInstallments && (\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('cuotas')}</span>\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.installmentsSelection}\n selected={this.state.paymentInfo.installment}\n error={this.state.formErrors.installment}\n options={this.state.installments}\n />\n {installmentsHelperText && t(installmentsHelperText)}\n </div>\n </div>\n )}\n </div>\n <div className=\"row\">\n <div className=\"col-md-5\">\n <div className=\"form-group\">\n <span className=\"label\">{t('titular')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleCardholderName}\n value={this.state.paymentInfo.cardholderName}\n options={{\n 'data-checkout': 'cardholderName',\n id: 'cardholderName',\n }}\n error={this.state.formErrors.cardholderName}\n />\n </div>\n </div>\n {this.state.paymentInfo.showDoc && (\n <>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('tipodocumento')}</span>\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.documentSelection}\n selected={this.state.paymentInfo.documentType}\n options={this.state.paymentInfo.documents}\n props={{\n 'data-checkout': 'docType',\n id: 'docType',\n }}\n error={this.state.formErrors.documentType}\n />\n </div>\n </div>\n <div className=\"col-md-5\">\n <div className=\"form-group\">\n <span className=\"label\">{t('documento')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleDocument}\n value={this.state.paymentInfo.document}\n error={this.state.formErrors.document}\n options={{\n 'data-checkout': 'docNumber',\n id: 'docNumber',\n autoComplete: 'document',\n onFocus: () => {\n this.setState({\n ...this.state,\n docInputFocus: true,\n });\n },\n onBlur: () => {\n this.setState({\n ...this.state,\n docInputFocus: false,\n });\n },\n }}\n legend={\n this.state.sampleDocFormat\n ? t('billingInformation.fields.formatExpected', {\n format_expected: this.state.sampleDocFormat,\n })\n : null\n }\n mask={\n !formLoading &&\n getDocumentMask(document, documentType, docInputFocus, documents)\n }\n />\n </div>\n </div>\n </>\n )}\n </div>\n {paymentLegend && (\n <>\n <div className=\"row\">\n <div className=\"col-md-12 mb-4\">\n <Paragraph className=\"label\" text={paymentLegend} />\n </div>\n </div>\n </>\n )}\n {this.state.paymentInfo.showBillingInfo && this.parseBillingInfoSection()}\n <div className=\"row\">\n <div className=\"col-md-12 mb-4\">\n <Btn\n type=\"submit\"\n text={this.getPayButtonText()}\n disabled={this.state.formLoading}\n className=\"mt-5 mercadopago-pay_button\"\n />\n </div>\n </div>\n <div className=\"\">\n <img\n width=\"260\"\n height=\"40\"\n className=\"mt-4\"\n src=\"/images/mercado-pago.jpg\"\n alt={t('ProcesadoMercadoPago')}\n />\n </div>\n </form>\n </div>\n <div className=\"col-md-2\">\n {showInstalmentsLink && (\n <a\n href=\"https://www.mercadopago.com.ar/cuotas\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <i className=\"fas fa-angle-double-right\"></i>\n {t('promociones')}\n </a>\n )}\n <ScriptTagComponent\n url={script}\n loadLibrary={true}\n async={true}\n onLoaded={this.onLoaded}\n />\n </div>\n </div>\n </div>\n </StyledMercadoPagoSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, infractions, installment, siteConfiguration, global }) => ({\n bookings: bookings,\n installment: installment,\n infractions: infractions,\n settings: siteConfiguration.settings,\n listDocumentTypes: global.listDocumentTypes,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n});\nexport default connect(mapStateToProps, {\n setBookingInstallment,\n setInfractionInstallment,\n fetchDocumentTypes,\n fetchFiscalConditions,\n})(withRouter(withTranslation()(MercadoPagoSection)));\n","import MercadoPagoSection from './MercadoPagoSection';\nexport default MercadoPagoSection;\n","import { SET_INFRACTION, SET_INFRACTION_PAY_INSTALLMENT } from 'utils/types';\nimport { getInfraction } from 'services/api';\n\nexport const getCustomerInfraction = (infractionId, customerId) => async dispatch => {\n try {\n const { data } = await getInfraction(infractionId, customerId);\n\n return Promise.resolve(\n dispatch({\n type: SET_INFRACTION,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const setInfractionInstallment = installment => async dispatch => {\n return Promise.resolve(\n dispatch({\n type: SET_INFRACTION_PAY_INSTALLMENT,\n payload: installment,\n }),\n );\n};\n","import style from 'styled-components';\n\nexport const StyledCredomaticSection = style.section`\n \n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n\n .logo-container {\n display: flex;\n align-items: center;\n\n .credomatic-logo {\n margin-left: 10px;\n }\n }\n`;\n","import React from 'react';\nimport queryString from 'query-string';\nimport { NumberDisplay } from 'components/';\nimport { handleGetTotalToPay } from 'utils/dataHelper';\n\nclass BasePaymentSection extends React.Component {\n getPayablePrice = () => {\n const { bookings, settings } = this.props;\n if (settings.paymentConfiguration && settings.paymentConfiguration.percentageToPay) {\n return Math.abs(\n (bookings.confirmation.customerBalance / 100) *\n settings.paymentConfiguration.percentageToPay,\n );\n } else {\n return Math.abs(bookings.confirmation.customerBalance);\n }\n };\n\n showTotalToPay = returnFinalPriceOnly => {\n const { location } = this.props;\n const {\n paymentInfo: { qsamount, price },\n } = this.state;\n const parseQs = queryString.parse(location.search);\n\n let finalPrice = 0;\n let bookingPayableAmount = 0;\n\n if (qsamount || parseQs?.infractionid) {\n finalPrice = Math.abs(qsamount || price);\n\n if (parseQs?.bookingid) {\n bookingPayableAmount = this.getPayablePrice();\n }\n } else {\n finalPrice = this.getPayablePrice();\n }\n\n if (returnFinalPriceOnly) {\n return finalPrice;\n }\n\n if (qsamount) {\n return (\n <React.Fragment>\n <NumberDisplay value={qsamount} useWebCurrency={true} />\n {qsamount < bookingPayableAmount && (\n <>\n {` ${this.props.t('de')} `} <NumberDisplay value={bookingPayableAmount} />\n </>\n )}\n </React.Fragment>\n );\n } else {\n return <NumberDisplay value={finalPrice} useWebCurrency={true} />;\n }\n };\n\n getTotalToPay(useRound = false) {\n const {\n bookings: { confirmation },\n settings: { paymentConfiguration },\n } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n const price = handleGetTotalToPay(confirmation.customerBalance, paymentConfiguration, qsamount);\n\n return useRound ? Math.round(price) : price;\n }\n}\n\nexport default BasePaymentSection;\n","/* eslint-disable no-undef */\nimport React from 'react';\nimport { Title, TextInput, SelectInput, Btn, Paragraph } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { StyledCredomaticSection } from './CredomaticSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { tt, tlink } from '../../../utils/translationHelper';\nimport * as yup from 'yup';\nimport { payBooking, payInfraction } from 'services/api';\nimport queryString from 'query-string';\nimport { history } from '/store';\nimport { BookingStatus } from '../../../utils/constants';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from '../../../utils/priceHelper';\n\nimport {\n is_gtag_enabled,\n gtag_checkout_process,\n gtag_checkout_option,\n gtag_purchase,\n} from '../../../utils/googleTagsHelper';\nimport BasePaymentSection from '../basePaymentComponent/BasePaymentSection';\nimport PartialPayWarning from '../partialPayWarning';\n\nvar CreditCardValidator = require('card-validator');\n\nclass CredomaticSection extends BasePaymentSection {\n constructor(props) {\n const { t } = props;\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n qsamout: 0,\n bookingId: '0',\n promotionId: '',\n currencyCode: '',\n exchangeRate: 1,\n },\n formErrors: {\n cardNumber: '',\n year: '',\n month: '',\n secCode: '',\n cardholderName: '',\n },\n cardIcon: 'far fa-credit-card',\n formLoading: false,\n };\n\n yup.addMethod(yup.number, 'isValidCreditCard', function(creditCardNumber) {\n return this.test('test-cc-number', t('cc_rejected_bad_filled_card_number'), function(\n ccNumber,\n ) {\n return CreditCardValidator.number(ccNumber).isValid;\n });\n });\n\n yup.addMethod(yup.number, 'isValidSecCode', function(secCode) {\n return this.test('test-cc-number', t('cc_rejected_bad_filled_security_code'), function(\n secCode,\n ) {\n const ccObject = CreditCardValidator.number(this.parent.cardNumber);\n if (!secCode || !ccObject.card) return false;\n return secCode.toString().length === ccObject.card.code.size;\n });\n });\n\n this.paymentInfoFormSchema = yup.object().shape({\n cardNumber: yup\n .number()\n .isValidCreditCard()\n .required(t('inputIsRequired', { field: t('numeroTarjeta') })),\n year: yup.number().required(t('inputIsRequired', { field: t('año') })),\n month: yup.number().required(t('inputIsRequired', { field: t('mes') })),\n secCode: yup\n .number()\n .isValidSecCode()\n .required(t('inputIsRequired', { field: t('codigo') })),\n cardholderName: yup.string().required(t('inputIsRequired', { field: t('titular') })),\n });\n\n this.formRef = React.createRef(null);\n const year = new Date().getFullYear();\n this.years = Array.from(new Array(15), (val, index) => index + year);\n this.months = Array.from(new Array(12), (val, index) => index + 1);\n }\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n } catch {}\n }\n }\n\n componentDidMount() {\n const {\n location,\n bookings,\n infractions,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n defaultCurrency,\n } = this.props;\n const parseQs = queryString.parse(location.search);\n\n if (this.isPayingBooking() && bookings.confirmation != null) {\n // If the currency is not the system currency and there's an exchange rate\n // use that\n if (bookings.confirmation.currency !== defaultCurrency.isoCode) {\n bookings.confirmation.balance =\n bookings.confirmation.balance * bookings.confirmation.exchangeRate;\n bookings.confirmation.currency = defaultCurrency.isoCode;\n }\n\n if (is_gtag_enabled(googleTagManager)) {\n gtag_checkout_process(\n { number: 3, option: 'Online Payment' },\n bookings.confirmation,\n settings,\n );\n gtag_checkout_option({ number: 3, option: 'Credomatic' });\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(),\n bookingId: bookings.confirmation.id,\n email: bookings.confirmation.customer.emailAddress,\n promotionId: parseQs.promotionid || null,\n currencyCode: bookings.confirmation.currency,\n exchangeRate: 1,\n },\n }));\n }\n\n if (this.isPayingInfraction() && parseQs.customerid) {\n const infraction = infractions.current;\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getInfractionTotalToPay(),\n infractionId: infraction.id,\n act: infraction.act,\n customerId: parseQs.customerid,\n currencyCode: defaultCurrency.isoCode,\n exchangeRate: 1,\n },\n }));\n }\n }\n\n getInfractionTotalToPay() {\n const { infractions } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n const infraction = infractions.current;\n if (qsamount && Math.abs(infraction.amount) >= Math.abs(qsamount)) {\n return Math.abs(qsamount);\n } else {\n return infraction.amount;\n }\n }\n\n handleCardNumber = cardNumber => {\n const ccObject = CreditCardValidator.number(cardNumber);\n const ccIcon = this.getCreditCardIcon(ccObject.card ? ccObject.card.type : '');\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, cardNumber },\n formErrors: { ...prevState.formErrors, cardNumber: null, secCode: null },\n cardIcon: ccIcon,\n }));\n };\n\n getCreditCardIcon = ccType => {\n let icon = '';\n\n switch (ccType) {\n case 'visa':\n icon = 'fab fa-cc-visa';\n break;\n case 'american-express':\n icon = 'fab fa-cc-amex';\n break;\n case 'mastercard':\n icon = 'fab fa-cc-mastercard';\n break;\n default:\n icon = 'far fa-credit-card';\n break;\n }\n\n return icon;\n };\n\n handleSecCode = secCode => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, secCode },\n formErrors: { ...prevState.formErrors, secCode: null },\n }));\n };\n\n handleMonth = month => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, month },\n formErrors: { ...prevState.formErrors, month: null },\n }));\n };\n\n handleYear = year => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, year },\n formErrors: { ...prevState.formErrors, year: null },\n }));\n };\n\n handleCardholderName = cardholderName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, cardholderName },\n formErrors: { ...prevState.formErrors, cardholderName: null },\n }));\n };\n\n handleSubmit = e => {\n e.preventDefault();\n\n const paymentInfo = this.state.paymentInfo;\n const form = e.target;\n\n this.setState({ formLoading: true });\n\n this.paymentInfoFormSchema\n .validate(paymentInfo, { abortEarly: false })\n .then(valid => {\n if (valid) this.executePayment(paymentInfo);\n })\n .catch(err => {\n this.setState({ formLoading: false });\n const formErrors = err.inner.reduce((prevErrors, currentError) => {\n return { ...prevErrors, [currentError.path]: currentError.message };\n }, {});\n window.scrollTo(0, this.formRef.current.offsetTop);\n this.setState(prevState => ({ ...prevState, formErrors }));\n });\n };\n\n executePayment = async params => {\n const {\n t,\n i18n,\n bookings,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n } = this.props;\n\n let paymentParams = this.state.paymentInfo;\n paymentParams.gatewayId = 'BAC';\n\n try {\n await makePayment(paymentParams);\n\n if (is_gtag_enabled(googleTagManager)) gtag_purchase(bookings.confirmation, settings);\n history.push(\n `${tlink('__Routes.paymentSuccess', t, i18n, null, settings.configurations.langConfig)}`,\n );\n } catch (error) {\n let errorMessage;\n\n if (error.response == null || error.response.data == null) {\n errorMessage = t('credomaticGenericError');\n } else if (error.response.data.code === 203) {\n errorMessage = t('credomaticAddPaymentFailed', {\n transactionId: error.response.message,\n });\n }\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: errorMessage },\n );\n }\n };\n\n makePayment = paymentInfo => {\n if (this.isPayingBooking()) return payBooking(paymentInfo);\n if (this.isPayingInfraction()) return payInfraction(paymentInfo);\n };\n\n showOrderIdentifier = () => {\n const { t, bookings, settings } = this.props;\n const confirmedOrderText = settings?.paymentConfiguration?.confirmedOrderText;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n const bookingStatus = bookings.confirmation.currentStatus;\n\n if ([BookingStatus.reserved, BookingStatus.confirmed].includes(bookingStatus)) {\n return (\n tt(confirmedOrderText, t, true, { booking_id }) || t('ordenConfirmada', { booking_id })\n );\n }\n return t('orden', { booking_id });\n }\n\n if (this.isPayingInfraction())\n return `ACTA ${this.state.paymentInfo.act?.toString().padStart(7, '0')}`;\n };\n\n isPayingBooking = () => {\n const { bookings, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.bookingid || (bookings && bookings.confirmation);\n };\n\n isPayingInfraction = () => {\n const { infractions, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.infractionid && parseQs.customerid && infractions && infractions.current;\n };\n\n getPayButtonText = () => {\n const { t } = this.props;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n return this.state.formLoading\n ? t('pagandoReserva', { booking_id })\n : t('pagarReserva', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n const act = this.state.paymentInfo.act?.toString().padStart(7, '0');\n return this.state.formLoading ? t('payingInfraction', { act }) : t('payInfraction', { act });\n }\n };\n\n render() {\n const { t, title, subtitle, currentCurrency, defaultCurrency, webCurrency } = this.props;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const showExchangeMsg = applyExchangeRate;\n\n let returnFinalPriceOnly = true;\n\n let totalToPay = this.showTotalToPay(returnFinalPriceOnly);\n if (applyExchangeRate)\n totalToPay = getPriceWithExchangeRate(\n totalToPay,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n\n return (\n <StyledCredomaticSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"col-md-12 p-0\">\n <img\n width=\"60\"\n height=\"60\"\n className=\"mr-4\"\n src=\"images/payments/ssl.jpg\"\n alt={t('CertificadoSSL')}\n />\n <img\n width=\"280\"\n height=\"42\"\n className=\"mr-2\"\n src=\"images/payments/compra-segura.jpg\"\n alt={t('CompraSegura')}\n />\n </div>\n <div className=\"adicionales-block pb-1 pt-3 payment-code\">\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-1\">\n <strong>{this.showOrderIdentifier()}</strong>\n </p>\n <p>\n <strong>\n {t('totalToPay')} {this.showTotalToPay()}\n </strong>\n </p>\n <hr />\n <PartialPayWarning />\n </div>\n {showExchangeMsg && (\n <Paragraph className=\"rent-days mb-0 mt-2\" color={'red'}>\n <strong>{`${t('chargedPaymentMsg')} ${\n currentCurrency?.isoCode\n } ${totalToPay.toFixed(2)} `}</strong>\n </Paragraph>\n )}\n </div>\n <div className=\"row adicionales-block mb-5 pt-3\">\n <div className=\"col-md-10 form-pago\">\n <form onSubmit={this.handleSubmit} ref={this.formRef}>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('numeroTarjeta')}</span>\n <TextInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleCardNumber}\n value={this.state.paymentInfo.cardNumber}\n icon={this.state.cardIcon}\n options={{ 'data-checkout': 'cardNumber' }}\n error={this.state.formErrors.cardNumber}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('codigo')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleSecCode}\n value={this.state.paymentInfo.secCode}\n options={{ 'data-checkout': 'securityCode' }}\n error={this.state.formErrors.secCode}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('mes')}</span>\n <SelectInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleMonth}\n selected={this.state.paymentInfo.month}\n error={this.state.formErrors.month}\n props={{ 'data-checkout': 'cardExpirationMonth' }}\n options={this.months}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('año')}</span>\n <SelectInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleYear}\n error={this.state.formErrors.year}\n selected={this.state.paymentInfo.year}\n props={{ 'data-checkout': 'cardExpirationYear' }}\n options={this.years}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('titular')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleCardholderName}\n value={this.state.paymentInfo.cardholderName}\n options={{\n 'data-checkout': 'cardholderName',\n id: 'cardholderName',\n }}\n error={this.state.formErrors.cardholderName}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-12 mb-4\">\n <Btn\n type=\"submit\"\n text={this.getPayButtonText()}\n disabled={this.state.formLoading}\n className=\"mt-5 credomatic-pay_button\"\n />\n </div>\n <div className=\"logo-container\">\n <span>{t('providedBy')}</span>\n <img\n width=\"151\"\n height=\"52\"\n className=\"credomatic-logo\"\n src=\"https://rently.azureedge.net/rently/Web/credomatic-logo.png\"\n alt=\"BAC Credomatic\"\n />\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n </StyledCredomaticSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, infractions, siteConfiguration, global }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(CredomaticSection)));\n","import CredomaticSection from './CredomaticSection';\nexport default CredomaticSection;\n","import style from 'styled-components';\n\nexport const StyledPromericaSection = style.section`\n \n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n\n .logo-container {\n display: flex;\n align-items: center;\n\n .promerica-logo {\n margin-left: 10px;\n }\n }\n\n .country-select {\n font-size: 0.8em;\n\n div {\n border-radius: 0px;\n border-color: #e7e7e7;\n }\n }\n\n .error{\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic;\n margin-top:13px;\n }\n`;\n","import Fetcher from 'utils/fetcher';\n\nconst api = new Fetcher();\nconst apiUrl = process.env.REACT_APP_BACKEND_API;\n\nexport const getConfiguration = async () => api.get(`${apiUrl}/booking/getpromericauridfpi`);\n","/* eslint-disable no-undef */\nimport React from 'react';\nimport { Title, TextInput, SelectInput, Btn, Paragraph } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { StyledPromericaSection } from './PromericaSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { tt, tlink } from '../../../utils/translationHelper';\nimport * as yup from 'yup';\nimport { payBooking, payInfraction } from 'services/api';\nimport { getConfiguration } from 'services/promericaService';\nimport queryString from 'query-string';\nimport { history } from '/store';\nimport Select from 'react-select';\nimport { fetchCountries } from 'actions';\nimport { BookingStatus } from '../../../utils/constants';\nimport { Typography } from '@material-ui/core';\nimport VerifiedUserOutlinedIcon from '@material-ui/icons/VerifiedUserOutlined';\nimport {\n is_gtag_enabled,\n gtag_checkout_process,\n gtag_checkout_option,\n gtag_purchase,\n} from '../../../utils/googleTagsHelper';\nimport BasePaymentSection from '../basePaymentComponent/BasePaymentSection';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\nimport PartialPayWarning from '../partialPayWarning';\n\nvar CreditCardValidator = require('card-validator');\n\nclass PromericaSection extends BasePaymentSection {\n constructor(props) {\n const { t } = props;\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n qsamount: 0,\n bookingId: '0',\n clientIpAddress: '',\n sessionId: '',\n infractionId: '0',\n customerId: '0',\n act: '',\n promotionId: '',\n currencyCode: '',\n exchangeRate: 1,\n },\n formErrors: {\n cardNumber: '',\n year: '',\n month: '',\n secCode: '',\n cardholderName: '',\n firstName: '',\n lastName: '',\n country: '',\n state: '',\n city: '',\n street: '',\n postalCode: '',\n email: '',\n phone: '',\n },\n cardIcon: 'far fa-credit-card',\n formLoading: false,\n };\n\n yup.addMethod(yup.number, 'isValidCreditCard', function(creditCardNumber) {\n return this.test(\n 'test-cc-number',\n t('promerica_cc_rejected_bad_filled_card_number'),\n function(ccNumber) {\n const cardObject = CreditCardValidator.number(ccNumber);\n if (cardObject.card && !['visa', 'mastercard'].includes(cardObject.card.type))\n return false;\n return cardObject.isValid;\n },\n );\n });\n\n yup.addMethod(yup.number, 'isValidSecCode', function(secCode) {\n return this.test('test-cc-number', t('cc_rejected_bad_filled_security_code'), function(\n secCode,\n ) {\n const ccObject = CreditCardValidator.number(this.parent.cardNumber);\n if (!secCode || !ccObject.card) return false;\n return secCode.toString().length === ccObject.card.code.size;\n });\n });\n\n yup.addMethod(yup.object, 'isValidCountry', function(countryObject) {\n return this.test('test-country', t('cc_rejected_bad_filled_country'), function(\n countryObject,\n ) {\n if (countryObject === undefined) return false;\n return true;\n });\n });\n\n yup.addMethod(yup.string, 'isValidState', function(stateName) {\n return this.test('test-state', t('cc_rejected_bad_filled_state'), function(stateName) {\n const selectedCountry = this.parent.country;\n if (stateName === undefined) return false;\n if (selectedCountry === undefined && stateName !== undefined) return true;\n if (\n ['US', 'CA'].some(c => c === selectedCountry.value) &&\n stateName.toString().length !== 2\n )\n return false;\n\n return true;\n });\n });\n\n yup.addMethod(yup.string, 'isValidCardHolderName', function(firstName) {\n return this.test(\n 'test-cardholder',\n t('promerica.form_validation.cardholder_length'),\n function(firstName) {\n const currentLastName = this.parent.lastName;\n return (firstName + currentLastName).length <= 30;\n },\n );\n });\n\n this.paymentInfoFormSchema = yup.object().shape({\n cardNumber: yup\n .number()\n .isValidCreditCard()\n .required(t('inputIsRequired', { field: t('numeroTarjeta') })),\n year: yup.number().required(t('inputIsRequired', { field: t('año') })),\n month: yup.number().required(t('inputIsRequired', { field: t('mes') })),\n secCode: yup\n .number()\n .isValidSecCode()\n .required(t('inputIsRequired', { field: t('codigo') })),\n firstName: yup\n .string()\n .isValidCardHolderName()\n .required(t('inputIsRequired', { field: t('firstname') })),\n lastName: yup.string().required(t('inputIsRequired', { field: t('lastname') })),\n country: yup\n .object()\n .required(t('inputIsRequired', { field: t('country') }))\n .isValidCountry(),\n state: yup\n .string()\n .isValidState()\n .required(t('inputIsRequired', { field: t('state') })),\n city: yup\n .string()\n .test('len', t('promerica.form_validation.city_length'), val => val && val.length <= 30)\n .required(t('inputIsRequired', { field: t('city') })),\n street: yup\n .string()\n .test('len', t('promerica.form_validation.address_length'), val => val && val.length <= 60)\n .required(t('inputIsRequired', { field: t('address') })),\n postalCode: yup\n .string()\n .test(\n 'len',\n t('promerica.form_validation.postal_code_length'),\n val => val && val.length >= 5 && val.length <= 9,\n )\n .required(t('inputIsRequired', { field: t('postalCode') })),\n email: yup\n .string()\n .email()\n .required(t('inputIsRequired', { field: t('email') })),\n phone: yup\n .string()\n .test('len', t('promerica.form_validation.phone_length'), val => val && val.length <= 15)\n .required(t('inputIsRequired', { field: t('phone') })),\n });\n\n this.formRef = React.createRef(null);\n const year = new Date().getFullYear();\n this.years = Array.from(new Array(15), (val, index) => index + year);\n this.months = Array.from(new Array(12), (val, index) => index + 1);\n }\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n } catch {}\n }\n }\n\n async componentDidMount() {\n const {\n location,\n countries,\n bookings,\n infractions,\n i18n,\n fetchCountries,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n defaultCurrency,\n } = this.props;\n const parseQs = queryString.parse(location.search);\n\n if (!countries) fetchCountries(i18n.language);\n\n this.setClientIpAddress();\n this.setClientSessionId();\n\n if (this.isPayingBooking() && bookings.confirmation != null) {\n // If the currency is not the system currency and there's an exchange rate\n // use that\n if (bookings.confirmation.currency !== defaultCurrency.isoCode) {\n bookings.confirmation.balance =\n bookings.confirmation.balance * bookings.confirmation.exchangeRate;\n bookings.confirmation.currency = defaultCurrency.isoCode;\n }\n\n if (is_gtag_enabled(googleTagManager)) {\n gtag_checkout_process(\n { number: 3, option: 'Online Payment' },\n bookings.confirmation,\n settings,\n );\n gtag_checkout_option({ number: 3, option: 'Promerica' });\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(),\n bookingId: bookings.confirmation.id,\n promotionId: parseQs.promotionid || null,\n currencyCode: bookings.confirmation.currency,\n exchangeRate: 1,\n },\n }));\n }\n\n if (this.isPayingInfraction() && parseQs.customerid) {\n const infraction = infractions.current;\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getInfractionTotalToPay(),\n infractionId: infraction.id,\n act: infraction.act,\n customerId: parseQs.customerid,\n currencyCode: defaultCurrency.isoCode,\n exchangeRate: 1,\n },\n }));\n }\n }\n\n async setClientIpAddress() {\n const publicIp = require('public-ip');\n const clientIpAddress = await publicIp.v4();\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, clientIpAddress },\n }));\n }\n\n async setClientSessionId() {\n const configuration = await getConfiguration();\n let sessionId = '';\n let url = '';\n\n if (configuration.status === 200) {\n sessionId = configuration.data.sessionId;\n url = configuration.data.url;\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, sessionId },\n }));\n\n return new Promise((resolve, reject) => {\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n script.onload = () => {\n resolve();\n };\n script.onerror = () => {\n reject('cannot load CyberSource script ' + sourceUrl);\n };\n document.head.appendChild(script);\n });\n }\n\n getInfractionTotalToPay() {\n const { infractions } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n const infraction = infractions.current;\n if (qsamount && Math.abs(infraction.amount) >= Math.abs(qsamount)) {\n return Math.abs(qsamount);\n } else {\n return infraction.amount;\n }\n }\n\n handleCardNumber = cardNumber => {\n const ccObject = CreditCardValidator.number(cardNumber);\n const ccIcon = this.getCreditCardIcon(ccObject.card ? ccObject.card.type : '');\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, cardNumber },\n formErrors: { ...prevState.formErrors, cardNumber: null, secCode: null },\n cardIcon: ccIcon,\n }));\n };\n\n getCreditCardIcon = ccType => {\n let icon = '';\n\n switch (ccType) {\n case 'visa':\n icon = 'fab fa-cc-visa';\n break;\n case 'american-express':\n icon = 'fab fa-cc-amex';\n break;\n case 'mastercard':\n icon = 'fab fa-cc-mastercard';\n break;\n default:\n icon = 'far fa-credit-card';\n break;\n }\n\n return icon;\n };\n\n handleSecCode = secCode => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, secCode },\n formErrors: { ...prevState.formErrors, secCode: null },\n }));\n };\n\n handleMonth = month => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, month },\n formErrors: { ...prevState.formErrors, month: null },\n }));\n };\n\n handleYear = year => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, year },\n formErrors: { ...prevState.formErrors, year: null },\n }));\n };\n\n handleFirstName = firstName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, firstName },\n formErrors: { ...prevState.formErrors, firstName: null },\n }));\n };\n\n handleLastName = lastName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, lastName },\n formErrors: { ...prevState.formErrors, lastName: null },\n }));\n };\n\n handleCountry = country => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, country },\n formErrors: { ...prevState.formErrors, country: null },\n }));\n };\n\n handleState = state => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, state },\n formErrors: { ...prevState.formErrors, state: null },\n }));\n };\n\n handleCity = city => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, city },\n formErrors: { ...prevState.formErrors, city: null },\n }));\n };\n\n handleStreet = street => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, street },\n formErrors: { ...prevState.formErrors, street: null },\n }));\n };\n\n handlePostalCode = postalCode => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, postalCode },\n formErrors: { ...prevState.formErrors, postalCode: null },\n }));\n };\n\n handleEmail = email => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, email },\n formErrors: { ...prevState.formErrors, email: null },\n }));\n };\n\n handlePhone = phone => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, phone },\n formErrors: { ...prevState.formErrors, phone: null },\n }));\n };\n\n handleSubmit = e => {\n e.preventDefault();\n const paymentInfo = this.state.paymentInfo;\n this.setState({ formLoading: true });\n\n this.paymentInfoFormSchema\n .validate(paymentInfo, { abortEarly: false })\n .then(valid => {\n if (valid) this.executePayment(paymentInfo);\n })\n .catch(err => {\n this.setState({ formLoading: false });\n const formErrors = err.inner.reduce((prevErrors, currentError) => {\n return { ...prevErrors, [currentError.path]: currentError.message };\n }, {});\n window.scrollTo(0, this.formRef.current.offsetTop);\n this.setState(prevState => ({ ...prevState, formErrors }));\n });\n };\n\n executePayment = async params => {\n const {\n t,\n i18n,\n settings,\n bookings,\n settings: {\n configurations: { googleTagManager },\n },\n } = this.props;\n\n let paymentParams = this.state.paymentInfo;\n paymentParams.gatewayId = 'PROMERICA';\n const cardObject = CreditCardValidator.number(paymentParams.cardNumber);\n paymentParams.type = {\n code: cardObject.card.type === 'visa' ? '001' : '002',\n name: cardObject.card.type,\n };\n\n try {\n await makePayment(paymentParams);\n\n if (is_gtag_enabled(googleTagManager)) gtag_purchase(bookings.confirmation, settings);\n history.push(\n `${tlink('__Routes.paymentSuccess', t, i18n, null, settings.configurations.langConfig)}`,\n );\n } catch (error) {\n let errorMessage = t('promerica.error_codes.generic');\n let codeError = '';\n let transactionId = '';\n\n if (error && error.response && error.response.data && error.response.data.code) {\n transactionId = error.response.data.message.split('|')[0];\n codeError = error.response.data.code;\n }\n\n switch (codeError) {\n case 301:\n errorMessage = t('promerica.error_codes.payment_denied');\n break;\n case 302:\n errorMessage = t('promerica.error_codes.payment_error');\n break;\n case 303:\n errorMessage = t('promerica.error_codes.unregistered_payment', {\n transactionId,\n });\n break;\n case 304:\n errorMessage = t('promerica.error_codes.cybersource_failed', {\n transactionId,\n });\n break;\n default:\n break;\n }\n\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: errorMessage },\n );\n }\n };\n\n makePayment = paymentInfo => {\n if (this.isPayingBooking()) return payBooking(paymentInfo);\n if (this.isPayingInfraction()) return payInfraction(paymentInfo);\n };\n\n showOrderIdentifier = () => {\n const { t, bookings, settings } = this.props;\n const confirmedOrderText = settings?.paymentConfiguration?.confirmedOrderText;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n const bookingStatus = bookings.confirmation.currentStatus;\n\n if ([BookingStatus.reserved, BookingStatus.confirmed].includes(bookingStatus)) {\n return (\n tt(confirmedOrderText, t, true, { booking_id }) || t('ordenConfirmada', { booking_id })\n );\n }\n\n return t('orden', { booking_id });\n }\n\n if (this.isPayingInfraction())\n return `ACTA ${this.state.paymentInfo.act?.toString().padStart(7, '0')}`;\n };\n\n isPayingBooking = () => {\n const { bookings, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.bookingid || (bookings && bookings.confirmation);\n };\n\n isPayingInfraction = () => {\n const { infractions, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.infractionid && parseQs.customerid && infractions && infractions.current;\n };\n\n getCountries = () => {\n const { countries } = this.props;\n if (!countries) return [];\n\n return countries.map(country => {\n return { value: country.isoCode3166, label: country.name };\n });\n };\n\n getPayButtonText = () => {\n const { t } = this.props;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n return this.state.formLoading\n ? t('pagandoReserva', { booking_id })\n : t('pagarReserva', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n const act = this.state.paymentInfo.act?.toString().padStart(7, '0');\n return this.state.formLoading ? t('payingInfraction', { act }) : t('payInfraction', { act });\n }\n };\n\n render() {\n const { t, title, subtitle, currentCurrency, defaultCurrency, webCurrency } = this.props;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const showExchangeMsg = applyExchangeRate;\n\n let returnFinalPriceOnly = true;\n\n let totalToPay = this.showTotalToPay(returnFinalPriceOnly);\n if (applyExchangeRate)\n totalToPay = getPriceWithExchangeRate(\n totalToPay,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n\n return (\n <StyledPromericaSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"col-md-12 p-0 LogosContainer\">\n <img\n width=\"60\"\n height=\"60\"\n className=\"mr-4\"\n src=\"/images/ssl.jpg\"\n alt={t('CertificadoSSL')}\n />\n <div className=\"SecureLogoContainer\">\n <div className=\"LogoContainer\">\n <VerifiedUserOutlinedIcon />\n </div>\n <div>\n <Typography variant=\"body1\" className=\"CompraTitle\">\n {t('CompraSegura')}\n </Typography>\n <Typography variant=\"body1\"> {t('SafeTransactionsSite')}</Typography>\n </div>\n </div>\n </div>\n <div className=\"adicionales-block pb-1 pt-3 payment-code\">\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-1\">\n <strong>{this.showOrderIdentifier()}</strong>\n </p>\n <p>\n <strong>\n {t('totalToPay')} {this.showTotalToPay()}\n </strong>\n </p>\n <hr />\n <PartialPayWarning />\n </div>\n {showExchangeMsg && (\n <Paragraph className=\"rent-days mb-0 mt-2\" color={'red'}>\n <strong>{`${t('chargedPaymentMsg')} ${\n currentCurrency?.isoCode\n } ${totalToPay.toFixed(2)} `}</strong>\n </Paragraph>\n )}\n </div>\n <div className=\"row adicionales-block mb-5 pt-3\">\n <div className=\"col-md-10 form-pago\">\n <form onSubmit={this.handleSubmit} ref={this.formRef}>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('numeroTarjeta')}</span>\n <TextInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleCardNumber}\n value={this.state.paymentInfo.cardNumber}\n icon={this.state.cardIcon}\n options={{ 'data-checkout': 'cardNumber' }}\n error={this.state.formErrors.cardNumber}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('codigo')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleSecCode}\n value={this.state.paymentInfo.secCode}\n options={{ 'data-checkout': 'securityCode' }}\n error={this.state.formErrors.secCode}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('mes')}</span>\n <SelectInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleMonth}\n selected={this.state.paymentInfo.month}\n error={this.state.formErrors.month}\n props={{ 'data-checkout': 'cardExpirationMonth' }}\n options={this.months}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('año')}</span>\n <SelectInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleYear}\n error={this.state.formErrors.year}\n selected={this.state.paymentInfo.year}\n props={{ 'data-checkout': 'cardExpirationYear' }}\n options={this.years}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <span className=\"label\">{t('firstname')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleFirstName}\n value={this.state.paymentInfo.firstName}\n options={{\n 'data-checkout': 'firstName',\n id: 'firstName',\n }}\n error={this.state.formErrors.firstName}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <span className=\"label\">{t('lastname')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleLastName}\n value={this.state.paymentInfo.lastName}\n options={{\n 'data-checkout': 'lastName',\n id: 'lastName',\n }}\n error={this.state.formErrors.lastName}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <span className=\"label\">{t('country')}</span>\n <Select\n className=\"country-select\"\n name=\"country\"\n placeholder={t('select')}\n value={this.state.paymentInfo.country}\n options={this.getCountries()}\n onChange={this.handleCountry}\n />\n <div className=\"error\">{this.state.formErrors.country}</div>\n </div>\n </div>\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <span className=\"label\">{t('state')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleState}\n value={this.state.paymentInfo.state}\n options={{ 'data-checkout': 'state', id: 'state' }}\n error={this.state.formErrors.state}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <span className=\"label\">{t('city')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleCity}\n value={this.state.paymentInfo.city}\n options={{ 'data-checkout': 'city', id: 'city' }}\n error={this.state.formErrors.city}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <span className=\"label\">{t('address')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleStreet}\n value={this.state.paymentInfo.street}\n options={{ 'data-checkout': 'street', id: 'street' }}\n error={this.state.formErrors.street}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <span className=\"label\">{t('postalCode')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handlePostalCode}\n value={this.state.paymentInfo.postalCode}\n options={{\n 'data-checkout': 'postalCode',\n id: 'postalCode',\n }}\n error={this.state.formErrors.postalCode}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <span className=\"label\">{t('phone')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handlePhone}\n value={this.state.paymentInfo.phone}\n options={{ 'data-checkout': 'phone', id: 'phone' }}\n error={this.state.formErrors.phone}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <span className=\"label\">{t('email')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleEmail}\n value={this.state.paymentInfo.email}\n options={{ 'data-checkout': 'email', id: 'email' }}\n error={this.state.formErrors.email}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-12 mb-4\">\n <Btn\n type=\"submit\"\n text={this.getPayButtonText()}\n disabled={this.state.formLoading}\n className=\"mt-5 promerica-pay_button\"\n />\n </div>\n <div className=\"logo-container\">\n <span>{t('providedBy')}</span>\n <img\n width=\"151\"\n height=\"52\"\n className=\"promerica-logo\"\n src=\"https://rently.azureedge.net/rently/Web/promerica.png\"\n alt=\"Promerica\"\n />\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n </StyledPromericaSection>\n );\n }\n}\n\nconst mapStateToProps = ({ global, bookings, infractions, siteConfiguration }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n countries: global.listCountries,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n});\nexport default connect(mapStateToProps, { fetchCountries })(\n withRouter(withTranslation()(PromericaSection)),\n);\n","import PromericaSection from './PromericaSection';\nexport default PromericaSection;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { ScriptTagComponent } from 'components/';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withTranslation } from 'react-i18next';\n\nclass PaypalButton extends React.Component {\n constructor(props) {\n super(props);\n window.React = React;\n window.ReactDOM = ReactDOM;\n this.state = {\n showButton: false,\n isRendered: false,\n };\n this.onPaypalLoaded = this.onPaypalLoaded.bind(this);\n }\n\n onPaypalLoaded = event => {\n this.setState({ showButton: true });\n };\n\n render() {\n const { script } = this.props;\n let total = this.props.total;\n let currencyCode = this.props.currencyCode;\n let onSuccess = this.props.onSuccess;\n\n if (this.state.showButton && !this.state.isRendered) {\n paypal\n .Buttons({\n createOrder: function(data, actions) {\n return actions.order.create({\n purchase_units: [\n {\n amount: {\n value: total,\n currency_code: currencyCode,\n },\n },\n ],\n });\n },\n onApprove: function(data, actions) {\n return actions.order.capture().then(function(details) {\n onSuccess(details);\n });\n },\n })\n .render('#paypal-button-container');\n this.setState({ isRendered: true });\n }\n return (\n <>\n <div id=\"paypal-button-container\" className=\"paypal-pay_button\"></div>\n <ScriptTagComponent\n url={script}\n loadLibrary={true}\n async={true}\n onLoaded={this.onPaypalLoaded}\n />\n </>\n );\n }\n}\n\nPaypalButton.propTypes = {\n script: PropTypes.string.isRequired,\n total: PropTypes.number.isRequired,\n};\n\nPaypalButton.defaultProps = {\n env: 'sandbox',\n onSuccess: payment => {\n // console.log('The payment was succeeded!', payment);\n },\n onCancel: data => {\n // console.log('The payment was cancelled!', data);\n },\n onError: err => {\n // console.log('Error loading Paypal script!', err);\n },\n};\n\nconst mapStateToProps = ({ bookings }) => ({\n bookings: bookings,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(PaypalButton)));\n","import style from 'styled-components';\n\nexport const StyledPaypalSection = style.section`\n\n .alert {\n width: fit-content;\n }\n \n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n`;\n","import React from 'react';\nimport { Title, NumberDisplay, Paragraph } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { StyledPaypalSection } from './PaypalSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { tt, tlink } from 'utils/translationHelper';\nimport queryString from 'query-string';\nimport PaypalButton from './PaypalButton';\nimport { history } from '/store';\nimport { payBooking, payInfraction } from 'services/api';\nimport { BookingStatus } from '../../../utils/constants';\nimport { Typography } from '@material-ui/core';\nimport VerifiedUserOutlinedIcon from '@material-ui/icons/VerifiedUserOutlined';\nimport {\n is_gtag_enabled,\n gtag_checkout_process,\n gtag_checkout_option,\n gtag_purchase,\n} from '../../../utils/googleTagsHelper';\nimport { handleGetTotalToPay } from 'utils/dataHelper';\nimport BasePaymentSection from '../basePaymentComponent/BasePaymentSection';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\n\nimport { fetchFiscalConditions } from '../../../actions/global.actions';\nimport PartialPayWarning from '../partialPayWarning';\n\nclass PaypalSection extends BasePaymentSection {\n constructor(props) {\n super(props);\n\n this.state = {\n paymentInfo: {\n price: 0,\n qsamount: 0,\n bookingId: '0',\n infractionId: '0',\n customerId: '0',\n act: '',\n promotionId: '',\n currencyCode: '',\n exchangeRate: 1,\n },\n forcedCurrencyPrice: 0,\n forcedExchangeRate: 1,\n forcedCurrencyCode: '',\n fiscalConditions: [],\n };\n }\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n } catch {}\n }\n }\n\n async componentDidMount() {\n const {\n location,\n bookings,\n infractions,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n fetchFiscalConditions,\n listTaxPayerTypes,\n i18n,\n defaultCurrency,\n } = this.props;\n\n const tenantFiscalConditions =\n listTaxPayerTypes || (await fetchFiscalConditions(i18n.language))?.payload;\n\n this.setState(prevState => ({\n ...prevState,\n fiscalConditions: tenantFiscalConditions,\n }));\n\n const parseQs = queryString.parse(location.search);\n\n if (this.isPayingBooking() && bookings.confirmation != null) {\n if (is_gtag_enabled(googleTagManager)) {\n gtag_checkout_process(\n { number: 3, option: 'Online Payment' },\n bookings.confirmation,\n settings,\n );\n gtag_checkout_option({ number: 3, option: 'Paypal' });\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(),\n bookingId: bookings.confirmation.id,\n email: bookings.confirmation.customer.emailAddress,\n promotionId: parseQs.promotionid || null,\n currencyCode: bookings.confirmation.currency,\n //exchangeRate: 1, -> setExchangeRate\n },\n }));\n }\n\n if (this.isPayingInfraction() && parseQs.customerid) {\n const infraction = infractions.current;\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getInfractionTotalToPay(),\n infractionId: infraction.id,\n act: infraction.act,\n customerId: parseQs.customerid,\n currencyCode: defaultCurrency.isoCode,\n exchangeRate: 1,\n },\n }));\n }\n this.useForcedCurrencyIfNecessary();\n }\n\n getTotalToPay() {\n const {\n bookings: { confirmation },\n settings: { paymentConfiguration },\n } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n let totalToPay = handleGetTotalToPay(\n confirmation.customerBalance,\n paymentConfiguration,\n qsamount,\n );\n if (paymentConfiguration?.percentageToPay) {\n const numberOfDecimals = this.getCashBoxConfigurationNumberOfDecimals();\n if (numberOfDecimals == 0) return Math.round(totalToPay);\n else if (numberOfDecimals == 1) return Math.round(totalToPay * 10) / 10;\n else if (numberOfDecimals > 1) return Math.round(totalToPay * 100) / 100;\n }\n\n return totalToPay;\n }\n\n getInfractionTotalToPay() {\n const { infractions } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n const infraction = infractions.current;\n if (qsamount && Math.abs(infraction.amount) >= qsamount) {\n return Math.abs(qsamount);\n } else {\n return infraction.amount;\n }\n }\n\n getCashBoxConfigurationNumberOfDecimals() {\n const { generalSettings } = this.props;\n return generalSettings && generalSettings.cashBoxConfiguration\n ? generalSettings.cashBoxConfiguration.numberOfDecimals\n : 0;\n }\n\n paypalIsValidISOCode = currencyCode => {\n const validCurrencies = [\n 'AUD',\n 'BRL',\n 'CAD',\n 'CZK',\n 'DKK',\n 'EUR',\n 'HKD',\n 'HUF',\n 'ILS',\n 'JPY',\n 'MYR',\n 'MXN',\n 'TWD',\n 'NZD',\n 'NOK',\n 'PHP',\n 'PLN',\n 'GBP',\n 'RUB',\n 'SGD',\n 'SEK',\n 'CHF',\n 'THB',\n 'USD',\n ];\n\n if (validCurrencies.some(i => i === currencyCode)) return true;\n\n return false;\n };\n\n useForcedCurrencyIfNecessary = () => {\n const { listCurrencies, currencyISOForcedToPay } = this.props;\n const {\n paymentInfo: { currencyCode },\n } = this.state;\n\n const currencies = listCurrencies;\n const bookingCurrency = currencies.find(currency => currency.isoCode == currencyCode);\n\n let forced = false;\n let currentIsoCode = bookingCurrency.isoCode;\n\n //if forced currency has value and is valid on PP, use it.\n if (\n currencyISOForcedToPay != undefined &&\n currencyISOForcedToPay != '' &&\n this.paypalIsValidISOCode(currencyISOForcedToPay)\n ) {\n currentIsoCode = currencyISOForcedToPay;\n forced = true;\n }\n\n //if forced currency or booking currency are not valid on PP, use USD as default currency.\n if (!this.paypalIsValidISOCode(currentIsoCode)) {\n forced = true;\n currentIsoCode = 'USD';\n }\n\n const forcedCurrency = currencies.find(currency => currency.isoCode === currentIsoCode);\n\n //Use forced currency\n if (forced && forcedCurrency != null && bookingCurrency.isoCode !== forcedCurrency.isoCode) {\n const numberOfDecimals = this.getCashBoxConfigurationNumberOfDecimals();\n let convertedPrice = Math.round(this.state.paymentInfo.price * forcedCurrency.exchangeRate);\n\n if (numberOfDecimals == 1)\n convertedPrice =\n Math.round(this.state.paymentInfo.price * forcedCurrency.exchangeRate * 10) / 10;\n else if (numberOfDecimals == 2)\n convertedPrice =\n Math.round(this.state.paymentInfo.price * forcedCurrency.exchangeRate * 100) / 100;\n else if (numberOfDecimals > 2)\n convertedPrice =\n Math.round(this.state.paymentInfo.price * forcedCurrency.exchangeRate * 1000) / 1000;\n\n const exchangeRate =\n Math.round((this.state.paymentInfo.price / convertedPrice) * 10000) / 10000;\n this.setState(() => ({\n forcedCurrencyPrice: convertedPrice,\n forcedExchangeRate:\n forcedCurrency.exchangeRate == 1 ? forcedCurrency.exchangeRate : exchangeRate,\n forcedCurrencyCode: forcedCurrency.isoCode,\n }));\n }\n };\n\n onSuccess = async payment => {\n const {\n t,\n i18n,\n bookings,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n } = this.props;\n const { forcedCurrencyPrice, forcedExchangeRate, forcedCurrencyCode } = this.state;\n\n let paymentInfo = this.state.paymentInfo;\n paymentInfo.orderID = payment.id;\n paymentInfo.gatewayId = 'PL';\n if (forcedCurrencyPrice > 0) {\n paymentInfo.price = forcedCurrencyPrice;\n paymentInfo.currencyCode = forcedCurrencyCode;\n paymentInfo.exchangeRate = forcedExchangeRate;\n } else {\n paymentInfo.price = paymentInfo.price;\n paymentInfo.currencyCode = paymentInfo.currencyCode;\n paymentInfo.exchangeRate = paymentInfo.exchangeRate;\n }\n\n try {\n const res = await this.executePayment(paymentInfo);\n let subtitle;\n if (res.bookingId !== 0)\n subtitle = t('feedbackBoxMessages.book.successSubtitle', {\n booking_id: res.bookingId,\n });\n\n if (is_gtag_enabled(googleTagManager)) gtag_purchase(bookings.confirmation, settings);\n history.push(\n `${tlink('__Routes.paymentSuccess', t, i18n, null, settings.configurations.langConfig)}`,\n { subtitle },\n );\n } catch (error) {\n let messageObject = {};\n let hereLink;\n const errorData = error.config.data ? JSON.parse(error.config.data) : null;\n\n if (this.isPayingBooking()) {\n messageObject['subtitle'] = t('feedbackBoxMessages.pay.failButConfirmed', {\n booking_id: errorData.bookingId,\n });\n hereLink = tlink(\n '__Routes.onlinePayment',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n { bookingid: errorData.bookingId },\n );\n }\n\n if (this.isPayingInfraction()) {\n hereLink = tlink(\n '__Routes.onlinePayment',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n {\n infractionid: errorData.infractionId,\n customerid: errorData.customerId,\n },\n );\n }\n\n messageObject['buttonInfo'] = { text: t('tryAgain'), link_to: hereLink };\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n messageObject,\n );\n }\n };\n\n executePayment = paymentInfo => {\n if (this.isPayingBooking()) return payBooking(paymentInfo);\n if (this.isPayingInfraction()) return payInfraction(paymentInfo);\n };\n\n showOrderIdentifier = () => {\n const { t, bookings, settings } = this.props;\n const confirmedOrderText = settings?.paymentConfiguration?.confirmedOrderText;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n const bookingStatus = bookings.confirmation.currentStatus;\n\n if ([BookingStatus.reserved, BookingStatus.confirmed].includes(bookingStatus)) {\n return (\n tt(confirmedOrderText, t, true, { booking_id }) || t('ordenConfirmada', { booking_id })\n );\n }\n\n return t('orden', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n if (!this.state.paymentInfo.act) return null;\n return `ACTA ${this.state.paymentInfo.act?.toString().padStart(7, '0')}`;\n }\n };\n\n isPayingBooking = () => {\n const { bookings, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.bookingid || (bookings && bookings.confirmation);\n };\n\n isPayingInfraction = () => {\n const { infractions, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.infractionid && parseQs.customerid && infractions && infractions.current;\n };\n\n buildNewUrl(paypalScript, credentials, currencyCode) {\n const id = credentials?.clientId;\n return id && this.paypalIsValidISOCode(currencyCode)\n ? `${paypalScript}?client-id=${id}¤cy=${currencyCode}`\n : null;\n }\n\n render() {\n const {\n t,\n title,\n subtitle,\n credentials,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n } = this.props;\n const { paymentInfo, forcedCurrencyPrice, forcedCurrencyCode } = this.state;\n const { i18n } = this.props;\n const lang = i18n.language.toUpperCase();\n const paypalScript = 'https://www.paypal.com/sdk/js';\n\n const newUrl = this.buildNewUrl(\n paypalScript,\n credentials,\n forcedCurrencyPrice > 0 ? forcedCurrencyCode : paymentInfo.currencyCode,\n );\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const showExchangeMsg = applyExchangeRate;\n\n let returnFinalPriceOnly = true;\n\n let totalToPay = this.showTotalToPay(returnFinalPriceOnly);\n if (applyExchangeRate)\n totalToPay = getPriceWithExchangeRate(\n totalToPay,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n\n //takes the value of the current language and parses it. It will then be used as the language parameter of the PayPal checkout.\n function handleChangeLanguage(newUrl, lang) {\n let parsedLang = lang.split('-').join('_');\n let firstTwo = parsedLang.slice(0, 2).toLowerCase();\n let restOfStr = parsedLang.slice(2);\n let parsedCurrentLang = firstTwo + restOfStr;\n\n return `${newUrl}&locale=${parsedCurrentLang}`;\n }\n\n return (\n <StyledPaypalSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"col-md-12 p-0 LogosContainer\">\n <img\n width=\"60\"\n height=\"60\"\n className=\"mr-4\"\n src=\"/images/ssl.jpg\"\n alt={t('CertificadoSSL')}\n />\n <div className=\"SecureLogoContainer\">\n <div className=\"LogoContainer\">\n <VerifiedUserOutlinedIcon />\n </div>\n <div>\n <Typography variant=\"body1\" className=\"CompraTitle\">\n {t('CompraSegura')}\n </Typography>\n <Typography variant=\"body1\"> {t('SafeTransactionsSite')}</Typography>\n </div>\n </div>\n </div>\n <div className=\"adicionales-block pb-1 pt-3 payment-code\">\n {forcedCurrencyPrice != 0 ? (\n <div className=\"alert alert-danger\" role=\"alert\">\n <i className=\"fas fa-exclamation-circle mr-2\"></i>\n {t('paypalConvertionAlert', forcedCurrencyCode)}\n </div>\n ) : (\n ''\n )}\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-1\">\n <strong>{this.showOrderIdentifier()}</strong>\n </p>\n <p>\n <strong>\n {t('totalToPay')} {this.showTotalToPay()}\n </strong>\n {forcedCurrencyPrice != 0 ? (\n <strong>\n {' '}\n = {forcedCurrencyCode} <NumberDisplay value={forcedCurrencyPrice} />\n </strong>\n ) : (\n ''\n )}\n </p>\n <hr />\n <PartialPayWarning />\n </div>\n {showExchangeMsg && (\n <Paragraph className=\"rent-days mb-0 mt-2\" color={'red'}>\n <strong>{`${t('chargedPaymentMsg')} ${\n currentCurrency?.isoCode\n } ${totalToPay.toFixed(2)} `}</strong>\n </Paragraph>\n )}\n </div>\n <div className=\"row adicionales-block mb-5 pt-3\">\n <div className=\"col-md-10 form-pago\">\n {newUrl && (\n <PaypalButton\n script={newUrl ? handleChangeLanguage(newUrl, lang) : ''}\n total={forcedCurrencyPrice > 0 ? forcedCurrencyPrice : paymentInfo.price}\n currencyCode={\n forcedCurrencyPrice > 0 ? forcedCurrencyCode : paymentInfo.currencyCode\n }\n onSuccess={this.onSuccess}\n />\n )}\n </div>\n </div>\n </div>\n </StyledPaypalSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, infractions, siteConfiguration, global }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n listCurrencies: global.listCurrencies,\n generalSettings: global.generalSettings,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n listTaxPayerTypes: global.listTaxPayerTypes,\n});\nexport default connect(mapStateToProps, { fetchFiscalConditions })(\n withRouter(withTranslation()(PaypalSection)),\n);\n","import style from 'styled-components';\n\nexport const StyledTransbankSection = style.section`\n\n .alert {\n width: fit-content;\n }\n \n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n`;\n\nexport const LoadingWrapperStyled = style.div`\n text-align: center;\n\n p{\n margin-bottom: 20px;\n }\n\n a {\n transition: all 0.4s;\n cursor: pointer;\n text-align: center;\n margin: 40px auto;\n }\n\n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg} !important; }\n\n .error{\n font-size:90px;\n margin: 40px auto;\n text-align: center;\n }\n`;\n","import React from 'react';\nimport { Title, Btn, Paragraph } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { StyledTransbankSection } from './TransbankSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { tt, tlink } from 'utils/translationHelper';\nimport queryString from 'query-string';\nimport { history } from '/store';\nimport { getTransBankUri } from 'services/api';\nimport Storage from 'utils/storage';\nimport { Typography } from '@material-ui/core';\nimport VerifiedUserOutlinedIcon from '@material-ui/icons/VerifiedUserOutlined';\nimport {\n is_gtag_enabled,\n gtag_checkout_process,\n gtag_checkout_option,\n} from '../../../utils/googleTagsHelper';\nimport BasePaymentSection from '../basePaymentComponent/BasePaymentSection';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\nimport PartialPayWarning from '../partialPayWarning';\n\nclass TransbankSection extends BasePaymentSection {\n constructor(props) {\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n qsamount: 0,\n bookingId: '0',\n currencyCode: '',\n exchangeRate: 1,\n },\n formLoading: false,\n tokenLoading: true,\n url: null,\n token: null,\n };\n }\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n } catch {}\n }\n }\n\n async componentDidMount() {\n const {\n location,\n bookings,\n infractions,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n defaultCurrency,\n } = this.props;\n\n const parseQs = queryString.parse(location.search);\n\n if (this.isPayingBooking() && bookings.confirmation != null) {\n // If the currency is not the system currency and there's an exchange rate\n // use that\n if (bookings.confirmation.currency !== defaultCurrency.isoCode) {\n bookings.confirmation.balance =\n bookings.confirmation.balance * bookings.confirmation.exchangeRate;\n bookings.confirmation.currency = defaultCurrency.isoCode;\n }\n\n if (is_gtag_enabled(googleTagManager)) {\n gtag_checkout_process(\n { number: 3, option: 'Online Payment' },\n bookings.confirmation,\n settings,\n );\n gtag_checkout_option({ number: 3, option: 'Transbank' });\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(bookings.confirmation.customerBalance % 1 === 0),\n bookingId: bookings.confirmation.id,\n email: bookings.confirmation.customer.emailAddress,\n currencyCode: bookings.confirmation.currency,\n exchangeRate: 1,\n },\n }));\n this.GetToken(\n bookings.confirmation.id,\n 0,\n this.getTotalToPay(bookings.confirmation.customerBalance % 1 === 0),\n );\n }\n\n if (this.isPayingInfraction() && parseQs.customerid) {\n const infraction = infractions.current;\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getInfractionTotalToPay(infraction.amount % 1 === 0),\n infractionId: infraction.id,\n act: infraction.act,\n customerId: parseQs.customerid,\n branchOfficeId: infraction.booking?.deliveryPlace?.branchOfficeId || null,\n currencyCode: defaultCurrency.isoCode, //Infractions are paid in RMS System Currency.\n exchangeRate: 1,\n },\n }));\n this.GetToken(0, infraction.id, this.getInfractionTotalToPay(infraction.amount % 1 === 0));\n }\n }\n\n GetToken = (bookingId, infractionId, totalToPay) => {\n const { t, i18n, settings } = this.props;\n\n let transactionId = bookingId > 0 ? bookingId : infractionId;\n\n getTransBankUri(transactionId, totalToPay)\n .then(res => {\n Storage.setElement('transbanktoken', res.data.token);\n Storage.setElement('transbankprice', totalToPay);\n if (infractionId > 0) Storage.setElement('transbankisinfraction', 'true');\n this.setState(prevState => ({\n ...prevState,\n url: res.data.url,\n token: res.data.token,\n tokenLoading: false,\n }));\n })\n .catch(error => {\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: t('transBankGenericError') },\n );\n });\n };\n\n isPayingBooking = () => {\n const { bookings, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.bookingid || (bookings && bookings.confirmation);\n };\n\n isPayingInfraction = () => {\n const { infractions, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.infractionid && parseQs.customerid && infractions && infractions.current;\n };\n\n getInfractionTotalToPay(useRound = false) {\n const { infractions } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n const infraction = infractions.current;\n let result = 0;\n if (qsamount && Math.abs(infraction.amount) >= Math.abs(qsamount)) {\n result = Math.abs(qsamount);\n } else {\n result = infraction.amount;\n }\n return useRound ? Math.round(result) : result;\n }\n\n render() {\n const { t, title, subtitle, currentCurrency, defaultCurrency, webCurrency } = this.props;\n\n const { paymentInfo } = this.state;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const showExchangeMsg = applyExchangeRate;\n\n let returnFinalPriceOnly = true;\n\n let totalToPay = this.showTotalToPay(returnFinalPriceOnly);\n if (applyExchangeRate)\n totalToPay = getPriceWithExchangeRate(\n totalToPay,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n\n return (\n <StyledTransbankSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"col-md-12 p-0 LogosContainer\">\n <img\n width=\"60\"\n height=\"60\"\n className=\"mr-4\"\n src=\"/images/ssl.jpg\"\n alt={t('CertificadoSSL')}\n />\n <div className=\"SecureLogoContainer\">\n <div className=\"LogoContainer\">\n <VerifiedUserOutlinedIcon />\n </div>\n <div>\n <Typography variant=\"body1\" className=\"CompraTitle\">\n {t('CompraSegura')}\n </Typography>\n <Typography variant=\"body1\"> {t('SafeTransactionsSite')}</Typography>\n </div>\n </div>\n </div>\n <div className=\"adicionales-block pb-1 pt-3 payment-code\">\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-1\">\n {t('orden')} {paymentInfo.bookingId.toString().padStart(7, '0')}\n </p>\n <p>\n <strong>\n {t('totalToPay')} {this.showTotalToPay()}\n </strong>\n </p>\n <hr />\n <PartialPayWarning />\n </div>\n {showExchangeMsg && (\n <Paragraph className=\"rent-days mb-0 mt-2\" color={'red'}>\n <strong>{`${t('chargedPaymentMsg')} ${\n currentCurrency?.isoCode\n } ${totalToPay.toFixed(2)} `}</strong>\n </Paragraph>\n )}\n </div>\n <div className=\"row adicionales-block mb-5 pt-3\">\n <div className=\"col-md-10 form-pago\">\n <form action={this.state.url} method=\"post\">\n <input type=\"hidden\" name=\"token_ws\" value={this.state.token} />\n <Btn\n type=\"submit\"\n text={\n this.state.formLoading || this.state.tokenLoading\n ? t('loadingTransbank')\n : t('transbankBtn')\n }\n disabled={this.state.formLoading || this.state.tokenLoading}\n className=\"mt-5 transbank-pay_button\"\n />\n </form>\n </div>\n </div>\n </div>\n </StyledTransbankSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, infractions, siteConfiguration, global }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(TransbankSection)));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { LoadingWrapperStyled } from './TransbankSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { CustomLoading } from 'components/';\nimport { tlink } from 'utils/translationHelper';\nimport queryString from 'query-string';\nimport { history } from '/store';\nimport { payBooking, payInfraction, getBooking } from 'services/api';\nimport Storage from 'utils/storage';\nimport { is_gtag_enabled, gtag_purchase } from '../../../utils/googleTagsHelper';\n\nclass Transbank extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n bookingId: '0',\n },\n dolarPrice: 0,\n formLoading: false,\n tokenLoading: true,\n url: null,\n token: null,\n };\n }\n\n async componentDidMount() {\n const {\n location,\n t,\n i18n,\n bookings,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n } = this.props;\n const parseQs = queryString.parse(location.search);\n const token = Storage.getElement('transbanktoken');\n\n if (token) {\n if (parseQs.bookingid) {\n const price = parseQs.amount || Storage.getElement('transbankprice');\n const isInfraction = Storage.getElement('transbankisinfraction');\n\n try {\n Storage.setElement('transbanktoken', '', true); //delete storage\n Storage.setElement('transbankprice', '', true); //delete storage\n Storage.setElement('transbankisinfraction', '', true); //delete storage\n\n if (isInfraction && isInfraction === 'true') {\n await payInfraction({\n infractionId: parseQs.bookingid,\n gatewayId: 'TBANKCL',\n orderID: token,\n price: price,\n });\n } else {\n await payBooking({\n bookingId: parseQs.bookingid,\n gatewayId: 'TBANKCL',\n orderID: token,\n price: price,\n });\n\n if (is_gtag_enabled(googleTagManager)) {\n const booking = await getBooking(null, parseQs.bookingid);\n if (booking && booking.data) gtag_purchase(booking.data, settings);\n }\n }\n\n history.push(\n `${tlink(\n '__Routes.paymentSuccess',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n )}`,\n );\n } catch (error) {\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: t('paypalGenericError') },\n );\n }\n } else {\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n {\n error: t('paypalGenericError'),\n },\n );\n }\n }\n }\n\n render() {\n const { t, loadingGif, loadingMessage } = this.props;\n\n return (\n <LoadingWrapperStyled className=\"col-md-12\">\n <CustomLoading\n loadingGif={loadingGif || t('loadingGif')}\n loadingMessage={loadingMessage}\n ></CustomLoading>\n </LoadingWrapperStyled>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(Transbank)));\n","import style from 'styled-components';\n\nexport const StyledPrismaSection = style.section`\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n \n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n\n\n .error{ \n color: ${props => props.theme.colors.alert};\n font-style: italic;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n`;\n","/* eslint-disable no-undef */\nimport React from 'react';\nimport { Title, TextInput, SelectInput, Btn, ScriptTagComponent, CheckboxInput } from 'components/';\nimport { connect } from 'react-redux';\nimport { history } from '/store';\nimport { withRouter } from 'react-router-dom';\nimport { StyledPrismaSection } from './PrismaSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { Paragraph } from 'components/';\nimport { tt, tlink } from '../../../utils/translationHelper';\nimport queryString from 'query-string';\nimport * as yup from 'yup';\nimport { payBooking, payInfraction } from 'services/api';\nimport { fetchDocumentTypes, fetchFiscalConditions } from '../../../actions/global.actions';\nimport { BookingStatus } from '../../../utils/constants';\nimport { Typography } from '@material-ui/core';\nimport {\n getDocumentSample,\n isValidDocument,\n transformDocTypesToSelectOptions,\n transformFiscalConditionsToSelectOptions,\n} from '../../../utils/documentHelper';\nimport {\n is_gtag_enabled,\n gtag_checkout_process,\n gtag_checkout_option,\n gtag_purchase,\n} from '../../../utils/googleTagsHelper';\nimport VerifiedUserOutlinedIcon from '@material-ui/icons/VerifiedUserOutlined';\nimport BasePaymentSection from '../basePaymentComponent/BasePaymentSection';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\nimport PartialPayWarning from '../partialPayWarning';\n\nvar CreditCardValidator = require('card-validator');\n\nclass PrismaSection extends BasePaymentSection {\n constructor(props) {\n const {\n t,\n withBillingInformation,\n settings: {\n configurations: { fiscalConditionValidation },\n },\n } = props;\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n bookingId: '0',\n qsamount: 0,\n infractionId: '0',\n customerId: '0',\n act: '',\n branchOfficeId: 0,\n promotionId: '',\n noPendingPayTransactions: true,\n showBillingInfo: withBillingInformation !== undefined ? withBillingInformation : false,\n fiscalConditionId: null,\n currencyCode: '',\n exchangeRate: 1,\n installment: 1,\n extraData: '',\n },\n formErrors: {\n documentType: '',\n cardNumber: '',\n document: '',\n cardholderName: '',\n year: '',\n month: '',\n secCode: '',\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: '',\n documentId: '',\n address: '',\n addressNumber: '',\n addressDepartment: '',\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n },\n documents: [\n {\n value: 'dni',\n text: 'DNI',\n },\n {\n value: 'cuil',\n text: 'CUIL',\n },\n ],\n cardIcon: 'far fa-credit-card',\n formLoading: false,\n disableBillingFields: false,\n fiscalConditions: [],\n creditCardTypes: [\n { text: 'Visa', value: 'visa' },\n { text: 'Visa Débito', value: 'visadebito' },\n { text: 'MasterCard', value: 'mastercard' },\n { text: 'American Express', value: 'amex' },\n { text: 'Cabal', value: 'cabal' },\n // { text: 'Tarjeta Naranja', value: 'naranja' },\n // { text: 'Tarjeta Shopping', value: 'shopping' },\n { text: 'Maestro', value: 'maestro' },\n { text: 'Visa Electron', value: 'visa_electron' },\n // { text: 'Tarjeta Cencosud', value: 'cencosud' },\n // { text: 'Discover', value: 'discover' },\n // { text: 'Diners', value: 'diners' },\n // { text: 'Carta Franca', value: 'carta_franca' },\n // { text: 'Ahora 12 Visa', value: 'ahora_12_visa' },\n // { text: 'Ahora 12 Mastercard', value: 'ahora_12_mastercard' },\n // { text: 'Ahora 12 American Express', value: 'ahora_12_amex' },\n // { text: 'Ahora 12 Cabal', value: 'ahora_12_cabal' },\n ],\n };\n\n yup.addMethod(yup.number, 'isValidCreditCard', function(creditCardNumber) {\n return this.test('test-cc-number', t('cc_rejected_bad_filled_card_number'), function(\n ccNumber,\n ) {\n return CreditCardValidator.number(ccNumber).isValid;\n });\n });\n\n yup.addMethod(yup.number, 'isValidSecCode', function(secCode) {\n return this.test('test-cc-number', t('cc_rejected_bad_filled_security_code'), function(\n secCode,\n ) {\n const ccObject = CreditCardValidator.number(this.parent.cardNumber);\n if (!secCode || !ccObject.card) return false;\n\n if (ccObject.card.code.size == 4) return secCode >= 1 && secCode <= 9999;\n if (ccObject.card.code.size == 3) return secCode >= 1 && secCode <= 999;\n\n return secCode.toString().length === ccObject.card.code.size;\n });\n });\n\n yup.addMethod(yup.string, 'isValidDocument', function(documentId) {\n return this.test(\n 'test-document-format',\n t('billingInformation.errors.wrongDocumentFormat'),\n function(documentId) {\n const { tenantDocumentTypes, billingDocumentType } = this.parent;\n return isValidDocument(tenantDocumentTypes, billingDocumentType, documentId);\n },\n );\n });\n\n yup.addMethod(yup.string, 'hasValidDocumentType', function(fiscalCondition) {\n return this.test(\n 'test-document-format',\n t('billingInformation.errors.wrongFiscalCondition'),\n function(fiscalCondition) {\n const taxPayerValidation = (fiscalConditionValidation || [])?.find(\n i => `${i.id}` === fiscalCondition,\n );\n\n if (!taxPayerValidation?.validDocumentIds) return true;\n else {\n const validIds = taxPayerValidation?.validDocumentIds;\n if (validIds.includes(this.parent.billingDocumentType)) return true;\n return false;\n }\n },\n );\n });\n\n this.paymentInfoFormSchema = yup.object().shape({\n documentType: yup.string().required(t('inputIsRequired', { field: t('tipodocumento') })),\n cardNumber: yup\n .number()\n .isValidCreditCard()\n .required(t('inputIsRequired', { field: t('numeroTarjeta') })),\n document: yup.string().required(t('inputIsRequired', { field: t('documento') })),\n cardholderName: yup.string().required(t('inputIsRequired', { field: t('titular') })),\n year: yup.number().required(t('inputIsRequired', { field: t('año') })),\n month: yup.number().required(t('inputIsRequired', { field: t('mes') })),\n secCode: yup\n .number()\n .isValidSecCode()\n .required(t('inputIsRequired', { field: t('codigo') })),\n firstName: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.firstName'),\n }),\n ),\n }),\n lastName: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.lastName'),\n }),\n ),\n }),\n fiscalConditionId: yup\n .string()\n .nullable()\n .when('showBillingInfo', {\n is: true,\n then: yup\n .string()\n .hasValidDocumentType()\n .required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.fiscalCondition'),\n }),\n ),\n }),\n billingDocumentType: yup.number().when('showBillingInfo', {\n is: true,\n then: yup.number().required(t('inputIsRequired', { field: t('tipodocumento') })),\n }),\n documentId: yup.string().when('showBillingInfo', {\n is: true,\n then: yup\n .string()\n .isValidDocument()\n .required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.document'),\n }),\n ),\n }),\n address: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('addressName') })),\n }),\n addressNumber: yup\n .string()\n .nullable(true)\n .when('showBillingInfo', {\n is: true,\n then: yup\n .string()\n .typeError(t('invalidNumber'))\n .required(t('inputIsRequired', { field: t('addressNumber') })),\n }),\n zipCode: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('zipCode') })),\n }),\n cellPhone: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('phone') })),\n }),\n emailAddress: yup\n .string()\n .email(t('validEmail'))\n .when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('mail') })),\n }),\n });\n\n this.formRef = React.createRef(null);\n const year = new Date().getFullYear();\n this.years = Array.from(new Array(15), (val, index) => index + year);\n this.months = Array.from(new Array(12), (val, index) => index + 1);\n }\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n } catch {}\n }\n }\n\n async componentDidMount() {\n const {\n location,\n bookings,\n infractions,\n noPendingPayTransactions,\n fetchDocumentTypes,\n fetchFiscalConditions,\n listTaxPayerTypes,\n listDocumentTypes,\n i18n,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n defaultCurrency,\n } = this.props;\n let tenantDocumentTypes = listDocumentTypes || [];\n\n if (this.state.paymentInfo.showBillingInfo && tenantDocumentTypes.length === 0)\n tenantDocumentTypes = (await fetchDocumentTypes('', i18n.language)).payload;\n\n const parseQs = queryString.parse(location.search);\n\n const customer = this.getCustomerInfo();\n const tenantFiscalConditions =\n listTaxPayerTypes || (await fetchFiscalConditions(i18n.language))?.payload;\n\n this.setState(prevState => ({\n ...prevState,\n fiscalConditions: tenantFiscalConditions,\n }));\n\n if (this.isPayingBooking() && bookings.confirmation != null) {\n // If the currency is not the system currency and there's an exchange rate\n // use that\n if (bookings.confirmation.currency !== defaultCurrency.isoCode) {\n bookings.confirmation.balance =\n bookings.confirmation.balance * bookings.confirmation.exchangeRate;\n bookings.confirmation.currency = defaultCurrency.isoCode;\n }\n\n if (is_gtag_enabled(googleTagManager)) {\n gtag_checkout_process(\n { number: 3, option: 'Online Payment' },\n bookings.confirmation,\n settings,\n );\n gtag_checkout_option({ number: 3, option: 'Prisma' });\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(),\n bookingId: bookings.confirmation.id,\n email: bookings.confirmation.customer.emailAddress,\n branchOfficeId: bookings.confirmation.deliveryPlace.branchOfficeId,\n promotionId: parseQs.promotionid || null,\n noPendingPayTransactions:\n noPendingPayTransactions !== undefined ? noPendingPayTransactions : true,\n installment: '1',\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: 0,\n documentId: '',\n address: '',\n addressNumber: null,\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n tenantDocumentTypes,\n billingInfoCheckbox: false,\n disableBillingFields: false,\n currencyCode: bookings.confirmation.currency,\n exchangeRate: 1,\n },\n sampleDocFormat: getDocumentSample(tenantDocumentTypes, customer.documentType),\n }));\n }\n\n if (this.isPayingInfraction() && parseQs.customerid) {\n const infraction = infractions.current;\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getInfractionTotalToPay(),\n infractionId: infraction.id,\n act: infraction.act,\n customerId: parseQs.customerid,\n branchOfficeId: infraction.booking?.deliveryPlace?.branchOfficeId || null,\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: 0,\n documentId: '',\n address: '',\n addressNumber: null,\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n tenantDocumentTypes,\n billingInfoCheckbox: false,\n disableBillingFields: false,\n currencyCode: defaultCurrency.isoCode,\n exchangeRate: 1,\n },\n }));\n }\n }\n\n getInfractionTotalToPay() {\n const { infractions } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n const infraction = infractions.current;\n if (qsamount && Math.abs(infraction.amount) >= Math.abs(qsamount)) {\n return Math.abs(qsamount);\n } else {\n return infraction.amount;\n }\n }\n\n handleDocumentType = documentType => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, documentType },\n formErrors: { ...prevState.formErrors, documentType: null },\n }));\n };\n\n handleCardNumber = cardNumber => {\n const ccObject = CreditCardValidator.number(cardNumber);\n const ccIcon = this.getCreditCardIcon(ccObject.card ? ccObject.card.type : '');\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n cardNumber,\n paymentMethodID: ccObject.card ? ccObject.card.type : '',\n },\n formErrors: { ...prevState.formErrors, cardNumber: null, secCode: null },\n cardIcon: ccIcon,\n }));\n };\n\n handleCreditCardType = creditCardType => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n paymentMethodID: creditCardType,\n },\n }));\n };\n\n getCreditCardIcon = ccType => {\n let icon = '';\n\n switch (ccType) {\n case 'visa':\n icon = 'fab fa-cc-visa';\n break;\n case 'american-express':\n icon = 'fab fa-cc-amex';\n break;\n case 'mastercard':\n icon = 'fab fa-cc-mastercard';\n break;\n default:\n icon = 'far fa-credit-card';\n break;\n }\n\n return icon;\n };\n\n handleSecCode = secCode => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, secCode },\n formErrors: { ...prevState.formErrors, secCode: null },\n }));\n };\n\n handleMonth = month => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, month },\n formErrors: { ...prevState.formErrors, month: null },\n }));\n };\n\n handleYear = year => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, year },\n formErrors: { ...prevState.formErrors, year: null },\n }));\n };\n\n handleCardholderName = cardholderName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, cardholderName },\n formErrors: { ...prevState.formErrors, cardholderName: null },\n }));\n };\n\n handleDocument = document => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, document },\n formErrors: { ...prevState.formErrors, document: null },\n }));\n };\n\n handleFirstName = firstName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n firstName,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, firstName: '' },\n }));\n };\n\n handleLastName = lastName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n lastName,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, lastName: '' },\n }));\n };\n\n handleEmailAddress = emailAddress => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n emailAddress,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, emailAddress: '' },\n }));\n };\n\n handleAddress = address => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n address,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, address: '' },\n }));\n };\n\n handleAddressNumber = addressNumber => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n addressNumber,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, addressNumber: '' },\n }));\n };\n\n handleAddressDepartment = addressDepartment => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n addressDepartment,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, addressDepartment: '' },\n }));\n };\n\n handleZipCode = zipCode => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n zipCode,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, zipCode: '' },\n }));\n };\n\n handleCellphone = cellPhone => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n cellPhone,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, cellPhone: '' },\n }));\n };\n\n handleFiscalCondition = fiscalConditionId => {\n const {\n settings: { configurations },\n } = this.props;\n const validDocumentIds = (configurations?.fiscalConditionValidation || []).find(\n i => `${i.id}` === fiscalConditionId,\n )?.validDocumentIds;\n let billingDocumentType = this.state.paymentInfo.billingDocumentType;\n\n if (\n validDocumentIds &&\n (!billingDocumentType || !validDocumentIds?.includes(billingDocumentType))\n ) {\n billingDocumentType = validDocumentIds[0];\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n fiscalConditionId,\n billingDocumentType,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, fiscalConditionId: null },\n }));\n };\n\n handleBillingDocumentType = billingDocumentType => {\n const { listDocumentTypes } = this.props;\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n billingDocumentType,\n billingInfoCheckbox: false,\n },\n formErrors: {\n ...prevState.formErrors,\n billingDocumentType: '',\n fiscalConditionId: null,\n },\n sampleDocFormat: getDocumentSample(listDocumentTypes, billingDocumentType),\n }));\n };\n\n handleDocumentId = documentId => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n documentId,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, documentId: '' },\n }));\n };\n\n handleSubmit = e => {\n e.preventDefault();\n const paymentInfo = this.state.paymentInfo;\n this.setState({ formLoading: true });\n\n this.paymentInfoFormSchema\n .validate(paymentInfo, { abortEarly: false })\n .then(valid => {\n var form = document.querySelector('#prisma-form');\n const { sandboxEnv, productionEnv, inhabilitarCS, credentials } = this.props;\n\n var decidir = new Decidir(\n credentials.isSandbox ? sandboxEnv : productionEnv,\n inhabilitarCS || false,\n );\n decidir.setPublishableKey(credentials.publicApiKey);\n decidir.setTimeout(5000);\n decidir.createToken(form, this.prismaResponseHandler);\n })\n .catch(err => {\n this.setState({ formLoading: false });\n const formErrors = err.inner.reduce((prevErrors, currentError) => {\n return { ...prevErrors, [currentError.path]: currentError.message };\n }, {});\n window.scrollTo(0, this.formRef.current.offsetTop);\n this.setState(prevState => ({ ...prevState, formErrors }));\n });\n };\n\n matchErrorParamKey = key => {\n switch (key) {\n case 'card_number':\n return 'cardNumber';\n case 'security_code':\n return 'secCode';\n case 'card_expiration_month':\n return 'month';\n case 'card_expiration_year':\n return 'year';\n case 'expiry_date':\n return 'year';\n case 'card_holder_name':\n return 'cardholderName';\n case 'card_holder_doc_type':\n return 'documentType';\n\n case 'card_holder_doc_number':\n return 'document';\n default:\n return 'genericPrismaError';\n }\n };\n\n prismaResponseHandler = (status, response, request) => {\n const { t, i18n, settings } = this.props;\n if (status !== 200 && status !== 201) {\n if (response.error && response.error.length > 0) {\n const formErrors = response.error.reduce((prevErrors, currentError) => {\n const key = this.matchErrorParamKey(currentError.param);\n return { ...prevErrors, [key]: currentError.error.message };\n }, {});\n\n return this.setState(prevState => ({ ...prevState, formErrors }));\n }\n\n let errorMessage = t('prismaGenericError');\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: errorMessage },\n );\n } else {\n this.executePayment(response.id);\n }\n };\n\n executePayment = async token => {\n const {\n t,\n i18n,\n bookings,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n establishmentName,\n } = this.props;\n\n let paymentParams = this.state.paymentInfo;\n paymentParams.gatewayId = 'PRISMA';\n paymentParams.orderID = this.state.paymentInfo.bookingId;\n paymentParams.token = token;\n paymentParams.extraData = establishmentName;\n\n try {\n const res = await this.makePayment(paymentParams);\n\n let subtitle;\n if (res.bookingId !== 0)\n subtitle = t('feedbackBoxMessages.book.successSubtitle', {\n booking_id: res.bookingId,\n });\n\n if (is_gtag_enabled(googleTagManager)) gtag_purchase(bookings.confirmation, settings);\n history.push(\n `${tlink('__Routes.paymentSuccess', t, i18n, null, settings.configurations.langConfig)}`,\n { subtitle },\n );\n } catch (error) {\n let errorMessage;\n\n if (error.response == null || error.response.data == null) {\n errorMessage = t('prismaGenericError');\n } else if (error.response.data.code === 203) {\n errorMessage = t('prismaAddPaymentFailed', {\n transactionId: error.response.message,\n });\n }\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: errorMessage },\n );\n }\n };\n\n makePayment = paymentInfo => {\n if (this.isPayingBooking()) return payBooking(paymentInfo);\n if (this.isPayingInfraction()) return payInfraction(paymentInfo);\n };\n\n showOrderIdentifier = () => {\n const { t, bookings, settings } = this.props;\n const confirmedOrderText = settings?.paymentConfiguration?.confirmedOrderText;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n const bookingStatus = bookings.confirmation.currentStatus;\n\n if ([BookingStatus.reserved, BookingStatus.confirmed].includes(bookingStatus)) {\n tt(confirmedOrderText, t, true, { booking_id }) || t('ordenConfirmada', { booking_id });\n }\n\n return t('orden', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n if (!this.state.paymentInfo.act) return null;\n return `ACTA ${this.state.paymentInfo.act?.toString().padStart(7, '0')}`;\n }\n };\n\n isPayingBooking = () => {\n const { bookings, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.bookingid || (bookings && bookings.confirmation);\n };\n\n isPayingInfraction = () => {\n const { infractions, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.infractionid && parseQs.customerid && infractions && infractions.current;\n };\n\n getPayButtonText = () => {\n const { t } = this.props;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n return this.state.formLoading\n ? t('pagandoReserva', { booking_id })\n : t('pagarReserva', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n const act = this.state.paymentInfo.act?.toString().padStart(7, '0');\n return this.state.formLoading ? t('payingInfraction', { act }) : t('payInfraction', { act });\n }\n };\n\n parseToPrismaMonths = months => {\n return months.map(m => m.toString().padStart(2, '0'));\n };\n\n parseToPrismaYears = years => {\n return years.map(y => y.toString().substring(2));\n };\n\n handleCheckboxUseContactInfoChange = checked => {\n const customer = this.getCustomerInfo();\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n billingInfoCheckbox: checked,\n disableBillingFields: checked,\n firstName: checked ? customer.firstName : prevState.paymentInfo.firstName,\n lastName: checked ? customer.lastName : prevState.paymentInfo.lastName,\n fiscalConditionId: checked\n ? customer.fiscalConditionId\n : prevState.paymentInfo.fiscalConditionId,\n billingDocumentType: checked\n ? customer.documentTypeId || 0\n : prevState.paymentInfo.billingDocumentType,\n documentId: checked ? customer.documentId : prevState.paymentInfo.documentId,\n address: checked ? customer.address : prevState.paymentInfo.address,\n addressNumber: checked\n ? customer.addressNumber || null\n : prevState.paymentInfo.addressNumber,\n addressDepartment: checked ? customer.addressDepartment || '' : '',\n zipCode: checked ? customer.zipCode : prevState.paymentInfo.zipCode,\n cellPhone: checked ? customer.cellPhone : prevState.paymentInfo.cellPhone,\n emailAddress: checked ? customer.emailAddress : prevState.paymentInfo.emailAddress,\n },\n formErrors: {\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: '',\n documentId: '',\n address: '',\n addressNumber: '',\n addressDepartment: '',\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n },\n }));\n };\n\n parseBillingInfoSection = () => {\n const { t, billingSubtitle, billingConditions } = this.props;\n\n return (\n <>\n <div className=\"billing-form pb-1 pt-3 payment-code\">\n <hr />\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-2\">\n <strong>{t('billingInformation.title')}</strong>\n </p>\n {billingSubtitle && <p className=\"label mb-2\">{t(billingSubtitle)}</p>}\n <CheckboxInput\n onChange={this.handleCheckboxUseContactInfoChange}\n checked={this.state.paymentInfo.billingInfoCheckbox}\n text={<p className=\"mb-1\">{t('billingInformation.equalToContactInfo')}</p>}\n />\n {this.parseBillingFields()}\n </div>\n {billingConditions && <Paragraph text={billingConditions} />}\n </div>\n </>\n );\n };\n\n parseBillingFields = () => {\n const { t } = this.props;\n\n return (\n <>\n <div className=\"row\">\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('billingInformation.fields.firstName')}\n value={this.state.paymentInfo.firstName}\n error={this.state.formErrors.firstName}\n onChange={this.handleFirstName}\n options={{ autoComplete: 'billingInfo.firstName' }}\n />\n </div>\n </div>\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('billingInformation.fields.lastName')}\n value={this.state.paymentInfo.lastName}\n error={this.state.formErrors.lastName}\n onChange={this.handleLastName}\n options={{ autoComplete: 'billingInfo.lastName' }}\n />\n </div>\n </div>\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('mail')}\n value={this.state.paymentInfo.emailAddress}\n error={this.state.formErrors.emailAddress}\n onChange={this.handleEmailAddress}\n options={{ autoComplete: 'billingInfo.emailAddress' }}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('addressName')}\n value={this.state.paymentInfo.address}\n error={this.state.formErrors.address}\n onChange={this.handleAddress}\n options={{ autoComplete: 'address-line1' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('addressNumber')}\n value={this.state.paymentInfo.addressNumber}\n error={this.state.formErrors.addressNumber}\n onChange={this.handleAddressNumber}\n options={{ autoComplete: 'addressNumber' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('addressDepartment')}\n value={this.state.paymentInfo.addressDepartment}\n error={this.state.formErrors.addressDepartment}\n onChange={this.handleAddressDepartment}\n options={{ autoComplete: 'addressDepartment' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('zipCode')}\n value={this.state.paymentInfo.zipCode}\n error={this.state.formErrors.zipCode}\n onChange={this.handleZipCode}\n options={{ autoComplete: 'zipCode' }}\n />\n </div>\n </div>\n <div className={!this.state.paymentInfo.showBillingInfo ? 'col-md-4' : 'col-md-3'}>\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('phone')}\n value={this.state.paymentInfo.cellPhone}\n error={this.state.formErrors.cellPhone}\n onChange={this.handleCellphone}\n options={{ autoComplete: 'tel' }}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.handleFiscalCondition}\n selected={this.state.paymentInfo.fiscalConditionId}\n options={transformFiscalConditionsToSelectOptions(this.state.fiscalConditions, t)}\n error={this.state.formErrors.fiscalConditionId}\n defaultOption={t('billingInformation.fields.fiscalCondition')}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.handleBillingDocumentType}\n options={transformDocTypesToSelectOptions(this.props.listDocumentTypes) || []}\n selected={this.state.paymentInfo.billingDocumentType}\n error={this.state.formErrors.billingDocumentType}\n defaultOption={t('tipodocumento')}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('billingInformation.fields.document')}\n value={this.state.paymentInfo.documentId}\n error={this.state.formErrors.documentId}\n onChange={this.handleDocumentId}\n options={{ autoComplete: 'document' }}\n legend={\n this.state.sampleDocFormat\n ? t('billingInformation.fields.formatExpected', {\n format_expected: this.state.sampleDocFormat,\n })\n : null\n }\n />\n </div>\n </div>\n </>\n );\n };\n\n getCustomerInfo = () => {\n if (this.isPayingBooking()) return this.props.bookings.confirmation.customer;\n if (this.isPayingInfraction() && this.props.infractions.current) {\n return this.props.infractions.current.booking\n ? this.props.infractions.current.booking.customer\n : {};\n }\n };\n\n render() {\n const {\n t,\n title,\n subtitle,\n script,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n } = this.props;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const showExchangeMsg = applyExchangeRate;\n\n let returnFinalPriceOnly = true;\n\n let totalToPay = this.showTotalToPay(returnFinalPriceOnly);\n if (applyExchangeRate)\n totalToPay = getPriceWithExchangeRate(\n totalToPay,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n\n return (\n <StyledPrismaSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"col-md-12 p-0 LogosContainer\">\n <img\n width=\"60\"\n height=\"60\"\n className=\"mr-4\"\n src=\"images/payments/ssl.jpg\"\n alt={t('CertificadoSSL')}\n />\n <div className=\"SecureLogoContainer\">\n <div className=\"LogoContainer\">\n <VerifiedUserOutlinedIcon />\n </div>\n <div>\n <Typography variant=\"body1\" className=\"CompraTitle\">\n {t('CompraSegura')}\n </Typography>\n <Typography variant=\"body1\"> {t('SafeTransactionsSite')}</Typography>\n </div>\n </div>\n </div>\n <div className=\"adicionales-block pb-1 pt-3 payment-code\">\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-1\">\n <strong>{this.showOrderIdentifier()}</strong>\n </p>\n <p>\n <strong>\n {t('totalToPay')} {this.showTotalToPay()}\n </strong>\n </p>\n <hr />\n <PartialPayWarning />\n </div>\n {showExchangeMsg && (\n <Paragraph className=\"rent-days mb-0 mt-2\" color={'red'}>\n <strong>{`${t('chargedPaymentMsg')} ${\n currentCurrency?.isoCode\n } ${totalToPay.toFixed(2)} `}</strong>\n </Paragraph>\n )}\n </div>\n <div className=\"row adicionales-block mb-5 pt-3\">\n <div className=\"col-md-10 form-pago\">\n <form id=\"prisma-form\" onSubmit={this.handleSubmit} ref={this.formRef}>\n <div className=\"row\">\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <span className=\"label\">{t('numeroTarjeta')}</span>\n <TextInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleCardNumber}\n value={this.state.paymentInfo.cardNumber}\n icon={this.state.cardIcon}\n error={this.state.formErrors.cardNumber}\n options={{ 'data-decidir': 'card_number' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('mediopago')}</span>\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.handleCreditCardType}\n selected={this.state.paymentInfo.paymentMethodID}\n options={this.state.creditCardTypes}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('codigo')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleSecCode}\n value={this.state.paymentInfo.secCode}\n error={this.state.formErrors.secCode}\n options={{ 'data-decidir': 'security_code' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('mes')}</span>\n <SelectInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleMonth}\n selected={this.state.paymentInfo.month}\n error={this.state.formErrors.month}\n props={{ 'data-decidir': 'card_expiration_month' }}\n options={this.parseToPrismaMonths(this.months)}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('año')}</span>\n <SelectInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleYear}\n error={this.state.formErrors.year}\n selected={this.state.paymentInfo.year}\n props={{ 'data-decidir': 'card_expiration_year' }}\n options={this.parseToPrismaYears(this.years)}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('titular')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleCardholderName}\n value={this.state.paymentInfo.cardholderName}\n options={{ 'data-decidir': 'card_holder_name' }}\n error={this.state.formErrors.cardholderName}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('tipodocumento')}</span>\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.handleDocumentType}\n selected={this.state.paymentInfo.documentType}\n options={this.state.documents}\n props={{ 'data-checkout': 'card_holder_doc_type' }}\n error={this.state.formErrors.documentType}\n />\n </div>\n </div>\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <span className=\"label\">{t('documento')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleDocument}\n value={this.state.paymentInfo.document}\n options={{ 'data-decidir': 'card_holder_doc_number' }}\n error={this.state.formErrors.document}\n />\n </div>\n </div>\n </div>\n\n {this.state.formErrors.genericPrismaError && (\n <div className=\"row\">\n <div className=\"col-md-12\">\n <p className=\"error\">{this.state.formErrors.genericPrismaError}</p>\n </div>\n </div>\n )}\n {this.state.paymentInfo.showBillingInfo && this.parseBillingInfoSection()}\n <div className=\"row\">\n <div className=\"col-md-12 mb-4\">\n <Btn\n type=\"submit\"\n text={this.getPayButtonText()}\n disabled={this.state.formLoading}\n className=\"mt-5 prisma-pay_button\"\n />\n </div>\n <div className=\"logo-container\">\n <span>{t('providedBy')}</span>\n <img\n width=\"151\"\n height=\"52\"\n className=\"prisma-logo\"\n src=\"images/payments/logo-prisma.svg\"\n alt=\"Prisma\"\n />\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n <ScriptTagComponent url={script} loadLibrary={true} async={true} />\n </StyledPrismaSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, infractions, siteConfiguration, global }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n listDocumentTypes: global.listDocumentTypes,\n listTaxPayerTypes: global.listTaxPayerTypes,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n});\nexport default connect(mapStateToProps, { fetchDocumentTypes, fetchFiscalConditions })(\n withRouter(withTranslation()(PrismaSection)),\n);\n","import PrismaSection from './PrismaSection';\nexport default PrismaSection;\n","import style from 'styled-components';\n\nexport const StyledCreditCardConfirmationSection = style.section`\n \n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n\n .logo-container {\n display: flex;\n align-items: center;\n\n .credomatic-logo {\n margin-left: 10px;\n }\n }\n`;\n","/* eslint-disable no-undef */\nimport React from 'react';\nimport { Title, TextInput, SelectInput, Btn } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { StyledCreditCardConfirmationSection } from './CreditCardConfirmationSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { tt, tlink } from '../../../utils/translationHelper';\nimport * as yup from 'yup';\nimport { confirmBooking } from 'services/api';\nimport queryString from 'query-string';\nimport { history } from '/store';\nimport { handleGetTotalToPay } from 'utils/dataHelper';\n\nvar CreditCardValidator = require('card-validator');\n\nclass CreditCardConfirmationSection extends React.Component {\n constructor(props) {\n const { t } = props;\n super(props);\n this.state = {\n paymentInfo: {\n bookingId: '0',\n qsamount: 0,\n },\n formErrors: {\n creditCardNumber: '',\n creditCardExpirationYear: '',\n creditCardExpirationMonth: '',\n creditCardCode: '',\n creditCardPlaceHolder: '',\n },\n cardIcon: 'far fa-credit-card',\n formLoading: false,\n };\n\n yup.addMethod(yup.number, 'isValidCreditCard', function(creditCardNumber) {\n return this.test('test-cc-number', t('cc_rejected_bad_filled_card_number'), function(\n ccNumber,\n ) {\n return CreditCardValidator.number(ccNumber).isValid;\n });\n });\n\n yup.addMethod(yup.number, 'isValidSecCode', function(secCode) {\n return this.test('test-cc-number', t('cc_rejected_bad_filled_security_code'), function(\n secCode,\n ) {\n const ccObject = CreditCardValidator.number(this.parent.creditCardNumber);\n if (!secCode || !ccObject.card) return false;\n return secCode.toString().length === ccObject.card.code.size;\n });\n });\n\n this.paymentInfoFormSchema = yup.object().shape({\n creditCardNumber: yup\n .number()\n .isValidCreditCard()\n .required(t('inputIsRequired', { field: t('numeroTarjeta') })),\n creditCardExpirationYear: yup.number().required(t('inputIsRequired', { field: t('año') })),\n creditCardExpirationMonth: yup.number().required(t('inputIsRequired', { field: t('mes') })),\n creditCardCode: yup\n .number()\n .isValidSecCode()\n .required(t('inputIsRequired', { field: t('codigo') })),\n creditCardPlaceHolder: yup.string().required(t('inputIsRequired', { field: t('titular') })),\n });\n\n this.formRef = React.createRef(null);\n const year = new Date().getFullYear();\n this.years = Array.from(new Array(15), (val, index) => index + year);\n this.months = Array.from(new Array(12), (val, index) => index + 1);\n }\n\n componentDidMount() {\n const { location, bookings } = this.props;\n const parseQs = queryString.parse(location.search);\n let partial = 0;\n let bookingId = '0';\n\n if (parseQs.amount) {\n partial = parseFloat(parseQs.amount);\n }\n\n if (this.isPayingBooking() && bookings.confirmation != null) {\n bookingId = bookings.confirmation.id;\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, bookingId, qsamount: partial },\n }));\n }\n\n getTotalToPay() {\n const {\n bookings: { confirmation },\n settings: { paymentConfiguration },\n } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n return handleGetTotalToPay(confirmation.customerBalance, paymentConfiguration, qsamount);\n }\n\n handleCardNumber = creditCardNumber => {\n const ccObject = CreditCardValidator.number(creditCardNumber);\n const ccIcon = this.getCreditCardIcon(ccObject.card ? ccObject.card.type : '');\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, creditCardNumber },\n formErrors: { ...prevState.formErrors, creditCardNumber: null, creditCardCode: null },\n cardIcon: ccIcon,\n }));\n };\n\n getCreditCardIcon = ccType => {\n let icon = '';\n\n switch (ccType) {\n case 'visa':\n icon = 'fab fa-cc-visa';\n break;\n case 'american-express':\n icon = 'fab fa-cc-amex';\n break;\n case 'mastercard':\n icon = 'fab fa-cc-mastercard';\n break;\n default:\n icon = 'far fa-credit-card';\n break;\n }\n\n return icon;\n };\n\n handleSecCode = creditCardCode => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, creditCardCode },\n formErrors: { ...prevState.formErrors, creditCardCode: null },\n }));\n };\n\n handleMonth = creditCardExpirationMonth => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, creditCardExpirationMonth },\n formErrors: { ...prevState.formErrors, creditCardExpirationMonth: null },\n }));\n };\n\n handleYear = creditCardExpirationYear => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, creditCardExpirationYear },\n formErrors: { ...prevState.formErrors, creditCardExpirationYear: null },\n }));\n };\n\n handleCardholderName = creditCardPlaceHolder => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, creditCardPlaceHolder },\n formErrors: { ...prevState.formErrors, creditCardPlaceHolder: null },\n }));\n };\n\n handleSubmit = e => {\n e.preventDefault();\n\n const paymentInfo = this.state.paymentInfo;\n const form = e.target;\n\n this.setState({ formLoading: true });\n\n this.paymentInfoFormSchema\n .validate(paymentInfo, { abortEarly: false })\n .then(valid => {\n if (valid) this.executePayment(paymentInfo);\n })\n .catch(err => {\n this.setState({ formLoading: false });\n const formErrors = err.inner.reduce((prevErrors, currentError) => {\n return { ...prevErrors, [currentError.path]: currentError.message };\n }, {});\n window.scrollTo(0, this.formRef.current.offsetTop);\n this.setState(prevState => ({ ...prevState, formErrors }));\n });\n };\n\n executePayment = async params => {\n const { t, i18n, settings } = this.props;\n\n try {\n await confirmBooking(this.state.paymentInfo);\n\n history.push(\n `${tlink(\n '__Routes.bookConfirmSuccess',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n )}`,\n );\n } catch (error) {\n history.push(\n `${tlink('__Routes.bookConfirmFailed', t, i18n, null, settings.configurations.langConfig)}`,\n );\n }\n };\n\n showOrderIdentifier = () => {\n const { t } = this.props;\n\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n return t('orden', { booking_id });\n };\n\n isPayingBooking = () => {\n const { bookings, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.bookingid || (bookings && bookings.confirmation);\n };\n\n getPayButtonText = () => {\n const { t } = this.props;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n return this.state.formLoading\n ? t('confirmandoReserva', { booking_id })\n : t('confirmarReserva', { booking_id });\n }\n };\n\n render() {\n const { t, title, subtitle, confirmMessage } = this.props;\n\n return (\n <StyledCreditCardConfirmationSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"adicionales-block pb-1 payment-code\">\n <div className=\"col-md-12 p-0\">\n <p>\n {confirmMessage\n ? tt(confirmMessage, t)\n : t('creditCardBookConfirmationExplanation')}\n </p>\n <p className=\"mb-1\">\n <strong>{this.showOrderIdentifier()}</strong>\n </p>\n <hr />\n </div>\n </div>\n <div className=\"row adicionales-block mb-5 pt-3\">\n <div className=\"col-md-10 form-pago\">\n <form onSubmit={this.handleSubmit} ref={this.formRef}>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('numeroTarjeta')}</span>\n <TextInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleCardNumber}\n value={this.state.paymentInfo.creditCardNumber}\n icon={this.state.cardIcon}\n options={{ 'data-checkout': 'creditCardNumber' }}\n error={this.state.formErrors.creditCardNumber}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('codigo')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleSecCode}\n value={this.state.paymentInfo.creditCardCode}\n options={{ 'data-checkout': 'creditCardCode' }}\n error={this.state.formErrors.creditCardCode}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('mes')}</span>\n <SelectInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleMonth}\n selected={this.state.paymentInfo.creditCardExpirationMonth}\n error={this.state.formErrors.creditCardExpirationMonth}\n props={{ 'data-checkout': 'creditCardExpirationMonth' }}\n options={this.months}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('año')}</span>\n <SelectInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleYear}\n error={this.state.formErrors.creditCardExpirationYear}\n selected={this.state.paymentInfo.creditCardExpirationYear}\n props={{ 'data-checkout': 'creditCardExpirationYear' }}\n options={this.years}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('titular')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleCardholderName}\n value={this.state.paymentInfo.creditCardPlaceHolder}\n options={{\n 'data-checkout': 'creditCardPlaceHolder',\n id: 'creditCardPlaceHolder',\n }}\n error={this.state.formErrors.creditCardPlaceHolder}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-12 mb-4\">\n <Btn\n type=\"submit\"\n text={this.getPayButtonText()}\n disabled={this.state.formLoading}\n className=\"mt-5\"\n />\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n </StyledCreditCardConfirmationSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, siteConfiguration }) => ({\n bookings: bookings,\n settings: siteConfiguration.settings,\n});\nexport default connect(mapStateToProps)(\n withRouter(withTranslation()(CreditCardConfirmationSection)),\n);\n","import CreditCardConfirmationSection from './CreditCardConfirmationSection';\nexport default CreditCardConfirmationSection;\n","import style from 'styled-components';\n\nexport const StyledStripeSection = style.section`\n .stripe-form_wrapper { \n width: 94%;\n max-width: 500px;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n .logo-container{\n img.stripe-logo {\n margin-left: 1rem;\n }\n }\n \n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n\n .hidden {\n display: none;\n }\n\n`;\n","import React, { useEffect, useState } from 'react';\nimport { PaymentElement, useStripe, useElements } from '@stripe/react-stripe-js';\nimport withSettingsContext from 'SettingsContext';\nimport { withTranslation } from 'react-i18next';\nimport { Btn } from 'components';\n\nfunction CheckoutForm({ t }) {\n const stripe = useStripe();\n const elements = useElements();\n\n const [message, setMessage] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n\n const url_redirect = `${window.location.origin}/StripeSuccess`;\n\n useEffect(() => {\n if (!stripe) {\n return;\n }\n\n const clientSecret = new URLSearchParams(window.location.search).get(\n 'payment_intent_client_secret',\n );\n\n if (!clientSecret) {\n return;\n }\n\n stripe.retrievePaymentIntent(clientSecret).then(({ paymentIntent }) => {\n switch (paymentIntent.status) {\n case 'succeeded':\n setMessage('Payment succeeded!');\n break;\n case 'processing':\n setMessage('Your payment is processing.');\n break;\n case 'requires_payment_method':\n setMessage('Your payment was not successful, please try again.');\n break;\n default:\n setMessage('Something went wrong.');\n break;\n }\n });\n }, [stripe]);\n\n const handleSubmit = async e => {\n e.preventDefault();\n\n if (!stripe || !elements) {\n // Stripe.js hasn't yet loaded.\n // Make sure to disable form submission until Stripe.js has loaded.\n return;\n }\n\n setIsLoading(true);\n\n const { error } = await stripe.confirmPayment({\n elements,\n confirmParams: {\n // Make sure to change this to your payment completion page\n return_url: url_redirect, //'http://localhost:3000',\n },\n });\n\n // This point will only be reached if there is an immediate error when\n // confirming the payment. Otherwise, your customer will be redirected to\n // your `return_url`. For some payment methods like iDEAL, your customer will\n // be redirected to an intermediate site first to authorize the payment, then\n // redirected to the `return_url`.\n if (error.type === 'card_error' || error.type === 'validation_error') {\n setMessage(error.message);\n } else {\n setMessage('An unexpected error occurred.');\n }\n\n setIsLoading(false);\n };\n\n const paymentElementOptions = {\n layout: 'tabs',\n };\n\n return (\n <form id=\"payment-form\" onSubmit={handleSubmit}>\n <PaymentElement id=\"payment-element\" options={paymentElementOptions} />\n <Btn\n id=\"submit\"\n text={t('transbankBtn')}\n disabled={isLoading || !stripe || !elements}\n className=\"mt-5 stripe-pay_button\"\n />\n\n {/* Show any error or success messages */}\n {message && <div id=\"payment-message\">{message}</div>}\n </form>\n );\n}\n\nexport default withSettingsContext(withTranslation()(CheckoutForm));\n","/* eslint-disable no-undef */\nimport React from 'react';\nimport { Title, TextInput, SelectInput, CheckboxInput } from 'components/';\nimport { connect } from 'react-redux';\nimport { history } from '/store';\nimport { withRouter } from 'react-router-dom';\nimport { StyledStripeSection } from './StripeSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { Paragraph } from 'components/';\nimport { tt, tlink } from '../../../utils/translationHelper';\nimport queryString from 'query-string';\nimport * as yup from 'yup';\nimport { payBooking, payInfraction, stripeCreatePaymentIntent } from 'services/api';\nimport { fetchDocumentTypes, fetchFiscalConditions } from '../../../actions/global.actions';\nimport { BookingStatus } from '../../../utils/constants';\nimport Storage from 'utils/storage';\nimport { Typography } from '@material-ui/core';\nimport { Elements } from '@stripe/react-stripe-js';\nimport { loadStripe } from '@stripe/stripe-js/pure';\nimport CheckoutForm from './CheckoutForm';\n\nimport VerifiedUserOutlinedIcon from '@material-ui/icons/VerifiedUserOutlined';\n\nimport {\n getDocumentSample,\n isValidDocument,\n transformDocTypesToSelectOptions,\n transformFiscalConditionsToSelectOptions,\n} from '../../../utils/documentHelper';\n\nimport {\n is_gtag_enabled,\n gtag_checkout_process,\n gtag_checkout_option,\n} from '../../../utils/googleTagsHelper';\nimport BasePaymentSection from '../basePaymentComponent/BasePaymentSection';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\nimport PartialPayWarning from '../partialPayWarning';\n\nclass StripeSection extends BasePaymentSection {\n constructor(props) {\n const {\n t,\n withBillingInformation,\n settings: {\n configurations: { fiscalConditionValidation },\n },\n } = props;\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n bookingId: '0',\n qsamount: 0,\n infractionId: '0',\n customerId: '0',\n act: '',\n branchOfficeId: 0,\n promotionId: '',\n noPendingPayTransactions: true,\n showBillingInfo: withBillingInformation !== undefined ? withBillingInformation : false,\n fiscalConditionId: null,\n currencyCode: '',\n exchangeRate: 1,\n installment: 1,\n },\n formErrors: {\n documentType: '',\n document: '',\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: '',\n documentId: '',\n address: '',\n addressNumber: '',\n addressDepartment: '',\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n },\n formLoading: false,\n disableBillingFields: false,\n fiscalConditions: [],\n stripePromise: null,\n clientSecret: null,\n };\n\n yup.addMethod(yup.string, 'isValidDocument', function(documentId) {\n return this.test(\n 'test-document-format',\n t('billingInformation.errors.wrongDocumentFormat'),\n function(documentId) {\n const { tenantDocumentTypes, billingDocumentType } = this.parent;\n return isValidDocument(tenantDocumentTypes, billingDocumentType, documentId);\n },\n );\n });\n\n yup.addMethod(yup.string, 'hasValidDocumentType', function(fiscalCondition) {\n return this.test(\n 'test-document-format',\n t('billingInformation.errors.wrongFiscalCondition'),\n function(fiscalCondition) {\n const taxPayerValidation = (fiscalConditionValidation || [])?.find(\n i => `${i.id}` === fiscalCondition,\n );\n\n if (!taxPayerValidation?.validDocumentIds) return true;\n else {\n const validIds = taxPayerValidation?.validDocumentIds;\n if (validIds.includes(this.parent.billingDocumentType)) return true;\n return false;\n }\n },\n );\n });\n\n this.paymentInfoFormSchema = yup.object().shape({\n firstName: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.firstName'),\n }),\n ),\n }),\n lastName: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.lastName'),\n }),\n ),\n }),\n fiscalConditionId: yup\n .string()\n .nullable()\n .when('showBillingInfo', {\n is: true,\n then: yup\n .string()\n .hasValidDocumentType()\n .required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.fiscalCondition'),\n }),\n ),\n }),\n billingDocumentType: yup.number().when('showBillingInfo', {\n is: true,\n then: yup.number().required(t('inputIsRequired', { field: t('tipodocumento') })),\n }),\n documentId: yup.string().when('showBillingInfo', {\n is: true,\n then: yup\n .string()\n .isValidDocument()\n .required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.document'),\n }),\n ),\n }),\n address: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('addressName') })),\n }),\n addressNumber: yup\n .string()\n .nullable(true)\n .when('showBillingInfo', {\n is: true,\n then: yup\n .string()\n .typeError(t('invalidNumber'))\n .required(t('inputIsRequired', { field: t('addressNumber') })),\n }),\n zipCode: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('zipCode') })),\n }),\n cellPhone: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('phone') })),\n }),\n emailAddress: yup\n .string()\n .email(t('validEmail'))\n .when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('mail') })),\n }),\n });\n\n this.formRef = React.createRef(null);\n }\n\n //#region Delete\n\n handleSubmit = e => {\n e.preventDefault();\n const paymentInfo = this.state.paymentInfo;\n this.setState({ formLoading: true });\n\n this.paymentInfoFormSchema\n .validate(paymentInfo, { abortEarly: false })\n .then(valid => {\n this.executePayment();\n })\n .catch(err => {\n this.setState({ formLoading: false });\n const formErrors = err.inner.reduce((prevErrors, currentError) => {\n return { ...prevErrors, [currentError.path]: currentError.message };\n }, {});\n window.scrollTo(0, this.formRef.current.offsetTop);\n this.setState(prevState => ({ ...prevState, formErrors }));\n });\n };\n\n executePayment = async () => {\n const {\n t,\n i18n,\n bookings,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n } = this.props;\n\n let paymentParams = this.state.paymentInfo;\n paymentParams.gatewayId = 'STRIPE';\n paymentParams.orderID = this.state.paymentInfo.bookingId;\n\n try {\n // TODO: Encontrar una solucion mas elegante al paso de info entre el iframe y react.\n var paymentParamsCopy = {\n ...paymentParams,\n isPayingBooking: this.isPayingBooking(),\n };\n Storage.setElement('paymentParams', JSON.stringify(paymentParamsCopy), false);\n\n const res = await this.makePayment(paymentParams);\n } catch (error) {\n let errorMessage = t('stripeGenericError');\n let codeError = '';\n let messageError = '';\n\n if (error && error.response && error.response.data && error.response.data.code) {\n messageError = error.response.data.message;\n codeError = error.response.data.code;\n }\n\n switch (codeError) {\n case 402:\n errorMessage = t('stripeAddPaymentFailed', {\n errorMessage: messageError,\n });\n break;\n case 403:\n errorMessage = t('stripeAddPaymentRentlyFailed', {\n transactionId: paymentParams.orderID,\n });\n break;\n case 404:\n errorMessage = t('stripeAddPaymentRequiresAction', {\n transactionId: paymentParams.orderID,\n });\n break;\n default:\n break;\n }\n\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: errorMessage },\n );\n }\n };\n\n makePayment = paymentInfo => {\n if (this.isPayingBooking()) return payBooking(paymentInfo);\n if (this.isPayingInfraction()) return payInfraction(paymentInfo);\n };\n\n //#endregion\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n } catch {}\n }\n }\n\n sanitizeName(name) {\n if (!name) {\n return name;\n }\n return name.replace(/[^a-zA-Z0-9]/g, '');\n }\n\n async componentDidMount() {\n const {\n location,\n bookings,\n infractions,\n noPendingPayTransactions,\n fetchDocumentTypes,\n fetchFiscalConditions,\n listDocumentTypes,\n listTaxPayerTypes,\n i18n,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n defaultCurrency,\n } = this.props;\n\n let tenantDocumentTypes = listDocumentTypes || [];\n\n if (this.state.paymentInfo.showBillingInfo && tenantDocumentTypes.length === 0)\n tenantDocumentTypes = (await fetchDocumentTypes('', i18n.language)).payload;\n\n const tenantFiscalConditions =\n listTaxPayerTypes || (await fetchFiscalConditions(i18n.language))?.payload;\n\n this.setState(prevState => ({\n ...prevState,\n fiscalConditions: tenantFiscalConditions,\n }));\n\n const parseQs = queryString.parse(location.search);\n\n const customer = this.getCustomerInfo();\n\n if (this.isPayingBooking() && bookings.confirmation != null) {\n // If the currency is not the system currency and there's an exchange rate\n // use that\n if (defaultCurrency && bookings.confirmation.currency !== defaultCurrency.isoCode) {\n bookings.confirmation.balance =\n bookings.confirmation.balance * bookings.confirmation.exchangeRate;\n bookings.confirmation.currency = defaultCurrency.isoCode;\n }\n\n if (is_gtag_enabled(googleTagManager)) {\n gtag_checkout_process(\n { number: 3, option: 'Online Payment' },\n bookings.confirmation,\n settings,\n );\n gtag_checkout_option({ number: 3, option: 'Stripe' });\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(),\n bookingId: bookings.confirmation.id,\n email: bookings.confirmation.customer.emailAddress,\n branchOfficeId: bookings.confirmation.deliveryPlace.branchOfficeId,\n promotionId: parseQs.promotionid || null,\n noPendingPayTransactions:\n noPendingPayTransactions !== undefined ? noPendingPayTransactions : true,\n installment: '1',\n firstName: bookings.confirmation.customer.firstName,\n lastName: bookings.confirmation.customer.lastName,\n fiscalConditionId: null,\n billingDocumentType: 0,\n documentId: '',\n address: '',\n addressNumber: null,\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n tenantDocumentTypes,\n billingInfoCheckbox: false,\n disableBillingFields: false,\n currencyCode: bookings.confirmation.currency,\n exchangeRate: 1,\n customerId: bookings.confirmation.customer.id,\n },\n sampleDocFormat: getDocumentSample(tenantDocumentTypes, customer.documentType),\n }));\n }\n\n if (this.isPayingInfraction() && parseQs.customerid) {\n const infraction = infractions.current;\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getInfractionTotalToPay(),\n infractionId: infraction.id,\n act: infraction.act,\n customerId: parseQs.customerid,\n branchOfficeId: infraction.booking?.deliveryPlace?.branchOfficeId || null,\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: 0,\n documentId: '',\n address: '',\n addressNumber: null,\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n tenantDocumentTypes,\n billingInfoCheckbox: false,\n disableBillingFields: false,\n currencyCode: defaultCurrency.isoCode, //Infractions are paid in RMS System Currency.\n exchangeRate: 1,\n },\n }));\n }\n this.loadStripePromise();\n }\n\n loadStripePromise = async () => {\n const { credentials } = this.props;\n\n if (credentials) {\n let stripePromise = loadStripe(credentials.publicApiKey);\n this.setState({ ...this.state, stripePromise });\n this.createPaymentIntent();\n }\n };\n\n getInfractionTotalToPay() {\n const { infractions } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n const infraction = infractions.current;\n if (qsamount && Math.abs(infraction.amount) >= Math.abs(qsamount)) {\n return Math.abs(qsamount);\n } else {\n return infraction.amount;\n }\n }\n\n showOrderIdentifier = () => {\n const { t, bookings, settings } = this.props;\n const confirmedOrderText = settings?.paymentConfiguration?.confirmedOrderText;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n const bookingStatus = bookings.confirmation.currentStatus;\n\n if ([BookingStatus.reserved, BookingStatus.confirmed].includes(bookingStatus)) {\n return (\n tt(confirmedOrderText, t, true, { booking_id }) || t('ordenConfirmada', { booking_id })\n );\n }\n return t('orden', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n if (!this.state.paymentInfo.act) return null;\n return `ACTA ${this.state.paymentInfo.act?.toString().padStart(7, '0')}`;\n }\n };\n\n isPayingBooking = () => {\n const { bookings, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.bookingid || (bookings && bookings.confirmation);\n };\n\n isPayingInfraction = () => {\n const { infractions, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.infractionid && parseQs.customerid && infractions && infractions.current;\n };\n\n getCustomerInfo = () => {\n if (this.isPayingBooking()) return this.props.bookings.confirmation.customer;\n if (this.isPayingInfraction() && this.props.infractions.current) {\n return this.props.infractions.current.booking\n ? this.props.infractions.current.booking.customer\n : {};\n }\n };\n\n //#region BillingInformation\n\n handleCheckboxUseContactInfoChange = checked => {\n const customer = this.getCustomerInfo();\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n billingInfoCheckbox: checked,\n disableBillingFields: checked,\n firstName: checked ? customer.firstName : prevState.paymentInfo.firstName,\n lastName: checked ? customer.lastName : prevState.paymentInfo.lastName,\n fiscalConditionId: checked\n ? customer.fiscalConditionId\n : prevState.paymentInfo.fiscalConditionId,\n billingDocumentType: checked\n ? customer.documentTypeId || 0\n : prevState.paymentInfo.billingDocumentType,\n documentId: checked ? customer.documentId : prevState.paymentInfo.documentId,\n address: checked ? customer.address : prevState.paymentInfo.address,\n addressNumber: checked\n ? customer.addressNumber || null\n : prevState.paymentInfo.addressNumber,\n addressDepartment: checked ? customer.addressDepartment || '' : '',\n zipCode: checked ? customer.zipCode : prevState.paymentInfo.zipCode,\n cellPhone: checked ? customer.cellPhone : prevState.paymentInfo.cellPhone,\n emailAddress: checked ? customer.emailAddress : prevState.paymentInfo.emailAddress,\n customerId: checked ? customer.id : prevState.paymentInfo.customerid,\n },\n formErrors: {\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: '',\n documentId: '',\n address: '',\n addressNumber: '',\n addressDepartment: '',\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n customerId: '0',\n },\n }));\n };\n\n handleFirstName = firstName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n firstName,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, firstName: '' },\n }));\n };\n\n handleLastName = lastName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n lastName,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, lastName: '' },\n }));\n };\n\n handleEmailAddress = emailAddress => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n emailAddress,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, emailAddress: '' },\n }));\n };\n\n handleAddress = address => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n address,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, address: '' },\n }));\n };\n\n handleAddressNumber = addressNumber => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n addressNumber,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, addressNumber: '' },\n }));\n };\n\n handleAddressDepartment = addressDepartment => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n addressDepartment,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, addressDepartment: '' },\n }));\n };\n\n handleZipCode = zipCode => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n zipCode,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, zipCode: '' },\n }));\n };\n\n handleCellphone = cellPhone => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n cellPhone,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, cellPhone: '' },\n }));\n };\n\n handleFiscalCondition = fiscalConditionId => {\n const {\n settings: { configurations },\n } = this.props;\n const validDocumentIds = (configurations?.fiscalConditionValidation || []).find(\n i => `${i.id}` === fiscalConditionId,\n )?.validDocumentIds;\n let billingDocumentType = this.state.paymentInfo.billingDocumentType;\n\n if (\n validDocumentIds &&\n (!billingDocumentType || !validDocumentIds?.includes(billingDocumentType))\n ) {\n billingDocumentType = validDocumentIds[0];\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n fiscalConditionId,\n billingDocumentType,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, fiscalConditionId: null },\n }));\n };\n\n handleBillingDocumentType = billingDocumentType => {\n const { listDocumentTypes } = this.props;\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n billingDocumentType,\n billingInfoCheckbox: false,\n },\n formErrors: {\n ...prevState.formErrors,\n billingDocumentType: '',\n fiscalConditionId: null,\n },\n sampleDocFormat: getDocumentSample(listDocumentTypes, billingDocumentType),\n }));\n };\n\n handleDocumentId = documentId => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n documentId,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, documentId: '' },\n }));\n };\n\n renderBillingInfoSection = () => {\n const { t, billingSubtitle, billingConditions } = this.props;\n\n return (\n <>\n <div className=\"billing-form pb-1 pt-3 payment-code\">\n <hr />\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-2\">\n <strong>{t('billingInformation.title')}</strong>\n </p>\n {billingSubtitle && <p className=\"label mb-2\">{t(billingSubtitle)}</p>}\n <CheckboxInput\n onChange={this.handleCheckboxUseContactInfoChange}\n checked={this.state.paymentInfo.billingInfoCheckbox}\n text={<p className=\"mb-1\">{t('billingInformation.equalToContactInfo')}</p>}\n />\n {this.renderBillingFields()}\n </div>\n {billingConditions && <Paragraph text={billingConditions} />}\n </div>\n </>\n );\n };\n\n renderBillingFields = () => {\n const { t } = this.props;\n\n return (\n <>\n <div className=\"row\">\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('billingInformation.fields.firstName')}\n value={this.state.paymentInfo.firstName}\n error={this.state.formErrors.firstName}\n onChange={this.handleFirstName}\n options={{ autoComplete: 'billingInfo.firstName' }}\n />\n </div>\n </div>\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('billingInformation.fields.lastName')}\n value={this.state.paymentInfo.lastName}\n error={this.state.formErrors.lastName}\n onChange={this.handleLastName}\n options={{ autoComplete: 'billingInfo.lastName' }}\n />\n </div>\n </div>\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('mail')}\n value={this.state.paymentInfo.emailAddress}\n error={this.state.formErrors.emailAddress}\n onChange={this.handleEmailAddress}\n options={{ autoComplete: 'billingInfo.emailAddress' }}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('addressName')}\n value={this.state.paymentInfo.address}\n error={this.state.formErrors.address}\n onChange={this.handleAddress}\n options={{ autoComplete: 'address-line1' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('addressNumber')}\n value={this.state.paymentInfo.addressNumber}\n error={this.state.formErrors.addressNumber}\n onChange={this.handleAddressNumber}\n options={{ autoComplete: 'addressNumber' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('addressDepartment')}\n value={this.state.paymentInfo.addressDepartment}\n error={this.state.formErrors.addressDepartment}\n onChange={this.handleAddressDepartment}\n options={{ autoComplete: 'addressDepartment' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('zipCode')}\n value={this.state.paymentInfo.zipCode}\n error={this.state.formErrors.zipCode}\n onChange={this.handleZipCode}\n options={{ autoComplete: 'zipCode' }}\n />\n </div>\n </div>\n <div className={!this.state.paymentInfo.showBillingInfo ? 'col-md-4' : 'col-md-3'}>\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('phone')}\n value={this.state.paymentInfo.cellPhone}\n error={this.state.formErrors.cellPhone}\n onChange={this.handleCellphone}\n options={{ autoComplete: 'tel' }}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.handleFiscalCondition}\n selected={this.state.paymentInfo.fiscalConditionId}\n options={transformFiscalConditionsToSelectOptions(this.state.fiscalConditions, t)}\n error={this.state.formErrors.fiscalConditionId}\n defaultOption={t('billingInformation.fields.fiscalCondition')}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.handleBillingDocumentType}\n options={transformDocTypesToSelectOptions(this.props.listDocumentTypes) || []}\n selected={this.state.paymentInfo.billingDocumentType}\n error={this.state.formErrors.billingDocumentType}\n defaultOption={t('tipodocumento')}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('billingInformation.fields.document')}\n value={this.state.paymentInfo.documentId}\n error={this.state.formErrors.documentId}\n onChange={this.handleDocumentId}\n options={{ autoComplete: 'document' }}\n legend={\n this.state.sampleDocFormat\n ? t('billingInformation.fields.formatExpected', {\n format_expected: this.state.sampleDocFormat,\n })\n : null\n }\n />\n </div>\n </div>\n </>\n );\n };\n\n //#endregion\n\n createPaymentIntent = () => {\n const paymentInfo = this.state.paymentInfo;\n\n stripeCreatePaymentIntent(\n paymentInfo.branchOfficeId,\n paymentInfo.price,\n paymentInfo.currencyCode,\n paymentInfo.bookingId,\n paymentInfo.infractionId,\n paymentInfo.customerId,\n this.sanitizeName(paymentInfo.firstName) + ' ' + this.sanitizeName(paymentInfo.lastName),\n paymentInfo.email,\n )\n .then(res => res)\n .then(data => this.setClientSecret(data));\n\n this.setSuccessStorageElements();\n };\n\n setClientSecret = clientSecret => {\n this.setState({ ...this.state, clientSecret });\n };\n\n setSuccessStorageElements = () => {\n const paymentInfo = this.state.paymentInfo;\n\n var params = {\n bookingId: paymentInfo.bookingId,\n infractionId: paymentInfo.infractionId,\n price: paymentInfo.price,\n currencyCode: paymentInfo.currencyCode,\n exchangeRate: paymentInfo.exchangeRate,\n };\n Storage.setElement('stripeTransactionParams', JSON.stringify(params), false);\n };\n\n render() {\n const { t, title, subtitle, currentCurrency, defaultCurrency, webCurrency } = this.props;\n\n const { stripePromise, clientSecret } = this.state;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const showExchangeMsg = applyExchangeRate;\n\n let returnFinalPriceOnly = true;\n\n let totalToPay = this.showTotalToPay(returnFinalPriceOnly);\n if (applyExchangeRate)\n totalToPay = getPriceWithExchangeRate(\n totalToPay,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n\n const appearance = {\n theme: 'stripe',\n };\n const options = {\n clientSecret,\n appearance,\n };\n\n return (\n <StyledStripeSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"col-md-12 p-0 LogosContainer\">\n <img\n width=\"60\"\n height=\"60\"\n className=\"mr-4\"\n src=\"/images/ssl.jpg\"\n alt={t('CertificadoSSL')}\n />\n <div className=\"SecureLogoContainer\">\n <div className=\"LogoContainer\">\n <VerifiedUserOutlinedIcon />\n </div>\n <div>\n <Typography variant=\"body1\" className=\"CompraTitle\">\n {t('CompraSegura')}\n </Typography>\n <Typography variant=\"body1\"> {t('SafeTransactionsSite')}</Typography>\n </div>\n </div>\n </div>\n <div className=\"adicionales-block pb-1 pt-3 payment-code\">\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-1\">\n <strong>{this.showOrderIdentifier()}</strong>\n </p>\n <p>\n <strong>\n {t('totalToPay')} {this.showTotalToPay()}\n </strong>\n </p>\n <hr />\n <PartialPayWarning />\n </div>\n {showExchangeMsg && (\n <Paragraph className=\"rent-days mb-0 mt-2\" color={'red'}>\n <strong>{`${t('chargedPaymentMsg')} ${\n currentCurrency?.isoCode\n } ${totalToPay.toFixed(2)} `}</strong>\n </Paragraph>\n )}\n </div>\n <div className=\"row adicionales-block ml-2 pt-3\">\n <div className=\"stripe-form_wrapper\">\n {clientSecret && (\n <Elements options={options} stripe={stripePromise}>\n <CheckoutForm />\n </Elements>\n )}\n </div>\n </div>\n <div className=\"row adicionales-block mb-5 ml-2 pt-3\">\n <div className=\"row\">\n <div className=\"logo-container\">\n <img\n width=\"151\"\n height=\"52\"\n className=\"stripe-logo\"\n src=\"/images/payments/powered_by_stripe.svg\"\n alt=\"Stripe\"\n />\n </div>\n </div>\n\n {/* <div className=\"col-md-10 form-pago\">\n <form id=\"stripe-form\" onSubmit={this.handleSubmit} ref={this.formRef}>\n {this.state.paymentInfo.showBillingInfo && this.renderBillingInfoSection()}\n </form>\n </div> */}\n </div>\n </div>\n </StyledStripeSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, infractions, siteConfiguration, global }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n listDocumentTypes: global.listDocumentTypes,\n listTaxPayerTypes: global.listTaxPayerTypes,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n});\nexport default connect(mapStateToProps, { fetchDocumentTypes, fetchFiscalConditions })(\n withRouter(withTranslation()(StripeSection)),\n);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { StyledStripeSection } from './StripeSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { CustomLoading } from 'components/';\nimport { tlink } from 'utils/translationHelper';\nimport queryString from 'query-string';\nimport { history } from '/store';\nimport { payBooking, payInfraction, getBooking } from 'services/api';\nimport Storage from 'utils/storage';\nimport { is_gtag_enabled, gtag_purchase } from '../../../utils/googleTagsHelper';\n\nclass StripeSuccess extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n bookingId: '0',\n },\n };\n }\n\n async componentDidMount() {\n const {\n location,\n t,\n i18n,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n } = this.props;\n\n const parseQs = queryString.parse(location.search);\n\n //const clientSecret = parseQs.payment_intent_client_secret;\n const paymentIntent = parseQs.payment_intent;\n const redirectStatus = parseQs.redirect_status;\n const storage = Storage.getElement('stripeTransactionParams', false);\n\n if (paymentIntent && redirectStatus == 'succeeded' && storage != '') {\n const transactionParams = JSON.parse(storage);\n Storage.setElement('stripeTransactionParams', '', false); //delete storage\n try {\n var params = {\n gatewayId: 'STRIPE',\n orderID: paymentIntent,\n bookingId: transactionParams.bookingId,\n infractionId: transactionParams.infractionId,\n price: transactionParams.price,\n currencyCode: transactionParams.currencyCode,\n exchangeRate: transactionParams.exchangeRate,\n };\n if (transactionParams.bookingId && transactionParams.bookingId > 0) {\n await payBooking(params);\n if (is_gtag_enabled(googleTagManager)) {\n const booking = await getBooking(null, transactionParams.bookingId);\n if (booking && booking.data) gtag_purchase(booking.data, settings);\n }\n } else {\n await payInfraction(params);\n }\n\n history.push(\n `${tlink('__Routes.paymentSuccess', t, i18n, null, settings.configurations.langConfig)}`,\n );\n } catch (error) {\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n {\n error: t('payBookingGatewayFailGenericError', {\n bookingId: transactionParams.bookingId,\n }),\n },\n );\n }\n }\n }\n\n render() {\n const { t, loadingGif, loadingMessage } = this.props;\n return (\n <StyledStripeSection className=\"col-md-12\">\n <CustomLoading\n loadingGif={loadingGif || t('loadingGif')}\n loadingMessage={loadingMessage}\n ></CustomLoading>\n </StyledStripeSection>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(StripeSuccess)));\n","import style from 'styled-components';\n\nexport const StyledFiservIpgSection = style.section`\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n #fiserv-form{\n img.fiserv-logo {\n margin-left: 1rem;\n }\n }\n \n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n`;\n","import React from 'react';\nimport { Title, TextInput, SelectInput, Btn, ScriptTagComponent, CheckboxInput } from 'components/';\nimport { connect } from 'react-redux';\nimport { history } from '/store';\nimport { withRouter } from 'react-router-dom';\nimport { StyledFiservIpgSection } from './FiservIpgSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { Paragraph } from 'components/';\nimport { tt, tlink } from '../../../utils/translationHelper';\nimport queryString from 'query-string';\nimport * as yup from 'yup';\nimport { payBooking, payInfraction } from 'services/api';\nimport { fetchDocumentTypes, fetchFiscalConditions } from '../../../actions/global.actions';\nimport { BookingStatus } from '../../../utils/constants';\nimport { Typography } from '@material-ui/core';\nimport VerifiedUserOutlinedIcon from '@material-ui/icons/VerifiedUserOutlined';\nimport {\n getDocumentSample,\n isValidDocument,\n transformDocTypesToSelectOptions,\n transformFiscalConditionsToSelectOptions,\n} from '../../../utils/documentHelper';\n\nimport {\n is_gtag_enabled,\n gtag_checkout_process,\n gtag_checkout_option,\n gtag_purchase,\n} from '../../../utils/googleTagsHelper';\nimport BasePaymentSection from '../basePaymentComponent/BasePaymentSection';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from '../../../utils/priceHelper';\nimport PartialPayWarning from '../partialPayWarning';\n\nvar CreditCardValidator = require('card-validator');\n\nclass FiservIpgSection extends BasePaymentSection {\n constructor(props) {\n const {\n t,\n withBillingInformation,\n settings: {\n configurations: { fiscalConditionValidation },\n },\n } = props;\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n bookingId: '0',\n qsamount: 0,\n infractionId: '0',\n customerId: '0',\n act: '',\n branchOfficeId: 0,\n promotionId: '',\n noPendingPayTransactions: true,\n showBillingInfo: withBillingInformation !== undefined ? withBillingInformation : false,\n fiscalConditionId: null,\n currencyCode: '',\n exchangeRate: 1,\n installment: 1,\n },\n formErrors: {\n documentType: '',\n cardNumber: '',\n document: '',\n cardholderName: '',\n year: '',\n month: '',\n secCode: '',\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: '',\n documentId: '',\n address: '',\n addressNumber: '',\n addressDepartment: '',\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n },\n documents: [\n {\n value: 'dni',\n text: 'DNI',\n },\n {\n value: 'cuil',\n text: 'CUIL',\n },\n ],\n cardIcon: 'far fa-credit-card',\n formLoading: false,\n disableBillingFields: false,\n fiscalConditions: [],\n };\n\n yup.addMethod(yup.number, 'isValidCreditCard', function(creditCardNumber) {\n return this.test('test-cc-number', t('cc_rejected_bad_filled_card_number'), function(\n ccNumber,\n ) {\n return CreditCardValidator.number(ccNumber).isValid;\n });\n });\n\n yup.addMethod(yup.number, 'isValidSecCode', function(secCode) {\n return this.test('test-cc-number', t('cc_rejected_bad_filled_security_code'), function(\n secCode,\n ) {\n const ccObject = CreditCardValidator.number(this.parent.cardNumber);\n if (!secCode || !ccObject.card) return false;\n\n if (ccObject.card.code.size == 4) return secCode >= 1 && secCode <= 9999;\n if (ccObject.card.code.size == 3) return secCode >= 1 && secCode <= 999;\n\n return secCode.toString().length === ccObject.card.code.size;\n });\n });\n\n yup.addMethod(yup.string, 'isValidDocument', function(documentId) {\n return this.test(\n 'test-document-format',\n t('billingInformation.errors.wrongDocumentFormat'),\n function(documentId) {\n const { tenantDocumentTypes, billingDocumentType } = this.parent;\n return isValidDocument(tenantDocumentTypes, billingDocumentType, documentId);\n },\n );\n });\n\n yup.addMethod(yup.string, 'hasValidDocumentType', function(fiscalCondition) {\n return this.test(\n 'test-document-format',\n t('billingInformation.errors.wrongFiscalCondition'),\n function(fiscalCondition) {\n const taxPayerValidation = (fiscalConditionValidation || [])?.find(\n i => `${i.id}` === fiscalCondition,\n );\n\n if (!taxPayerValidation?.validDocumentIds) return true;\n else {\n const validIds = taxPayerValidation?.validDocumentIds;\n if (validIds.includes(this.parent.billingDocumentType)) return true;\n return false;\n }\n },\n );\n });\n\n this.paymentInfoFormSchema = yup.object().shape({\n documentType: yup.string().required(t('inputIsRequired', { field: t('tipodocumento') })),\n cardNumber: yup\n .number()\n .isValidCreditCard()\n .required(t('inputIsRequired', { field: t('numeroTarjeta') })),\n document: yup.string().required(t('inputIsRequired', { field: t('documento') })),\n cardholderName: yup.string().required(t('inputIsRequired', { field: t('titular') })),\n year: yup.number().required(t('inputIsRequired', { field: t('año') })),\n month: yup.number().required(t('inputIsRequired', { field: t('mes') })),\n secCode: yup\n .number()\n .isValidSecCode()\n .required(t('inputIsRequired', { field: t('codigo') })),\n firstName: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.firstName'),\n }),\n ),\n }),\n lastName: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.lastName'),\n }),\n ),\n }),\n fiscalConditionId: yup\n .string()\n .nullable()\n .when('showBillingInfo', {\n is: true,\n then: yup\n .string()\n .hasValidDocumentType()\n .required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.fiscalCondition'),\n }),\n ),\n }),\n billingDocumentType: yup.number().when('showBillingInfo', {\n is: true,\n then: yup.number().required(t('inputIsRequired', { field: t('tipodocumento') })),\n }),\n documentId: yup.string().when('showBillingInfo', {\n is: true,\n then: yup\n .string()\n .isValidDocument()\n .required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.document'),\n }),\n ),\n }),\n address: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('addressName') })),\n }),\n addressNumber: yup\n .string()\n .nullable(true)\n .when('showBillingInfo', {\n is: true,\n then: yup\n .string()\n .typeError(t('invalidNumber'))\n .required(t('inputIsRequired', { field: t('addressNumber') })),\n }),\n zipCode: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('zipCode') })),\n }),\n cellPhone: yup.string().when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('phone') })),\n }),\n emailAddress: yup\n .string()\n .email(t('validEmail'))\n .when('showBillingInfo', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('mail') })),\n }),\n });\n\n this.formRef = React.createRef(null);\n const year = new Date().getFullYear();\n this.years = Array.from(new Array(15), (val, index) => index + year);\n this.months = Array.from(new Array(12), (val, index) => index + 1);\n }\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n } catch {}\n }\n }\n\n async componentDidMount() {\n const {\n location,\n bookings,\n infractions,\n noPendingPayTransactions,\n fetchDocumentTypes,\n fetchFiscalConditions,\n listDocumentTypes,\n listTaxPayerTypes,\n i18n,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n defaultCurrency,\n } = this.props;\n let tenantDocumentTypes = listDocumentTypes || [];\n\n if (this.state.paymentInfo.showBillingInfo && tenantDocumentTypes.length === 0)\n tenantDocumentTypes = (await fetchDocumentTypes('', i18n.language)).payload;\n\n const parseQs = queryString.parse(location.search);\n\n const customer = this.getCustomerInfo();\n\n const tenantFiscalConditions =\n listTaxPayerTypes || (await fetchFiscalConditions(i18n.language))?.payload;\n\n this.setState(prevState => ({\n ...prevState,\n fiscalConditions: tenantFiscalConditions,\n }));\n\n if (this.isPayingBooking() && bookings.confirmation != null) {\n // If the currency is not the system currency and there's an exchange rate\n // use that\n if (bookings.confirmation.currency !== defaultCurrency.isoCode) {\n bookings.confirmation.balance =\n bookings.confirmation.balance * bookings.confirmation.exchangeRate;\n bookings.confirmation.currency = defaultCurrency.isoCode;\n }\n\n if (is_gtag_enabled(googleTagManager)) {\n gtag_checkout_process(\n { number: 18, option: 'Online Payment' },\n bookings.confirmation,\n settings,\n );\n gtag_checkout_option({ number: 18, option: 'Fiserv' });\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(),\n bookingId: bookings.confirmation.id,\n email: bookings.confirmation.customer.emailAddress,\n branchOfficeId: bookings.confirmation.deliveryPlace.branchOfficeId,\n promotionId: parseQs.promotionid || null,\n noPendingPayTransactions:\n noPendingPayTransactions !== undefined ? noPendingPayTransactions : true,\n installment: '1',\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: 0,\n documentId: '',\n address: '',\n addressNumber: null,\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n tenantDocumentTypes,\n billingInfoCheckbox: false,\n disableBillingFields: false,\n currencyCode: bookings.confirmation.currency,\n exchangeRate: 1,\n },\n sampleDocFormat: getDocumentSample(tenantDocumentTypes, customer.documentType),\n }));\n }\n\n if (this.isPayingInfraction() && parseQs.customerid) {\n const infraction = infractions.current;\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getInfractionTotalToPay(),\n infractionId: infraction.id,\n act: infraction.act,\n customerId: parseQs.customerid,\n branchOfficeId: infraction.booking?.deliveryPlace?.branchOfficeId || null,\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: 0,\n documentId: '',\n address: '',\n addressNumber: null,\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n tenantDocumentTypes,\n billingInfoCheckbox: false,\n disableBillingFields: false,\n currencyCode: defaultCurrency.isoCode,\n exchangeRate: 1,\n },\n }));\n }\n }\n\n getInfractionTotalToPay() {\n const { infractions } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n const infraction = infractions.current;\n if (qsamount && Math.abs(infraction.amount) >= Math.abs(qsamount)) {\n return Math.abs(qsamount);\n } else {\n return infraction.amount;\n }\n }\n\n handleDocumentType = documentType => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, documentType },\n formErrors: { ...prevState.formErrors, documentType: null },\n }));\n };\n\n handleCardNumber = cardNumber => {\n const ccObject = CreditCardValidator.number(cardNumber);\n const ccIcon = this.getCreditCardIcon(ccObject.card ? ccObject.card.type : '');\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n cardNumber,\n paymentMethodID: ccObject.card ? ccObject.card.type : '',\n },\n formErrors: { ...prevState.formErrors, cardNumber: null, secCode: null },\n cardIcon: ccIcon,\n }));\n };\n\n getCreditCardIcon = ccType => {\n let icon = '';\n\n switch (ccType) {\n case 'visa':\n icon = 'fab fa-cc-visa';\n break;\n case 'amex':\n case 'american-express':\n icon = 'fab fa-cc-amex';\n break;\n case 'mastercard':\n icon = 'fab fa-cc-mastercard';\n break;\n default:\n icon = 'far fa-credit-card';\n break;\n }\n\n return icon;\n };\n\n handleSecCode = secCode => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, secCode },\n formErrors: { ...prevState.formErrors, secCode: null },\n }));\n };\n\n handleMonth = month => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, month },\n formErrors: { ...prevState.formErrors, month: null },\n }));\n };\n\n handleYear = year => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, year },\n formErrors: { ...prevState.formErrors, year: null },\n }));\n };\n\n handleCardholderName = cardholderName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, cardholderName },\n formErrors: { ...prevState.formErrors, cardholderName: null },\n }));\n };\n\n handleDocument = document => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, document },\n formErrors: { ...prevState.formErrors, document: null },\n }));\n };\n\n handleFirstName = firstName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n firstName,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, firstName: '' },\n }));\n };\n\n handleLastName = lastName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n lastName,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, lastName: '' },\n }));\n };\n\n handleEmailAddress = emailAddress => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n emailAddress,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, emailAddress: '' },\n }));\n };\n\n handleAddress = address => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n address,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, address: '' },\n }));\n };\n\n handleAddressNumber = addressNumber => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n addressNumber,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, addressNumber: '' },\n }));\n };\n\n handleAddressDepartment = addressDepartment => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n addressDepartment,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, addressDepartment: '' },\n }));\n };\n\n handleZipCode = zipCode => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n zipCode,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, zipCode: '' },\n }));\n };\n\n handleCellphone = cellPhone => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n cellPhone,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, cellPhone: '' },\n }));\n };\n\n handleFiscalCondition = fiscalConditionId => {\n const {\n settings: { configurations },\n } = this.props;\n const validDocumentIds = (configurations?.fiscalConditionValidation || []).find(\n i => `${i.id}` === fiscalConditionId,\n )?.validDocumentIds;\n let billingDocumentType = this.state.paymentInfo.billingDocumentType;\n\n if (\n validDocumentIds &&\n (!billingDocumentType || !validDocumentIds?.includes(billingDocumentType))\n ) {\n billingDocumentType = validDocumentIds[0];\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n fiscalConditionId,\n billingDocumentType,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, fiscalConditionId: null },\n }));\n };\n\n handleBillingDocumentType = billingDocumentType => {\n const { listDocumentTypes } = this.props;\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n billingDocumentType,\n billingInfoCheckbox: false,\n },\n formErrors: {\n ...prevState.formErrors,\n billingDocumentType: '',\n fiscalConditionId: null,\n },\n sampleDocFormat: getDocumentSample(listDocumentTypes, billingDocumentType),\n }));\n };\n\n handleDocumentId = documentId => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n documentId,\n billingInfoCheckbox: false,\n },\n formErrors: { ...prevState.formErrors, documentId: '' },\n }));\n };\n\n handleSubmit = e => {\n e.preventDefault();\n const paymentInfo = this.state.paymentInfo;\n this.setState({ formLoading: true });\n\n this.paymentInfoFormSchema\n .validate(paymentInfo, { abortEarly: false })\n .then(valid => {\n if (valid) this.executePayment(paymentInfo);\n })\n .catch(err => {\n this.setState({ formLoading: false });\n const formErrors = err.inner.reduce((prevErrors, currentError) => {\n return { ...prevErrors, [currentError.path]: currentError.message };\n }, {});\n window.scrollTo(0, this.formRef.current.offsetTop);\n this.setState(prevState => ({ ...prevState, formErrors }));\n });\n };\n\n executePayment = async params => {\n const {\n t,\n i18n,\n bookings,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n } = this.props;\n\n let paymentParams = this.state.paymentInfo;\n paymentParams.gatewayId = 'FISERVIPG';\n\n try {\n await this.makePayment(paymentParams);\n\n if (is_gtag_enabled(googleTagManager)) gtag_purchase(bookings.confirmation, settings);\n history.push(\n `${tlink('__Routes.paymentSuccess', t, i18n, null, settings.configurations.langConfig)}`,\n );\n } catch (error) {\n let errorMessage;\n\n if (error.response == null || error.response.data == null) {\n errorMessage = t('paymentGenericError');\n } else if (error.response.data.code === 500) {\n errorMessage = t('payBookingGatewayFailGenericError', {\n bookingId: paymentParams.bookingId,\n });\n } else if (error.response.data.code === 501) {\n errorMessage = t('payBookingRentlyFailGenericError', {\n transactionId: error.response.data.message,\n });\n }\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: errorMessage },\n );\n }\n };\n\n makePayment = paymentInfo => {\n if (this.isPayingBooking()) return payBooking(paymentInfo);\n if (this.isPayingInfraction()) return payInfraction(paymentInfo);\n };\n\n showOrderIdentifier = () => {\n const { t, bookings, settings } = this.props;\n const confirmedOrderText = settings?.paymentConfiguration?.confirmedOrderText;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n const bookingStatus = bookings.confirmation.currentStatus;\n\n if ([BookingStatus.reserved, BookingStatus.confirmed].includes(bookingStatus)) {\n return (\n tt(confirmedOrderText, t, true, { booking_id }) || t('ordenConfirmada', { booking_id })\n );\n }\n return t('orden', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n if (!this.state.paymentInfo.act) return null;\n return `ACTA ${this.state.paymentInfo.act?.toString().padStart(7, '0')}`;\n }\n };\n\n isPayingBooking = () => {\n const { bookings, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.bookingid || (bookings && bookings.confirmation);\n };\n\n isPayingInfraction = () => {\n const { infractions, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.infractionid && parseQs.customerid && infractions && infractions.current;\n };\n\n getPayButtonText = () => {\n const { t } = this.props;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n return this.state.formLoading\n ? t('pagandoReserva', { booking_id })\n : t('pagarReserva', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n const act = this.state.paymentInfo.act?.toString().padStart(7, '0');\n return this.state.formLoading ? t('payingInfraction', { act }) : t('payInfraction', { act });\n }\n };\n\n parseToFiservMonths = months => {\n return months.map(m => m.toString().padStart(2, '0'));\n };\n\n parseToFiservYears = years => {\n return years.map(y => y.toString());\n };\n\n handleCheckboxUseContactInfoChange = checked => {\n const customer = this.getCustomerInfo();\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n billingInfoCheckbox: checked,\n disableBillingFields: checked,\n firstName: checked ? customer.firstName : prevState.paymentInfo.firstName,\n lastName: checked ? customer.lastName : prevState.paymentInfo.lastName,\n fiscalConditionId: checked\n ? customer.fiscalConditionId\n : prevState.paymentInfo.fiscalConditionId,\n billingDocumentType: checked\n ? customer.documentTypeId || 0\n : prevState.paymentInfo.billingDocumentType,\n documentId: checked ? customer.documentId : prevState.paymentInfo.documentId,\n address: checked ? customer.address : prevState.paymentInfo.address,\n addressNumber: checked\n ? customer.addressNumber || null\n : prevState.paymentInfo.addressNumber,\n addressDepartment: checked ? customer.addressDepartment || '' : '',\n zipCode: checked ? customer.zipCode : prevState.paymentInfo.zipCode,\n cellPhone: checked ? customer.cellPhone : prevState.paymentInfo.cellPhone,\n emailAddress: checked ? customer.emailAddress : prevState.paymentInfo.emailAddress,\n },\n formErrors: {\n firstName: '',\n lastName: '',\n fiscalConditionId: null,\n billingDocumentType: '',\n documentId: '',\n address: '',\n addressNumber: '',\n addressDepartment: '',\n zipCode: '',\n cellPhone: '',\n emailAddress: '',\n },\n }));\n };\n\n parseBillingInfoSection = () => {\n const { t, billingSubtitle, billingConditions } = this.props;\n\n return (\n <>\n <div className=\"billing-form pb-1 pt-3 payment-code\">\n <hr />\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-2\">\n <strong>{t('billingInformation.title')}</strong>\n </p>\n {billingSubtitle && <p className=\"label mb-2\">{t(billingSubtitle)}</p>}\n <CheckboxInput\n onChange={this.handleCheckboxUseContactInfoChange}\n checked={this.state.paymentInfo.billingInfoCheckbox}\n text={<p className=\"mb-1\">{t('billingInformation.equalToContactInfo')}</p>}\n />\n {this.parseBillingFields()}\n </div>\n {billingConditions && <Paragraph text={billingConditions} />}\n </div>\n </>\n );\n };\n\n parseBillingFields = () => {\n const { t } = this.props;\n\n return (\n <>\n <div className=\"row\">\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('billingInformation.fields.firstName')}\n value={this.state.paymentInfo.firstName}\n error={this.state.formErrors.firstName}\n onChange={this.handleFirstName}\n options={{ autoComplete: 'billingInfo.firstName' }}\n />\n </div>\n </div>\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('billingInformation.fields.lastName')}\n value={this.state.paymentInfo.lastName}\n error={this.state.formErrors.lastName}\n onChange={this.handleLastName}\n options={{ autoComplete: 'billingInfo.lastName' }}\n />\n </div>\n </div>\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('mail')}\n value={this.state.paymentInfo.emailAddress}\n error={this.state.formErrors.emailAddress}\n onChange={this.handleEmailAddress}\n options={{ autoComplete: 'billingInfo.emailAddress' }}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('addressName')}\n value={this.state.paymentInfo.address}\n error={this.state.formErrors.address}\n onChange={this.handleAddress}\n options={{ autoComplete: 'address-line1' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('addressNumber')}\n value={this.state.paymentInfo.addressNumber}\n error={this.state.formErrors.addressNumber}\n onChange={this.handleAddressNumber}\n options={{ autoComplete: 'addressNumber' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('addressDepartment')}\n value={this.state.paymentInfo.addressDepartment}\n error={this.state.formErrors.addressDepartment}\n onChange={this.handleAddressDepartment}\n options={{ autoComplete: 'addressDepartment' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('zipCode')}\n value={this.state.paymentInfo.zipCode}\n error={this.state.formErrors.zipCode}\n onChange={this.handleZipCode}\n options={{ autoComplete: 'zipCode' }}\n />\n </div>\n </div>\n <div className={!this.state.paymentInfo.showBillingInfo ? 'col-md-4' : 'col-md-3'}>\n <div className=\"form-group\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('phone')}\n value={this.state.paymentInfo.cellPhone}\n error={this.state.formErrors.cellPhone}\n onChange={this.handleCellphone}\n options={{ autoComplete: 'tel' }}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.handleFiscalCondition}\n selected={this.state.paymentInfo.fiscalConditionId}\n options={transformFiscalConditionsToSelectOptions(this.state.fiscalConditions, t)}\n error={this.state.formErrors.fiscalConditionId}\n defaultOption={t('billingInformation.fields.fiscalCondition')}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <div className=\"form-group\">\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.handleBillingDocumentType}\n options={transformDocTypesToSelectOptions(this.props.listDocumentTypes) || []}\n selected={this.state.paymentInfo.billingDocumentType}\n error={this.state.formErrors.billingDocumentType}\n defaultOption={t('tipodocumento')}\n />\n </div>\n </div>\n <div className=\"col-md-3\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('billingInformation.fields.document')}\n value={this.state.paymentInfo.documentId}\n error={this.state.formErrors.documentId}\n onChange={this.handleDocumentId}\n options={{ autoComplete: 'document' }}\n legend={\n this.state.sampleDocFormat\n ? t('billingInformation.fields.formatExpected', {\n format_expected: this.state.sampleDocFormat,\n })\n : null\n }\n />\n </div>\n </div>\n </>\n );\n };\n\n getCustomerInfo = () => {\n if (this.isPayingBooking()) return this.props.bookings.confirmation.customer;\n if (this.isPayingInfraction() && this.props.infractions.current) {\n return this.props.infractions.current.booking\n ? this.props.infractions.current.booking.customer\n : {};\n }\n };\n\n render() {\n const {\n t,\n title,\n subtitle,\n script,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n } = this.props;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const showExchangeMsg = applyExchangeRate;\n\n let returnFinalPriceOnly = true;\n\n let totalToPay = this.showTotalToPay(returnFinalPriceOnly);\n if (applyExchangeRate)\n totalToPay = getPriceWithExchangeRate(\n totalToPay,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n\n return (\n <StyledFiservIpgSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"col-md-12 p-0 LogosContainer\">\n <img\n width=\"60\"\n height=\"60\"\n className=\"mr-4\"\n src=\"/images/ssl.jpg\"\n alt={t('CertificadoSSL')}\n />\n <div className=\"SecureLogoContainer\">\n <div className=\"LogoContainer\">\n <VerifiedUserOutlinedIcon />\n </div>\n <div>\n <Typography variant=\"body1\" className=\"CompraTitle\">\n {t('CompraSegura')}\n </Typography>\n <Typography variant=\"body1\"> {t('SafeTransactionsSite')}</Typography>\n </div>\n </div>\n </div>\n <div className=\"adicionales-block pb-1 pt-3 payment-code\">\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-1\">\n <strong>{this.showOrderIdentifier()}</strong>\n </p>\n <p>\n <strong>\n {t('totalToPay')} {this.showTotalToPay()}\n </strong>\n </p>\n <hr />\n <PartialPayWarning />\n </div>\n {showExchangeMsg && (\n <Paragraph className=\"rent-days mb-0 mt-2\" color={'red'}>\n <strong>{`${t('chargedPaymentMsg')} ${\n currentCurrency?.isoCode\n } ${totalToPay.toFixed(2)} `}</strong>\n </Paragraph>\n )}\n </div>\n <div className=\"row adicionales-block mb-5 pt-3\">\n <div className=\"col-md-10 form-pago\">\n <form id=\"fiserv-form\" onSubmit={this.handleSubmit} ref={this.formRef}>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('numeroTarjeta')}</span>\n <TextInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleCardNumber}\n value={this.state.paymentInfo.cardNumber}\n icon={this.state.cardIcon}\n error={this.state.formErrors.cardNumber}\n options={{ 'data-decidir': 'card_number' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('codigo')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleSecCode}\n value={this.state.paymentInfo.secCode}\n error={this.state.formErrors.secCode}\n options={{ 'data-decidir': 'security_code' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('mes')}</span>\n <SelectInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleMonth}\n selected={this.state.paymentInfo.month}\n error={this.state.formErrors.month}\n props={{ 'data-decidir': 'card_expiration_month' }}\n options={this.parseToFiservMonths(this.months)}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('año')}</span>\n <SelectInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleYear}\n error={this.state.formErrors.year}\n selected={this.state.paymentInfo.year}\n props={{ 'data-decidir': 'card_expiration_year' }}\n options={this.parseToFiservYears(this.years)}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('titular')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleCardholderName}\n value={this.state.paymentInfo.cardholderName}\n options={{ 'data-decidir': 'card_holder_name' }}\n error={this.state.formErrors.cardholderName}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('tipodocumento')}</span>\n <SelectInput\n inputClass=\"form-control\"\n onChange={this.handleDocumentType}\n selected={this.state.paymentInfo.documentType}\n options={this.state.documents}\n props={{ 'data-checkout': 'card_holder_doc_type' }}\n error={this.state.formErrors.documentType}\n />\n </div>\n </div>\n <div className=\"col-md-4\">\n <div className=\"form-group\">\n <span className=\"label\">{t('documento')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleDocument}\n value={this.state.paymentInfo.document}\n options={{ 'data-decidir': 'card_holder_doc_number' }}\n error={this.state.formErrors.document}\n />\n </div>\n </div>\n </div>\n {this.state.paymentInfo.showBillingInfo && this.parseBillingInfoSection()}\n <div className=\"row\">\n <div className=\"col-md-12 mb-4\">\n <Btn\n type=\"submit\"\n text={this.getPayButtonText()}\n disabled={this.state.formLoading}\n className=\"mt-5 fiserv-pay_button\"\n />\n </div>\n <div className=\"logo-container\">\n <span>{t('providedBy')}</span>\n <img\n width=\"151\"\n height=\"52\"\n className=\"fiserv-logo\"\n src=\"/images/payments/fiservipg-img.png\"\n alt=\"Fiserv\"\n />\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n <ScriptTagComponent url={script} loadLibrary={true} async={true} />\n </StyledFiservIpgSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, infractions, siteConfiguration, global }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n listDocumentTypes: global.listDocumentTypes,\n listTaxPayerTypes: global.listTaxPayerTypes,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n});\nexport default connect(mapStateToProps, { fetchDocumentTypes, fetchFiscalConditions })(\n withRouter(withTranslation()(FiservIpgSection)),\n);\n","import FiservIpgSection from './FiservIpgSection';\nexport default FiservIpgSection;\n","import { useLayoutEffect, useRef } from \"react\";\nimport * as React from 'react'\nimport {\n Btn,\n} from 'components/';\n\nconst PoyntCollect = ({ url, businessId, applicationId, onSuccess, getPayButtonText }) => {\n const collect = useRef();\n\n const onSubmit = () => {\n collect.current.getNonce({});\n };\n\n useLayoutEffect(() => {\n const poyntCollect = document.createElement(\"script\");\n // poyntCollect.src = \"https://cdn.poynt.net/ote/collect-ote.js\"; //staging\n // poyntCollect.src = \"https://cdn.poynt.net/ci/collect-ci.js\"; //develop\n // poyntCollect.src = \"https://cdn.poynt.net/collect.js\"; //prod\n poyntCollect.src = url;\n poyntCollect.async = true;\n\n const options = {\n displayComponents: {\n firstName: true,\n lastName: true,\n emailAddress: true,\n labels: true,\n },\n iFrame: {\n width: \"100%\",\n height: \"250px\",\n border: \"1px\",\n borderRadius: \"4px\",\n },\n style: {\n theme: \"default\",\n },\n locale: \"en-US\",\n fields: {\n emailAddress: \"\",\n },\n additionalFieldsToValidate: [\"firstName\", \"lastName\", \"emailAddress\"],\n customCss: {\n container: {\n \"color\": \"#111\",\n \"font-family\": \"Roboto, sans-serif\",\n \"height\": \"auto\",\n \"flex-flow\": \"row wrap\",\n \"justify-content\": \"normal\",\n \"align-content\": \"center\",\n \"margin\": \"0 auto\",\n },\n inputDefault: {\n \"color\": \"#111\",\n \"font-family\": \"Roboto, sans-serif\",\n \"font-size\": \"15px\",\n \"line-height\": \"20px\",\n },\n rowFirstName: {\n \"width\": \"50%\"\n },\n rowLastName: {\n \"width\": \"50%\"\n },\n rowCardNumber: {\n \"width\": \"50%\"\n },\n rowExpiration: {\n \"width\": \"25%\"\n },\n rowCVV: {\n \"width\": \"25%\"\n },\n rowEmailAddress: {\n \"width\": \"100%\"\n }\n },\n };\n\n poyntCollect.onload = () => {\n // collect.current = new window.TokenizeJs(\n // '38684928-b670-47f8-aec0-03382a9cd593', // Business ID\n // \"urn:aid:12315d2f-6235-40a0-a5cd-634250845540\", //Application ID\n // );\n\n collect.current = new window.TokenizeJs(\n businessId,\n applicationId,\n );\n\n collect.current.mount(\"card-element\", document, options);\n\n collect.current.on(\"ready\", event => {\n console.log(\"collect ready\");\n });\n\n collect.current.on(\"nonce\", event => {\n console.log(\"collect nonce\", event);\n onSuccess(event.data.nonce);\n });\n\n collect.current.on(\"error\", event => {\n console.log(\"collect error\", event);\n if (event.data.error.source == \"submit\") {\n alert(event.data.error.message);\n }\n });\n };\n\n document.head.appendChild(poyntCollect);\n\n return () => {\n collect.current.unmount(\"card-element\", document);\n collect.current = null;\n }\n }, []);\n\n return (\n <>\n <div id=\"card-element\"></div>\n <Btn\n id=\"submit\"\n type=\"submit\"\n text={getPayButtonText()}\n className=\"ml-2 poynt-pay_button\"\n onClick={onSubmit}\n />\n </>\n )\n};\n\nexport default PoyntCollect;\n","import style from 'styled-components';\n\nexport const StyledPoyntSection = style.section`\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n .mp-inputs {\n height: 38px;\n border: 1px solid #ced4da;\n padding: 5px 10px;\n display: flex;\n align-items: center;\n\n & > div {\n height: 38px;\n }\n\n i {\n margin-right: 10px;\n }\n }\n\n .error {\n width: 100%;\n padding-left: 10px;\n color: #FF4A4A;\n font-style: italic;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n`;\n","import React from 'react';\nimport { Title, Paragraph } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { StyledPoyntSection } from './PoyntSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { tt, tlink } from 'utils/translationHelper';\nimport queryString from 'query-string';\nimport PoyntCollect from './PoyntCollect';\nimport { history } from '/store';\nimport { payBooking, payInfraction } from 'services/api';\nimport { BookingStatus } from '../../../utils/constants';\nimport { Typography } from '@material-ui/core';\nimport VerifiedUserOutlinedIcon from '@material-ui/icons/VerifiedUserOutlined';\nimport {\n is_gtag_enabled,\n gtag_checkout_process,\n gtag_checkout_option,\n gtag_purchase,\n} from '../../../utils/googleTagsHelper';\nimport BasePaymentSection from '../basePaymentComponent/BasePaymentSection';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\n\nimport { fetchFiscalConditions } from '../../../actions/global.actions';\nimport PartialPayWarning from '../partialPayWarning';\n\nclass PoyntSection extends BasePaymentSection {\n constructor(props) {\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n qsamount: 0,\n bookingId: '0',\n infractionId: '0',\n customerId: '0',\n act: '',\n branchOfficeId: 0,\n promotionId: '',\n currencyCode: '',\n exchangeRate: 1,\n },\n dolarPrice: 0,\n exchangeRate: 1,\n fiscalConditions: [],\n };\n }\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n } catch {}\n }\n }\n\n async componentDidMount() {\n const {\n location,\n bookings,\n infractions,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n fetchFiscalConditions,\n listTaxPayerTypes,\n i18n,\n defaultCurrency,\n } = this.props;\n const parseQs = queryString.parse(location.search);\n\n const tenantFiscalConditions =\n listTaxPayerTypes || (await fetchFiscalConditions(i18n.language))?.payload;\n\n this.setState(prevState => ({\n ...prevState,\n fiscalConditions: tenantFiscalConditions,\n }));\n\n if (this.isPayingBooking() && bookings.confirmation != null) {\n if (is_gtag_enabled(googleTagManager)) {\n gtag_checkout_process(\n { number: 3, option: 'Online Payment' },\n bookings.confirmation,\n settings,\n );\n gtag_checkout_option({ number: 3, option: 'Poynt' });\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(),\n bookingId: bookings.confirmation.id,\n email: bookings.confirmation.customer.emailAddress,\n customerId: bookings.confirmation.customer.id,\n branchOfficeId: bookings.confirmation.deliveryPlace.branchOfficeId,\n promotionId: parseQs.promotionid || null,\n currencyCode: bookings.confirmation.currency,\n exchangeRate: 1,\n },\n }));\n }\n\n if (this.isPayingInfraction() && parseQs.customerid) {\n const infraction = infractions.current;\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getInfractionTotalToPay(),\n infractionId: infraction.id,\n act: infraction.act,\n customerId: parseQs.customerid,\n branchOfficeId: infraction.booking?.deliveryPlace?.branchOfficeId || null,\n currencyCode: infraction.booking?.currency || defaultCurrency.isoCode, // TODO: get currency in infraction object\n exchangeRate: 1,\n },\n }));\n }\n }\n\n getInfractionTotalToPay() {\n const { infractions } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n const infraction = infractions.current;\n if (qsamount && Math.abs(infraction.amount) >= qsamount) {\n return Math.abs(qsamount);\n } else {\n return infraction.amount;\n }\n }\n\n currencyConversion = () => {\n const { listCurrencies, settings, generalSettings } = this.props;\n\n const webCurrency = settings.currency ? settings.currency.symbol : null;\n const currencies = listCurrencies;\n const defaultCurrency = currencies.find(currency => currency.isSystemDefault === true);\n const dolarRate = currencies.find(currency => currency.symbol === 'USD');\n\n if (\n webCurrency != undefined &&\n webCurrency !== 'USD' &&\n defaultCurrency.symbol !== 'USD' &&\n dolarRate != null\n ) {\n const numberOfDecimals =\n generalSettings && generalSettings.cashBoxConfiguration\n ? generalSettings.cashBoxConfiguration.numberOfDecimals\n : 0;\n let convertedPrice = Math.round(this.state.paymentInfo.price * dolarRate.exchangeRate);\n\n if (numberOfDecimals == 1)\n convertedPrice =\n Math.round(this.state.paymentInfo.price * dolarRate.exchangeRate * 10) / 10;\n else if (numberOfDecimals == 2)\n convertedPrice =\n Math.round(this.state.paymentInfo.price * dolarRate.exchangeRate * 100) / 100;\n else if (numberOfDecimals > 2)\n convertedPrice =\n Math.round(this.state.paymentInfo.price * dolarRate.exchangeRate * 1000) / 1000;\n\n const exchangeRate =\n Math.round((this.state.paymentInfo.price / convertedPrice) * 10000) / 10000;\n this.setState(() => ({\n dolarPrice: convertedPrice,\n exchangeRate: dolarRate.exchangeRate == 1 ? dolarRate.exchangeRate : exchangeRate,\n }));\n }\n };\n\n onSuccess = async paymentNonce => {\n const {\n t,\n i18n,\n bookings,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n } = this.props;\n //const { dolarPrice, exchangeRate } = this.state;\n\n let paymentInfo = this.state.paymentInfo;\n paymentInfo.token = paymentNonce;\n paymentInfo.gatewayId = 'POYNT';\n // paymentInfo.price = dolarPrice || paymentInfo.price;\n paymentInfo.price = paymentInfo.price;\n\n try {\n const res = await this.executePayment(paymentInfo);\n let subtitle;\n if (res.bookingId !== 0)\n subtitle = t('feedbackBoxMessages.book.successSubtitle', {\n booking_id: res.bookingId,\n });\n\n if (is_gtag_enabled(googleTagManager)) gtag_purchase(bookings.confirmation, settings);\n history.push(\n `${tlink('__Routes.paymentSuccess', t, i18n, null, settings.configurations.langConfig)}`,\n { subtitle },\n );\n } catch (error) {\n let messageObject = {};\n let hereLink;\n const errorData = error.config.data ? JSON.parse(error.config.data) : null;\n\n if (this.isPayingBooking()) {\n messageObject['subtitle'] = t('feedbackBoxMessages.pay.failButConfirmed', {\n booking_id: errorData.bookingId,\n });\n hereLink = tlink(\n '__Routes.onlinePayment',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n { bookingid: errorData.bookingId },\n );\n }\n\n if (this.isPayingInfraction()) {\n hereLink = tlink(\n '__Routes.onlinePayment',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n {\n infractionid: errorData.infractionId,\n customerid: errorData.customerId,\n },\n );\n }\n\n messageObject['buttonInfo'] = { text: t('tryAgain'), link_to: hereLink };\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n messageObject,\n );\n }\n };\n\n executePayment = paymentInfo => {\n if (this.isPayingBooking()) return payBooking(paymentInfo);\n if (this.isPayingInfraction()) return payInfraction(paymentInfo);\n };\n\n showOrderIdentifier = () => {\n const { t, bookings, settings } = this.props;\n const confirmedOrderText = settings?.paymentConfiguration?.confirmedOrderText;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n const bookingStatus = bookings.confirmation.currentStatus;\n\n if ([BookingStatus.reserved, BookingStatus.confirmed].includes(bookingStatus)) {\n return (\n tt(confirmedOrderText, t, true, { booking_id }) || t('ordenConfirmada', { booking_id })\n );\n }\n\n return t('orden', { booking_id });\n }\n\n if (this.isPayingInfraction())\n return `ACTA ${this.state.paymentInfo.act?.toString().padStart(7, '0')}`;\n };\n\n isPayingBooking = () => {\n const { bookings, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.bookingid || (bookings && bookings.confirmation);\n };\n\n isPayingInfraction = () => {\n const { infractions, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.infractionid && parseQs.customerid && infractions && infractions.current;\n };\n\n getPayButtonText = () => {\n const { t } = this.props;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n return this.state.formLoading\n ? t('pagandoReserva', { booking_id })\n : t('pagarReserva', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n const act = this.state.paymentInfo.act?.toString().padStart(7, '0');\n return this.state.formLoading ? t('payingInfraction', { act }) : t('payInfraction', { act });\n }\n };\n\n render() {\n const {\n t,\n title,\n subtitle,\n script,\n credentials,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n } = this.props;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const showExchangeMsg = applyExchangeRate;\n\n let returnFinalPriceOnly = true;\n\n let totalToPay = this.showTotalToPay(returnFinalPriceOnly);\n if (applyExchangeRate)\n totalToPay = getPriceWithExchangeRate(\n totalToPay,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n\n const { paymentInfo, dolarPrice } = this.state;\n\n const { i18n } = this.props;\n const lang = i18n.language.toUpperCase();\n\n if (!credentials) return null;\n\n return (\n <StyledPoyntSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"col-md-12 p-0 LogosContainer\">\n <img\n width=\"60\"\n height=\"60\"\n className=\"mr-4\"\n src=\"/images/ssl.jpg\"\n alt={t('CertificadoSSL')}\n />\n <div className=\"SecureLogoContainer\">\n <div className=\"LogoContainer\">\n <VerifiedUserOutlinedIcon />\n </div>\n <div>\n <Typography variant=\"body1\" className=\"CompraTitle\">\n {t('CompraSegura')}\n </Typography>\n <Typography variant=\"body1\"> {t('SafeTransactionsSite')}</Typography>\n </div>\n </div>\n </div>\n <div className=\"adicionales-block pb-1 pt-3 payment-code\">\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-1\">\n <strong>{this.showOrderIdentifier()}</strong>\n </p>\n <p>\n <strong>\n {t('totalToPay')} {this.showTotalToPay()}\n </strong>\n </p>\n <hr />\n <PartialPayWarning />\n </div>\n {showExchangeMsg && (\n <Paragraph className=\"rent-days mb-0 mt-2\" color={'red'}>\n <strong>{`${t('chargedPaymentMsg')} ${\n currentCurrency?.isoCode\n } ${totalToPay.toFixed(2)} `}</strong>\n </Paragraph>\n )}\n </div>\n <div className=\"row adicionales-block mb-5 pt-3\">\n <div className=\"col-md-10 form-pago\">\n <PoyntCollect\n url={script}\n businessId={credentials.businessId}\n applicationId={credentials.applicationId}\n onSuccess={this.onSuccess}\n getPayButtonText={this.getPayButtonText}\n />\n </div>\n </div>\n </div>\n </StyledPoyntSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, infractions, siteConfiguration, global }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n listCurrencies: global.listCurrencies,\n generalSettings: global.generalSettings,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n listTaxPayerTypes: global.listTaxPayerTypes,\n});\nexport default connect(mapStateToProps, { fetchFiscalConditions })(\n withRouter(withTranslation()(PoyntSection)),\n);\n","import style from 'styled-components';\n\nexport const StyledCecabankSection = style.section`\n\n .alert {\n width: fit-content;\n }\n \n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n`;\n\nexport const LoadingWrapperStyled = style.div`\n text-align: center;\n\n p{\n margin-bottom: 20px;\n }\n\n a {\n transition: all 0.4s;\n cursor: pointer;\n text-align: center;\n margin: 40px auto;\n }\n\n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg} !important; }\n\n .error{\n font-size:90px;\n margin: 40px auto;\n text-align: center;\n }\n`;\n","import React from 'react';\nimport { Title, Btn, Paragraph } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { StyledCecabankSection } from './CecabankSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { tt, tlink } from 'utils/translationHelper';\nimport queryString from 'query-string';\nimport { history } from '/store';\nimport { getCecabankTransUri } from 'services/api';\nimport Storage from 'utils/storage';\nimport { Typography } from '@material-ui/core';\nimport VerifiedUserOutlinedIcon from '@material-ui/icons/VerifiedUserOutlined';\n\nimport {\n is_gtag_enabled,\n gtag_checkout_process,\n gtag_checkout_option,\n} from '../../../utils/googleTagsHelper';\nimport BasePaymentSection from '../basePaymentComponent/BasePaymentSection';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\nimport PartialPayWarning from '../partialPayWarning';\n\nclass CecabankSection extends BasePaymentSection {\n constructor(props) {\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n qsamount: 0,\n bookingId: '0',\n currencyCode: '',\n exchangeRate: 1,\n branchOfficeId: 0,\n },\n formLoading: false,\n transactionLoading: true,\n url: null,\n merchantID: null,\n acquirerBIN: null,\n terminalID: null,\n urlOK: null,\n urlNOK: null,\n sign: null,\n operationNumber: null,\n amount: null,\n currencyCode: null,\n };\n }\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n } catch {}\n }\n }\n\n async componentDidMount() {\n const {\n bookings,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n defaultCurrency,\n } = this.props;\n\n if (bookings.confirmation != null) {\n // If the currency is not the system currency and there's an exchange rate\n // use that\n if (bookings.confirmation.currency !== defaultCurrency.isoCode) {\n bookings.confirmation.balance =\n bookings.confirmation.balance * bookings.confirmation.exchangeRate;\n bookings.confirmation.currency = defaultCurrency.isoCode;\n }\n\n if (is_gtag_enabled(googleTagManager)) {\n gtag_checkout_process(\n { number: 3, option: 'Online Payment' },\n bookings.confirmation,\n settings,\n );\n gtag_checkout_option({ number: 3, option: 'Cecabank' });\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(bookings.confirmation.customerBalance % 1 === 0),\n bookingId: bookings.confirmation.id,\n email: bookings.confirmation.customer.emailAddress,\n currencyCode: bookings.confirmation.currency,\n branchOfficeId: bookings.confirmation.branchOfficeId,\n exchangeRate: 1,\n },\n }));\n this.GetTransactionURL();\n }\n }\n\n GetTransactionURL = () => {\n const { t, i18n, bookings, settings } = this.props;\n getCecabankTransUri(\n bookings.confirmation.branchOfficeId,\n bookings.confirmation.id,\n this.getTotalToPay(bookings.confirmation.customerBalance % 1 === 0),\n bookings.confirmation.currency,\n )\n .then(res => {\n Storage.setElement('cecabankoperationnumber', res.data.operationNumber);\n Storage.setElement(\n 'cecabankprice',\n this.getTotalToPay(bookings.confirmation.customerBalance % 1 === 0),\n );\n this.setState(prevState => ({\n ...prevState,\n url: res.data.urlAction,\n transactionLoading: false,\n merchantID: res.data.merchantID,\n acquirerBIN: res.data.acquirerBIN,\n terminalID: res.data.terminalID,\n urlOK: res.data.urlOK,\n urlNOK: res.data.urlNOK,\n sign: res.data.sign,\n operationNumber: res.data.operationNumber,\n amount: res.data.amount,\n currencyCode: res.data.currency,\n }));\n })\n .catch(error => {\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: t('paymentGenericError') },\n );\n });\n };\n\n render() {\n const { t, title, subtitle, currentCurrency, defaultCurrency, webCurrency } = this.props;\n let returnFinalPriceOnly = true;\n const { paymentInfo } = this.state;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n const showExchangeMsg = applyExchangeRate;\n\n let totalToPay = this.showTotalToPay(returnFinalPriceOnly);\n if (applyExchangeRate)\n totalToPay = getPriceWithExchangeRate(\n totalToPay,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n\n return (\n <StyledCecabankSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"col-md-12 p-0\">\n <img\n width=\"60\"\n height=\"60\"\n className=\"mr-4\"\n src=\"/images/ssl.jpg\"\n alt={t('CertificadoSSL')}\n />\n <div className=\"SecureLogoContainer\">\n <div className=\"LogoContainer\">\n <VerifiedUserOutlinedIcon />\n </div>\n <div>\n <Typography variant=\"body1\" className=\"CompraTitle\">\n {t('CompraSegura')}\n </Typography>\n <Typography variant=\"body1\"> {t('SafeTransactionsSite')}</Typography>\n </div>\n </div>\n </div>\n <div className=\"adicionales-block pb-1 pt-3 payment-code\">\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-1\">\n {t('orden')} {paymentInfo.bookingId.toString().padStart(7, '0')}\n </p>\n <p>\n <strong>\n {t('totalToPay')} {this.showTotalToPay()}\n </strong>\n </p>\n <hr />\n <PartialPayWarning />\n </div>\n {showExchangeMsg && (\n <Paragraph className=\"rent-days mb-0 mt-2\" color={'red'}>\n <strong>{`${t('chargedPaymentMsg')} ${\n currentCurrency?.isoCode\n } ${totalToPay.toFixed(2)} `}</strong>\n </Paragraph>\n )}\n </div>\n <div className=\"row adicionales-block mb-5 pt-3\">\n <div className=\"col-md-10 form-pago\">\n <form\n action={this.state.url}\n method=\"post\"\n encType=\"application/x-www-form-urlencoded\"\n >\n <input type=\"hidden\" name=\"MerchantID\" value={this.state.merchantID} />\n <input type=\"hidden\" name=\"AcquirerBIN\" value={this.state.acquirerBIN} />\n <input type=\"hidden\" name=\"TerminalID\" value={this.state.terminalID} />\n <input type=\"hidden\" name=\"URL_OK\" value={this.state.urlOK} />\n <input type=\"hidden\" name=\"URL_NOK\" value={this.state.urlNOK} />\n <input type=\"hidden\" name=\"Firma\" value={this.state.sign} />\n <input type=\"hidden\" name=\"Cifrado\" value=\"SHA2\" />\n <input type=\"hidden\" name=\"Num_operacion\" value={this.state.operationNumber} />\n <input type=\"hidden\" name=\"Importe\" value={this.state.amount} />\n <input type=\"hidden\" name=\"TipoMoneda\" value={this.state.currencyCode} />\n <input type=\"hidden\" name=\"Exponente\" value=\"2\" />\n <input type=\"hidden\" name=\"Pago_soportado\" value=\"SSL\" />\n <input type=\"hidden\" name=\"Idioma\" value=\"1\" />\n <input type=\"hidden\" name=\"datos_acs_20\" value=\"\" />\n <input type=\"hidden\" name=\"firma_acs_20\" value=\"\" />\n <Btn\n type=\"submit\"\n name=\"btnSubmit\"\n text={\n this.state.formLoading || this.state.transactionLoading\n ? t('loadingTransbank')\n : t('transbankBtn')\n }\n disabled={this.state.formLoading || this.state.transactionLoading}\n className=\"mt-5 cecabank-pay_button\"\n />\n </form>\n </div>\n </div>\n </div>\n </StyledCecabankSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, siteConfiguration, global }) => ({\n bookings: bookings,\n settings: siteConfiguration.settings,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(CecabankSection)));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { LoadingWrapperStyled } from './CecabankSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { CustomLoading } from 'components/';\nimport { tlink } from 'utils/translationHelper';\nimport queryString from 'query-string';\nimport { history } from '/store';\nimport { payBooking, getBooking } from 'services/api';\nimport Storage from 'utils/storage';\nimport { is_gtag_enabled, gtag_purchase } from '../../../utils/googleTagsHelper';\n\nclass CecabankSuccess extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n bookingId: '0',\n },\n };\n }\n\n async componentDidMount() {\n const {\n location,\n t,\n i18n,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n } = this.props;\n\n const parseQs = queryString.parse(location.search);\n if (parseQs.bookingid) {\n const operationnumber =\n parseQs.operationnumber || Storage.getElement('cecabankoperationnumber');\n const price = parseQs.amount || Storage.getElement('cecabankprice');\n try {\n await payBooking({\n bookingId: parseQs.bookingid,\n gatewayId: 'CECABANK',\n orderID: operationnumber,\n price: price,\n });\n\n if (is_gtag_enabled(googleTagManager)) {\n const booking = await getBooking(null, parseQs.bookingid);\n if (booking && booking.data) gtag_purchase(booking.data, settings);\n }\n history.push(\n `${tlink('__Routes.paymentSuccess', t, i18n, null, settings.configurations.langConfig)}`,\n );\n } catch (error) {\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: t('payBookingGatewayFailGenericError', { bookingId: parseQs.bookingid }) },\n );\n }\n } else {\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n {\n error: t('paymentGenericError'),\n },\n );\n }\n }\n\n render() {\n const { t, loadingGif, loadingMessage } = this.props;\n return (\n <LoadingWrapperStyled className=\"col-md-12\">\n <CustomLoading\n loadingGif={loadingGif || t('loadingGif')}\n loadingMessage={loadingMessage}\n ></CustomLoading>\n </LoadingWrapperStyled>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(CecabankSuccess)));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { LoadingWrapperStyled } from './CecabankSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { CustomLoading } from 'components/';\nimport { tlink } from 'utils/translationHelper';\nimport queryString from 'query-string';\nimport { history } from '/store';\n\nclass CecabankFail extends React.Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n async componentDidMount() {\n const {\n location,\n t,\n i18n,\n settings,\n } = this.props;\n\n const parseQs = queryString.parse(location.search);\n if (parseQs.bookingid) {\n let errorMessage;\n errorMessage = t('payBookingGatewayFailGenericError', {\n bookingId: parseQs.bookingid,\n });\n\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: errorMessage },\n );\n } else {\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n {\n error: t('paymentGenericError'),\n },\n );\n }\n }\n\n render() {\n const { t, loadingGif, loadingMessage } = this.props;\n\n return (\n <LoadingWrapperStyled className=\"col-md-12\">\n <CustomLoading\n loadingGif={loadingGif || t('loadingGif')}\n loadingMessage={loadingMessage}\n ></CustomLoading>\n </LoadingWrapperStyled>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(CecabankFail)));\n","import style from 'styled-components';\n\nexport const StyledGeniusSection = style.section`\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .error {\n width: 100%;\n padding-left: 10px;\n color: #FF4A4A;\n font-style: italic;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n .logo-container{\n img.genius-logo {\n margin-left: 1rem;\n }\n }\n \n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n\n .hidden {\n display: none;\n }\n\n`;\n","import React from 'react';\nimport { Title, TextInput, SelectInput, Btn, ScriptTagComponent } from 'components/';\nimport { connect } from 'react-redux';\nimport { history } from '/store';\nimport { withRouter } from 'react-router-dom';\nimport { StyledGeniusSection } from './GeniusSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { tt, tlink } from '../../../utils/translationHelper';\nimport queryString from 'query-string';\nimport * as yup from 'yup';\nimport { payBooking, payInfraction } from 'services/api';\nimport { BookingStatus } from '../../../utils/constants';\nimport { Typography } from '@material-ui/core';\n\nimport VerifiedUserOutlinedIcon from '@material-ui/icons/VerifiedUserOutlined';\n\nimport {\n is_gtag_enabled,\n gtag_checkout_process,\n gtag_checkout_option,\n gtag_purchase,\n} from '../../../utils/googleTagsHelper';\nimport BasePaymentSection from '../basePaymentComponent/BasePaymentSection';\nimport PartialPayWarning from '../partialPayWarning';\n\nvar CreditCardValidator = require('card-validator');\n\nclass GeniusSection extends BasePaymentSection {\n constructor(props) {\n const { t, withBillingInformation } = props;\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n bookingId: '0',\n qsamount: 0,\n infractionId: '0',\n customerId: '0',\n act: '',\n branchOfficeId: 0,\n promotionId: '',\n showBillingInfo: withBillingInformation !== undefined ? withBillingInformation : false,\n fiscalConditionId: null,\n currencyCode: '',\n exchangeRate: 1,\n },\n formErrors: {\n cardholderName: '',\n cardNumber: '',\n year: '',\n month: '',\n secCode: '',\n },\n cardIcon: 'far fa-credit-card',\n formLoading: false,\n };\n\n yup.addMethod(yup.number, 'isValidCreditCard', function(creditCardNumber) {\n return this.test('test-cc-number', t('cc_rejected_bad_filled_card_number'), function(\n ccNumber,\n ) {\n return CreditCardValidator.number(ccNumber).isValid;\n });\n });\n\n yup.addMethod(yup.number, 'isValidSecCode', function(secCode) {\n return this.test('test-cc-number', t('cc_rejected_bad_filled_security_code'), function(\n secCode,\n ) {\n const ccObject = CreditCardValidator.number(this.parent.cardNumber);\n if (!secCode || !ccObject.card) return false;\n\n if (ccObject.card.code.size == 4) return secCode >= 1 && secCode <= 9999;\n if (ccObject.card.code.size == 3) return secCode >= 1 && secCode <= 999;\n\n return secCode.toString().length === ccObject.card.code.size;\n });\n });\n\n this.paymentInfoFormSchema = yup.object().shape({\n cardholderName: yup.string().required(t('inputIsRequired', { field: t('titular') })),\n cardNumber: yup\n .number()\n .isValidCreditCard()\n .required(t('inputIsRequired', { field: t('numeroTarjeta') })),\n year: yup.number().required(t('inputIsRequired', { field: t('año') })),\n month: yup.number().required(t('inputIsRequired', { field: t('mes') })),\n secCode: yup\n .number()\n .isValidSecCode()\n .required(t('inputIsRequired', { field: t('codigo') })),\n });\n\n this.formRef = React.createRef(null);\n const year = new Date().getFullYear();\n this.years = Array.from(new Array(15), (val, index) => index + year);\n this.months = Array.from(new Array(12), (val, index) => index + 1);\n }\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n } catch {}\n }\n }\n\n async componentDidMount() {\n const {\n location,\n bookings,\n infractions,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n defaultCurrency,\n } = this.props;\n\n const parseQs = queryString.parse(location.search);\n\n if (this.isPayingBooking() && bookings.confirmation != null) {\n if (is_gtag_enabled(googleTagManager)) {\n gtag_checkout_process(\n { number: 3, option: 'Online Payment' },\n bookings.confirmation,\n settings,\n );\n gtag_checkout_option({ number: 3, option: 'Genius' });\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(),\n bookingId: bookings.confirmation.id,\n email: bookings.confirmation.customer.emailAddress,\n branchOfficeId: bookings.confirmation.deliveryPlace.branchOfficeId,\n promotionId: parseQs.promotionid || null,\n currencyCode: bookings.confirmation.currency,\n exchangeRate: 1,\n customerId: bookings.confirmation.customer.id,\n },\n }));\n }\n\n if (this.isPayingInfraction() && parseQs.customerid) {\n const infraction = infractions.current;\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getInfractionTotalToPay(),\n infractionId: infraction.id,\n act: infraction.act,\n customerId: parseQs.customerid,\n branchOfficeId: infraction.booking?.deliveryPlace?.branchOfficeId || null,\n currencyCode: infraction.booking?.currency || defaultCurrency.isoCode, // TODO: get currency in infraction object\n exchangeRate: 1,\n },\n }));\n }\n }\n\n getInfractionTotalToPay() {\n const { infractions } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n const infraction = infractions.current;\n if (qsamount && Math.abs(infraction.amount) >= Math.abs(qsamount)) {\n return Math.abs(qsamount);\n } else {\n return infraction.amount;\n }\n }\n\n handleCardholderName = cardholderName => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, cardholderName },\n formErrors: { ...prevState.formErrors, cardholderName: null },\n }));\n };\n\n handleCardNumber = cardNumber => {\n const ccObject = CreditCardValidator.number(cardNumber);\n const ccIcon = this.getCreditCardIcon(ccObject.card ? ccObject.card.type : '');\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n cardNumber,\n paymentMethodID: ccObject.card ? ccObject.card.type : '',\n },\n formErrors: { ...prevState.formErrors, cardNumber: null, secCode: null },\n cardIcon: ccIcon,\n }));\n };\n\n getCreditCardIcon = ccType => {\n let icon = '';\n\n switch (ccType) {\n case 'visa':\n icon = 'fab fa-cc-visa';\n break;\n case 'american-express':\n icon = 'fab fa-cc-amex';\n break;\n case 'mastercard':\n icon = 'fab fa-cc-mastercard';\n break;\n default:\n icon = 'far fa-credit-card';\n break;\n }\n\n return icon;\n };\n\n handleSecCode = secCode => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, secCode },\n formErrors: { ...prevState.formErrors, secCode: null },\n }));\n };\n\n handleMonth = month => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, month },\n formErrors: { ...prevState.formErrors, month: null },\n }));\n };\n\n handleYear = year => {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: { ...prevState.paymentInfo, year },\n formErrors: { ...prevState.formErrors, year: null },\n }));\n };\n\n handleSubmit = e => {\n e.preventDefault();\n const paymentInfo = this.state.paymentInfo;\n const { credentials } = this.props;\n this.setState({ formLoading: true });\n\n CayanCheckoutPlus.setWebApiKey(credentials.webApiKey);\n\n this.paymentInfoFormSchema\n .validate(paymentInfo, { abortEarly: false })\n .then(valid => {\n CayanCheckoutPlus.createPaymentToken({\n success: this.successCallback,\n error: this.failureCallback,\n });\n })\n .catch(err => {\n this.setState({ formLoading: false });\n\n if (err.inner) {\n const formErrors = err.inner.reduce((prevErrors, currentError) => {\n return {\n ...prevErrors,\n [currentError.path]: currentError.message,\n };\n }, {});\n this.setState(prevState => ({ ...prevState, formErrors }));\n } else {\n this.setState(prevState => ({\n ...prevState,\n formErrors: { ...prevState.formErrors, genericGeniusError: err.message },\n }));\n }\n window.scrollTo(0, this.formRef.current.offsetTop);\n });\n };\n\n successCallback = tokenResponse => {\n this.executePayment(tokenResponse.token);\n };\n\n failureCallback = tokenResponse => {\n if (tokenResponse && tokenResponse.length > 0) {\n const formErrors = tokenResponse.reduce((prevErrors, currentError) => {\n const key = this.matchErrorReason(currentError.reason);\n const message = this.matchErrorCode(currentError);\n return { ...prevErrors, [key]: message };\n }, {});\n\n return this.setState(prevState => ({ ...prevState, formErrors }));\n }\n return { ...prevErrors, genericGeniusError: 'Unhandled Error' };\n };\n\n matchErrorReason = currentErrorReason => {\n switch (currentErrorReason) {\n case 'cardnumber':\n return 'cardNumber';\n case 'cvv':\n return 'secCode';\n case 'expirationmonth':\n return 'month';\n case 'card_expiration_year':\n return 'year';\n case 'expirationyear':\n return 'year';\n default:\n return 'genericGeniusError';\n }\n };\n\n matchErrorCode = currentError => {\n switch (currentError.error_code) {\n case 'NOT_FOUND':\n return 'A required form field is missing from the page and/or could not be found.';\n case 'REQUIRED':\n return 'A required field contains an empty value.';\n case 'VALIDATION':\n return 'A field contains data that is invalid';\n case 'SERVER':\n switch (currentError.reason) {\n case 'UNEXPECTED':\n return 'An unexpected error occurred on the server and the request was not processed.';\n case 'UNAVAILABLE':\n return 'The server is currently unavailable for tokenizing payment information.';\n case 'UNAUTHORIZED':\n return 'The server rejected the Web API key supplied.';\n case 'PAYMENT_NOT_SUPPORTED':\n return 'The payment method is not supported by the merchant.';\n default:\n return 'Server error unhandled';\n }\n case 'SERVER_REQUIRED':\n return 'The server did not receive a field which is required to create a single-use token. This should not occur under normal circumstances, as all required fields are validated in the JavaScript library.';\n case 'SERVER_VALIDATION':\n return 'The server received a field which failed validation. This should not occur under normal circumstances, as all required fields are validated in the JavaScript library.';\n default:\n return 'Unhandled error';\n }\n };\n\n executePayment = async token => {\n const {\n t,\n i18n,\n bookings,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n } = this.props;\n\n let paymentParams = this.state.paymentInfo;\n paymentParams.gatewayId = 'GENIUS';\n paymentParams.orderID = this.state.paymentInfo.bookingId;\n paymentParams.token = token;\n\n try {\n const res = await this.makePayment(paymentParams);\n\n let subtitle;\n if (res.bookingId !== 0)\n subtitle = t('feedbackBoxMessages.book.successSubtitle', {\n booking_id: res.bookingId,\n });\n\n if (is_gtag_enabled(googleTagManager)) gtag_purchase(bookings.confirmation, settings);\n history.push(\n `${tlink('__Routes.paymentSuccess', t, i18n, null, settings.configurations.langConfig)}`,\n { subtitle },\n );\n } catch (error) {\n let errorMessage;\n\n if (error.response == null || error.response.data == null) {\n errorMessage = t('paymentGenericError');\n } else if (error.response.data.code === 500) {\n errorMessage = t('payBookingGatewayFailGenericError', {\n bookingId: paymentParams.bookingId,\n });\n } else if (error.response.data.code === 501) {\n errorMessage = t('payBookingRentlyFailGenericError', {\n transactionId: error.response.data.message,\n });\n }\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: errorMessage },\n );\n }\n };\n\n makePayment = paymentInfo => {\n if (this.isPayingBooking()) return payBooking(paymentInfo);\n if (this.isPayingInfraction()) return payInfraction(paymentInfo);\n };\n\n showOrderIdentifier = () => {\n const { t, bookings, settings } = this.props;\n const confirmedOrderText = settings?.paymentConfiguration?.confirmedOrderText;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n const bookingStatus = bookings.confirmation.currentStatus;\n\n if ([BookingStatus.reserved, BookingStatus.confirmed].includes(bookingStatus)) {\n return (\n tt(confirmedOrderText, t, true, { booking_id }) || t('ordenConfirmada', { booking_id })\n );\n }\n return t('orden', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n if (!this.state.paymentInfo.act) return null;\n return `ACTA ${this.state.paymentInfo.act?.toString().padStart(7, '0')}`;\n }\n };\n\n isPayingBooking = () => {\n const { bookings, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.bookingid || (bookings && bookings.confirmation);\n };\n\n isPayingInfraction = () => {\n const { infractions, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.infractionid && parseQs.customerid && infractions && infractions.current;\n };\n\n getPayButtonText = () => {\n const { t } = this.props;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n return this.state.formLoading\n ? t('pagandoReserva', { booking_id })\n : t('pagarReserva', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n const act = this.state.paymentInfo.act?.toString().padStart(7, '0');\n return this.state.formLoading ? t('payingInfraction', { act }) : t('payInfraction', { act });\n }\n };\n\n parseToGeniusMonths = months => {\n return months.map(m => m.toString().padStart(2, '0'));\n };\n\n parseToGeniusYears = years => {\n return years.map(y => y.toString().substring(2));\n };\n\n render() {\n const { t, title, subtitle, script, credentials } = this.props;\n\n if (!credentials) return null;\n\n return (\n <StyledGeniusSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"col-md-12 p-0 LogosContainer\">\n <img\n width=\"60\"\n height=\"60\"\n className=\"mr-4\"\n src=\"/images/ssl.jpg\"\n alt={t('CertificadoSSL')}\n />\n <div className=\"SecureLogoContainer\">\n <div className=\"LogoContainer\">\n <VerifiedUserOutlinedIcon />\n </div>\n <div>\n <Typography variant=\"body1\" className=\"CompraTitle\">\n {t('CompraSegura')}\n </Typography>\n <Typography variant=\"body1\"> {t('SafeTransactionsSite')}</Typography>\n </div>\n </div>\n </div>\n <div className=\"adicionales-block pb-1 pt-3 payment-code\">\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-1\">\n <strong>{this.showOrderIdentifier()}</strong>\n </p>\n <p>\n <strong>\n {t('totalToPay')} {this.showTotalToPay()}\n </strong>\n </p>\n <hr />\n <PartialPayWarning />\n </div>\n </div>\n <div className=\"row adicionales-block mb-5 pt-3\">\n <div className=\"col-md-10 form-pago\">\n <form id=\"genius-form\" onSubmit={this.handleSubmit} ref={this.formRef}>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('numeroTarjeta')}</span>\n <TextInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleCardNumber}\n value={this.state.paymentInfo.cardNumber}\n error={this.state.formErrors.cardNumber}\n icon={this.state.cardIcon}\n options={{ name: 'formcardnumber', 'data-cayan': 'cardnumber' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('codigo')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleSecCode}\n value={this.state.paymentInfo.secCode}\n error={this.state.formErrors.secCode}\n options={{ name: 'formcvv', 'data-cayan': 'cvv' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('mes')}</span>\n <SelectInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleMonth}\n selected={this.state.paymentInfo.month}\n error={this.state.formErrors.month}\n options={this.parseToGeniusMonths(this.months)}\n props={{ name: 'formexpiremonth', 'data-cayan': 'expirationmonth' }}\n />\n </div>\n </div>\n <div className=\"col-md-2\">\n <div className=\"form-group\">\n <span className=\"label\">{t('año')}</span>\n <SelectInput\n inputClass=\"form-control\"\n type=\"number\"\n onChange={this.handleYear}\n error={this.state.formErrors.year}\n selected={this.state.paymentInfo.year}\n options={this.parseToGeniusYears(this.years)}\n props={{ name: 'formexpireyear', 'data-cayan': 'expirationyear' }}\n />\n </div>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <div className=\"form-group\">\n <span className=\"label\">{t('titular')}</span>\n <TextInput\n inputClass=\"form-control\"\n onChange={this.handleCardholderName}\n value={this.state.paymentInfo.cardholderName}\n error={this.state.formErrors.cardholderName}\n />\n </div>\n </div>\n </div>\n {this.state.formErrors.genericGeniusError && (\n <div className=\"row\">\n <div className=\"col-md-12\">\n <p className=\"error\">{this.state.formErrors.genericGeniusError}</p>\n </div>\n </div>\n )}\n <div className=\"row\">\n <div className=\"col-md-12 mb-4\">\n <Btn\n type=\"submit\"\n text={this.getPayButtonText()}\n disabled={this.state.formLoading}\n className=\"mt-5 genius-pay_button\"\n />\n </div>\n <div className=\"logo-container\">\n <span>{t('providedBy')}</span>\n <img\n width=\"151\"\n height=\"52\"\n className=\"genius-logo\"\n src=\"/images/payments/global-img.png\"\n alt=\"Genius\"\n />\n </div>\n </div>\n </form>\n </div>\n <div className=\"col-md-2\">\n <ScriptTagComponent\n url={script}\n loadLibrary={true}\n async={true}\n scriptType=\"text/javascript\"\n />\n </div>\n </div>\n </div>\n </StyledGeniusSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, infractions, siteConfiguration, global }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n listDocumentTypes: global.listDocumentTypes,\n defaultCurrency: global.defaultCurrency,\n});\nexport default connect(mapStateToProps, {})(withRouter(withTranslation()(GeniusSection)));\n","import GeniusSection from './GeniusSection';\nexport default GeniusSection;\n","import style from 'styled-components';\n\nexport const StyledRedsysSection = style.section`\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .form-pago {\n height: 300px;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n .LogosContainer{\n display: flex;\n align-items: center;\n\n .SecureLogoContainer{\n display: flex;\n align-items: center;\n max-width: 279px;\n width: 100%;\n justify-content: flex-start;\n border-radius: 8px;\n border: 1px solid #2BCE81;\n background: #E1FFEB;\n margin: 1rem 0.5rem;\n color: #2BCE81;\n padding: 10px;\n\n .CompraTitle{\n font-weight: 800;\n }\n p{\n font-size: 12px;\n }\n .LogoContainer {\n margin: 0 0.5rem;\n }\n }\n }\n\n .mp-inputs {\n height: 38px;\n border: 1px solid #ced4da;\n padding: 5px 10px;\n display: flex;\n align-items: center;\n\n & > div {\n height: 38px;\n }\n\n i {\n margin-right: 10px;\n }\n }\n\n .error {\n width: 100%;\n padding-left: 10px;\n color: #FF4A4A;\n font-style: italic;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n`;\n\nexport const LoadingWrapperStyled = style.div`\n text-align: center;\n\n p{\n margin-bottom: 20px;\n }\n\n a {\n transition: all 0.4s;\n cursor: pointer;\n text-align: center;\n margin: 40px auto;\n }\n\n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg} !important; }\n\n .error{\n font-size:90px;\n margin: 40px auto;\n text-align: center;\n }\n`;\n","import React from 'react';\nimport { Title, Paragraph, Btn } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { StyledRedsysSection } from './RedsysSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { tt, tlink } from 'utils/translationHelper';\nimport queryString from 'query-string';\nimport { history } from '/store';\nimport { getRedsysInitializeRedirect } from 'services/api';\nimport { BookingStatus } from '../../../utils/constants';\nimport { Typography } from '@material-ui/core';\nimport VerifiedUserOutlinedIcon from '@material-ui/icons/VerifiedUserOutlined';\nimport {\n is_gtag_enabled,\n gtag_checkout_process,\n gtag_checkout_option,\n gtag_purchase,\n} from '../../../utils/googleTagsHelper';\nimport BasePaymentSection from '../basePaymentComponent/BasePaymentSection';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\nimport PartialPayWarning from '../partialPayWarning';\nimport Storage from 'utils/storage';\n\nclass RedsysSection extends BasePaymentSection {\n constructor(props) {\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n qsamount: 0,\n bookingId: '0',\n infractionId: '0',\n customerId: '0',\n act: '',\n branchOfficeId: 0,\n promotionId: '',\n currencyCode: '',\n exchangeRate: 1,\n },\n transactionLoading: true,\n dolarPrice: 0,\n exchangeRate: 1,\n dsMerchantParameters: '',\n dsSignatureVersion: '',\n dsSignature: '',\n };\n }\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n } catch {}\n }\n }\n\n async componentDidMount() {\n const {\n location,\n bookings,\n infractions,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n listTaxPayerTypes,\n i18n,\n defaultCurrency,\n } = this.props;\n const parseQs = queryString.parse(location.search);\n\n if (this.isPayingBooking() && bookings.confirmation != null) {\n if (is_gtag_enabled(googleTagManager)) {\n gtag_checkout_process(\n { number: 3, option: 'Online Payment' },\n bookings.confirmation,\n settings,\n );\n gtag_checkout_option({ number: 3, option: 'Poynt' });\n }\n\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(),\n bookingId: bookings.confirmation.id,\n email: bookings.confirmation.customer.emailAddress,\n customerId: bookings.confirmation.customer.id,\n customerLastName: bookings.confirmation.customer.lastName,\n branchOfficeId: bookings.confirmation.deliveryPlace.branchOfficeId,\n promotionId: parseQs.promotionid || null,\n currencyCode: bookings.confirmation.currency,\n exchangeRate: 1,\n },\n }));\n }\n\n if (this.isPayingInfraction() && parseQs.customerid) {\n const infraction = infractions.current;\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getInfractionTotalToPay(),\n infractionId: infraction.id,\n act: infraction.act,\n customerId: parseQs.customerid,\n customerLastName: 'EMPTY',\n branchOfficeId: infraction.booking?.deliveryPlace?.branchOfficeId || null,\n currencyCode: infraction.booking?.currency || defaultCurrency.isoCode,\n exchangeRate: 1,\n },\n }));\n }\n }\n\n generateOrderId() {\n let numbers = '0123456789';\n let chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n let order = '';\n\n for (let i = 0; i < 4; i++) {\n order += numbers.charAt(Math.floor(Math.random() * numbers.length));\n }\n\n for (let i = 4; i < 12; i++) {\n order += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n\n return order;\n }\n\n async getInitializeRedirect() {\n const { t, i18n, settings } = this.props;\n\n let paymentParams = this.state.paymentInfo;\n var paymentParamsCopy = {\n ...paymentParams,\n isPayingInfraction: this.isPayingInfraction() && parseQs.customerid,\n order: this.generateOrderId(),\n };\n\n if (paymentParamsCopy.price == 0) return;\n\n getRedsysInitializeRedirect(\n paymentParamsCopy.branchOfficeId,\n paymentParamsCopy.price,\n paymentParamsCopy.currencyCode,\n paymentParamsCopy.order,\n )\n .then(res => {\n Storage.setElement('redsysPaymentParams', JSON.stringify(paymentParamsCopy), false);\n this.setState(prevState => ({\n ...prevState,\n transactionLoading: false,\n dsMerchantParameters: res.data.response.dsMerchantParameters,\n dsSignatureVersion: res.data.response.dsSignatureVersion,\n dsSignature: res.data.response.dsSignature,\n }));\n })\n .catch(error => {\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: t('paymentGenericError') },\n );\n });\n }\n\n getInfractionTotalToPay() {\n const { infractions } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n const infraction = infractions.current;\n if (qsamount && Math.abs(infraction.amount) >= qsamount) {\n return Math.abs(qsamount);\n } else {\n return infraction.amount;\n }\n }\n\n showOrderIdentifier = () => {\n const { t, bookings, settings } = this.props;\n const confirmedOrderText = settings?.paymentConfiguration?.confirmedOrderText;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n const bookingStatus = bookings.confirmation.currentStatus;\n\n if ([BookingStatus.reserved, BookingStatus.confirmed].includes(bookingStatus)) {\n return (\n tt(confirmedOrderText, t, true, { booking_id }) || t('ordenConfirmada', { booking_id })\n );\n }\n\n return t('orden', { booking_id });\n }\n\n if (this.isPayingInfraction())\n return `ACTA ${this.state.paymentInfo.act?.toString().padStart(7, '0')}`;\n };\n\n isPayingBooking = () => {\n const { bookings, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.bookingid || (bookings && bookings.confirmation);\n };\n\n isPayingInfraction = () => {\n const { infractions, location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n return parseQs.infractionid && parseQs.customerid && infractions && infractions.current;\n };\n\n getPayButtonText = () => {\n const { t } = this.props;\n\n if (this.isPayingBooking()) {\n const booking_id = this.state.paymentInfo.bookingId.toString().padStart(7, '0');\n return this.state.formLoading\n ? t('pagandoReserva', { booking_id })\n : t('pagarReserva', { booking_id });\n }\n\n if (this.isPayingInfraction()) {\n const act = this.state.paymentInfo.act?.toString().padStart(7, '0');\n return this.state.formLoading ? t('payingInfraction', { act }) : t('payInfraction', { act });\n }\n };\n\n render() {\n const {\n t,\n title,\n subtitle,\n credentials,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n } = this.props;\n\n const { dsMerchantParameters, dsSignatureVersion, dsSignature } = this.state;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const showExchangeMsg = applyExchangeRate;\n\n let returnFinalPriceOnly = true;\n\n let totalToPay = this.showTotalToPay(returnFinalPriceOnly);\n if (applyExchangeRate)\n totalToPay = getPriceWithExchangeRate(\n totalToPay,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n\n if (!credentials) return null;\n\n if (!dsMerchantParameters && !dsSignatureVersion && !dsSignature) this.getInitializeRedirect();\n\n let formAction = credentials.connectionUrl + '/sis/realizarPago';\n\n return (\n <StyledRedsysSection className=\"col-md-9\">\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"col-md-12 p-0 LogosContainer\">\n <img\n width=\"60\"\n height=\"60\"\n className=\"mr-4\"\n src=\"/images/ssl.jpg\"\n alt={t('CertificadoSSL')}\n />\n <div className=\"SecureLogoContainer\">\n <div className=\"LogoContainer\">\n <VerifiedUserOutlinedIcon />\n </div>\n <div>\n <Typography variant=\"body1\" className=\"CompraTitle\">\n {t('CompraSegura')}\n </Typography>\n <Typography variant=\"body1\"> {t('SafeTransactionsSite')}</Typography>\n </div>\n </div>\n </div>\n <div className=\"adicionales-block pb-1 pt-3 payment-code\">\n <div className=\"col-md-12 p-0\">\n <p className=\"mb-1\">\n <strong>{this.showOrderIdentifier()}</strong>\n </p>\n <p>\n <strong>\n {t('totalToPay')} {this.showTotalToPay()}\n </strong>\n </p>\n <hr />\n <PartialPayWarning />\n </div>\n {showExchangeMsg && (\n <Paragraph className=\"rent-days mb-0 mt-2\" color={'red'}>\n <strong>{`${t('chargedPaymentMsg')} ${\n currentCurrency?.isoCode\n } ${totalToPay.toFixed(2)} `}</strong>\n </Paragraph>\n )}\n </div>\n <div className=\"row adicionales-block pb-3 pt-3\">\n <form name=\"from\" action={formAction} method=\"POST\">\n <input type=\"hidden\" name=\"Ds_SignatureVersion\" value={dsSignatureVersion} />\n <input type=\"hidden\" name=\"Ds_MerchantParameters\" value={dsMerchantParameters} />\n <input type=\"hidden\" name=\"Ds_Signature\" value={dsSignature} />\n <div className=\"mt-3 ml-3\">\n <Btn\n type=\"submit\"\n name=\"btnSubmit\"\n text={\n this.state.formLoading || this.state.transactionLoading\n ? t('loadingTransbank')\n : t('transbankBtn')\n }\n disabled={this.state.formLoading || this.state.transactionLoading}\n />\n <p className=\"mb-1\"> ({t('redirectRedsys')}) </p>\n </div>\n </form>\n </div>\n </div>\n </StyledRedsysSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, infractions, siteConfiguration, global }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n listCurrencies: global.listCurrencies,\n generalSettings: global.generalSettings,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n});\nexport default connect(mapStateToProps, {})(withRouter(withTranslation()(RedsysSection)));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { LoadingWrapperStyled } from './RedsysSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { CustomLoading } from 'components/';\nimport { tlink } from 'utils/translationHelper';\nimport queryString from 'query-string';\nimport { history } from '/store';\nimport {\n payBooking,\n payInfraction,\n getBooking,\n getRedsysValidateRedirectSignature,\n} from 'services/api';\nimport Storage from 'utils/storage';\nimport { is_gtag_enabled, gtag_purchase } from '../../../utils/googleTagsHelper';\n\nclass RedsysSuccess extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n bookingId: '0',\n },\n };\n }\n\n async componentDidMount() {\n const {\n location,\n t,\n i18n,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n } = this.props;\n\n const parseQs = queryString.parse(location.search);\n const storage = Storage.getElement('redsysPaymentParams', false);\n\n if (parseQs && parseQs.Ds_MerchantParameters && storage) {\n const ds_MerchantParameters = parseQs.Ds_MerchantParameters;\n const ds_Signature = parseQs.Ds_Signature;\n const ds_SignatureVersion = parseQs.Ds_SignatureVersion;\n const paymentParams = JSON.parse(storage);\n\n try {\n var response = await getRedsysValidateRedirectSignature(\n paymentParams.branchOfficeId,\n paymentParams.order,\n ds_MerchantParameters,\n ds_Signature,\n );\n\n if (response.success) {\n Storage.setElement('redsysPaymentParams', '', false); //delete storage\n\n var params = {\n gatewayId: 'REDSYS',\n bookingId: paymentParams.bookingId,\n infractionId: paymentParams.infractionId,\n price: paymentParams.price,\n currencyCode: paymentParams.currencyCode,\n exchangeRate: paymentParams.exchangeRate,\n branchOfficeId: paymentParams.branchOfficeId,\n customerId: paymentParams.customerId,\n lastName: paymentParams.customerLastName,\n orderID: paymentParams.order,\n extraData: ds_MerchantParameters,\n };\n if (paymentParams.bookingId && paymentParams.bookingId > 0) {\n await payBooking(params);\n\n if (is_gtag_enabled(googleTagManager)) {\n const booking = getBooking(null, paymentParams.bookingId);\n if (booking && booking.data) gtag_purchase(booking.data, settings);\n }\n } else {\n await payInfraction(params);\n }\n\n history.push(\n `${tlink(\n '__Routes.paymentSuccess',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n )}`,\n );\n } else {\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: response.errorCode },\n );\n }\n } catch (error) {\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n {\n error: t('payBookingGatewayFailGenericError', {\n bookingId: paymentParams.bookingId || paymentParams.infractionId,\n }),\n },\n );\n }\n }\n }\n\n render() {\n const { t, loadingGif, loadingMessage } = this.props;\n return (\n <LoadingWrapperStyled className=\"col-md-12\">\n <CustomLoading\n loadingGif={loadingGif || t('loadingGif')}\n loadingMessage={loadingMessage}\n ></CustomLoading>\n </LoadingWrapperStyled>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(RedsysSuccess)));\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { LoadingWrapperStyled } from './RedsysSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { CustomLoading } from 'components/';\nimport { tlink } from 'utils/translationHelper';\nimport queryString from 'query-string';\nimport { history } from '/store';\n\nclass RedsysFail extends React.Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n async componentDidMount() {\n const { location, t, i18n, settings } = this.props;\n\n const storage = Storage.getElement('redsysPaymentParams', false);\n\n if (storage != '') {\n const paymentParams = JSON.parse(storage);\n let errorMessage;\n errorMessage = t('payBookingGatewayFailGenericError', {\n bookingId: paymentParams.bookingId,\n });\n\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n { error: errorMessage },\n );\n } else {\n history.push(\n `${tlink('__Routes.paymentFailed', t, i18n, null, settings.configurations.langConfig)}`,\n {\n error: t('paymentGenericError'),\n },\n );\n }\n }\n\n render() {\n const { t, loadingGif, loadingMessage } = this.props;\n\n return (\n <LoadingWrapperStyled className=\"col-md-12\">\n <CustomLoading\n loadingGif={loadingGif || t('loadingGif')}\n loadingMessage={loadingMessage}\n ></CustomLoading>\n </LoadingWrapperStyled>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(RedsysFail)));\n","import style from 'styled-components';\n\nexport const StyledPaymentOptionsSection = style.section`\n\n \n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n }\n\n .payHead {\n padding-left: 25px;\n }\n\n .mr-4, .mx-4 {\n margin-right: 1.5rem!important;\n }\n\n .mt-2, .my-2 {\n margin-top: .5rem!important;\n }\n\n .mb-1, .my-1 {\n margin-bottom: .25rem!important;\n }\n\n .payment-block {\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .pt-3, .py-3 {\n padding-top: 1rem!important;\n }\n\n .pb-1, .py-1 {\n padding-bottom: .25rem!important;\n }\n\n .label {\n font-size: 12px;\n font-weight: bold;\n margin-bottom: 7px;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .quantity {\n width: 46px;\n }\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media (min-width: ${props => props.theme.screens.md}){\n -webkit-box-flex: 0;\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n margin-right: 10px;\n max-height: 100px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 4% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n \n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .quantity {\n width: 96px;\n input{\n text-align: center;\n }\n }\n }\n`;\n","import React from 'react';\nimport { Title, PaymentMethods, Btn } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport queryString from 'query-string';\nimport { StyledPaymentOptionsSection } from './PaymentOptionsSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { tt } from '../../../utils/translationHelper';\nimport { history } from '/store';\nimport * as yup from 'yup';\nimport { tlink } from 'utils/translationHelper';\nimport BasePaymentSection from '../basePaymentComponent/BasePaymentSection';\n\nclass PaymentOptionsSection extends BasePaymentSection {\n constructor(props) {\n const { t } = props;\n super(props);\n this.state = {\n paymentInfo: {\n price: 0,\n bookingId: '0',\n qsamount: 0,\n },\n userInfo: {\n paymentMethod: false,\n paymentMethodObj: null,\n },\n formErrors: {\n paymentMethod: null,\n },\n };\n\n this.userInfoFormSchema = yup.object().shape({\n paymentMethod: yup\n .boolean()\n .required(t('mustHaveOnePaymentMethod'))\n .oneOf([true], t('mustHaveOnePaymentMethod')),\n });\n\n this.formRef = React.createRef(null);\n }\n\n componentWillMount() {\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n }\n }\n\n componentDidMount() {\n const { bookings, infractions } = this.props;\n\n if (bookings.confirmation != null) {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: this.getTotalToPay(),\n bookingId: bookings.confirmation.id,\n email: bookings.confirmation.customer.emailAddress,\n },\n }));\n } else if (infractions.current != null) {\n this.setState(prevState => ({\n ...prevState,\n paymentInfo: {\n ...prevState.paymentInfo,\n price: infractions.current.amount,\n bookingId: infractions.current.act,\n email: infractions.current.booking?.customer?.emailAddress || '',\n },\n }));\n }\n }\n\n isBookingPay() {\n const { bookings } = this.props;\n return bookings.confirmation != null;\n }\n\n showIdMessage() {\n const { t } = this.props;\n return this.isBookingPay() ? t('orden') : String(t('payInfraction')).split(' - ')[0];\n }\n\n onPaymentMethodChange = (paymentMethod, paymentMethodObj) => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, paymentMethod, paymentMethodObj },\n formErrors: { ...prevState.formErrors, paymentMethod: null },\n }));\n };\n\n handleSubmit = e => {\n e.preventDefault();\n const { t, i18n, settings } = this.props;\n const userInfo = this.state.userInfo;\n\n this.userInfoFormSchema\n .validate(userInfo, { abortEarly: false })\n .then(valid => {\n history.push(\n tlink('__Routes.onlinePayment', t, i18n, null, settings.configurations.langConfig) +\n this.props.location.search,\n { paymentMethod: userInfo.paymentMethodObj.component },\n );\n window.scrollTo(0, 0);\n })\n .catch(err => {\n const formErrors = err?.inner?.reduce((prevErrors, currentError) => {\n return { ...prevErrors, [currentError.path]: currentError.message };\n }, {});\n this.setState(prevState => ({ ...prevState, formErrors }));\n });\n };\n\n render() {\n const {\n t,\n title,\n subtitle,\n settings: { paymentConfiguration },\n } = this.props;\n\n const { paymentInfo } = this.state;\n\n return (\n <StyledPaymentOptionsSection>\n <div className=\"row col-md-6\">\n <div className=\"col-md-12\">\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n </div>\n <div className=\"col-md-12\">\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n </div>\n <div className=\"payment-block\">\n <div className=\"row\">\n <div className=\"col-md-12 payHead\">\n <p>\n {this.showIdMessage()}{' '}\n {paymentInfo.bookingId ? paymentInfo.bookingId.toString().padStart(7, '0') : ''}\n </p>\n <p>\n <strong>{this.showTotalToPay()}</strong>\n </p>\n </div>\n </div>\n <div className=\"row adicionales-block mb-5\">\n <div className=\"col-md-10 form-pago\">\n <div className=\"col-md-12 mb-4\">\n <form\n id=\"bookingUserDataForm\"\n onSubmit={this.handleSubmit}\n className=\"container-fluid p-0\"\n >\n <PaymentMethods\n checked={this.state.userInfo.paymentMethod}\n error={this.state.formErrors.paymentMethod}\n onChange={this.onPaymentMethodChange}\n paymentMethods={paymentConfiguration.paymentMethods}\n booking={this.state.paymentInfo}\n />\n <Btn\n form=\"bookingUserDataForm\"\n type=\"submit\"\n text={t('payBooking')}\n className=\"mt-5\"\n />\n </form>\n </div>\n </div>\n </div>\n </div>\n </StyledPaymentOptionsSection>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, siteConfiguration, infractions }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(PaymentOptionsSection)));\n","// BookingController \"pay\" sync.\nconst MERCADO_PAGO = 'ML';\nconst PAYPAL = 'PL';\nconst TRANSBANK = 'TBANKCL';\nconst CREDOMATIC = 'BAC';\nconst PROMERICA = 'PROMERICA';\nconst PRISMA = 'PRISMA';\nconst STRIPE = 'STRIPE';\nconst POYNT = 'POYNT';\nconst GENIUS = 'GENIUS';\nconst REDSYS = 'REDSYS';\n\nexport const hasCredentials = payMethodObject => {\n if (!payMethodObject) return false;\n\n switch (payMethodObject.name) {\n case 'MPComponent':\n if (!payMethodObject.publicToken) return false;\n break;\n case 'PrismaComponent':\n if (!payMethodObject.publicToken) return false;\n break;\n case 'StripeComponent':\n if (!payMethodObject.publicApiKey) return false;\n break;\n case 'PaypalComponent':\n if (!payMethodObject.clientId) return false;\n break;\n case 'PoyntComponent':\n if (!payMethodObject.businessId && !payMethodObject.applicationId) return false;\n break;\n case 'GeniusComponent':\n if (!payMethodObject.webApiKey) return false;\n break;\n case 'RedsysComponent':\n if (!payMethodObject.connectionUrl) return false;\n break;\n default:\n return false;\n }\n\n return true;\n};\n\nexport const getPayMethodCode = payMethodObject => {\n if (!payMethodObject) return false;\n let code = '';\n\n switch (payMethodObject.name) {\n case 'MPComponent':\n code = MERCADO_PAGO;\n break;\n case 'PrismaComponent':\n code = PRISMA;\n break;\n case 'StripeComponent':\n code = STRIPE;\n break;\n case 'PaypalComponent':\n code = PAYPAL;\n break;\n case 'PoyntComponent':\n code = POYNT;\n break;\n case 'GeniusComponent':\n code = GENIUS;\n break;\n case 'RedsysComponent':\n code = REDSYS;\n break;\n }\n\n return code;\n};\n\nexport const getConfigurationObject = (payMethodObject, response) => {\n let object = {};\n\n switch (payMethodObject.name) {\n case 'MPComponent':\n object = { publicToken: response.data.publicKey };\n break;\n case 'PrismaComponent':\n object = {\n isSandbox: response.data.isSandBox,\n publicApiKey: response.data.publicApiKey,\n };\n break;\n case 'PaypalComponent':\n object = {\n isSandBox: response.data.isSandBox,\n clientId: response.data.isSandBox\n ? response.data.sandBoxCliendID\n : response.data.productionClientID,\n };\n break;\n case 'PoyntComponent':\n object = {\n businessId: response.data.businessId,\n applicationId: response.data.collectApplicationId,\n };\n break;\n case 'GeniusComponent':\n object = { webApiKey: response.data.webApiKey };\n break;\n case 'StripeComponent':\n object = { publicApiKey: response.data.publicApiKey };\n break;\n case 'RedsysComponent':\n object = { connectionUrl: response.data.connectionUrl };\n break;\n }\n\n return object;\n};\n","import OnlinePaymentSection from './OnlinePaymentSection';\nexport default OnlinePaymentSection;\n","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withTranslation } from 'react-i18next';\nimport * as Comps from 'components';\nimport * as Sects from 'sections';\nimport * as Pages from 'pages';\n\nimport { getGatewayInformation } from 'services/api';\nimport {\n hasCredentials,\n getPayMethodCode,\n getConfigurationObject,\n} from 'utils/PaymentMethodHelper';\n\nconst OnlinePaymentSection = ({ settings, history, bookings, infractions }) => {\n const [payMethodObject, setPayMethodObject] = useState(null);\n\n useEffect(() => {\n const initiate = async () => {\n const newPayMethodObject = getPayMethodConfiguration();\n const credentials = await checkForCredentials(newPayMethodObject);\n setPayMethodObject({ ...newPayMethodObject, credentials });\n };\n initiate();\n }, []);\n\n const findComponent = type => {\n let ComponentToRender = Pages[type];\n if (!ComponentToRender) ComponentToRender = Sects[type];\n if (!ComponentToRender) ComponentToRender = Comps[type];\n\n return ComponentToRender;\n };\n\n const getPayMethodConfiguration = () => {\n let payMethodObject;\n\n if (history.location.state?.paymentMethod) {\n const component = settings.sharedComponents.find(\n element => element.name === history.location.state.paymentMethod,\n );\n payMethodObject = component;\n } else {\n let paymentMethods = settings.sharedComponents.filter(\n element => element.paymentOption === true,\n );\n if (paymentMethods.length > 1) {\n payMethodObject = settings.sharedComponents.find(\n element => element.component === 'PaymentOptionsSection',\n );\n } else {\n payMethodObject = paymentMethods[0];\n }\n }\n\n return payMethodObject;\n };\n\n const checkForCredentials = async payMethodObject => {\n let branchOfficeId = null;\n\n if (bookings.confirmation) {\n branchOfficeId = bookings.confirmation.deliveryPlace.branchOfficeId;\n } else if (infractions.current) {\n branchOfficeId = infractions.current.booking?.deliveryPlace?.branchOfficeId || null;\n }\n if (bookings.confirmation && !branchOfficeId) return;\n\n const gatewayId = getPayMethodCode(payMethodObject);\n\n if (!gatewayId) return;\n\n if (!hasCredentials(payMethodObject)) {\n const response = await getGatewayInformation(branchOfficeId, gatewayId);\n if (!response.status === 200) return;\n\n const newCredentials = await getConfigurationObject(payMethodObject, response);\n\n return newCredentials;\n }\n };\n\n if (!payMethodObject) return null;\n\n const PaymentComponent = findComponent(payMethodObject.component);\n return <PaymentComponent {...payMethodObject} />;\n};\n\nconst mapStateToProps = ({ bookings, infractions, siteConfiguration }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(OnlinePaymentSection)));\n","import style from 'styled-components';\n\nexport const StyledCancelSection = style.div`\n\n margin-left: auto;\n margin-right: auto;\n h3{\n font-weight: 600;\n font-style: normal;\n font-size: 18px;\n margin-top: 10px;\n }\n\n .recaptcha {\n div {\n \n }\n }\n`;\n","import React from 'react';\nimport { CancelForm } from 'components/';\nimport { PropTypes } from 'prop-types';\nimport { StyledCancelSection } from './CancelSection.styled';\nimport { withTranslation } from 'react-i18next';\n\nclass CancelSection extends React.Component {\n static propTypes = {\n offices: PropTypes.array,\n t: PropTypes.func,\n };\n\n render() {\n return (\n <StyledCancelSection className=\"col-md-4 p-40\">\n <CancelForm />\n </StyledCancelSection>\n );\n }\n}\n\nexport default withTranslation()(CancelSection);\n","import CancelSection from './CancelSection';\nexport default CancelSection;\n","import style from 'styled-components';\n\nexport const StyledFlotaSection = style.div`\n .card{\n border: none;\n }\n\n .category-filter{\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n margin-bottom: 35px;\n }\n }\n\n .car-image-wrapper{\n img{\n height: 100%;\n object-fit: cover;\n min-height: 100%;\n }\n }\n\n .card-header{\n font-size: 12px;\n text-transform: uppercase;\n font-weight: 600;\n background: none;\n border-bottom: 1px solid rgba(0,0,0,.125) !important;\n margin-bottom:0px !important;\n cursor: pointer;\n }\n\n .card-body li{\n line-height: 2em;\n font-size: 14px;\n }\n\n .card-body li i{\n font-size: 10px;\n margin-right: 10px;\n position: relative;\n top: -1px;\n }\n\n .list-unstyled{\n cursor: pointer;\n }\n \n .slick-track{\n margin: auto auto;\n } \n\n .slick-next:before, .slick-prev:before{\n color: #ccc;\n }\n .slick-prev{\n left:-5px;\n }\n .slick-next{\n right: -5px;\n }\n\n .slick-next:before {\n content: \"\\f105\";\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n \n }\n\n .slick-prev:before {\n content: \"\\f104\" !important;\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n }\n\n`;\n\nexport const StyledFlotaGrid = style.div`\n .flex-container{\n display: flex;\n flex-wrap: wrap;\n }\n\n .nav-item{\n margin: 0 3px 10px;\n a{\n color: #6f6f6f;\n text-transform: uppercase;\n font-size: 13px;\n padding: .3rem 1rem; \n transition: background .3s; \n background: #f4f4f4;\n border-radius: 5px;\n\n &:hover, &.active{\n color: ${props => props.theme.colors.buttonPrimaryColor};\n background: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n }\n @media only screen and (max-width: ${props => props.theme.screens.lg}){\n margin: 0 8px 15px;\n\n a{\n font-size: 15px;\n }\n }\n }\n\n .car-item {\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n padding: 0 !important;\n }\n .car-details {\n .car-name h2 {\n margin-top: 0px;\n margin-bottom: 0px;\n font-size: 20px;\n white-space: nowrap;\n text-overflow: ellipsis;\n display: block;\n overflow: hidden;\n \n @media only screen and (max-width: ${props =>\n props.theme.screens.xxl}) and (min-width: ${props => props.theme.screens.xl}) {\n font-size: 18px;\n }\n }\n .btn{\n display: ${props => props.btnDisplay || 'flex'};\n }\n }\n \n .car-image {\n border: 1px solid #cbcbcb;\n height: fit-content;\n text-align: center;\n height: 170px;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n }\n\n .car-image-wrapper{\n img{\n height: 100%;\n object-fit: cover;\n min-height: 100%;\n }\n }\n \n .price p {\n font-size: 13px;\n text-transform:uppercase;\n span{\n font-weight: bold;\n font-size:15px;\n }\n strong span{\n font-size: 20px;\n }\n }\n \n .car-details {\n .details {\n margin-bottom: 5px;\n \n .details-item {\n display: inline-block;\n text-align: center;\n margin-right: 5px;\n width: 10.5%;\n min-width: 35px;\n max-width: 60px;\n \n @media only screen and (max-width: 330px) {\n width: 16%;\n }\n \n p{\n margin-bottom:0 ;\n }\n \n img {\n width: 100%;\n display: block;\n border: 1px solid #cccccc;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n }\n }\n }\n }\n \n }\n`;\n","import style from 'styled-components';\n\nexport const StyledFlotaBigItem = style.div`\n\n .flota-car-img, .car-item {\n @media only screen and (min-width: ${props => props.theme.screens.xl}){\n width: 50%;\n max-width: 50%;\n flex: 50%;\n }\n }\n\n .flota-car-img.one-slide {\n @media only screen and (min-width: ${props => props.theme.screens.xl}){\n width: 70%;\n flex: 70%;\n }\n .car-image {\n border: none!important;\n margin: 0 auto;\n padding: 0px;\n }\n }\n\n .car-image{\n border: solid 1px #C8C8C8;\n margin: 0 4%;\n padding: 4% 10%;\n\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n margin-left: 0;\n margin-right: 0;\n }\n }\n\n p{\n font-size: 12px;\n margin-bottom: 1rem;\n }\n\n .price span{\n font-weight: bold;\n }\n\n .price strong{\n font-size: 22px;\n }\n\n h2.car-name{\n font-size: 24px;\n font-weight: 700;\n margin-bottom: 5px;\n text-transform: uppercase;\n \n @media only screen and (max-width: ${props => props.theme.screens.md}){\n font-size: 16px;\n }\n }\n\n .car-category{\n font-weight: 600;\n }\n\n .car-description {\n color: #6f6f6f;\n margin-bottom: 30px;\n font-size: 12px;\n }\n\n .details{\n margin-bottom: 12px;\n }\n\n .car-item .details-item {\n display: inline-block;\n text-align: center;\n margin-right:5px;\n width: 10.5%;\n max-width: 37px;\n \n img{\n width: 100%;\n display: block;\n border: 1px solid #CCCCCC;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n }\n }\n\n .price p{\n font-size: 16px;\n }\n\n button{\n width:auto;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledFlotaBigItemModern = style.div`\nmargin-top:50px;\n\n .flota-car-img, .car-item {\n @media only screen and (min-width: ${props => props.theme.screens.xl}){\n width: 50%;\n max-width: 50%;\n flex: 50%;\n }\n }\n\n .car-image{\n border: none;\n margin: 0 4%;\n padding: 4% 10%;\n\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n margin-left: 0;\n margin-right: 0;\n }\n }\n\n p{\n font-size: 12px;\n margin-bottom: 1rem;\n }\n \n\n .details-item p{\n font-size: 12px;\n margin-bottom: 1rem;\n position:relative;\n top:10px;\n }\n\n .price span{\n font-weight: bold;\n }\n\n .price strong{\n font-size: 22px;\n }\n\n h2.car-name{\n font-size: 24px !important;\n font-weight: 700;\n margin-bottom: 5px;\n text-transform: uppercase;\n \n @media only screen and (max-width: ${props => props.theme.screens.md}){\n font-size: 16px;\n }\n }\n\n .car-category{\n font-weight: 600;\n font-size:14px;\n }\n\n .car-description {\n color: #6f6f6f;\n margin-bottom: 30px;\n font-size: 12px;\n }\n\n .details{\n margin-bottom: 12px;\n }\n\n .car-item .details-item {\n display: inline-flex;\n text-align: center;\n margin-right:20px;\n height: 100%;\n \n \n img{\n width: 100%;\n display: block;\n border: 1px solid #CCCCCC;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n }\n }\n\n .price p{\n font-size: 16px;\n }\n\n button{\n width:auto;\n padding:15px 20px;\n }\n\n`;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { props } from 'sections/home/Flota/FlotaItem/FlotaItem.props';\nimport { Btn, ModelDetail, NumberDisplay } from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport { StyledFlotaBigItem } from './FlotaBigItem.styled';\nimport { tlink } from 'utils/translationHelper';\nimport { withRouter } from 'react-router-dom';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\nimport { setSearchCarParams } from 'actions';\nimport { getSippByCategory } from '../../../utils/categoryGroupHelper';\nimport { StyledFlotaBigItemModern } from './FlotaBigItem.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\n\nclass FlotaBigItem extends React.Component {\n static propTypes = props;\n\n handleButtonClick = () => {\n const { history, bookLink, t, setSearchCarParams, model, i18n } = this.props;\n setSearchCarParams({ categories: [model.category.id] });\n\n history.push(tlink(bookLink, t, i18n, null, this.props.settings.configurations.langConfig));\n window.scrollTo(0, 0);\n };\n\n getCategoryOrGroupName = carModel => {\n const {\n showSipp,\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n if (!categoryGroups) return carModel.category.name;\n\n const categoryGroupName = getSippByCategory(categoryGroups, carModel.category).toUpperCase();\n return showSipp && carModel.sipp\n ? `${categoryGroupName} - ${carModel.sipp}`\n : categoryGroupName;\n };\n\n getCarImage = model => {\n if (model.imagePath) return model.imagePath;\n return model.category.imagePath;\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledFlotaBigItemModern;\n }\n return StyledFlotaBigItem;\n }\n\n render() {\n const {\n model,\n t,\n settings: { currency, theme, featureFlags },\n prefixForNumeric,\n oneSlide,\n showModelDetail,\n } = this.props;\n\n const StyledSection = this.getTemplateStyledComponent();\n\n return (\n <StyledSection className=\"container-fluid\">\n <div className=\"row\">\n <div className={`col-lg-7 flota-car-img ${oneSlide ? 'one-slide' : ''}`}>\n <div className=\"car-image mb-3\">\n <LazyLoadImage className=\"img-fluid\" src={this.getCarImage(model)} alt={model.name} />\n </div>\n </div>\n <div className=\"col-lg-5 car-item\">\n <h2 className=\"car-name mt-1\">\n {model.brand.name} {model.name}\n </h2>\n <p className=\"car-category\">\n {t('category')} \n <span>{this.getCategoryOrGroupName(model)}</span>\n </p>\n {theme.template !== MODERN_THEME ? (\n <>\n <ModelDetail\n model={model}\n prefixForNumeric={prefixForNumeric}\n showModelDetail={showModelDetail}\n />\n <p className=\"car-description\">{model.description}</p>\n </>\n ) : (\n <>\n <p className=\"car-description\">{model.description}</p>\n <ModelDetail model={model} prefixForNumeric={prefixForNumeric} />\n </>\n )}\n\n <div className=\"price\">\n {featureFlags &&\n featureFlags.showFleetPrice &&\n (!featureFlags.fleetUseLowerPrice && model.dailyPrice > 0 ? (\n <p className=\"text-uppercase\">\n {t('from')} <span>{currency != null ? currency.prefix : 'ARS'} </span>\n <strong>\n <NumberDisplay value={model.dailyPrice} />\n </strong>{' '}\n {t('perday')}\n </p>\n ) : (\n featureFlags.showFleetPrice &&\n featureFlags.fleetUseLowerPrice &&\n model.lowerPrice > 0 && (\n <p className=\"text-uppercase\">\n {t('from')} <span>{currency != null ? currency.prefix : 'ARS'} </span>\n <strong>\n <NumberDisplay value={model.lowerPrice} />\n </strong>{' '}\n {t('perday')}\n </p>\n )\n ))}\n </div>\n <Btn\n text={(featureFlags && t(featureFlags.bookingButtonText)) || t('booknow')}\n onClick={this.handleButtonClick}\n />\n </div>\n </div>\n </StyledSection>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps, { setSearchCarParams })(\n withRouter(withTranslation()(FlotaBigItem)),\n);\n","import style from 'styled-components';\n\nexport const StyledFlotaSectionModern = style.div`\n\n .card{\n border: none;\n }\n \n .category-filter{\n margin-top:50px;\n }\n \n .category-filter{\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n margin-bottom: 35px;\n }\n }\n\n .card-header{\n font-size: 12px;\n text-transform: uppercase;\n font-weight: 600;\n background: none;\n border-bottom: 1px solid rgba(0,0,0,.125) !important;\n margin-bottom:0px !important;\n cursor: pointer;\n }\n\n .card-body li{\n line-height: 2em;\n font-size: 14px;\n }\n\n .card-body li i{\n font-size: 10px;\n margin-right: 10px;\n position: relative;\n top: -1px;\n }\n\n .list-unstyled{\n cursor: pointer;\n }\n \n .slick-track{\n margin: auto auto;\n } \n\n .slick-next:before, .slick-prev:before{\n color: #ccc;\n }\n .slick-prev{\n left:-5px;\n }\n .slick-next{\n right: -5px;\n }\n\n .slick-next:before {\n content: \"\\f105\";\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n \n }\n\n .slick-prev:before {\n content: \"\\f104\" !important;\n font-family: 'Font Awesome 5 Free', 'FontAwesome';\n }\n\n`;\n\nexport const StyledFlotaGridModern = style.div`\n .flex-container{\n display: flex;\n flex-wrap: wrap;\n }\n\n .nav-item{\n margin: 0 3px 10px;\n a{\n color: #6f6f6f;\n font-size: 13px;\n padding: .3rem 1rem; \n transition: background .3s; \n background: #f4f4f4;\n border-radius: 5px;\n\n &:hover, &.active{\n color: ${props => props.theme.colors.buttonPrimaryColor};\n background: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n }\n @media only screen and (max-width: ${props => props.theme.screens.lg}){\n margin: 0 8px 15px;\n\n a{\n font-size: 15px;\n }\n }\n }\n\n .car-item {\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n padding: 0 !important;\n }\n .car-details p {\n font-size:16px;\n text-align: center;\n }\n\n .btn{\n margin:0 auto;\n color:${props => props.theme.colors.primary};\n background: none;\n border: 1px solid ${props => props.theme.colors.primary};\n font-size:13px;\n font-weight:500;\n }\n\n \n .btn:hover{\n color:#FFF;\n background: ${props => props.theme.colors.primary};\n }\n\n .car-details {\n .car-name p {\n margin-top: 0px;\n margin-bottom: 0px;\n font-size: 21px !important;\n white-space: nowrap;\n text-overflow: ellipsis;\n display: block;\n overflow: hidden;\n text-align:center;\n color : ${props => props.theme.colors.primary};\n \n @media only screen and (max-width: ${props =>\n props.theme.screens.xxl}) and (min-width: ${props => props.theme.screens.xl}) {\n font-size: 18px !important;\n }\n }\n \n }\n \n .car-image {\n height: fit-content;\n text-align: center;\n height: 170px;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n transition: 0.2s\n\n .lazy-load-image-loaded > img {\n height: 100%;\n object-fit: cover;\n min-height: 100%;\n }\n }\n\n \n .car-image:hover {\n height: 180px;}\n transition: 0.2s\n }\n \n .price p {\n font-size: 15px;\n text-transform:uppercase;\n span{\n font-weight: bold;\n font-size:15px;\n }\n strong span{\n font-size: 20px;\n }\n }\n \n .car-details {\n .details {\n margin-bottom: 5px;\n \n .details-item {\n display: inline-block;\n text-align: center;\n margin-right: 5px;\n width: 10.5%;\n min-width: 35px;\n max-width: 60px;\n \n @media only screen and (max-width: 330px) {\n width: 16%;\n }\n \n p{\n margin-bottom:0 ;\n }\n \n img {\n width: 100%;\n display: block;\n border: 1px solid #cccccc;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n }\n }\n }\n }\n \n }\n`;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { Accordion, Card, Nav } from 'react-bootstrap';\nimport { StyledFlotaSection, StyledFlotaGrid } from './FlotaSection.styled';\nimport Slider from 'react-slick';\nimport FlotaBigItem from './FlotaBigItem';\nimport { Loading } from 'components/';\nimport FlotaItem from 'sections/home/Flota/FlotaItem/FlotaItem';\nimport { getAllCategoryIdsInCollection } from '../../../utils/categoryGroupHelper';\nimport { StyledFlotaGridModern, StyledFlotaSectionModern } from './FlotaSection.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\n\nconst sliderSettings = {\n dots: false,\n infinite: true,\n speed: 1000,\n slidesToShow: 1,\n slidesToScroll: 1,\n autoplay: false,\n initialSlide: 0,\n responsive: [\n {\n breakpoint: 600,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1,\n },\n },\n ],\n};\n\nclass FlotaSection extends React.Component {\n static propTypes = {\n bookLink: PropTypes.string,\n showOnlyDefaultModels: PropTypes.bool,\n showModelDetail: PropTypes.bool,\n };\n\n state = {\n loading: true,\n filteredModels: [],\n filteredEntities: [],\n };\n\n async componentDidMount() {\n const {\n fetchCategories,\n i18n,\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n const categories = (await fetchCategories(i18n.language)).payload;\n\n const filteredEntities = categoryGroups\n ? categoryGroups\n : this.getFilteredCategories(categories);\n\n this.setState(prevState => ({\n ...prevState,\n loading: false,\n filteredEntities,\n }));\n\n this.showAllModels();\n }\n\n showAllModels = () => {\n const {\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n let filteredModels = [];\n\n if (categoryGroups) {\n filteredModels = this.getAllModelsFromCategoryGroups();\n } else {\n filteredModels = this.getModelsFromCategoriesList();\n }\n\n this.setState({ filteredModels });\n };\n\n getFilteredCategories = list => {\n const {\n listCategories,\n settings: { configurations },\n } = this.props;\n\n let categories = list || [...listCategories];\n\n if (configurations.filteredCategories) {\n const { includedCategoryIds, excludedCategoryIds } = configurations.filteredCategories;\n if (includedCategoryIds && includedCategoryIds.length > 0) {\n categories = categories.filter(item => includedCategoryIds.includes(item.id));\n }\n if (excludedCategoryIds && excludedCategoryIds.length > 0) {\n categories = categories.filter(item => !excludedCategoryIds.includes(item.id));\n }\n }\n return categories;\n };\n\n getModelsFromCategoriesList = () => {\n const { showOnlyDefaultModels } = this.props;\n const listCategories = this.getFilteredCategories();\n\n if (!showOnlyDefaultModels) return listCategories.flatMap(category => category.models);\n\n const defaultModels = [];\n listCategories.forEach(cat => {\n const principalModel = cat.models.find(m => m.id === cat.principalModelId);\n if (principalModel) defaultModels.push(principalModel);\n else defaultModels.push(cat.models[0]);\n });\n\n return defaultModels;\n };\n\n getModelsFromCategory = entityIndex => {\n const { showOnlyDefaultModels } = this.props;\n const listCategories = this.getFilteredCategories();\n if (!showOnlyDefaultModels) return listCategories[entityIndex].models;\n\n const category = listCategories[entityIndex];\n const principalModel = category.models.find(model => model.id === category.principalModelId);\n if (principalModel) return [principalModel];\n return [category.models[0]] || [];\n };\n\n getAllModelsFromCategoryGroups = () => {\n const {\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n if (!categoryGroups) return [];\n\n const categoryIds = getAllCategoryIdsInCollection(categoryGroups);\n const listCategories = this.getFilteredCategories();\n const categories = listCategories.filter(c => categoryIds.includes(c.id));\n\n return categories.flatMap(c => c.models);\n };\n\n getAllModelsFromCategoryGroup = categoryGroupIndex => {\n const {\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n\n const listCategories = this.getFilteredCategories();\n const categoryIds = categoryGroups[categoryGroupIndex].categories.flatMap(c => c.ids);\n const categories = listCategories.filter(c => categoryIds.includes(c.id));\n\n return categories.flatMap(c => c.models);\n };\n\n handleFilterChange = entityIndex => {\n const {\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n let filteredModels = [];\n\n if (categoryGroups) {\n const selectedCategoryGroup = categoryGroups[entityIndex];\n const categoryIds = selectedCategoryGroup.categories.flatMap(cat => cat.ids);\n const listCategories = this.getFilteredCategories();\n const filteredEntities = listCategories.filter(c => categoryIds.includes(c.id));\n filteredModels = filteredEntities.flatMap(c => c.models);\n } else {\n filteredModels = this.getModelsFromCategory(entityIndex);\n }\n\n this.setState({ filteredModels });\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledFlotaSectionModern;\n }\n return StyledFlotaSection;\n }\n\n getTemplateStyledGrid() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledFlotaGridModern;\n }\n return StyledFlotaGrid;\n }\n\n render() {\n const {\n bookLink,\n bookingButtonText,\n type,\n t,\n showSipp,\n settings: {\n configurations: { categoryGroups },\n },\n showOnlyDefaultModels,\n oneSlide,\n showModelDetail,\n bookingsConfiguration,\n } = this.props;\n const { filteredModels, filteredEntities } = this.state;\n\n if (this.state.loading) return <Loading show />;\n var ins = -1;\n const centerItems = showOnlyDefaultModels ? 'justify-content-center' : '';\n\n const StyledSection = this.getTemplateStyledComponent();\n const StyledGrid = this.getTemplateStyledGrid();\n\n const distanceUnit = bookingsConfiguration?.distanceUnit || 'Kilometers';\n\n return type === 'grid' ? (\n <StyledGrid className=\"row\">\n <div className=\"col-lg-12 mb-5\">\n <Nav className=\"justify-content-center\" defaultActiveKey=\"all\">\n <Nav.Item>\n <Nav.Link eventKey=\"all\" onClick={() => this.showAllModels()}>\n {t('todos')}\n </Nav.Link>\n </Nav.Item>\n {filteredEntities &&\n filteredEntities.map((entity, index) => (\n <Nav.Item key={index}>\n <Nav.Link\n eventKey={index}\n onClick={() => this.handleFilterChange(filteredEntities.indexOf(entity))}\n >\n {entity.name}\n </Nav.Link>\n </Nav.Item>\n ))}\n </Nav>\n </div>\n <div className=\"col-lg-12 mb-5\">\n <div className={`flex-container ${centerItems}`}>\n {filteredModels &&\n filteredModels.map((model, index) => (\n <div className=\"car-item mb-5 col-xl-3 col-lg-4 col-md-6\" key={`div_${index}`}>\n <FlotaItem\n key={index}\n model={model}\n index={index}\n bookLink={bookLink}\n showSipp={showSipp}\n bookingButtonText={bookingButtonText}\n showModelDetail={showModelDetail}\n distanceUnit={distanceUnit}\n />\n </div>\n ))}\n </div>\n </div>\n </StyledGrid>\n ) : (\n <StyledSection>\n <div className=\"col-md-12 mb-5 p-0\">\n <div className=\"row mb-5\">\n <div className=\"col-lg-3 mb-5 category-filter\">\n <Accordion defaultActiveKey={filteredEntities && filteredEntities.lenght > 0}>\n {filteredEntities &&\n filteredEntities.map((entity, index) => {\n const models = categoryGroups\n ? this.getAllModelsFromCategoryGroup(index)\n : entity.models;\n return (\n <Card key={entity.name}>\n <Accordion.Toggle\n as={Card.Header}\n variant=\"link\"\n eventKey={entity.id || index}\n >\n {entity.name}\n <i\n className=\"fas fa-angle-down float-right mt-1\"\n data-toggle=\"collapse\"\n data-target=\"#1\"\n aria-expanded=\"false\"\n aria-controls=\"1\"\n />\n </Accordion.Toggle>\n <Accordion.Collapse eventKey={entity.id || index}>\n <Card.Body>\n <ul className=\"list-unstyled\">\n {models.map((model, j) => {\n ins++;\n return (\n <li\n key={ins}\n id={ins}\n onClick={e => this.slider.slickGoTo(e.target.id)}\n >\n <i className=\"fas fa-angle-right\" />\n {model.brand.name} {model.name}\n </li>\n );\n })}\n </ul>\n </Card.Body>\n </Accordion.Collapse>\n </Card>\n );\n })}\n </Accordion>\n </div>\n <div className=\"col-lg-9\">\n <Slider {...sliderSettings} ref={slider => (this.slider = slider)}>\n {filteredEntities &&\n filteredEntities.map((entity, entityIndex) => {\n const models = categoryGroups\n ? this.getAllModelsFromCategoryGroup(entityIndex)\n : entity.models;\n return models.map((model, index) => (\n <FlotaBigItem\n key={index}\n model={model}\n bookLink={bookLink}\n showSipp={showSipp}\n oneSlide={oneSlide}\n showModelDetail={showModelDetail}\n />\n ));\n })}\n </Slider>\n </div>\n </div>\n </div>\n </StyledSection>\n );\n }\n}\n\nexport default FlotaSection;\n","import FlotaSection from './FlotaSection';\nimport { connect } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nimport { fetchCategories } from 'actions';\n\nconst mapStateToProps = ({ global, siteConfiguration, bookings }) => ({\n listCategories: global.listCategories,\n settings: siteConfiguration.settings,\n bookingsConfiguration: bookings.configuration,\n});\n\nexport default connect(mapStateToProps, { fetchCategories })(withTranslation()(FlotaSection));\n","import style from 'styled-components';\n\nexport const StyledFranchiseSection = style.div`\n\th5 {\n\t\tfont-size: 14px !important;\n\t}\n\n\ttd {\n\t\ttext-align: center;\n\t}\n`;\n","import React from 'react';\nimport { StyledFranchiseSection } from './FranchiseSection.styled';\nimport { withTranslation } from 'react-i18next';\nimport { NumberDisplay } from 'components';\n\nclass FranchiseSection extends React.Component {\n state = {\n loading: true,\n categories: [],\n };\n\n async componentDidMount() {\n const { fetchCategories, i18n } = this.props;\n const response = await fetchCategories(i18n.language);\n const categories = this.parseFranchises(response.payload);\n\n this.setState(prevState => ({\n ...prevState,\n loading: false,\n categories,\n }));\n }\n\n parseFranchises = categories => {\n if (!categories) return [];\n const {\n settings: { featureFlags },\n } = this.props;\n const availabilityGroup = featureFlags.availabilityGroup || 'model';\n\n return availabilityGroup === 'category'\n ? this.parseByCategory(categories)\n : this.parseByModel(categories);\n };\n\n parseByCategory = categories => {\n return categories.map(category => {\n return {\n name: category.name,\n franchise: category.franchise,\n damage: category.franchiseDamage,\n accidents: category.franchiseRollover,\n hail: category.franchiseHail,\n };\n });\n };\n\n parseByModel = categories => {\n return categories.map(category => {\n const principalModel = this.findPrincipalModel(category.models, category.principalModelId);\n return {\n name: category.name,\n franchise: principalModel.franchise,\n damage: principalModel.franchiseDamage,\n accidents: principalModel.franchiseRollover,\n hail: principalModel.franchiseHail,\n };\n });\n };\n\n findPrincipalModel = (models, principalModelId) => {\n if (!principalModelId) return models[0];\n return models.find(m => m.id === Number(principalModelId)) || models[0];\n };\n\n render() {\n const {\n t,\n franchiseTitle,\n franchiseDescription,\n creditTitle,\n creditDescription,\n accidentsTitle,\n accidentsDescription,\n hailTitle,\n hailDescription,\n } = this.props;\n\n const categories = this.state.categories;\n\n return (\n <StyledFranchiseSection>\n <div className=\"col-md-12 p-0 mb-5\">\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">\n <h5>Cat.</h5>\n </th>\n <th scope=\"col\">\n <h5>\n <strong>{t(franchiseTitle)}</strong> {t(franchiseDescription)}\n </h5>\n </th>\n <th scope=\"col\">\n <h5>\n <strong>{t(creditTitle)}</strong> {t(creditDescription)}\n </h5>\n </th>\n <th scope=\"col\">\n <h5>\n <strong>{t(accidentsTitle)}</strong> {t(accidentsDescription)}\n </h5>\n </th>\n {hailTitle && (\n <th scope=\"col\">\n <h5>\n <strong>{t(hailTitle)}</strong> {t(hailDescription)}\n </h5>\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {categories &&\n categories.map(category => (\n <tr>\n <th scope=\"row\" align=\"left\">\n <span>{category.name}</span>\n </th>\n <td>\n <NumberDisplay value={category.damage || ''} />\n </td>\n <td>\n <NumberDisplay value={category.franchise || ''} />\n </td>\n <td>\n <NumberDisplay value={category.accidents || ''} />\n </td>\n {hailTitle && (\n <td>\n <NumberDisplay value={category.hail || ''} />\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </StyledFranchiseSection>\n );\n }\n}\n\nexport default withTranslation()(FranchiseSection);\n","import FranchiseSection from './FranchiseSection';\nimport { connect } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nimport { fetchCategories } from 'actions';\n\nconst mapStateToProps = ({ global, siteConfiguration }) => ({\n listCategories: global.listCategories,\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps, { fetchCategories })(withTranslation()(FranchiseSection));\n","import React from 'react';\nimport { ColumnsSection, CustomLoading } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withTranslation } from 'react-i18next';\nimport queryString from 'query-string';\nimport { GetBook, SetBook } from '../../../actions/bookings.actions';\nimport { history } from '../../../store';\nimport { tt, tlink } from 'utils/translationHelper';\nimport { BookingStatus } from '../../../utils/constants';\nimport { getPriceWithExchangeRate } from '../../../utils/priceHelper';\n\nclass BookingSection extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n loading: false,\n };\n }\n\n componentWillMount() {\n const {\n location,\n bookings: { confirmation },\n t,\n i18n,\n settings,\n } = this.props;\n const parseQs = queryString.parse(location.search);\n if (parseQs.bookingid) {\n this.setState({ loading: true });\n } else if (!confirmation) {\n this.setState({ loading: true });\n history.push(\n tlink('__Routes.getBookFailed', t, i18n, null, settings.configurations.langConfig),\n );\n }\n }\n\n componentDidMount() {\n const { location, GetBook, t, i18n, settings, isWidget, defaultCurrency, listCurrencies } = this.props;\n const parseQs = queryString.parse(location.search);\n if (parseQs.bookingid) {\n GetBook(parseQs.bookingid)\n .then(async x => {\n if (x.payload.currentStatus === BookingStatus.canceled) {\n history.push(\n tlink('__Routes.getBookFailed', t, i18n, null, settings.configurations.langConfig),\n );\n } else {\n var balance = x.payload.customerBalance || x.payload.balance;\n //si la moneda de la reserva es diferente a la moneda por defecto, se calcula el balance con el exchange rate\n\n if (defaultCurrency.isoCode !== x.payload.currency && settings.featureFlags.isNewApi){\n let currency = listCurrencies.find(c => c.isoCode === x.payload.currency);\n balance = getPriceWithExchangeRate(balance, defaultCurrency, defaultCurrency, currency);\n x.payload.balance = balance;\n x.payload.price = getPriceWithExchangeRate(x.payload.price, defaultCurrency, defaultCurrency, currency);\n x.payload.customerBalance = getPriceWithExchangeRate(x.payload.customerBalance, defaultCurrency, defaultCurrency, currency);\n x.payload.priceItems = x.payload.priceItems.map(item => {\n item.price = getPriceWithExchangeRate(item.price, defaultCurrency, defaultCurrency, currency);\n item.unitPrice = getPriceWithExchangeRate(item.unitPrice, defaultCurrency, defaultCurrency, currency);\n return item;\n });\n await SetBook(x.payload);\n }\n\n if ( balance < 0) {\n this.setState({ loading: false });\n } else {\n history.push(\n tlink('__Routes.bookingPaid', t, i18n, null, settings.configurations.langConfig),\n );\n }\n }\n })\n .catch(error => {\n history.push(\n tlink('__Routes.getBookFailed', t, i18n, null, settings.configurations.langConfig),\n );\n });\n }\n\n if (isWidget) {\n window.top.postMessage(\n { height: document.body.scrollHeight, width: document.body.scrollWidth },\n '*',\n );\n }\n }\n\n render() {\n const { loadingMessage, loadingGif, background } = this.props;\n\n if (this.state.loading === true) {\n return (\n <CustomLoading\n loadingMessage={loadingMessage}\n loadingGif={loadingGif}\n background={background}\n ></CustomLoading>\n );\n } else {\n return <ColumnsSection {...this.props}></ColumnsSection>;\n }\n }\n}\n\nconst mapStateToProps = ({ bookings, siteConfiguration, global }) => ({\n bookings: bookings,\n settings: siteConfiguration.settings,\n listCurrencies: global.listCurrencies,\n defaultCurrency: global.defaultCurrency,\n});\nexport default connect(mapStateToProps, { GetBook, SetBook })(withRouter(withTranslation()(BookingSection)));\n","import BookingSection from './BookingSection';\nexport default BookingSection;\n","import React from 'react';\nimport { ColumnsSection, CustomLoading } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withTranslation } from 'react-i18next';\nimport queryString from 'query-string';\nimport { GetBook } from '../../../actions/bookings.actions';\nimport { getCustomerInfraction } from '../../../actions/infractions.actions';\nimport { history } from '../../../store';\nimport { tlink } from 'utils/translationHelper';\nimport { BookingStatus, InfractionStatus } from '../../../utils/constants';\n\nclass OnlinePaymentWrapper extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n loading: false,\n hasPartialAmount: false,\n partialAmount: 0,\n showBreadcrumb: true,\n };\n }\n\n componentWillMount() {\n const {\n location,\n t,\n i18n,\n settings,\n bookings,\n infractions,\n acceptBooking,\n acceptInfraction,\n } = this.props;\n const parseQs = queryString.parse(location.search);\n const currentBooking = bookings ? bookings.confirmation : null;\n const currentInfraction = infractions ? infractions.current : null;\n\n if (acceptBooking && this.isPayingBooking()) {\n if (parseQs.bookingid) {\n this.setState({ loading: true });\n } else if (!currentBooking) {\n history.push(\n tlink('__Routes.getBookFailed', t, i18n, null, settings.configurations.langConfig),\n );\n }\n }\n\n if (acceptInfraction && this.isPayingInfraction()) {\n if (parseQs.infractionid && parseQs.customerid) {\n this.setState({ loading: true });\n } else if (!currentInfraction) {\n history.push(\n tlink('__Routes.getInfractionFailed', t, i18n, null, settings.configurations.langConfig),\n );\n }\n }\n\n if (this.isPayingToll()) {\n if (parseQs.bookingid && parseQs.isToll) {\n this.setState({ loading: true });\n } else if (!currentInfraction) {\n history.push(\n tlink('__Routes.getInfractionFailed', t, i18n, null, settings.configurations.langConfig),\n );\n }\n }\n\n if (parseQs.amount) {\n try {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ hasPartialAmount: true, partialAmount: partial });\n }\n } catch {}\n }\n\n if (\n (!acceptBooking && this.isPayingBooking()) ||\n (!acceptInfraction && this.isPayingInfraction())\n ) {\n history.push(tlink('/', t, i18n, null, settings.configurations.langConfig));\n }\n }\n\n componentDidMount() {\n const { isWidget } = this.props;\n if (this.isPayingBooking()) this.getBookingInfo();\n if (this.isPayingInfraction()) this.getInfractionInfo();\n if (this.isPayingToll()) this.getTollInfo();\n\n if (isWidget) {\n window.top.postMessage(\n {\n height: document.body.scrollHeight,\n width: document.body.scrollWidth,\n },\n '*',\n );\n }\n }\n\n isPayingBooking = () => {\n const { location, bookings } = this.props;\n const parseQs = queryString.parse(location.search);\n // create booking circuit\n if (bookings && bookings.confirmation && !parseQs.infractionid && !parseQs.isToll) return true;\n // online-payment link\n return parseQs.bookingid && !parseQs.infractionid && !parseQs.customerid && !parseQs.isToll;\n };\n\n isPayingInfraction = () => {\n const { location } = this.props;\n const parseQs = queryString.parse(location.search);\n return !parseQs.bookingid && parseQs.infractionid && parseQs.customerid;\n };\n\n isPayingToll = () => {\n const { location } = this.props;\n const parseQs = queryString.parse(location.search);\n return parseQs.bookingid && parseQs.isToll;\n };\n\n getBookingInfo = () => {\n const { location, GetBook, t, i18n, settings } = this.props;\n const parseQs = queryString.parse(location.search);\n if (!parseQs.bookingid) return;\n\n GetBook(parseQs.bookingid, parseQs.promotionid)\n .then(x => {\n if (x.payload.currentStatus === BookingStatus.canceled) {\n history.push(\n tlink('__Routes.getBookFailed', t, i18n, null, settings.configurations.langConfig),\n );\n } else if (x.payload.currentStatus === BookingStatus.quoted) {\n history.push(\n tlink('__Routes.bookingQuoted', t, i18n, null, settings.configurations.langConfig),\n { bookingId: x.payload.id },\n );\n } else {\n const balance = x.payload.customerBalance || x.payload.balance;\n if (balance < 0) {\n this.setState({ loading: false });\n } else {\n history.push(\n tlink('__Routes.bookingPaid', t, i18n, null, settings.configurations.langConfig),\n );\n }\n }\n })\n .catch(error => {\n history.push(\n tlink('__Routes.getBookFailed', t, i18n, null, settings.configurations.langConfig),\n );\n });\n };\n\n getInfractionInfo = () => {\n const { location, getCustomerInfraction, t, i18n, settings } = this.props;\n const parseQs = queryString.parse(location.search);\n\n getCustomerInfraction(parseQs.customerid, parseQs.infractionid)\n .then(response => {\n const infractionStatus = response.payload.currentCollectionStatus.status;\n\n if (infractionStatus === InfractionStatus.collected) {\n history.push(\n tlink('__Routes.InfractionPaid', t, i18n, null, settings.configurations.langConfig),\n );\n } else if (infractionStatus === InfractionStatus.collectionNotPossible) {\n history.push(\n tlink(\n '__Routes.getInfractionFailed',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n ),\n );\n }\n\n this.setState({ loading: false });\n })\n .catch(error => {\n history.push(\n tlink('__Routes.getInfractionFailed', t, i18n, null, settings.configurations.langConfig),\n );\n });\n };\n\n getTollInfo = () => {\n const { location, GetBook, t, i18n, settings } = this.props;\n const parseQs = queryString.parse(location.search);\n if (!parseQs.bookingid) return;\n\n GetBook(parseQs.bookingid, parseQs.promotionid)\n .then(x => {\n if (x.payload.balance < 0) {\n this.setState({ loading: false });\n } else {\n history.push(\n tlink('__Routes.bookingPaid', t, i18n, null, settings.configurations.langConfig),\n );\n }\n })\n .catch(error => {\n history.push(\n tlink('__Routes.getBookFailed', t, i18n, null, settings.configurations.langConfig),\n );\n });\n };\n\n getBreadcrumbObject = () => {\n return {\n component: 'Breadcrumb',\n className: 'pl-0',\n items: [\n {\n link: '',\n text: 'Search',\n },\n {\n link: '',\n text: 'Checkout',\n isActive: true,\n },\n {\n link: '',\n text: 'Online Payment',\n },\n ],\n };\n };\n\n render() {\n const {\n loadingMessage,\n loadingGif,\n background,\n acceptBooking,\n acceptInfraction,\n franchiseText,\n detailsLegend,\n showBreadcrumb,\n } = this.props;\n if (!acceptBooking && !acceptInfraction) return null;\n\n if (this.state.loading === true) {\n return (\n <CustomLoading\n loadingMessage={loadingMessage}\n loadingGif={loadingGif}\n background={background}\n ></CustomLoading>\n );\n }\n\n let sections = [];\n if (showBreadcrumb) sections.push(this.getBreadcrumbObject());\n sections.push({\n component: 'OnlinePaymentSection',\n partialAmount: this.state.hasPartialAmount ? this.state.partialAmount : 0,\n });\n\n if (this.isPayingBooking()) {\n sections.push({\n component: 'BookingDetailSection',\n title: '__PageOnlinePayment.BookingDetail.title',\n subtitle: '__PageOnlinePayment.BookingDetail.subtitle',\n franchiseText: franchiseText || undefined,\n detailsLegend: detailsLegend || undefined,\n });\n }\n\n if (this.isPayingInfraction()) {\n sections.push({ component: 'InfractionDetailSection' });\n }\n\n if (this.isPayingToll()) {\n sections.push({\n component: 'TollDetailSection',\n });\n }\n\n const props = { ...this.props, sections };\n\n return (\n <>\n <ColumnsSection {...props}></ColumnsSection>\n </>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, infractions, siteConfiguration, global }) => ({\n bookings: bookings,\n infractions: infractions,\n settings: siteConfiguration.settings,\n defaultCurrency: global.defaultCurrency,\n});\nexport default connect(mapStateToProps, {\n GetBook,\n getCustomerInfraction,\n})(withRouter(withTranslation()(OnlinePaymentWrapper)));\n","import OnlinePaymentWrapper from './OnlinePaymentWrapper';\nexport default OnlinePaymentWrapper;\n","import style from 'styled-components';\n\nexport const StyledDetails = style.section`\n\n @media (max-width: ${props => props.theme.screens.md}) {\n display:none;\n }\n\n @media (min-width: ${props => props.theme.screens.md}){\n -webkit-box-flex: 0;\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) and (min-width: ${props =>\n props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}) {\n flex: 0 0 32%;\n max-width: 32%;\n }\n\n .checkout-details {\n .title-col1 { margin: 5px; }\n .title-col1 p { font-size: 18px; }\n\n .title-col1 h3 {\n margin-bottom: 0px !important;\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n font-size: 20px;\n margin-top: 2.5%;\n }\n }\n\n .img-fluid {\n max-width: 100%;\n height: auto;\n max-height: 164px;\n }\n\n .car-item .car-name { \n font-size: 20px;\n font-weight: 700;\n font-style: normal;\n margin-top: 0px;\n margin-bottom: 5px;\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n font-size: 18px; \n margin-bottom: 3px;\n }\n }\n\n .car-category{\n font-weight: 600;\n span{\n text-transform: uppercase;\n }\n }\n\n .car-item .details {\n margin-bottom: 0;\n }\n\n .car-item .details-item {\n display: inline-block;\n text-align: center;\n margin-right: 6px;\n }\n\n .car-item .details-item img {\n width: 42px;\n border: 1px solid #CCCCCC;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n }\n\n .pickup-details {\n font-size: 13px;\n }\n\n .rent-details {\n background-color: #fff;\n padding: 6% 7% 3% 7%;\n }\n\n .rent-details .payment-details li {\n font-size: 13px;\n margin-bottom: 5px;\n\n i {font-size: 8px; display: inline-block; margin-right: 5px;}\n \n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n font-size: 11px;\n margin-bottom: 7px;\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.xl}) \n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 11px;\n margin-bottom: 5px;\n }\n }\n\n .rent-details .payment-details .item-name {\n font-weight: bold;\n }\n\n .payment {\n background-color: ${props => props.priceBackground || props.theme.colors.primary};\n color: ${props => props.priceColor || props.theme.font.colors.secondary};\n padding: 5% 7% 3% 7%;\n margin-bottom: 2em !important;\n\n .total-price {\n font-size: 40px;\n font-weight: 700;\n line-height: 22px;\n margin-bottom: 8px;\n margin-top: 10px;\n white-space: nowrap;\n \n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n font-size: 30px;\n }\n \n @media only screen and (min-width: ${props => props.theme.screens.xl}) \n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 35px;\n }\n }\n \n .days{\n font-size:12px;\n }\n\n .diario {\n font-size:12px;\n font-weight: lighter;\n }\n }\n\n .payment .total-name h3{\n font-size: 18px;\n margin-bottom: 0px !important;\n margin-top: 6% !important;\n\n @media only screen and (min-width: ${props => props.theme.screens.xl}) \n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 16px;\n }\n }\n \n }\n`;\n\nexport const NoBookingDivStyled = style.div`\n text-align: center;\n\n p{\n margin-bottom: 20px;\n }\n\n a {\n transition: all 0.4s;\n cursor: pointer;\n text-align: center;\n margin: 40px auto;\n }\n\n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg} !important; }\n\n .error{\n font-size:90px;\n margin: 40px auto;\n text-align: center;\n }\n`;\n","import React from 'react';\nimport { Title, Paragraph, ModelDetail, NumberDisplay } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withTranslation } from 'react-i18next';\nimport { StyledDetails } from './BookingDetails.styled';\nimport { tt } from 'utils/translationHelper';\nimport Moment from 'moment';\nimport { fetchCategories } from 'actions';\nimport { getPriceWithCommission } from 'utils/dataHelper';\nimport { sumBy } from 'lodash';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\n\nconst PriceComponent = ({ name, price }) => {\n return (\n <li>\n <i className=\"fas fa-plus\" /> <span className=\"item-name\">{name} </span>{' '}\n <span className=\"item-price\">\n <NumberDisplay value={price} useWebCurrency={true} />\n </span>\n </li>\n );\n};\n\nclass BookingDetailSection extends React.Component {\n goBack = () => {\n this.props.history.goBack();\n };\n\n async componentWillMount() {\n const { categories, fetchCategories, i18n } = this.props;\n if (!categories) await fetchCategories(i18n.language);\n }\n\n showBookingLenght = booking => {\n const { t, diasDeAlquiler } = this.props;\n const bookingLength = Number.isInteger(booking.totalDays)\n ? booking.totalDays\n : booking.totalDaysString;\n\n return diasDeAlquiler\n ? `Por ${bookingLength} ${diasDeAlquiler}`\n : t('forDaysOfRent', { totalDays: bookingLength });\n };\n\n getModel = () => {\n const {\n bookings: { confirmation },\n settings: { featureFlags },\n categories,\n } = this.props;\n let model;\n\n if (featureFlags.availabilityGroup !== 'category') {\n model = confirmation !== null && confirmation.car !== null ? confirmation.car.model : null;\n } else {\n if (!categories) return null;\n const bookingCategory = confirmation.category;\n const categoryFound = categories.find(c => c.id === bookingCategory.id);\n if (!categoryFound) return null;\n model = categoryFound.models.find(model => model.id === bookingCategory.principalModelId);\n }\n\n return model;\n };\n\n getPriceItemsContent = () => {\n const {\n bookings: { confirmation },\n settings: { configurations, paymentConfiguration },\n t,\n currentCurrency,\n webCurrency,\n defaultCurrency,\n } = this.props;\n const booking = confirmation !== null ? confirmation : null;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const getDescription = item => {\n if (item.isBookingPrice && configurations.openRate) {\n return (\n <>\n {t('openRatePriceItem', { days: item.quantity })}\n (<NumberDisplay value={item.unitPrice} /> {t('xDay')})\n </>\n );\n }\n return item.description;\n };\n\n const customerPriceItems = booking?.priceItems?.filter(i => i.payer === 0);\n\n if (paymentConfiguration && paymentConfiguration.commissionPercentage > 0) {\n const bookingPriceItems = customerPriceItems.filter(i => i.isBookingPrice);\n const extraPriceItems = customerPriceItems.filter(i => !i.isBookingPrice);\n\n const bookingPriceItemsAmount = getPriceWithCommission(sumBy(bookingPriceItems, 'price'), paymentConfiguration)\n\n return (\n <>\n <PriceComponent\n name={`${t('alquilerPor')} ${booking.totalDaysString}`}\n price={applyExchangeRate\n ? getPriceWithExchangeRate(\n bookingPriceItemsAmount,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n )\n : bookingPriceItemsAmount}\n />\n {extraPriceItems.map((item, i) => {\n return <PriceComponent key={i} name={getDescription(item)} price={ applyExchangeRate\n ? getPriceWithCommission(getPriceWithExchangeRate(\n item.price,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n ), paymentConfiguration)\n : getPriceWithCommission(item.price, paymentConfiguration)} />;\n })}\n </>\n );\n }\n\n return customerPriceItems.map((item, i) => {\n return <PriceComponent key={i} name={getDescription(item)} price={item.price} />;\n });\n };\n\n render() {\n const {\n bookings: { confirmation },\n settings: { featureFlags, paymentConfiguration },\n t,\n title,\n subtitle,\n prefixForNumeric,\n installment,\n franchiseText,\n detailsLegend,\n bookingsConfiguration,\n } = this.props;\n\n const booking = confirmation !== null ? confirmation : null;\n const model = this.getModel();\n if (!model) return null;\n\n const showDeposit = featureFlags.showDeposit === undefined ? true : featureFlags.showDeposit;\n\n const kmText =\n booking.ilimitedKm === true\n ? t(\n bookingsConfiguration?.distanceUnit == 'Kilometers'\n ? 'KmIlimitados'\n : 'MillasIlimitados',\n )\n : t(bookingsConfiguration?.distanceUnit == 'Kilometers' ? 'KmDiarios' : 'MillasDiarios', {\n km: booking.maxAllowedDistanceByDay,\n });\n\n return (\n <StyledDetails className=\"col-md-3\" priceBackground={this.props.priceBackground}>\n <div className=\"checkout-details\">\n <div className=\"row\">\n <div className=\"col-md-12 title-col1\">\n <Title\n type=\"h2\"\n text={title}\n italic={false}\n weight=\"700\"\n fontSize={20}\n className=\"mt-1\"\n />\n <Paragraph>{tt(subtitle, t)}</Paragraph>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-12\">\n <div className=\"rent-details\">\n <div className=\"car-item\">\n <div className=\"car-details\">\n <h2 className=\"car-name mt-1\">\n {model.brand.name} {model.name}\n </h2>\n <Paragraph className=\"car-category mb-0\">\n {t('categoria')} <span>{(model.category || booking.category).name}</span>\n <div className=\"d-inline-block\">\n <span className=\"mr-2 ml-2\">|</span>\n <span className=\"tachometer text-capitalize\">\n <i className=\"fas fa-tachometer-alt mr-1\"></i>\n {kmText}\n </span>\n </div>\n </Paragraph>\n {showDeposit && (\n <p className=\"franchise mb-3\">\n <i\n className=\"fas fa-info-circle\"\n data-toggle=\"tooltip\"\n title=\"\"\n data-original-title={t('franchiseHelpText')}\n />\n <strong>{t(franchiseText) || t('franquicia')} </strong>\n <span>\n <NumberDisplay value={booking.franchise} useWebCurrency={true}/>\n </span>\n </p>\n )}\n </div>\n <div className=\"car-image text-center mb-3\">\n <img className=\"img-fluid\" src={model.imagePath} alt={model.name} />\n </div>\n <ModelDetail model={model} prefixForNumeric={prefixForNumeric} />\n </div>\n <hr />\n <div className=\"pickup-details\">\n <Title\n type=\"h4\"\n text={t('delivery')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <p>\n {booking.deliveryPlace.name} -\n <span className=\"date\">\n {' '}\n {Moment(confirmation.fromDate).format('DD-MM-YYYY HH:mm')} hs\n </span>\n </p>\n <Title\n type=\"h4\"\n text={t('return')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <p>\n {booking.returnPlace.name} -\n <span className=\"date\">\n {' '}\n {Moment(confirmation.toDate).format('DD-MM-YYYY HH:mm')} hs\n </span>\n </p>\n </div>\n <hr />\n <div className=\"payment-details\">\n <Title\n type=\"h4\"\n className=\"mb-3\"\n text={t('paymentDetail')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <ul className=\"list-unstyled\">{this.getPriceItemsContent()}</ul>\n </div>\n </div>\n <div className=\"payment mt-3 mb-3\">\n <div className=\"row text-light\">\n {installment ? (\n <>\n <div className=\"col-md-6\">\n <Title type=\"h4\" fontSize=\"16\" className=\"text-light\" text={t('booking')} />\n </div>\n <div className=\"col-md-6 text-right\">\n <p className=\"\">\n <NumberDisplay useWebCurrency={true}\n value={getPriceWithCommission(booking.price, paymentConfiguration)}\n />\n </p>\n </div>\n <div className=\"col-md-6\">\n <Title\n type=\"h4\"\n fontSize=\"16\"\n className=\"text-light\"\n text={t('totalFinancing')}\n />\n </div>\n <div className=\"col-md-6 text-right\">\n <p className=\"\">\n <NumberDisplay\n useWebCurrency={true}\n value={\n installment.total_amount -\n getPriceWithCommission(booking.price, paymentConfiguration)\n }\n />\n </p>\n </div>\n <div className=\"col-md-6\">\n <Title type=\"h3\" className=\"total-name text-light\" text={t('totalToPay')} />\n </div>\n <div className=\"col-md-6 text-right\">\n <p className=\"total-price\">\n <NumberDisplay value={installment.total_amount} useWebCurrency={true} />\n </p>\n </div>\n </>\n ) : (\n <>\n <div className=\"col-md-6\">\n <Title type=\"h3\" className=\"total-name text-light\" text={t('totalToPay')} />\n <p className=\"days\">{this.showBookingLenght(booking)}</p>\n </div>\n <div className=\"col-md-6 text-right\">\n <p className=\"total-price\">\n <NumberDisplay\n useWebCurrency={true}\n value={getPriceWithCommission(\n Math.abs(booking?.customerBalance || booking?.balance),\n paymentConfiguration,\n )}\n />\n </p>\n <p className=\"diario\">\n {t('dailyPrice')}{' '}\n <span>\n <NumberDisplay\n useWebCurrency={true}\n value={getPriceWithCommission(\n booking.averageDayPrice,\n paymentConfiguration,\n )}\n />\n </span>\n </p>\n </div>\n </>\n )}\n {detailsLegend && (\n <div className=\"col-md-12\">\n <Paragraph className=\"text-light\">{tt(detailsLegend, t)}</Paragraph>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n </StyledDetails>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, siteConfiguration, global }) => ({\n bookings: bookings,\n installment: bookings.installment,\n settings: siteConfiguration.settings,\n categories: global.listCategories,\n bookingsConfiguration: bookings.configuration,\n currentCurrency: global.currentCurrency,\n defaultCurrency: global.defaultCurrency,\n webCurrency: global.webCurrency,\n});\nexport default connect(mapStateToProps, { fetchCategories })(\n withRouter(withTranslation()(BookingDetailSection)),\n);\n","import BookingDetailSection from './BookingDetailSection';\nexport default BookingDetailSection;\n","import style from 'styled-components';\n\nexport const StyledInfractionDetails = style.section`\n\n @media (max-width: ${props => props.theme.screens.md}) {\n display:none;\n }\n\n @media (min-width: ${props => props.theme.screens.md}){\n -webkit-box-flex: 0;\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) and (min-width: ${props =>\n props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}) {\n flex: 0 0 32%;\n max-width: 32%;\n }\n\n .checkout-details {\n .title-col1 { margin: 5px; }\n .title-col1 p { font-size: 18px; }\n\n .title-col1 h3 {\n margin-bottom: 0px !important;\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n font-size: 20px;\n margin-top: 2.5%;\n }\n }\n\n .img-fluid {\n max-width: 100%;\n height: auto;\n max-height: 164px;\n }\n\n .car-item .car-name { \n font-size: 20px;\n font-weight: 700;\n font-style: normal;\n margin-top: 0px;\n margin-bottom: 5px;\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n font-size: 18px; \n margin-bottom: 3px;\n }\n }\n\n .car-category{\n font-weight: 600;\n span{\n text-transform: uppercase;\n }\n }\n\n .car-item .details {\n margin-bottom: 0;\n }\n\n .car-item .details-item {\n display: inline-block;\n text-align: center;\n margin-right: 6px;\n }\n\n .car-item .details-item img {\n width: 42px;\n border: 1px solid #CCCCCC;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n }\n\n .infractions-details, .booking-details, car-details {\n font-size: 13px;\n }\n\n .container-details {\n background-color: #fff;\n padding: 6% 7% 3% 7%;\n }\n\n .container-details .payment-details li {\n font-size: 13px;\n margin-bottom: 5px;\n\n i {font-size: 8px; display: inline-block; margin-right: 5px;}\n \n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n font-size: 11px;\n margin-bottom: 7px;\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.xl}) \n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 11px;\n margin-bottom: 5px;\n }\n }\n\n .container-details .payment-details .item-name {\n font-weight: bold;\n }\n\n .payment {\n background-color: ${props => props.priceBackground || props.theme.colors.primary};\n color: ${props => props.priceColor || props.theme.font.colors.secondary};\n padding: 5% 7% 0% 7%;\n\n .total-price {\n font-size: 40px;\n font-weight: 700;\n line-height: 22px;\n margin-bottom: 8px;\n margin-top: 10px;\n white-space: nowrap;\n \n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n font-size: 30px;\n }\n \n @media only screen and (min-width: ${props => props.theme.screens.xl}) \n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 35px;\n }\n }\n \n .days{\n font-size:12px;\n }\n\n .diario {\n font-size:12px;\n font-weight: lighter;\n }\n }\n\n .total-name {\n margin-bottom: 15px !important;\n }\n\n .payment .total-name h3{\n font-size: 18px;\n margin-bottom: 0px !important;\n margin-top: 6% !important;\n\n @media only screen and (min-width: ${props => props.theme.screens.xl}) \n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 16px;\n }\n }\n \n }\n`;\n\nexport const NoBookingDivStyled = style.div`\n text-align: center;\n\n p{\n margin-bottom: 20px;\n }\n\n a {\n transition: all 0.4s;\n cursor: pointer;\n text-align: center;\n margin: 40px auto;\n }\n\n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg} !important; }\n\n .error{\n font-size:90px;\n margin: 40px auto;\n text-align: center;\n }\n`;\n","import React from 'react';\nimport { Title, Paragraph, ModelDetail, NumberDisplay } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withTranslation } from 'react-i18next';\nimport { StyledInfractionDetails } from './InfractionDetails.styled';\nimport { tt } from 'utils/translationHelper';\nimport Moment from 'moment';\nimport { fetchCategories } from 'actions';\n\nclass InfractionDetailSection extends React.Component {\n goBack = () => {\n this.props.history.goBack();\n };\n\n render() {\n const { t, infractions } = this.props;\n if (!infractions) return null;\n const infraction = infractions.current;\n const installment = infractions.installment;\n const booking = infraction.booking;\n const model = infraction.car.model;\n\n return (\n <StyledInfractionDetails className=\"col-md-3\" priceBackground={this.props.priceBackground}>\n <div className=\"checkout-details\">\n <div className=\"row\">\n <div className=\"col-md-12 title-col1\">\n <Paragraph> </Paragraph>\n <Paragraph> </Paragraph>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-12\">\n <div className=\"container-details\">\n <div className=\"infractions-details\">\n {!!infraction.act && (\n <>\n <Title\n type=\"h4\"\n text={t('acta')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <p>{infraction.act}</p>\n </>\n )}\n <Title\n type=\"h4\"\n text={t('date')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <p>{infraction.creationDate}</p>\n <Title\n type=\"h4\"\n text={t('description')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <p>{infraction.description || ' - '}</p>\n {infraction.attachment && (\n <>\n <Title\n type=\"h4\"\n text={t('attachedFile')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <a\n className=\"mr-5\"\n href={infraction.attachment}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <i className=\"far fa-file-pdf\" size=\"3\"></i>\n </a>\n </>\n )}\n </div>\n <hr />\n <div className=\"booking-details\">\n <Title type=\"h4\" text={'Car'} weight=\"700\" fontSize={14} italic={false} noMedia />\n <p>\n {model.brand.name} {model.name} ({infraction.car.id})\n </p>\n\n {booking && (\n <>\n <Title\n type=\"h4\"\n text={t('delivery')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <p>\n {booking.deliveryPlace.name} -{' '}\n <span className=\"date\">\n {' '}\n {Moment(booking.fromDate).format('DD-MM-YYYY HH:mm')} hs\n </span>\n </p>\n <Title\n type=\"h4\"\n text={t('return')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <p>\n {booking.returnPlace.name} -{' '}\n <span className=\"date\">\n {Moment(booking.toDate).format('DD-MM-YYYY HH:mm')} hs\n </span>\n </p>\n </>\n )}\n </div>\n </div>\n <div className=\"payment mt-3 mb-3\">\n {installment ? (\n <>\n <div className=\"row text-light\">\n <div className=\"col-md-6\">\n <Title\n type=\"h4\"\n fontSize=\"16\"\n className=\"text-light\"\n text={t('infraction')}\n />\n </div>\n <div className=\"col-md-6 text-right\">\n <p className=\"\">\n <NumberDisplay value={infraction.amount} />\n </p>\n </div>\n <div className=\"col-md-6\">\n <Title\n type=\"h4\"\n fontSize=\"16\"\n className=\"text-light\"\n text={t('totalFinancing')}\n />\n </div>\n <div className=\"col-md-6 text-right\">\n <p className=\"\">\n <NumberDisplay value={installment.total_amount - infraction.amount} />\n </p>\n </div>\n <div className=\"col-md-6\">\n <Title type=\"h3\" className=\"total-name text-light\" text={t('totalToPay')} />\n </div>\n <div className=\"col-md-6 text-right\">\n <p className=\"total-price\">\n <NumberDisplay value={installment.total_amount} />\n </p>\n </div>\n </div>\n </>\n ) : (\n <div className=\"row text-light\">\n <div className=\"col-md-6\">\n <Title type=\"h4\" className=\"total-name text-light\" text={t('totalToPay')} />\n </div>\n <div className=\"col-md-6 text-right\">\n <p className=\"total-price\">\n <NumberDisplay value={infraction.amount} />\n </p>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </StyledInfractionDetails>\n );\n }\n}\n\nconst mapStateToProps = ({ infractions, siteConfiguration }) => ({\n infractions: infractions,\n settings: siteConfiguration.settings,\n});\nexport default connect(mapStateToProps, { fetchCategories })(\n withRouter(withTranslation()(InfractionDetailSection)),\n);\n","import style from 'styled-components';\n\nexport const StyledDetails = style.section`\n\n @media (max-width: ${props => props.theme.screens.md}) {\n display:none;\n }\n\n @media (min-width: ${props => props.theme.screens.md}){\n -webkit-box-flex: 0;\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}) {\n flex: 0 0 32%;\n max-width: 32%;\n }\n\n .checkout-details {\n .title-col1 { margin: 5px; }\n .title-col1 p { font-size: 18px; }\n\n .title-col1 h3 {\n margin-bottom: 0px !important;\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n font-size: 20px;\n margin-top: 2.5%;\n }\n }\n\n .img-fluid {\n max-width: 100%;\n height: auto;\n max-height: 164px;\n }\n\n .car-item .car-name { \n font-size: 20px;\n font-weight: 700;\n font-style: normal;\n margin-top: 0px;\n margin-bottom: 5px;\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) \n and (min-width: ${props => props.theme.screens.xl}){\n font-size: 18px; \n margin-bottom: 3px;\n }\n }\n\n .car-category{\n font-weight: 600;\n span{\n text-transform: uppercase;\n }\n }\n\n .car-item .details {\n margin-bottom: 0;\n }\n\n .car-item .details-item {\n display: inline-block;\n text-align: center;\n margin-right: 6px;\n }\n\n .car-item .details-item img {\n width: 42px;\n border: 1px solid #CCCCCC;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n }\n\n .pickup-details {\n font-size: 13px;\n }\n\n .rent-details {\n background-color: #fff;\n padding: 6% 7% 3% 7%;\n }\n\n .rent-details .payment-details li {\n font-size: 13px;\n margin-bottom: 5px;\n\n i {font-size: 8px; display: inline-block; margin-right: 5px;}\n \n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n font-size: 11px;\n margin-bottom: 7px;\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.xl}) \n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 11px;\n margin-bottom: 5px;\n }\n }\n\n .rent-details .payment-details .item-name {\n font-weight: bold;\n }\n\n .payment {\n background-color: ${props => props.priceBackground || props.theme.colors.primary};\n color: ${props => props.priceColor || props.theme.font.colors.secondary};\n padding: 5% 7% 3% 7%;\n margin-bottom: 2em !important;\n\n .total-price {\n font-size: 40px;\n font-weight: 700;\n line-height: 22px;\n margin-bottom: 8px;\n margin-top: 10px;\n white-space: nowrap;\n \n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n font-size: 30px;\n }\n \n @media only screen and (min-width: ${props => props.theme.screens.xl}) \n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 35px;\n }\n }\n \n .days{\n font-size:12px;\n }\n\n .diario {\n font-size:12px;\n font-weight: lighter;\n }\n }\n\n .payment .total-name h3{\n font-size: 18px;\n margin-bottom: 0px !important;\n margin-top: 6% !important;\n\n @media only screen and (min-width: ${props => props.theme.screens.xl}) \n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 16px;\n }\n }\n \n }\n`;\n\nexport const NoBookingDivStyled = style.div`\n text-align: center;\n\n p{\n margin-bottom: 20px;\n }\n\n a {\n transition: all 0.4s;\n cursor: pointer;\n text-align: center;\n margin: 40px auto;\n }\n\n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg} !important; }\n\n .error{\n font-size:90px;\n margin: 40px auto;\n text-align: center;\n }\n`;","import React from 'react';\nimport { Title, Paragraph, ModelDetail, NumberDisplay } from 'components/';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withTranslation } from 'react-i18next';\nimport queryString from 'query-string';\nimport { StyledDetails } from './TollDetailSection.styled';\nimport { tt } from 'utils/translationHelper';\nimport Moment from 'moment';\nimport { fetchCategories } from 'actions';\nimport { getPriceWithCommission } from 'utils/dataHelper';\nimport { handleGetTotalToPay } from 'utils/dataHelper';\nclass BookingDetailSection extends React.Component {\n constructor(props) {\n const { t } = props;\n super(props);\n this.state = {\n paymentInfo: {\n qsamount: 0,\n },\n };\n }\n\n goBack = () => {\n this.props.history.goBack();\n };\n\n getTotalToPay() {\n const {\n bookings: { confirmation },\n settings: { paymentConfiguration },\n } = this.props;\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n return handleGetTotalToPay(confirmation.customerBalance, paymentConfiguration, qsamount);\n }\n\n async componentWillMount() {\n const { categories, fetchCategories, i18n } = this.props;\n if (!categories) await fetchCategories(i18n.language);\n const { location } = this.props;\n const { paymentInfo } = this.state;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ paymentInfo: { ...paymentInfo, qsamount: partial } });\n }\n }\n }\n\n showBookingLenght = booking => {\n const { t, diasDeAlquiler } = this.props;\n const bookingLength = Number.isInteger(booking.totalDays)\n ? booking.totalDays\n : booking.totalDaysString;\n\n return diasDeAlquiler\n ? `Por ${bookingLength} ${diasDeAlquiler}`\n : t('forDaysOfRent', { totalDays: bookingLength });\n };\n\n getModel = () => {\n const {\n bookings: { confirmation },\n settings: { featureFlags },\n categories,\n } = this.props;\n let model;\n\n if (featureFlags.availabilityGroup !== 'category') {\n model = confirmation !== null && confirmation.car !== null ? confirmation.car.model : null;\n } else {\n if (!categories) return null;\n const bookingCategory = confirmation.category;\n const categoryFound = categories.find(c => c.id === bookingCategory.id);\n if (!categoryFound) return null;\n model = categoryFound.models.find(model => model.id === bookingCategory.principalModelId);\n }\n\n return model;\n };\n\n render() {\n const {\n bookings: { confirmation },\n settings: { featureFlags, paymentConfiguration },\n t,\n prefixForNumeric,\n installment,\n franchiseText,\n detailsLegend,\n bookingsConfiguration,\n } = this.props;\n\n const {\n paymentInfo: { qsamount },\n } = this.state;\n\n const booking = confirmation !== null ? confirmation : null;\n const model = this.getModel();\n if (!model) return null;\n\n const showDeposit = featureFlags.showDeposit === undefined ? true : featureFlags.showDeposit;\n\n const kmText =\n booking.ilimitedKm === true\n ? t(\n bookingsConfiguration?.distanceUnit == 'Kilometers'\n ? 'KmIlimitados'\n : 'MillasIlimitados',\n )\n : t(bookingsConfiguration?.distanceUnit == 'Kilometers' ? 'KmDiarios' : 'MillasDiarios', {\n km: booking.maxAllowedDistanceByDay,\n });\n\n return (\n <StyledDetails className=\"col-md-3\" priceBackground={this.props.priceBackground}>\n <div className=\"checkout-details\">\n <div className=\"row\">\n <div className=\"col-md-12 title-col1\">\n <Title\n type=\"h2\"\n text={t('tolls.title')}\n italic={false}\n weight=\"700\"\n fontSize={20}\n className=\"mt-1\"\n />\n <Paragraph>{t('tolls.subtitle', t)}</Paragraph>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-12\">\n <div className=\"rent-details\">\n <div className=\"car-item\">\n <div className=\"car-details\">\n <h2 className=\"car-name mt-1\">\n {model.brand.name} {model.name}\n </h2>\n <Paragraph className=\"car-category mb-0\">\n {t('categoria')} <span>{(model.category || booking.category).name}</span>\n <div className=\"d-inline-block\">\n <span className=\"mr-2 ml-2\">|</span>\n <span className=\"tachometer text-capitalize\">\n <i className=\"fas fa-tachometer-alt mr-1\"></i>\n {kmText}\n </span>\n </div>\n </Paragraph>\n {showDeposit && (\n <p className=\"franchise mb-3\">\n <i\n className=\"fas fa-info-circle\"\n data-toggle=\"tooltip\"\n title=\"\"\n data-original-title={t('franchiseHelpText')}\n />\n <strong>{t(franchiseText) || t('franquicia')} </strong>\n <span>\n <NumberDisplay value={booking.franchise} />\n </span>\n </p>\n )}\n </div>\n <div className=\"car-image text-center mb-3\">\n <img className=\"img-fluid\" src={model.imagePath} alt={model.name} />\n </div>\n <ModelDetail model={model} prefixForNumeric={prefixForNumeric} />\n </div>\n <hr />\n <div className=\"pickup-details\">\n <Title\n type=\"h4\"\n text={t('delivery')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <p>\n {booking.deliveryPlace.name} -\n <span className=\"date\">\n {' '}\n {Moment(confirmation.fromDate).format('DD-MM-YYYY HH:mm')} hs\n </span>\n </p>\n <Title\n type=\"h4\"\n text={t('return')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <p>\n {booking.returnPlace.name} -\n <span className=\"date\">\n {' '}\n {Moment(confirmation.toDate).format('DD-MM-YYYY HH:mm')} hs\n </span>\n </p>\n </div>\n </div>\n <div className=\"payment mt-3 mb-3\">\n <div className=\"row text-light\">\n {installment ? (\n <>\n <div className=\"col-md-6\">\n <Title type=\"h4\" fontSize=\"16\" className=\"text-light\" text={t('booking')} />\n </div>\n <div className=\"col-md-6 text-right\">\n <p className=\"\">\n <NumberDisplay\n value={getPriceWithCommission(\n Math.abs(booking.balance),\n paymentConfiguration,\n )}\n />\n </p>\n </div>\n <div className=\"col-md-6\">\n <Title\n type=\"h4\"\n fontSize=\"16\"\n className=\"text-light\"\n text={t('totalFinancing')}\n />\n </div>\n <div className=\"col-md-6 text-right\">\n <p className=\"\">\n <NumberDisplay\n value={\n installment.total_amount -\n getPriceWithCommission(\n Math.abs(booking.balance),\n paymentConfiguration,\n )\n }\n />\n </p>\n </div>\n <div className=\"col-md-6\">\n <Title type=\"h3\" className=\"total-name text-light\" text={t('totalToPay')} />\n </div>\n <div className=\"col-md-6 text-right\">\n <p className=\"total-price\">\n <NumberDisplay value={installment.total_amount} />\n </p>\n </div>\n </>\n ) : (\n <>\n <div className=\"col-md-6\">\n <Title type=\"h3\" className=\"total-name text-light\" text={t('totalToPay')} />\n </div>\n <div className=\"col-md-6 text-right\">\n <p className=\"total-price\">\n <NumberDisplay\n value={getPriceWithCommission(Math.abs(qsamount), paymentConfiguration)}\n />\n </p>\n </div>\n </>\n )}\n {detailsLegend && (\n <div className=\"col-md-12\">\n <Paragraph className=\"text-light\">{tt(detailsLegend, t)}</Paragraph>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n </StyledDetails>\n );\n }\n}\n\nconst mapStateToProps = ({ bookings, siteConfiguration, global }) => ({\n bookings: bookings,\n installment: bookings.installment,\n settings: siteConfiguration.settings,\n categories: global.listCategories,\n bookingsConfiguration: bookings.configuration,\n});\nexport default connect(mapStateToProps, { fetchCategories })(\n withRouter(withTranslation()(BookingDetailSection)),\n);\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { TranslatedComponent } from 'components/';\nimport { ColumnsSection } from 'components/';\n\nclass FeedbackBox extends TranslatedComponent {\n componentDidMount() {\n const { isWidget } = this.props;\n\n if (isWidget) {\n window.top.postMessage(\n { height: document.body.scrollHeight, width: document.body.scrollWidth },\n '*',\n );\n }\n }\n\n createBoxItems = () => {\n let { buttonInfo } = this.props;\n const { title, subtitle, message, messageType, routerProps } = this.props;\n\n let defaultSubtitle, detailedError, bookingId;\n\n if (routerProps && routerProps.state && routerProps.state.subtitle)\n defaultSubtitle = routerProps.state.subtitle;\n\n if (routerProps && routerProps.state && routerProps.state.bookingId)\n bookingId = `#${routerProps.state.bookingId}`;\n\n if (routerProps && routerProps.state && routerProps.state.detailedError)\n detailedError = routerProps.state.detailedError;\n\n if (routerProps && routerProps.state && routerProps.state.buttonInfo)\n buttonInfo = routerProps.state.buttonInfo;\n\n let items = [];\n\n items.push({\n component: 'Icon',\n className:\n messageType === 'success'\n ? 'fas fa-check-circle display-3 mb-5 text-success'\n : 'fas fa-times-circle display-3 mb-5 text-danger',\n });\n\n items.push({\n component: 'Title',\n type: 'h2',\n text: title,\n paramsObj: bookingId ? { bookingId } : {},\n });\n\n if (subtitle || defaultSubtitle) {\n items.push({\n component: 'Paragraph',\n text: subtitle ? subtitle : defaultSubtitle,\n weight: 300,\n fontSize: '1.25rem',\n className: 'mb-2',\n });\n }\n\n if (buttonInfo) {\n items.push({\n component: 'Btn',\n type: 'submit',\n className: 'mt-2 mb-2',\n style: { display: 'inline' },\n text: buttonInfo.text,\n link: buttonInfo.link_to,\n selfLink: buttonInfo.selfLink || true,\n });\n }\n\n if (messageType === 'error' && detailedError) {\n items.push({\n component: 'Paragraph',\n text: detailedError,\n color: 'red',\n });\n }\n\n items.push({\n component: 'Paragraph',\n text: message,\n className: 'mb-5 pb-5',\n });\n\n return items;\n };\n\n render() {\n const sections = [\n {\n component: 'Column',\n className: 'col-md-8 offset-md-2 text-center mt-5 pt-5',\n sections: this.createBoxItems(),\n },\n ];\n\n const props = { ...this.props, sections };\n return <ColumnsSection {...props} />;\n }\n}\n\nexport default withTranslation()(FeedbackBox);\n","import style from 'styled-components';\n\nexport const StyledCondicionesSection = style.section`\n\tbackground: ${props => (props.background ? `url(${props.background}) no-repeat` : `white`)};\n min-height: 400px;\n padding-top:32px;\n width: 100%;\n\th2{ \n margin-bottom: 16px;\n }\n h1{ \n margin-bottom: 8px;\n }\n p{\n font-size: 12px;\n }\n .fa-angle-right{\n color: ${props => props.theme.colors.primary}\n }\n .condiciones h3{\n margin-bottom:22px;\n }\n .list-unstyled li{\n font-size:14px;\n line-height:1.8rem;\n }\n .condiciones{\n padding:0px 40px;\n }\n div.condiciones.highlight{\n background: ${props => props.highlightColor || props.theme.colors.highlight};\n padding: 2rem 3rem;\n max-height: fit-content;\n }\n .conditions-container-wrapper {\n margin-bottom: 3rem;\n padding: 0;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledCondicionesSectionModern = style.section`\n\tbackground: ${props => (props.background ? `url(${props.background}) no-repeat` : `white`)};\n min-height: 400px;\n padding-top:32px;\n width: 100%;\n \n .conditionsBG{\n background-color:#F2F5F7;\n border-radius:12px; \n }\n\n .conditions-container-wrapper {\n padding: 1.5rem;\n }\n\n\th2{ \n margin-bottom: 16px;\n text-align:left;\n }\n h1{ \n margin-bottom: 8px;\n }\n p{\n font-size: 16px;\n }\n .fa-angle-right{\n color: ${props => props.theme.colors.primary}\n }\n \n .list-unstyled li{\n font-size:14px;\n line-height:1.8rem;\n }\n .condiciones{\n padding:10px 40px;\n }\n\n .imgFaqs{ \n .img{ \n span {\n display:flex!important;\n justify-content:center!important;\n\n img {\n padding-left:0px;\n margin-bottom:50px;\n }\n }\n }\n }\n\n .card {\n background:#F4F5F6 !important;\n border-radius: 8px !important;\n border: none !important;\n margin-bottom: 10px;\n box-shadow:0 1px 3px rgb(29 99 71 / 5%), 0 2px 5px rgb(29 99 71 / 4%);\n }\n\n .card:hover {\n box-shadow:0 1px 3px rgb(29 99 71 / 8%), 0 2px 5px rgb(29 99 71 / 8%);\n }\n\n .card-header {\n color:#2E2D35;\n font-weight:500;\n }\n .card-header:hover {\n color:${props => props.theme.colors.primary};\n font-weight:500;\n }\n\n .card-header .fa-info-circle {\n display:none;\n }\n\n .card-body {\n padding: 0 20px !important;\n }\n\n .card-body p {\n font-size: 15px !important;\n }\n\n @media (max-width: 767px){\n\n .conditionsBG{\n background-color:#F2F5F7;\n padding:0;\n border-radius:12px;\n }\n\n .p-4{\n padding:0 !important;\n }\n\n .imgFaqs img{\n padding-left:0;\n margin:40px;\n }\n \n }\n\n @media(max-width:767px){\n .conditions-container-wrapper {\n padding: 0;\n }\n \n }\n\n`;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n faqs: PropTypes.array,\n conditions: PropTypes.array,\n highlightColor: PropTypes.string,\n modernImage: PropTypes.string,\n};\n","import React from 'react';\nimport { StyledCondicionesSection } from './CondicionesSection.styled';\nimport { StyledCondicionesSectionModern } from './CondicionesSection.styled.modern';\nimport { props } from './CondicionesSection.props';\nimport { AccordionCard, Title, TranslatedComponent } from 'components/';\nimport { Accordion } from 'react-bootstrap';\nimport { withTranslation } from 'react-i18next';\nimport Helmet from 'react-helmet';\nimport Paragraph from 'components/CMS/Paragraph/Paragraph';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\nimport 'react-lazy-load-image-component/src/effects/blur.css';\n\nclass CondicionesSection extends TranslatedComponent {\n static propTypes = props;\n\n accordionContent(faqs, i, theme, modernImage) {\n const { titleType, fontWeight, fontSize, showImage } = this.props;\n\n if (theme === MODERN_THEME && showImage !== false) {\n return (\n <>\n <div className=\"col-lg-6\">\n <Accordion>\n {faqs.map((faq, key) => (\n <AccordionCard\n title={this.tt(faq.question)}\n body={this.tt(faq.answer)}\n key={key}\n keyValue={key}\n titleType={titleType}\n fontWeight={fontWeight}\n fontSize={fontSize}\n />\n ))}\n </Accordion>\n </div>\n <div className=\"col-lg-6 imgFaqs\">\n <div className=\"img\">\n <LazyLoadImage\n src={modernImage}\n alt=\"faq-questions-img\"\n threshold={100}\n effect=\"blur\"\n height={'100%'}\n width={'100%'}\n />\n </div>\n </div>\n </>\n );\n }\n\n return (\n <>\n <div className=\"col-lg-6\">\n <Accordion>\n {faqs.slice(0, i).map((faq, key) => (\n <AccordionCard\n title={this.tt(faq.question)}\n body={this.tt(faq.answer)}\n key={key}\n keyValue={key}\n titleType={titleType}\n fontWeight={fontWeight}\n fontSize={fontSize}\n />\n ))}\n </Accordion>\n </div>\n\n <div className=\"col-lg-6\">\n <Accordion>\n {faqs.length - i > 0 &&\n faqs\n .slice(i, faqs.length)\n .map((faq, key) => (\n <AccordionCard\n title={this.tt(faq.question)}\n body={this.tt(faq.answer)}\n key={i + key}\n keyValue={i + key}\n titleType={titleType}\n fontWeight={fontWeight}\n fontSize={fontSize}\n />\n ))}\n </Accordion>\n </div>\n </>\n );\n }\n\n faqsSection(faqs, modernImage) {\n if (faqs && faqs.length > 0) {\n let i = Math.ceil(faqs.length / 2);\n if (i === 0) i = faqs.length;\n\n var faqTag = {\n '@context': 'https://schema.org',\n '@type': 'FAQPage',\n mainEntity: faqs.map(q => {\n return {\n '@type': 'Question',\n name: this.tt(q.question),\n acceptedAnswer: {\n '@type': 'Answer',\n text: this.tt(q.answer),\n },\n };\n }),\n };\n\n const defaultLang = this.props.settings.configurations.defaultLang;\n const conditionsPageSchemaTags = this.props.settings.translations[defaultLang][\n '__PageCondiciones'\n ].schemaTags;\n const theme = this.props.settings.theme.template;\n\n return (\n <>\n {conditionsPageSchemaTags === null ||\n (conditionsPageSchemaTags === undefined && (\n <Helmet>\n <script type=\"application/ld+json\">{`${JSON.stringify(faqTag)}`}</script>\n </Helmet>\n ))}\n\n {this.props.onlyFaq || theme === MODERN_THEME ? null : <hr />}\n <div className=\"row\">\n {this.props.onlyFaq ? null : (\n <div className=\"col-md-12 text-center mt-5 mb-4\">\n <Title type=\"h2\" text={this.props.titleFaq || 'Faq'} weight=\"900\" fontSize={30} />\n </div>\n )}\n {this.accordionContent(faqs, i, theme, modernImage)}\n </div>\n </>\n );\n }\n\n return null;\n }\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledCondicionesSectionModern;\n }\n return StyledCondicionesSection;\n }\n\n render() {\n const { conditions, faqs, conditionsColClass, settings, modernImage } = this.props;\n const modernTheme = settings.theme.template === MODERN_THEME;\n const StyledSection = this.getTemplateStyledComponent();\n\n const conditionCol = modernTheme ? 'col-lg-12' : 'col-lg-6';\n const conditionMargin = modernTheme ? 'mt-3 ' : 'mb-5 ';\n const fontSize = modernTheme ? 21 : 18;\n\n return (\n <StyledSection highlightColor={this.props.highlightColor}>\n <div className=\"col-md-12 conditions-container-wrapper\">\n <div className=\"container-fluid conditionsBG\">\n <div className=\"row mb-5\">\n {conditions &&\n conditions.map((condition, key) => (\n <div\n className={\n (conditionsColClass || conditionCol) +\n ' condiciones ' +\n conditionMargin +\n (condition.highlight ? 'highlight' : '')\n }\n key={`condition-${key}`}\n >\n <Title\n type={'h3'}\n weight=\"600\"\n fontSize={fontSize}\n text={condition.name}\n italic={false}\n />\n <ul className=\"list-unstyled\">\n {condition.items &&\n condition.items.map((cItem, cKey) => (\n <li key={cKey}>\n <i className=\"fas fa-angle-right\" />{' '}\n <Paragraph text={cItem} style={{ display: 'inline' }} />\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n {this.faqsSection(faqs, modernImage)}\n </div>\n </StyledSection>\n );\n }\n}\n\nexport default withSettingsContext(withTranslation()(CondicionesSection));\n","import CondicionesSection from './CondicionesSection';\nexport default CondicionesSection;\n","import style from 'styled-components';\n\nexport const StyledAssociatesSection = style.section`\n\tmargin: auto;\n\tmargin-top: 20px;\n\twidth: 70%;\n\n\t.associate-page {\n\t\tbackground-color: ${props => props.theme.colors.primary};\n\t\tpadding: 20px !important;\n\t}\n\n\t.associates-header {\n\t\tbackground-color: white;\n\t\tpadding: 10px;\n\t\t\n\t\t.header-logo {}\n\t\t.header-title {\n\t\t\tmargin-left: 50px;\n\t\t\tfont-size: 2em;\n\t\t\tfont-weight: bold;\n\t\t\ttext-transform: uppercase;\n\t\t}\n\t\t.header-subtitle {\n\t\t\tfont-size: 1.2em;\n\t\t\tfont-weight: bold;\n\t\t\ttext-transform: uppercase;\n\t\t\tdisplay:flex;\n\t\t\tjustify-content: center;\n\t\t\tmargin-top: 10px;\n\t\t}\n\t}\n\n\t.associate-item {\n\t\tmin-width: 50%;\n\n\t\t.row {\n\t\t\tdisplay:flex;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t.item-number {\n\t\t\twidth: 60px;\n\t\t\theight: 60px;\n\t\t\tline-height: 60px;\n\t\t\tborder-radius: 50%;\n\n\t\t\tfont-size: 2.5em;\n\t\t\tfont-weigth: bold;\n\t\t\tcolor: ${props => props.theme.colors.primary};\n\t\t\tbackground-color: white;\n\t\t\ttext-align: center;\n\t\t}\n\n\t\t.item-icon {\n\n\t\t}\n\n\t\t.item-title {\n\t\t\tfont-size: 1.2em;\n\t\t\tfont-weight: bold;\n\t\t\ttext-transform: uppercase !important;\n\t\t\tdisplay:flex;\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t.item-description {\n\n\t\t}\n\t}\n\n\t.associate-footer {\n\t\tdisplay:flex;\n\t\tjustify-content: center;\n\t\tbackground-color: ${props => props.theme.colors.secondary};\n\t\tpadding: 50px !important;\n\n\t\tp {\n\t\t\tcolor: white;\n\t\t\tfont-size: 1em;\n\t\t\tfont-weight: bold;\n\t\t\ttext-transform: uppercase;\n\t\t}\n\t}\n`;\n","import React from 'react';\nimport { StyledAssociatesSection } from './AssociatesSection.styled';\nimport { Title, TranslatedComponent } from 'components/';\nimport { withTranslation } from 'react-i18next';\n\nclass AssociatesSection extends TranslatedComponent {\n renderHeader = header => {\n return (\n <div className=\"associates-header\">\n <div>\n <span className=\"header-icon\">\n <img src={header.logoUrl} alt={header.logoAlt} />\n </span>\n <span className=\"header-title\">{this.tt(header.title)}</span>\n </div>\n <p className=\"header-subtitle\">{this.tt(header.subTitle)}</p>\n </div>\n );\n };\n\n renderItem = (item, key) => {\n return (\n <div className=\"col mb-3 associate-item\" key={`item-${key}`}>\n <div className=\"row mb-3\">\n <div className=\"item-number\">{key + 1}</div>\n <div className=\"item-icon\">icon</div>\n </div>\n <div className=\"item-title\">{this.tt(item.title)}</div>\n <div className=\"item-description\">{this.tt(item.description)}</div>\n </div>\n );\n };\n\n renderFooter = footer => {\n return <p>{this.tt(footer.text)}</p>;\n };\n\n render() {\n const { header, items, footer } = this.props;\n\n return (\n <StyledAssociatesSection highlightColor={this.props.highlightColor}>\n <div className=\"associate-page col-md-12 p-0\">\n {this.renderHeader(header)}\n <div className=\"container-fluid\">\n <div className=\"row mt-3\">\n {items && items.map((item, key) => this.renderItem(item, key))}\n </div>\n </div>\n </div>\n <div className=\"associate-footer\">{this.renderFooter(footer)}</div>\n </StyledAssociatesSection>\n );\n }\n}\n\nexport default withTranslation()(AssociatesSection);\n","import style from 'styled-components';\n\nexport const StyledPhotoLinkSection = style.div`\n\t.flex-centered {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t}\n`;\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { tlink } from 'utils/translationHelper';\n\nimport { TranslatedComponent, Btn, Title, Paragraph, Loading } from 'components/';\nimport { StyledPhotoLinkSection } from './PhotoLinkSection.styled';\n\nclass PhotoLinkSection extends TranslatedComponent {\n render() {\n const { className, title, subtitle, items } = this.props;\n\n return (\n <StyledPhotoLinkSection className=\"pt-3 pb-2\">\n <div className=\"pt-2 pb-2 flex-centered\">\n <Title type=\"h3\" text={this.tt(title)} />\n <Paragraph className=\"lead\" text={subtitle} />\n </div>\n <div className=\"flex-centered\">\n {items.map(item => (\n <a href={this.tt(item.linkTo)}>\n <img className={className} src={this.tt(item.src)} alt={item.name || ''} />\n </a>\n ))}\n </div>\n </StyledPhotoLinkSection>\n );\n }\n}\n\nexport default withTranslation()(PhotoLinkSection);\n","import PhotoLinkSection from './PhotoLinkSection';\nexport default PhotoLinkSection;\n","import PropTypes from 'prop-types';\n\nconst placeShape = PropTypes.shape({\n address: PropTypes.string,\n category: PropTypes.string,\n id: PropTypes.number,\n name: PropTypes.string,\n price: PropTypes.number,\n rentlyEndpointName: PropTypes.string,\n});\n\nexport const props = {\n params: PropTypes.shape({}),\n places: PropTypes.arrayOf(placeShape),\n setSearchCarParams: PropTypes.func.isRequired,\n fetchBookeableCars: PropTypes.func.isRequired,\n prefixForNumeric: PropTypes.string,\n showCity: PropTypes.bool,\n};\n\nexport const defaultProps = {\n params: {},\n};\n","import style from 'styled-components';\n\nexport const StyledFilter = style.section`\n min-height: 600px;\n z-index:1;\n\n .overlay{\n width: 100%;\n height: 100vh;\n background: #00000042;\n position: absolute;\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n position: -webkit-sticky; \n position: sticky;\n top: 0;\n min-height: 0;\n margin-left: -2%;\n margin-right: -2%;\n width: 100vw;\n padding: 0;\n\n .searchFilter, .categoriesFilter {\n display:block !important;\n }\n\n .search-form, .categoryBlock{ \n display:none;\n }\n }\n \n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n position: -webkit-sticky; \n position: sticky;\n top: 0;\n min-height: 0;\n flex: 0 0 104%;\n max-width: initial;\n width: 100vw;\n padding: 0;\n margin-left: -2%;\n margin-right: -2%;\n\n .searchFilter, .categoriesFilter {\n display:block !important;\n }\n\n .search-form, .categoryBlock{\n display:none;\n }\n }\n\n @media only screen and (min-width: 1281px) and (max-width: ${props => props.theme.screens.xxl}){\n max-width: 30%;\n margin-right: 0;\n flex: 30%;\n }\n\n .searchFilter{\n display:none;\n box-shadow: 0 0 20px #00000026;\n\n section{\n background: transparent;\n }\n .card{\n border: none;\n background: transparent;\n }\n\n .card-header{\n border-bottom: 1px solid #f2f2f2;\n background: #fff;\n .fa-info-circle{\n display:none;\n }\n .fa-calendar-alt{\n color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n .divider{\n color: #c2c2c2;\n }\n }\n .collapse{\n z-index: 1200;\n }\n \n .card-body{\n padding: 0;\n margin: 0;\n border: none;\n background: transparent;\n\n form{\n box-shadow: none;\n margin: 0 !important;\n padding: 1.25rem 1.25rem 2rem !important;\n .col-md-12{\n margin-bottom: 0;\n }\n }\n }\n }\n\n .categoriesFilter {\n display:none;\n position: fixed;\n bottom: 0;\n width: 100%;\n background: #fff;\n padding: 15px 0;\n box-shadow: 0 0 15px #0000003d;\n border-top: 1px solid #f2f2f2;\n border-bottom: none; \n z-index: -1;\n\n i{\n color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n &:focus{\n outline: none;\n }\n }\n .categoryPopup-content{\n width: 87% !important;\n padding: 0 !important;\n border: none !important ;\n\n .modal{\n display:block;\n position: relative;\n\n .header{\n padding: 15px 30px 10px;\n border-bottom: 1px solid #f2f2f2;\n .close i{\n font-size: 14px;\n }\n }\n .content{\n padding: 20px 30px 30px;\n }\n .search-category{\n box-shadow: none;\n padding: 0 !important;\n margin: 0 !important;\n div{\n padding:0;\n }\n }\n }\n }\n\n .search-form {\n background-color: ${props => props.backgroud || props.theme.colors.bg};\n margin-top:3em;\n box-shadow: 3px 3px 6px #00000016;\n margin-left: -15px;\n \n .col-md-6{\n width: 100% !important;\n flex: 0 0 100%;\n max-width: 100%;\n }\n\n .col-md-3{\n width: 50% !important\n flex: 0 0 50%;\n max-width: 50%;;\n }\n\n span.toggle-drop-place {\n color : ${props => props.theme.colors.buttonPrimaryBgHover};\n display: block;\n margin-top: 20px;\n margin-bottom: 20px;\n cursor: pointer;\n }\n\n div.drop-place-input {\n margin-bottom: 20px;\n }\n\n .dates {\n vertical-align: center;\n\n span {\n font-weight: bold;\n }\n\n div.date-picker {\n padding: 1em;\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n padding: .7em;\n }\n input {\n font-size: 1em;\n font-weight: bold;\n }\n }\n\n div.select-hour {\n padding: 1em;\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n padding: .7em;\n }\n\n select {\n font-weight: bold;\n font-size: 1em;\n }\n }\n }\n\n .km-checkboxes {\n margin-top: 1em;\n\n .input-wrapper {\n padding: .3em;\n }\n }\n\n p{\n font-size: 13px;\n font-weight: 600;\n margin-bottom: 5px;\n\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 11px;\n }\n }\n\n button {\n width: 100%;\n }\n }\n\n`;\n","import style from 'styled-components';\n\nexport const StyledFilterModern = style.section`\n min-height: 600px;\n z-index:1;\n\n .overlay{\n width: 100%;\n height: 100vh;\n background: #00000042;\n position: absolute;\n }\n\n .categoryBlock{\n position: sticky;\n top: 56px;\n justify-content: flex-start; \n display:block;\n }\n\n .categoryBlock p{\n font-size:16px !important;\n }\n\n\n .search-category, .search-form {\n border-radius:12px;\n }\n \n\n @media (max-width: ${props => props.theme.screens.md}) {\n position: -webkit-sticky; \n position: sticky;\n top: 0;\n min-height: 0;\n margin-left: -2%;\n margin-right: -2%;\n width: 100vw;\n padding: 0;\n\n .searchFilter, .categoriesFilter {\n display:block !important;\n }\n\n .search-form, .categoryBlock{ \n display:none;\n }\n }\n \n @media only screen and (max-width: ${props => props.theme.screens.xl}) \n and (min-width: ${props => props.theme.screens.md}){\n position: -webkit-sticky; \n position: sticky;\n top: 0;\n min-height: 0;\n flex: 0 0 104%;\n max-width: initial;\n width: 100vw;\n padding: 0;\n margin-left: -2%;\n margin-right: -2%;\n\n .searchFilter, .categoriesFilter {\n display:block !important;\n }\n\n .search-form, .categoryBlock{\n display:none;\n }\n }\n\n @media only screen and (min-width: 1281px) and (max-width: ${props => props.theme.screens.xxl}){\n max-width: 30%;\n margin-right: 0;\n flex: 30%;\n }\n\n .searchFilter{\n display:none;\n box-shadow: 0 0 20px #00000026;\n\n section{\n background: transparent;\n }\n .card{\n border: none;\n background: transparent;\n }\n\n .card-header{\n border-bottom: 1px solid #f2f2f2;\n background: #fff;\n .fa-info-circle{\n display:none;\n }\n .fa-calendar-alt{\n color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n .divider{\n color: #c2c2c2;\n }\n }\n .collapse{\n z-index: 1200;\n }\n \n .card-body{\n padding: 0;\n margin: 0;\n border: none;\n background: transparent;\n\n form{\n box-shadow: none;\n margin: 0 !important;\n background:#FFF;\n padding: 1.25rem 1.25rem 2rem !important;\n .col-md-12{\n margin-bottom: 0;\n }\n }\n }\n }\n\n .categoriesFilter {\n display:none;\n position: fixed;\n bottom: 0;\n width: 100%;\n background: #fff;\n padding: 15px 0;\n box-shadow: 0 0 15px #0000003d;\n border-top: 1px solid #f2f2f2;\n border-bottom: none; \n z-index: -1;\n\n i{\n color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n &:focus{\n outline: none;\n }\n }\n .categoryPopup-content{\n width: 87% !important;\n padding: 0 !important;\n border: none !important;\n border-radius:12px;\n\n .modal{\n display:block;\n position: relative;\n\n .header{\n padding: 15px 30px 10px;\n border-bottom: 1px solid #f2f2f2;\n .close i{\n font-size: 14px;\n }\n }\n .content{\n padding: 20px 30px 30px;\n }\n .search-category{\n box-shadow: none;\n padding: 0 !important;\n margin: 0 !important;\n div{\n padding:0;\n }\n }\n }\n }\n\n .search-form {\n background-color: ${props => props.backgroud || props.theme.colors.bg};\n margin-top:5.2em !important;\n box-shadow: 3px 3px 6px #00000016;\n margin-left: -15px;\n \n .col-md-6{\n width: 100% !important;\n flex: 0 0 100%;\n max-width: 100%;\n }\n\n .col-md-3{\n width: 50% !important\n flex: 0 0 50%;\n max-width: 50%;\n margin-top:20px;\n }\n\n .input-wrapper {\n border-radius:10px;\n }\n\n .hour-select .input-wrapper {\n border-radius:10px;\n }\n\n .DateRangePickerInput {\n background: none;\n }\n\n label {\n font-size: 13px;\n font-weight: 500;\n color:#2E2D35;\n}\n\n span.toggle-drop-place {\n color : ${props => props.theme.colors.buttonPrimaryBgHover};\n display: block;\n margin-top: 20px;\n margin-bottom: 20px;\n cursor: pointer;\n }\n\n div.drop-place-input {\n margin-bottom: 20px;\n }\n\n .dates {\n vertical-align: center;\n\n span {\n font-weight: bold;\n }\n\n div.date-picker {\n padding: 1em;\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n padding: .7em;\n }\n input {\n font-size: 1em;\n font-weight: bold;\n }\n }\n\n div.select-hour {\n padding: 1em;\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n padding: .7em;\n }\n\n select {\n font-weight: bold;\n font-size: 1em;\n }\n }\n }\n\n .km-checkboxes {\n margin-top: 1em;\n\n .input-wrapper {\n padding: .3em;\n }\n }\n\n p{\n font-size: 13px;\n font-weight: 600;\n margin-bottom: 5px;\n\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 11px;\n }\n }\n\n button {\n width: 100%;\n }\n }\n\n @media(max-width:767px){\n .input-wrapper {\n border-radius:10px;\n }\n\n .hour-select .input-wrapper {\n border-radius:10px;\n }\n\n .DateRangePickerInput {\n background: none;\n }\n\n label {\n color:#2E2D35;\n}\n\n }\n\n`;\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { props, defaultProps } from './SearchFilter.prop';\nimport { StyledFilter } from './SearchFilter.styled';\nimport { SearchForm, CategoriesFilter, AccordionCard, Title, Btn } from 'components/';\nimport { Accordion } from 'react-bootstrap';\nimport { withTheme } from 'styled-components';\nimport Popup from 'reactjs-popup';\nimport withSettingsContext from 'SettingsContext';\nimport { StyledFilterModern } from './SearchFilter.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { dateFormatEdition } from 'utils/dataHelper';\nimport useWindowDimensions from 'utils/windowHelper';\n\nclass SearchFilter extends React.Component {\n constructor(props) {\n super(props);\n this.accordion = React.createRef();\n }\n state = {\n categoriesSelected: [],\n };\n\n handleCategoryChange = value => {\n this.setState(\n prevState => ({\n ...prevState,\n categoriesSelected: value,\n }),\n\n this.updateParametersState,\n );\n };\n\n closeAccordion = () => {\n const element = document.querySelector('#collapseSearch');\n element && element.click();\n };\n\n updateParametersState = () => {\n const { setSearchCarParams, params } = this.props;\n\n setSearchCarParams(params);\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledFilterModern;\n }\n return StyledFilter;\n }\n\n render() {\n const {\n searchCars: {\n params: { dateFrom, dateTo, categories },\n },\n settings: { configurations },\n t,\n showCity,\n promotionCodeText,\n customText,\n width,\n } = this.props;\n\n const StyledSection = this.getTemplateStyledComponent();\n\n const dateFormat = configurations.dateDisplayFormat || t('dateFormat');\n\n const mobileSearchForm = (\n <>\n <SearchForm\n className=\"home-form w-100 mt-5\"\n categories={categories}\n onSubmit={this.closeAccordion}\n showCity={showCity || false}\n promotionCodeText={promotionCodeText}\n customText={customText}\n />\n <div className=\"overlay\"></div>\n </>\n );\n\n const accordionHeader = (\n <span className=\"date\">\n <i className=\"far fa-calendar-alt mr-3\"></i> {dateFormatEdition(dateFrom, dateFormat)}\n <span className=\"divider ml-2 mr-2\">|</span> {dateFormatEdition(dateTo, dateFormat)}\n </span>\n );\n\n const categoriesFilter = <CategoriesFilter onCategoriesChanged={this.handleCategoryChange} />;\n\n return (\n <StyledSection className=\"col-md-3\" background={this.props.background}>\n {width < 768 ? (\n // Mobile Search Form\n <Accordion className=\"searchFilter sticky\">\n <AccordionCard\n ref={this.accordion}\n title={accordionHeader}\n element={mobileSearchForm}\n key=\"search\"\n keyValue=\"search\"\n />\n </Accordion>\n ) : (\n // Desktop Search Form\n <SearchForm\n className=\"home-form search-form w-100 mt-5\"\n categories={categories}\n showCity={showCity || false}\n resultsPage\n promotionCodeText={promotionCodeText}\n customText={customText}\n />\n )}\n\n <div className=\"categoryBlock\">{categoriesFilter}</div>\n\n <Popup\n className=\"categoryPopup\"\n trigger={\n <button className=\"button categoriesFilter\">\n <i className=\"fa fa-filter mr-2\"></i> {t('categorias')}\n </button>\n }\n modal\n >\n {close => (\n <div className=\"modal\">\n <div className=\"header\">\n <Title\n type=\"h4\"\n className=\"d-inline-block\"\n text={t('filters')}\n weight=\"700\"\n fontSize={15}\n italic={false}\n noMedia\n />\n <a className=\"close\" onClick={close}>\n <i className=\"fa fa-times\" aria-hidden=\"true\"></i>\n </a>\n </div>\n <div className=\"content\">\n {categoriesFilter}\n <Btn text={t('applyFilter')} onClick={close} className=\"mt-4 w-100\" />\n </div>\n </div>\n )}\n </Popup>\n {/* <SearchMap /> */}\n </StyledSection>\n );\n }\n}\n\nconst FunctionalSearchFilter = props => {\n const { width } = useWindowDimensions();\n return <SearchFilter width={width} {...props} />;\n};\n\nSearchFilter.propTypes = props;\nSearchFilter.defaultProps = defaultProps;\nexport default withSettingsContext(withTheme(withTranslation()(FunctionalSearchFilter)));\n","import { connect } from 'react-redux';\nimport SearchFilter from './SearchFilter';\nimport { setSearchCarParams, fetchBookeableCars } from 'actions/';\n\nconst mapStateToProps = ({ global, searchCars }) => ({\n listCategories: global.listCategories,\n places: global.listPlaces,\n params: searchCars.params,\n searchCars,\n});\n\nexport default connect(mapStateToProps, { setSearchCarParams, fetchBookeableCars })(SearchFilter);\n","import PropTypes from 'prop-types';\n\nexport const props = {\n cars: PropTypes.array.isRequired,\n background: PropTypes.string,\n noAvailabilityImage: PropTypes.string,\n noAvailabilityMessage: PropTypes.string,\n searchGif: PropTypes.string,\n searchMessage: PropTypes.string,\n backgroundItems: PropTypes.string,\n showModelDetail: PropTypes.bool,\n currentCurrency: PropTypes.object,\n defaultCurrency: PropTypes.object,\n webCurrency: PropTypes.object,\n};\n\nexport const defaults = {\n cars: [],\n categories: { allCategoriesSelected: true, categoriesSelected: [] },\n showModelDetail: true,\n};\n","import styled from 'styled-components';\n\nexport const StyledSearchItems = styled.section`\n background: ${props => props.background || props.theme.colors.bg};\n min-height: 600px;\n padding: 0;\n\n @media only screen and (min-width: ${props => props.theme.screens.xl}) and (max-width: ${props =>\n props.theme.screens.xxl}) {\n flex: 70%;\n max-width: 70%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) and (min-width: ${props =>\n props.theme.screens.md}) {\n width: 100%;\n max-width: 100%;\n flex: 100%;\n }\n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n .row-container {\n padding-left: 6px;\n padding-right: 6px;\n }\n }\n\n .alert {\n width: fit-content;\n p {\n font-size: 14px;\n margin-bottom: 0;\n }\n }\n`;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n car: PropTypes.shape({\n imagePath: PropTypes.string,\n brand: PropTypes.shape({ name: PropTypes.string }),\n doors: PropTypes.number,\n category: PropTypes.shape({ name: PropTypes.string }),\n passengers: PropTypes.number,\n bigLuggage: PropTypes.number,\n smallLuggage: PropTypes.number,\n steering: PropTypes.string,\n gearbox: PropTypes.string,\n airConditioner: PropTypes.string,\n dailyPrice: PropTypes.number,\n name: PropTypes.string,\n multimedia: PropTypes.string,\n background: PropTypes.string,\n t: PropTypes.func,\n currentCurrency: PropTypes.object,\n defaultCurrency: PropTypes.object,\n webCurrency: PropTypes.object,\n }),\n};\n","import style from 'styled-components';\n\nexport const SearchItemRowStyled = style.div`\n background: ${props => props.background || props.theme.colors.third};\n\n .car-description{\n display: flex;\n }\n\n .separator {\n color: #6f6f6f;\n }\n\n .car-name {\n font-size: 20px;\n font-weight: 700;\n font-style: normal;\n margin-top: 0px;\n margin-bottom: 5px;\n }\n\n .car-image{\n border: 1px solid #CBCBCB;\n height: fit-content;\n text-align: center;\n flex: 0 0 33%;\n max-width: 33%;\n }\n \n .tachometer {\n color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n\n .car-image img{\n max-height: 164px; \n }\n\n .car-category{\n font-weight: 600;\n }\n \n .car-price {\n margin: auto;\n text-align: center;\n\n p.rent-days {\n font-weight: 400;\n }\n\n p.rent-price {\n margin-top: 5px !important;\n font-size: 18px;\n font-weight: bold;\n font-style: italic;\n white-space: nowrap;\n\n .long-value{\n font-size: 24px;\n }\n\n .short-value{\n font-size: 24px;\n }\n\n span {\n font-size: 28px;\n }\n }\n\n button {\n width: 100%;\n .Button-icon{\n margin: 0px 5px;\n }\n }\n\n .customButton{\n flex-direction: column;\n\n .button-container{\n display: flex;\n width: 100%;\n\n .button-icon{\n width: 10%;\n margin-right: 0.3rem;\n }\n \n .button-text{\n width: 100%;\n }\n\n .with-icon{\n width: 90%!important;\n }\n } \n\n .button-subtext{\n font-size: 0.5rem;\n margin-top: 0.5rem;\n }\n }\n\n .second-btn {\n color: #000;\n margin-top: 1em;\n font-size: 13px;\n white-space: pre-wrap;\n display: block;\n \n span {\n padding-left: 3px;\n\n .CheckoutLink-icon{\n margin: 0px 5px;\n }\n }\n }\n }\n\n .details {\n width: 100%;\n\n .details-item {\n text-align: center;\n margin-right: 5px;\n display: inline-block;\n width: 10.5%;\n\n img{\n border: 1px solid #CCCCCC;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n width: 100%;\n max-width: 40px;\n }\n\n span {\n margin-top: 5px;\n font-weight: 400;\n font-size: .75em;\n }\n }\n }\n\n .car-mobile-details {\n display: none;\n }\n\n .partial-availability-mobile {\n display: none;\n }\n\n .disabled-link {\n cursor: default;\n font-style: italic;\n }\n\n @media (max-width: ${props => props.theme.screens.md}){\n flex-direction: column;\n padding: 20px 5px !important;\n\n .md-hidden{\n display: none;\n }\n \n .car-mobile-details {\n display: block;\n }\n }\n\n @media (max-width:980px) and (min-width:425px){\n .customButton{\n .button-container{\n width: 40%!important;\n }\n }\n }\n\n @media (max-width: ${props => props.theme.screens.lg}) {\n .car-image{\n margin-right: 1rem !important;\n flex: 0 0 40%;\n max-width: 40%;\n }\n\n .car-name {\n font-size: 15px;\n }\n\n .franchise {\n font-size: 12px;\n line-height: 22px;\n }\n }\n\n @media (max-width:${props => props.theme.screens.sm}) {\n .partial-availability-desktop {\n display: none;\n }\n\n .customButton{\n .button-container{\n width: 100%!important;\n }\n }\n\n .partial-availability-mobile {\n display: block;\n }\n }\n\n`;\n","import React from 'react';\nimport { props } from '../SearchItemRow.props';\nimport { SearchItemRowStyled } from './index.styled';\nimport {\n NumberDisplay,\n TranslatedComponent,\n Paragraph,\n ModelDetail,\n TranslatedLink,\n} from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport { tt } from 'utils/translationHelper';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\nimport ExchangeMessage from 'components/ExchangeMessage';\n\nclass DefaultSearchItemRow extends TranslatedComponent {\n static propTypes = props;\n\n render() {\n const {\n car: {\n car,\n category,\n franchise,\n totalDaysString,\n ilimitedKm,\n fromDate,\n toDate,\n maxAllowedDistanceByDay,\n },\n t,\n showDailyPrice,\n featureFlags,\n featureFlags: { smallDecimals },\n franquicia,\n franchiseLink,\n itemMiddleColumnExtraContent,\n alquilerPor,\n background,\n showDeposit,\n checkoutButton,\n customCheckOutButtons,\n isOnlyQuote,\n getCarName,\n getCategoryOrGroupName,\n hasLimitedAvailability,\n parsePartialAvailabilityAlert,\n checkoutLink,\n handleCheckoutLink,\n handleCheckoutBtn,\n openRate,\n showModelDetail,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n chargedMsg,\n chargedMsg2,\n loggedAsAgency,\n agencyPrice,\n customerPrice,\n salesCommision,\n distanceUnit,\n } = this.props;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n const showExchangeMsg = applyExchangeRate;\n\n const availabilityGroup = featureFlags.availabilityGroup || 'model';\n\n const franchiseAmount = availabilityGroup === 'category' ? category.franchise : franchise;\n const franchiseInCurrency = applyExchangeRate\n ? getPriceWithExchangeRate(franchiseAmount, currentCurrency, defaultCurrency, webCurrency)\n : franchiseAmount;\n\n const FranchiseInfo = () => {\n const franchiseContent = (\n <>\n <i\n className=\"fas fa-info-circle mr-2\"\n data-toggle=\"tooltip\"\n title={\n (featureFlags && featureFlags.tooltipText && tt(featureFlags.tooltipText, t)) ||\n t(franquicia) ||\n t('franchiseHelpText')\n }\n />\n <strong>{t(franquicia) || t('franquicia')} </strong>\n <NumberDisplay value={franchiseInCurrency} smallDecimals={smallDecimals} />\n </>\n );\n\n return (\n <>\n {franchiseLink ? (\n <TranslatedLink path={franchiseLink} className=\"franchise mt-0\">\n {franchiseContent}\n </TranslatedLink>\n ) : (\n <p className=\"franchise mt-0\">{franchiseContent}</p>\n )}\n {showExchangeMsg && (\n <ExchangeMessage\n defaultCurrency={defaultCurrency}\n currentCurrency={currentCurrency}\n chargedMsg={chargedMsg}\n chargedMsg2={chargedMsg2}\n />\n )}\n </>\n );\n };\n\n if (!car) return;\n\n const noVatPrice = featureFlags && featureFlags.showNoVatPrice;\n\n let buttonPrice = noVatPrice ? checkoutButton.noVatPrice : checkoutButton.Price;\n\n if (applyExchangeRate) {\n buttonPrice = getPriceWithExchangeRate(\n buttonPrice,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n }\n\n const kmText =\n ilimitedKm === true\n ? t(distanceUnit == 'Kilometers' ? 'KmIlimitados' : 'MillasIlimitados')\n : t(distanceUnit == 'Kilometers' ? 'KmDiarios' : 'MillasDiarios', {\n km: maxAllowedDistanceByDay,\n });\n\n return (\n <SearchItemRowStyled\n className=\"row mb-3 mr-0 ml-0 d-flex search-item-row car-item pt-4 pb-4 pl-4 pr-4\"\n background={background}\n >\n <div className=\"col-lg-9 col-md-12 car-description\">\n <div className=\"car-image mr-4\">\n <img className=\"img-fluid\" src={car.model.imagePath} alt={car.model.name} />\n </div>\n <div className=\"car-info\">\n <h2 className=\"car-name\">{getCarName(car)}</h2>\n <Paragraph\n className=\"car-category\"\n text={`${t('category')} ${getCategoryOrGroupName(car.model)}\n <span class=\"mr-2 ml-2 separator md-hidden\">|</span>\n <span class=\"tachometer md-hidden\"><i class=\"fas fa-tachometer-alt mr-1\"></i>\n ${kmText}\n </span>`}\n nonTranslate\n />\n <div className=\"car-details md-hidden\">\n <ModelDetail model={car.model} showModelDetail={showModelDetail} />\n {showDeposit && <FranchiseInfo />}\n {itemMiddleColumnExtraContent && (\n <div\n dangerouslySetInnerHTML={{\n __html: t(itemMiddleColumnExtraContent),\n }}\n />\n )}\n </div>\n {hasLimitedAvailability() &&\n parsePartialAvailabilityAlert('desktop', t, fromDate, toDate)}\n </div>\n </div>\n {hasLimitedAvailability() && parsePartialAvailabilityAlert('mobile', t, fromDate, toDate)}\n <div className=\"col-md-12 car-mobile-details text-left mt-2\">\n <ModelDetail model={car.model} showModelDetail={showModelDetail} />\n <div className=\"d-flex\">\n {showDeposit && (\n <>\n <FranchiseInfo />\n <span className=\"mr-2 ml-2 separator\">|</span>\n </>\n )}\n <Paragraph\n className=\"car-category\"\n text={`<span class=\"tachometer\"><i class=\"fas fa-tachometer-alt mr-1\"></i>\n ${kmText}\n </span>\n `}\n nonTranslate\n />\n </div>\n </div>\n <div className=\"col-lg-3 col-md-12 car-price\">\n <Paragraph className=\"rent-days mb-0 mt-2\">\n {alquilerPor || t('alquilerPor')}\n <span>\n {' '}\n <strong>{totalDaysString}</strong>{' '}\n </span>\n {openRate && t('from').toLowerCase()}\n </Paragraph>\n {(!isOnlyQuote() || (isOnlyQuote() && featureFlags.showPriceToRequest)) && (\n <Paragraph className=\"rent-price mt-0 mb-0\">\n <NumberDisplay value={buttonPrice} smallDecimals={smallDecimals} />\n </Paragraph>\n )}\n {showDailyPrice &&\n (!isOnlyQuote() || (isOnlyQuote() && featureFlags.showPriceToRequest)) ? (\n <Paragraph className=\"daily-price mt-0 mb-0\">\n {t('dailyPrice')}{' '}\n <strong>\n <NumberDisplay\n smallDecimals={smallDecimals}\n value={buttonPrice / totalDaysString}\n />\n </strong>\n </Paragraph>\n ) : null}\n {customCheckOutButtons &&\n customCheckOutButtons?.map(button =>\n button.paymentMethod === 'counter'\n ? ((button.Price = buttonPrice), handleCheckoutLink(button))\n : handleCheckoutBtn(button),\n )}\n {!customCheckOutButtons && handleCheckoutBtn(checkoutButton)}\n {!customCheckOutButtons && handleCheckoutLink(checkoutLink)}\n {loggedAsAgency && (\n <>\n <Paragraph className=\"daily-price mt-0 mb-0\">\n {t('myAccount.customer')}:{' '}\n <strong>\n <NumberDisplay value={customerPrice} smallDecimals={smallDecimals} />\n </strong>\n </Paragraph>\n <Paragraph className=\"daily-price mt-0 mb-0\">\n {t('myAccount.agency')}:{' '}\n <strong>\n <NumberDisplay value={agencyPrice} smallDecimals={smallDecimals} />\n </strong>\n </Paragraph>\n <Paragraph className=\"daily-price mt-0 mb-0\">\n {t('myAccount.commision')}:{' '}\n <strong>\n <NumberDisplay value={salesCommision} smallDecimals={smallDecimals} />\n </strong>\n </Paragraph>\n </>\n )}\n </div>\n </SearchItemRowStyled>\n );\n }\n}\n\nexport default withTranslation()(DefaultSearchItemRow);\n","import style from 'styled-components';\n\nexport const SearchItemRowStyledModern = style.div`\n background: ${({ background, theme }) => background || theme.colors.third};\n\n\n .car-description{\n display: flex;\n }\n\n .separator {\n color: #6f6f6f;\n }\n\n .car-name {\n color:#2E2D35;\n font-size: 20px;\n font-weight: 700;\n font-style: normal;\n margin-top: 0px;\n margin-bottom: 5px;\n }\n\n .car-image{ \n height: fit-content;\n text-align: center;\n flex: 0 0 33%;\n max-width: 33%;\n } \n\n .franchise {\n font-size: 0.8rem;\n span { \n color: #1A73E8;\n }\n\n i {\n color: #1A73E8;\n margin-right: 5px;\n }\n }\n\n\n.car-image img{\n max-height: 164px; \n}\n\n.car-category{\n font-weight: 600;\n}\n\n.car-price {\n text-align: center;\n\n p.rent-days {\n color:#656970;\n font-weight: 400;\n font-size: 13px;\n }\n\n p.rent-price {\n color:#2E2D35;\n margin-top: 5px !important;\n font-size: 18px;\n font-weight: bold;\n white-space: nowrap;\n\n .long-value{\n font-size: 24px;\n }\n\n .short-value{\n font-size: 24px;\n }\n\n span {\n font-size: 28px;\n }\n }\n\n button {\n width: 100%;\n padding:10px 0;\n float:right\n }\n\n .customButton{\n flex-direction: column;\n\n .button-container {\n display: flex;\n width: 10rem;\n\n .button-icon {\n margin-right: 0.3rem;\n width: 10%;\n }\n\n .button-text{\n width: 100%;\n }\n\n .with-icon{\n width: 90%!important;\n }\n\n }\n\n .button-subtext {\n font-size: 0.6rem;\n margin-top: 0.2rem;\n }\n }\n\n .second-btn {\n color: #2E2D35;\n font-size: 14px;\n border: 1px solid #2E2D35;\n padding: 8px;\n float: left;\n width: 100%;\n border-radius:5px;\n text-align:center;\n\n .CheckoutLink-icon {\n margin-right: 0.5rem;\n }\n}\n .second-btn:hover {\n background:#f1f1f1;\n }\n \n span {\n padding-left: 3px;\n }\n }\n}\n\n\n.details { \n display: flex;\n flex-wrap: wrap;\n margin-bottom: 1.2rem;\n\n .details-item { \n display: flex; \n align-items: center; \n margin-right: 0.5rem;\n\n svg {\n padding-left: 0;\n }\n\n p { \n white-space: nowrap;\n margin: 0;\n }\n\n img{\n border: 1px solid #CCCCCC;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n width: 100%;\n max-width: 40px;\n }\n\n span {\n margin-top: 5px;\n font-weight: 400;\n font-size: .75em;\n }\n }\n}\n\n.car-mobile-details {\n display: none;\n}\n\n.partial-availability-mobile {\n display: none;\n}\n\n.disabled-link {\n cursor: default;\n font-style: italic;\n}\n\n@media (max-width: ${({ theme }) => theme.screens.md}){\n flex-direction: column;\n padding: 20px 5px !important;\n\n .md-hidden{\n display: none;\n }\n\n .car-mobile-details {\n display: block;\n }\n .details{\n .details-item { \n width: 45%;\n }\n }\n}\n\n@media (max-width: ${({ theme }) => theme.screens.lg}) {\n .car-image{\n margin-right: 1rem !important;\n flex: 0 0 40%;\n max-width: 40%;\n }\n\n .car-name {\n font-size: 15px;\n }\n\n .franchise {\n font-size: 12px;\n line-height: 22px;\n }\n}\n\n@media (max-width:${({ theme }) => theme.screens.sm}) {\n .partial-availability-desktop {\n display: none;\n }\n\n .partial-availability-mobile {\n display: block;\n }\n}\n\n\n\n\n`;\n","import React from 'react';\nimport { props } from '../SearchItemRow.props';\nimport { SearchItemRowStyledModern } from './index.styled';\nimport {\n NumberDisplay,\n TranslatedComponent,\n Paragraph,\n ModelDetail,\n TranslatedLink,\n} from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport { tt } from 'utils/translationHelper';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\nimport ExchangeMessage from 'components/ExchangeMessage';\n\nclass ModernSearchItemRow extends TranslatedComponent {\n static propTypes = props;\n\n render() {\n const {\n car: {\n car,\n category,\n franchise,\n totalDaysString,\n ilimitedKm,\n fromDate,\n toDate,\n maxAllowedDistanceByDay,\n },\n t,\n showDailyPrice,\n featureFlags: { smallDecimals },\n featureFlags,\n franquicia,\n franchiseLink,\n itemMiddleColumnExtraContent,\n alquilerPor,\n background,\n showDeposit,\n checkoutButton,\n customCheckOutButtons,\n isOnlyQuote,\n getCarName,\n getCategoryOrGroupName,\n hasLimitedAvailability,\n parsePartialAvailabilityAlert,\n checkoutLink,\n handleCheckoutLink,\n handleCheckoutBtn,\n openRate,\n showModelDetail,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n chargedMsg,\n chargedMsg2,\n loggedAsAgency,\n agencyPrice,\n customerPrice,\n salesCommision,\n distanceUnit,\n } = this.props;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n const showExchangeMsg = applyExchangeRate;\n\n const availabilityGroup = featureFlags.availabilityGroup || 'model';\n\n const franchiseAmount = availabilityGroup === 'category' ? category.franchise : franchise;\n const franchiseInCurrency = applyExchangeRate\n ? getPriceWithExchangeRate(franchiseAmount, currentCurrency, defaultCurrency, webCurrency)\n : franchiseAmount;\n\n const FranchiseInfo = () => {\n const franchiseContent = (\n <>\n <i\n className=\"fas fa-info-circle mr-2\"\n data-toggle=\"tooltip\"\n title={\n (featureFlags && featureFlags.tooltipText && tt(featureFlags.tooltipText, t)) ||\n t(franquicia) ||\n t('franchiseHelpText')\n }\n />\n <span>\n {t(franquicia) || t('franquicia')}\n <strong>\n {' '}\n <NumberDisplay value={franchiseInCurrency} />\n </strong>\n </span>\n </>\n );\n\n return (\n <>\n {franchiseLink ? (\n <TranslatedLink path={franchiseLink} className=\"franchise mt-0\">\n {franchiseContent}\n </TranslatedLink>\n ) : (\n <p className=\"franchise mt-0\">{franchiseContent}</p>\n )}\n {showExchangeMsg && (\n <ExchangeMessage\n defaultCurrency={defaultCurrency}\n currentCurrency={currentCurrency}\n chargedMsg={chargedMsg}\n chargedMsg2={chargedMsg2}\n />\n )}\n </>\n );\n };\n\n if (!car) return;\n\n const noVatPrice = featureFlags && featureFlags.showNoVatPrice;\n\n let buttonPrice = noVatPrice ? checkoutButton.NoVatPrice : checkoutButton.Price;\n\n if (applyExchangeRate) {\n buttonPrice = getPriceWithExchangeRate(\n buttonPrice,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n );\n }\n\n return (\n <SearchItemRowStyledModern\n className=\"row mb-3 mr-0 ml-0 d-flex search-item-row car-item pt-4 pb-4 pl-4 pr-4\"\n background={background}\n >\n <div className=\"col-lg-9 col-md-12 car-description\">\n <div className=\"car-image mr-4\">\n <img className=\"img-fluid\" src={car.model.imagePath} alt={car.model.name} />\n </div>\n <div className=\"car-info\">\n <h2 className=\"car-name\">{getCarName(car)}</h2>\n <Paragraph\n className=\"car-category\"\n text={`${t('category')} ${getCategoryOrGroupName(car.model)}`}\n nonTranslate\n />\n <div className=\"car-details md-hidden\">\n <ModelDetail\n model={car.model}\n ilimitedKm={ilimitedKm}\n maxAllowedDistanceByDay={maxAllowedDistanceByDay}\n showModelDetail={showModelDetail}\n distanceUnit={distanceUnit}\n />\n {showDeposit && <FranchiseInfo />}\n {itemMiddleColumnExtraContent && (\n <div\n dangerouslySetInnerHTML={{\n __html: t(itemMiddleColumnExtraContent),\n }}\n />\n )}\n </div>\n {hasLimitedAvailability() &&\n parsePartialAvailabilityAlert('desktop', t, fromDate, toDate)}\n </div>\n </div>\n {hasLimitedAvailability() && parsePartialAvailabilityAlert('mobile', t, fromDate, toDate)}\n <div className=\"col-md-12 car-mobile-details text-left mt-2\">\n <ModelDetail\n model={car.model}\n ilimitedKm={ilimitedKm}\n maxAllowedDistanceByDay={maxAllowedDistanceByDay}\n showModelDetail={showModelDetail}\n distanceUnit={distanceUnit}\n />\n <div className=\"d-flex\">{showDeposit && <FranchiseInfo />}</div>\n </div>\n <div className=\"col-lg-3 col-md-12 car-price\">\n <Paragraph className=\"rent-days mb-0 mt-2\">\n {alquilerPor || t('alquilerPor')}\n <span>\n {' '}\n <strong>{totalDaysString}</strong>{' '}\n </span>\n {openRate && t('from').toLowerCase()}\n </Paragraph>\n {(!isOnlyQuote() || (isOnlyQuote() && featureFlags.showPriceToRequest)) && (\n <Paragraph className=\"rent-price mt-0 mb-0\">\n <NumberDisplay value={buttonPrice} smallDecimals={smallDecimals} />\n </Paragraph>\n )}\n {showDailyPrice &&\n (!isOnlyQuote() || (isOnlyQuote() && featureFlags.showPriceToRequest)) ? (\n <Paragraph className=\"daily-price mt-0 mb-0\">\n {t('dailyPrice')}{' '}\n <strong>\n <NumberDisplay\n value={buttonPrice / totalDaysString}\n smallDecimals={smallDecimals}\n />\n </strong>\n </Paragraph>\n ) : null}\n {customCheckOutButtons &&\n customCheckOutButtons?.map(button =>\n button.paymentMethod === 'counter'\n ? ((button.Price = buttonPrice), handleCheckoutLink(button))\n : handleCheckoutBtn(button),\n )}\n {!customCheckOutButtons && handleCheckoutBtn(checkoutButton)}\n {!customCheckOutButtons && handleCheckoutLink(checkoutLink)}\n {loggedAsAgency && (\n <>\n <Paragraph className=\"daily-price mt-0 mb-0\">\n {t('myAccount.customer')}:{' '}\n <strong>\n <NumberDisplay value={customerPrice} smallDecimals={smallDecimals} />\n </strong>\n </Paragraph>\n <Paragraph className=\"daily-price mt-0 mb-0\">\n {t('myAccount.agency')}:{' '}\n <strong>\n <NumberDisplay value={agencyPrice} smallDecimals={smallDecimals} />\n </strong>\n </Paragraph>\n <Paragraph className=\"daily-price mt-0 mb-0\">\n {t('myAccount.commision')}:{' '}\n <strong>\n <NumberDisplay value={salesCommision} smallDecimals={smallDecimals} />\n </strong>\n </Paragraph>\n </>\n )}\n </div>\n </SearchItemRowStyledModern>\n );\n }\n}\n\nexport default withTranslation()(ModernSearchItemRow);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { setCheckout, fetchPrices, setSearchCarParams } from 'actions/';\nimport { props } from './SearchItemRow.props';\nimport { Btn, CustomAlert, NumberDisplay, TranslatedComponent } from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport { tt, tlink } from 'utils/translationHelper';\nimport moment from 'moment';\nimport { getSippByCategory } from '../../../../utils/categoryGroupHelper';\nimport { is_gtag_enabled, gtag_product_click } from '../../../../utils/googleTagsHelper';\nimport { MODERN_THEME } from 'styled/constants';\nimport DefaultSearchItemRow from './Default';\nimport ModernSearchItemRow from './Modern';\nimport { getPriceWithCommission, getPriceWithoutVat } from 'utils/dataHelper';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\n\nclass SearchItemRow extends TranslatedComponent {\n static propTypes = props;\n\n constructor() {\n super();\n this.isOnlyQuote = this.isOnlyQuote.bind(this);\n this.getCarName = this.getCarName.bind(this);\n this.getCategoryOrGroupName = this.getCategoryOrGroupName.bind(this);\n this.hasLimitedAvailability = this.hasLimitedAvailability.bind(this);\n this.parsePartialAvailabilityAlert = this.parsePartialAvailabilityAlert.bind(this);\n this.checkoutLink = this.checkoutLink.bind(this);\n this.checkoutButton = this.checkoutButton.bind(this);\n }\n\n goToCheckout = async (onlinePayment, promotion, button) => {\n const {\n history,\n setCheckout,\n t,\n i18n,\n checkoutRoute,\n searchCars: { params },\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n setSearchCarParams,\n car,\n } = this.props;\n\n let isPartial = false;\n let isOnline = false;\n if (this.hasLimitedAvailability()) {\n params['hourFrom'] = this.getCarDateHour(car.fromDate);\n params['hourTo'] = this.getCarDateHour(car.toDate);\n setSearchCarParams(params);\n }\n\n if (is_gtag_enabled(googleTagManager)) gtag_product_click(car, settings);\n\n if (\n button.paymentMethod === 'partial' &&\n button.partialPaymentAmountIsPercentage &&\n button.partialPaymentAmount\n ) {\n isPartial = true;\n }\n\n if (button.paymentMethod === 'online') {\n isOnline = true;\n }\n\n setCheckout({\n booking: {\n ...this.props.car,\n promotion,\n onlyQuote: this.isOnlyQuote(car),\n isPartial: isPartial,\n isOnline: isOnline,\n partialPaymentAmount: button.partialPaymentAmount,\n },\n onlinePayment: onlinePayment,\n });\n\n history.push(tlink(checkoutRoute, t, i18n, null, settings.configurations.langConfig));\n window.scrollTo(0, 0);\n };\n\n sanatizeDetailText(text) {\n return text.length > 3 ? text.substring(0, 3) + '.' : text;\n }\n\n getPromotion(id) {\n const {\n car: { availablePromotions },\n } = this.props;\n return availablePromotions.find(x => x.id === id);\n }\n\n getCarDateHour(date) {\n return date.slice(11).replace(':00Z', '');\n }\n\n hasLimitedAvailability() {\n const { car } = this.props;\n const { params } = this.props.searchCars;\n\n const startParam = moment(params.hourFrom, 'hh:mm');\n const endParam = moment(params.hourTo, 'hh:mm');\n\n const startCar = moment(this.getCarDateHour(car.fromDate), 'hh:mm');\n const endCar = moment(this.getCarDateHour(car.toDate), 'hh:mm');\n\n if (startCar.isAfter(startParam) || endCar.isBefore(endParam)) return true;\n return false;\n }\n\n changePrice(obj, type) {\n const {\n settings: { paymentConfiguration },\n searchCars: {\n params: { pickUpEndpoint, customPromotionId },\n },\n } = this.props;\n\n function priceChanger(obj, promotion) {\n if (promotion)\n obj.Price = getPriceWithCommission(promotion.bookingFinalPrice, paymentConfiguration);\n\n obj.Promotion = promotion?.id;\n }\n\n // CREATE ENUM FOR PAYMENT TYPE\n const ValidPaymentTypeEnum = Object.freeze({\n Both: 0,\n Counter: 1,\n Online: 2,\n });\n\n let promotion = null;\n if (paymentConfiguration?.promotions && paymentConfiguration?.promotions[pickUpEndpoint]) {\n const promoId = obj.Value\n ? paymentConfiguration.promotions[pickUpEndpoint].onlinePromotion\n : paymentConfiguration.promotions[pickUpEndpoint].counterPromotion;\n promotion = this.getPromotion(promoId);\n }\n\n // EVALUATES IF THE PROMOTION IS VALID FOR THE APPROPRIATE PAYMENT METHOD\n const isValidForBoth = promotion && promotion.validForPayment === ValidPaymentTypeEnum.Both;\n const isValidForCounter =\n promotion && promotion.validForPayment === ValidPaymentTypeEnum.Counter;\n const isValidForOnline = promotion && promotion.validForPayment === ValidPaymentTypeEnum.Online;\n\n if (isValidForBoth) {\n priceChanger(obj, promotion);\n } else if (isValidForCounter && !obj.Value) {\n priceChanger(obj, promotion);\n } else if (isValidForOnline && obj.Value) {\n priceChanger(obj, promotion);\n }\n\n if (customPromotionId) {\n promotion = this.getPromotion(Number(customPromotionId));\n }\n\n //APPLIES CUSTOM PROMO IF APPLIES TO THE APPROPRIATE PAYMENT METHOD\n if (promotion) {\n const isValidForBoth = promotion.validForPayment === ValidPaymentTypeEnum.Both;\n const isValidForCounter = promotion.validForPayment === ValidPaymentTypeEnum.Counter;\n const isValidForOnline = promotion.validForPayment === ValidPaymentTypeEnum.Online;\n\n if (\n isValidForBoth ||\n (type === 'counter' && isValidForCounter) ||\n (type === 'online' && isValidForOnline)\n ) {\n priceChanger(obj, promotion);\n }\n }\n }\n\n parsePartialAvailabilityAlert(type, t, fromDate, toDate) {\n const { partialAvailabilityMessage } = this.props;\n let customMessage = null;\n if (partialAvailabilityMessage) customMessage = tt(partialAvailabilityMessage, t);\n\n return (\n <CustomAlert icon=\"far fa-clock\" className={`partial-availability-${type}`}>\n {customMessage ? (\n <b>\n {customMessage\n .replace('[from]', this.getCarDateHour(fromDate))\n .replace('[to]', this.getCarDateHour(toDate))}\n </b>\n ) : (\n <b>\n {t('limitedAvailability', {\n from: this.getCarDateHour(fromDate),\n to: this.getCarDateHour(toDate),\n })}\n </b>\n )}\n </CustomAlert>\n );\n }\n\n getCarName(car) {\n const {\n t,\n settings: { featureFlags },\n } = this.props;\n const availabilityGroup =\n featureFlags.availabilityGroup === undefined ? 'model' : featureFlags.availabilityGroup;\n const showOrSimilar =\n featureFlags.ShowOrSimilar === undefined ? true : featureFlags.ShowOrSimilar;\n const legend = availabilityGroup === 'category' && showOrSimilar ? t('orSimilar') : '';\n\n return `${car.model.brand.name} ${car.model.name} ${legend}`;\n }\n\n getCategoryOrGroupName = carModel => {\n const {\n showSipp,\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n if (!categoryGroups) return carModel.category.name;\n\n const categoryGroupName = getSippByCategory(categoryGroups, carModel.category).toUpperCase();\n return showSipp && carModel.sipp\n ? `${categoryGroupName} - ${carModel.sipp}`\n : categoryGroupName;\n };\n\n isOnlyQuote = () => {\n return this.props.car && this.props.car.onlyQuote;\n };\n\n generateCheckoutLink = checkoutLink => {\n const {\n settings: { featureFlags },\n profile,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n t,\n } = this.props;\n const mainBtnIsCounter = checkoutLink.Value === false;\n const counterBtnIsDisabled = featureFlags && featureFlags.showPayOnCounterBtn === false;\n if (\n this.isOnlyQuote() ||\n (mainBtnIsCounter && counterBtnIsDisabled) ||\n (profile && profile.isCompany)\n ) {\n return null;\n }\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n return (\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n <a\n className=\"second-btn book-second_button\"\n href=\"#\"\n onClick={() => this.goToCheckout(checkoutLink.Value, checkoutLink.Promotion, checkoutLink)}\n >\n {this.props.settings.theme.template !== MODERN_THEME && (\n <i className=\"fas fa-angle-right\" />\n )}\n <span>\n <span className=\"CheckoutLink-icon\">\n {checkoutLink.isCustom && checkoutLink.Icon && <i class={checkoutLink.Icon}></i>}\n </span>\n {tt(checkoutLink.Text, t)}\n <strong>\n {' '}\n <NumberDisplay\n value={\n applyExchangeRate\n ? getPriceWithExchangeRate(\n checkoutLink.Price,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n )\n : checkoutLink.Price || 10\n }\n smallDecimals={featureFlags.smallDecimals}\n />\n </strong>\n </span>\n </a>\n );\n };\n\n getButtonName = type => {\n const { t, selectButtonName, selectOnlineButtonName } = this.props;\n let buttonText = '';\n\n switch (type) {\n case 'onCounter':\n buttonText = selectButtonName ? tt(selectButtonName, t, true) : t('reservarEnMostrador');\n break;\n case 'online':\n buttonText = selectOnlineButtonName ? tt(selectOnlineButtonName, t, true) : t('pagoOnline');\n break;\n }\n\n return buttonText;\n };\n\n checkoutLink(checkoutLink) {\n const {\n settings: { featureFlags },\n } = this.props;\n if (featureFlags && featureFlags.onlinePayments) {\n return this.generateCheckoutLink(checkoutLink);\n }\n return null;\n }\n\n checkoutButton(button) {\n const {\n settings: { featureFlags },\n onlyQuoteBtn,\n t,\n profile,\n } = this.props;\n const carNotAvailableText = featureFlags && featureFlags.carNotAvailableText;\n\n if (profile && profile.isCompany) {\n return (\n <Btn\n text={t('takeBooking')}\n onClick={() => this.goToCheckout(false, button.Promotion, button)}\n className=\"mt-1 mb-3\"\n icon={button.Icon}\n />\n );\n }\n\n return (\n <Btn\n text={\n this.isOnlyQuote()\n ? t(onlyQuoteBtn) ||\n (carNotAvailableText ? tt(carNotAvailableText, t) : t('carNotAvailable'))\n : button.Text\n }\n onClick={() => this.goToCheckout(button.Value, button.Promotion, button)}\n className=\"mt-1 mb-3 book-main_button\"\n icon={this.isOnlyQuote() ? null : button.Icon}\n subText={this.isOnlyQuote() ? null : button.subText}\n isCustom={button.isCustom}\n onlyQuote={this.isOnlyQuote()}\n paymentMethod={button.paymentMethod}\n />\n );\n }\n\n render() {\n const {\n car,\n showDailyPrice,\n settings: {\n featureFlags,\n paymentConfiguration,\n theme,\n configurations,\n configurations: { checkoutCustomButtons },\n },\n franquicia,\n franchiseLink,\n itemMiddleColumnExtraContent,\n alquilerPor,\n background,\n showModelDetail,\n chargedMsg,\n chargedMsg2,\n loggedAsAgency,\n agencyPrice,\n customerPrice,\n salesCommision,\n bookingsConfiguration,\n } = this.props;\n\n let checkoutButton, checkoutLink;\n\n checkoutButton = checkoutLink = {\n Text: this.getButtonName('onCounter'),\n Value: false,\n Price: getPriceWithCommission(car.price, paymentConfiguration),\n NoVatPrice: getPriceWithCommission(getPriceWithoutVat(car.priceItems), paymentConfiguration),\n };\n\n if (featureFlags && featureFlags.onlinePayments && !this.isOnlyQuote()) {\n if (paymentConfiguration && paymentConfiguration.isOnlinePaymentHighligthed) {\n checkoutButton = {\n ...checkoutButton,\n Text: this.getButtonName('online'),\n Value: true,\n };\n } else {\n checkoutLink = {\n ...checkoutLink,\n Text: this.getButtonName('online'),\n Value: true,\n };\n }\n }\n\n const showDeposit = featureFlags.showDeposit === undefined ? true : featureFlags.showDeposit;\n this.changePrice(checkoutButton, 'online');\n this.changePrice(checkoutLink, 'counter');\n\n if (!car) return;\n return theme.template === MODERN_THEME ? (\n <ModernSearchItemRow\n car={car}\n showDeposit={showDeposit}\n showDailyPrice={showDailyPrice}\n featureFlags={featureFlags}\n franquicia={franquicia}\n franchiseLink={franchiseLink}\n itemMiddleColumnExtraContent={itemMiddleColumnExtraContent}\n alquilerPor={alquilerPor}\n background={background}\n checkoutButton={checkoutButton}\n customCheckOutButtons={checkoutCustomButtons}\n checkoutLink={checkoutLink}\n openRate={configurations.openRate}\n isOnlyQuote={this.isOnlyQuote}\n getCarName={this.getCarName}\n getCategoryOrGroupName={this.getCategoryOrGroupName}\n hasLimitedAvailability={this.hasLimitedAvailability}\n parsePartialAvailabilityAlert={this.parsePartialAvailabilityAlert}\n handleCheckoutLink={this.checkoutLink}\n handleCheckoutBtn={this.checkoutButton}\n showModelDetail={showModelDetail}\n currentCurrency={this.props.currentCurrency}\n defaultCurrency={this.props.defaultCurrency}\n webCurrency={this.props.webCurrency}\n chargedMsg={chargedMsg}\n chargedMsg2={chargedMsg2}\n loggedAsAgency={loggedAsAgency}\n agencyPrice={agencyPrice}\n customerPrice={customerPrice}\n salesCommision={salesCommision}\n distanceUnit={bookingsConfiguration?.distanceUnit}\n />\n ) : (\n <DefaultSearchItemRow\n car={car}\n showDeposit={showDeposit}\n showDailyPrice={showDailyPrice}\n featureFlags={featureFlags}\n franquicia={franquicia}\n franchiseLink={franchiseLink}\n itemMiddleColumnExtraContent={itemMiddleColumnExtraContent}\n alquilerPor={alquilerPor}\n background={background}\n openRate={configurations.openRate}\n checkoutButton={checkoutButton}\n checkoutLink={checkoutLink}\n customCheckOutButtons={checkoutCustomButtons}\n isOnlyQuote={this.isOnlyQuote}\n getCarName={this.getCarName}\n getCategoryOrGroupName={this.getCategoryOrGroupName}\n hasLimitedAvailability={this.hasLimitedAvailability}\n parsePartialAvailabilityAlert={this.parsePartialAvailabilityAlert}\n handleCheckoutLink={this.checkoutLink}\n handleCheckoutBtn={this.checkoutButton}\n showModelDetail={showModelDetail}\n currentCurrency={this.props.currentCurrency}\n defaultCurrency={this.props.defaultCurrency}\n webCurrency={this.props.webCurrency}\n chargedMsg={chargedMsg}\n chargedMsg2={chargedMsg2}\n loggedAsAgency={loggedAsAgency}\n agencyPrice={agencyPrice}\n customerPrice={customerPrice}\n salesCommision={salesCommision}\n distanceUnit={bookingsConfiguration?.distanceUnit}\n />\n );\n }\n}\nconst mapStateToProps = ({ siteConfiguration, searchCars, user, global, bookings }) => ({\n settings: siteConfiguration.settings,\n searchCars,\n profile: user.profile,\n currentCurrency: global.currentCurrency,\n defaultCurrency: global.defaultCurrency,\n webCurrency: global.webCurrency,\n bookingsConfiguration: bookings.configuration,\n});\nexport default withRouter(\n connect(mapStateToProps, { setCheckout, fetchPrices, setSearchCarParams })(\n withTranslation()(SearchItemRow),\n ),\n);\n","import styled from 'styled-components';\n\nexport const StyledSearchItemsModern = styled.section`\n min-height: 600px;\n padding: 0;\n\n .few-cars_alert,\n .few-cars_alert .alert {\n width: 100%;\n\n i {\n font-size: 25px;\n }\n\n b {\n display: block;\n font-size: 1rem;\n }\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.xl}) and (max-width: ${props =>\n props.theme.screens.xxl}) {\n flex: 70%;\n max-width: 70%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) and (min-width: ${props =>\n props.theme.screens.md}) {\n width: 100%;\n max-width: 100%;\n flex: 100%;\n }\n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n .row-container {\n padding-left: 6px;\n padding-right: 6px;\n }\n }\n\n .alert {\n width: fit-content;\n p {\n font-size: 14px;\n margin-bottom: 0;\n }\n }\n\n .car-item {\n background: #fff;\n border-radius: 12px;\n }\n\n .car-item:hover {\n box-shadow: 1px 2px 12px 0px rgba(0, 0, 0, 0.08);\n transition: 0.1s;\n }\n\n @media (max-width: 767px) {\n .home-form {\n display: none;\n }\n }\n\n @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 1) {\n .home-form {\n display: none;\n }\n }\n`;\n","import React from 'react';\nimport { props, defaults } from './SearchItems.prop';\nimport { StyledSearchItems } from './SearchItems.styled';\nimport { Breadcrumb, CustomAlert, CustomLoading } from 'components/';\nimport SearchItemRow from './SearchItemRow/SearchItemRow';\nimport { withTranslation } from 'react-i18next';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { is_gtag_enabled, gtag_car_impressions } from '../../../utils/googleTagsHelper';\nimport { StyledSearchItemsModern } from './SearchItems.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { tt } from 'utils/translationHelper';\nimport { isAgencyUser } from 'utils/dataHelper';\n\nclass SearchItems extends React.Component {\n constructor(props) {\n const { profile } = props;\n super(props);\n this.state = {\n error: null,\n loading: true,\n showAlert: true,\n userInfo: {\n loggedAsAgency: isAgencyUser(profile),\n },\n };\n }\n\n componentWillReceiveProps(prevProps, prevState) {\n if (prevProps.cars !== this.props.cars && prevState.loading) {\n this.setState({ ...prevState, loading: false });\n }\n }\n\n componentDidUpdate = (prevProps, prevState) => {\n const {\n cars,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n isWidget,\n } = this.props;\n\n if (prevProps.cars !== this.props.cars) {\n if (!this.props.loading) {\n if (is_gtag_enabled(googleTagManager) && this.props.cars)\n gtag_car_impressions(cars, settings);\n\n if (isWidget) {\n window.top.postMessage(\n {\n height: document.body.scrollHeight,\n width: document.body.scrollWidth,\n },\n '*',\n );\n }\n }\n }\n };\n\n hideAlert = () => {\n this.setState({ showAlert: false });\n };\n\n orderCarsBy = (cars, orderBy = 'price') => {\n if (!cars) return [];\n\n const sortFunctions = {\n price: function(a, b) {\n return a.price > b.price ? 1 : -1;\n },\n category: function(a, b) {\n return a.category.order > b.category.order ? 1 : -1;\n },\n sipp: function(a, b) {\n return a.car.model.sipp > b.car.model.sipp ? 1 : -1;\n },\n model: function(a, b) {\n return a.model.name > b.model.name ? 1 : -1;\n },\n };\n\n const orderedPricedCars = cars.filter(item => !item.onlyQuote).sort(sortFunctions[orderBy]);\n const orderedRequirableCars = cars.filter(item => item.onlyQuote).sort(sortFunctions[orderBy]);\n\n return [orderedPricedCars, orderedRequirableCars].flat();\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledSearchItemsModern;\n }\n return StyledSearchItems;\n }\n\n getFilteredCarList = () => {\n const {\n cars,\n categories,\n settings: { configurations },\n } = this.props;\n\n let carList = [...cars];\n\n if (configurations.filteredCategories) {\n const { includedCategoryIds, excludedCategoryIds } = configurations.filteredCategories;\n\n if (includedCategoryIds && includedCategoryIds.length > 0) {\n carList = carList.filter(car => includedCategoryIds.includes(car.category.id));\n }\n if (excludedCategoryIds && excludedCategoryIds.length > 0) {\n carList = carList.filter(car => !excludedCategoryIds.includes(car.category.id));\n }\n }\n\n if (categories && categories.length > 0) {\n carList = carList.filter(car =>\n categories.find(categoryId => categoryId === car.category.id),\n );\n }\n return carList;\n };\n\n render() {\n window.scrollTo(0, 0);\n\n const {\n checkoutRoute,\n t,\n selectButtonName,\n selectOnlineButtonName,\n showDailyPrice,\n orderBy,\n showSipp,\n noAvailabilityImage,\n noAvailabilityMessage,\n searchGif,\n searchMessage,\n franquicia,\n franchiseLink,\n franchiseTooltip,\n itemMiddleColumnExtraContent,\n alquilerPor,\n settings: { featureFlags, configurations },\n backgroundItems,\n onlyQuoteBtn,\n partialAvailabilityMessage,\n showModelDetail,\n chargedMsg,\n chargedMsg2,\n } = this.props;\n let { cars, loading, error } = this.props;\n\n const {\n userInfo: { loggedAsAgency },\n } = this.state;\n\n cars = this.getFilteredCarList();\n\n cars = this.orderCarsBy(cars, orderBy);\n const StyledSection = this.getTemplateStyledComponent();\n\n const fewUnitsText = configurations.fewUnitsText || {};\n\n return (\n <StyledSection className=\"col-md-9\" background={this.props.background}>\n <div className=\"col-md-12 row-container\">\n <Breadcrumb\n className=\"row mb-0\"\n items={[\n { text: t('search') },\n { text: t('checkout'), disabled: true },\n { text: t('pago'), disabled: true },\n ]}\n />\n {cars &&\n cars.length > 0 &&\n cars.length < (featureFlags.fewCarUnits || 11) &&\n this.state.showAlert === true ? (\n <CustomAlert\n icon=\"far fa-clock\"\n className=\"mb-4 few-cars_alert\"\n onClose={this.hideAlert}\n >\n <span>\n <b>{tt(fewUnitsText.title, t) || t('pocasUnidadesTitle')}</b>{' '}\n {tt(fewUnitsText.description, t) || t('pocasUnidadesParagraph')}\n </span>\n </CustomAlert>\n ) : (\n ''\n )}\n {error ? (\n <span className=\"error\">{t(error.message || error)}</span>\n ) : loading ? (\n <CustomLoading\n loadingMessage={searchMessage || 'searching'}\n loadingGif={searchGif || 'loadingGif'}\n ></CustomLoading>\n ) : cars && cars.length > 0 ? (\n cars.map((car, index) => (\n <SearchItemRow\n key={index}\n car={car}\n checkoutRoute={checkoutRoute}\n selectButtonName={selectButtonName}\n selectOnlineButtonName={selectOnlineButtonName}\n showDailyPrice={showDailyPrice}\n showSipp={showSipp}\n franquicia={franquicia}\n franchiseLink={franchiseLink}\n franchiseTooltip={franchiseTooltip}\n itemMiddleColumnExtraContent={itemMiddleColumnExtraContent}\n alquilerPor={alquilerPor}\n background={backgroundItems}\n onlyQuoteBtn={onlyQuoteBtn}\n partialAvailabilityMessage={partialAvailabilityMessage}\n showModelDetail={showModelDetail}\n currentCurrency={this.props.currentCurrency}\n defaultCurrency={this.props.defaultCurrency}\n webCurrency={this.props.webCurrency}\n chargedMsg={chargedMsg}\n chargedMsg2={chargedMsg2}\n loggedAsAgency={loggedAsAgency}\n agencyPrice={car.agencyPrice}\n customerPrice={car.customerPrice}\n salesCommision={car.salesCommision}\n />\n ))\n ) : (\n <CustomLoading\n loadingMessage={noAvailabilityMessage || 'noAvailabilityMessage'}\n loadingGif={noAvailabilityImage}\n ></CustomLoading>\n )}\n </div>\n </StyledSection>\n );\n }\n}\n\nSearchItems.propTypes = props;\nSearchItems.defaultProps = defaults;\n\nconst mapStateToProps = ({ searchCars, global, user }) => ({\n categories: searchCars.params.categories,\n currentCurrency: global.currentCurrency,\n defaultCurrency: global.defaultCurrency,\n webCurrency: global.webCurrency,\n profile: user.profile,\n});\n\nexport default connect(mapStateToProps)(withRouter(withTranslation()(SearchItems)));\n","import { connect } from 'react-redux';\nimport SearchItems from './SearchItems';\nimport { fetchBookeableCars } from 'actions/';\n\nconst mapStateToProps = ({ searchCars, router, siteConfiguration }) => ({\n cars: searchCars.cars,\n loading: searchCars.loading,\n error: searchCars.error,\n params: searchCars.params,\n categories: searchCars.params.categories,\n location: router.location,\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps, { fetchBookeableCars })(SearchItems);\n","import PropTypes from 'prop-types';\n\nexport const props = {\n params: PropTypes.shape({}),\n};\n\nexport const defaultProps = {\n params: {},\n};\n","import style from 'styled-components';\n\nexport const StyledAdditionals = style.section`\n @media print {\n .searchFilter, .car-block {\n display:none !important;\n visibility: hidden;\n }\n }\n\n .constant-arrows::-webkit-inner-spin-button,\n .constant-arrows::-webkit-outer-spin-button {\n opacity: 1;\n }\n\n .additionals-loader {\n width: 100px;\n height: 100px;\n }\n\n input.form-control {\n text-overflow: ellipsis;\n }\n\n .mandatory-additional {\n cursor: auto !important;\n\n label {\n cursor: auto !important;\n\n .checkmark {\n background-color: #BBBBBB !important;\n }\n }\n\n .additional-name {\n display: flex;\n flex-direction: column;\n padding-left: 30px !important;\n\n .additional-name-button{\n font-size: 0.8rem;\n text-decoration: none!important;\n vertical-align: middle;\n color: ${({ theme }) => theme.colors.secondary}!important;\n\n &:hover, & > i { \n text-decoration: none!important; \n }\n }\n\n .see-less{\n padding-left: 0px;\n }\n\n .mandatory-legend {\n font-size: 0.8em;\n color: #f80;\n }\n }\n }\n\n .conditions-legend {\n font-weight: bold;\n font-size: 0.9em;\n }\n\n width: 73%;\n flex: 73%;\n max-width: 73%;\n margin-right: 2%;\n .table-hover tbody tr:hover {\n background-color: #f2f2f27d;\n }\n\n .checkout-additionals{\n .table tr .input-wrapper {\n border:none;\n width: 32px;\n height: 32px;\n margin-top: 5px;\n margin-bottom: 5px !important;\n\n input[type=number]{\n background: #f2f2f2;\n border: none !important;\n font-size: 12px;\n }\n }\n }\n\n .additional-title {\n margin: 20px 0px 10px 0px;\n }\n\n .must-have-insurance-wrapper {\n display: flex;\n align-items: center;\n align-content: center;\n flex-direction: row;\n\n i.fas.fa-exclamation-circle {\n margin: 0 0.5rem;\n color: red;\n }\n\n p {\n margin: 0;\n font-weight: bold;\n }\n }\n\n .additional-image {\n text-align: center;\n width: 50px;\n }\n\n .additional-name {\n .additional-name-button{\n font-size: 0.8rem;\n text-decoration: none!important;\n vertical-align: middle;\n color: ${({ theme }) => theme.colors.secondary}!important;\n\n &:hover, & > i { \n text-decoration: none!important; \n }\n }\n\n .see-less{\n padding-left: 0px;\n }\n\n }\n\n .checkout-submit-button {\n margin-top: 3rem;\n }\n\n .btn-reservation {\n margin-top: 3rem;\n }\n\n .log-in-out-btn {\n background: transparent;\n padding: 0;\n border: none;\n transition: all 0.3s;\n outline: none;\n\n &:hover, & > i { \n color: ${({ theme }) => theme.colors.buttonPrimaryBg}; \n }\n\n i {\n margin-right: 10px;\n }\n }\n\n .form-subtitle { \n font-size: 1rem;\n margin-top: 11px;\n }\n\n\n .file-input input { \n padding: 10px;\n background: white;\n margin-bottom: 1rem;\n }\n\n\n .text-error {\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic;\n }\n\n .file-input {\n display: flex; \n align-items: center;\n justify-content: center;\n\n & > div {\n width: 100%;\n }\n\n .input-wrapper, .form-control {\n margin-bottom: 0 !important;\n }\n }\n\n .delete-file {\n background: transparent;\n border: none;\n margin-left: 10px;\n padding: 0;\n transition: all 0.3s;\n color: #656970;\n\n &:hover { \n color: ${props => props.theme.colors.alert};\n }\n }\n\n .additional-row-v2-wrapper {\n display: flex;\n width: 100%;\n flex-wrap: wrap;\n\n .additional-row-v2 {\n max-width: 30%;\n min-width: 30%;\n box-shadow:3px 3px 6px #00000016;\n margin: 1rem;\n background-color: ${props => props.theme.colors.bg}\n padding: 1rem;\n border-radius: 0.5rem;\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n\n span.checkmark.disabled {\n background-color: ${props => props.theme.colors.disabled};\n }\n\n .checkout-additionals .special-checkbox {\n bottom: 80%!important;\n }\n\n .additional-image{\n p {\n font-weight: bold;\n text-transform: uppercase;\n margin: 0;\n font-size: 0.9rem;\n\n img {\n max-width: 10%;\n margin-right: 1rem;\n text-align: center;\n }\n }\n }\n\n .additional-name {\n font-size: 0.9rem;\n }\n\n .withQuantity {\n margin-top:1rem;\n }\n\n .adicional-price{\n span {\n font-size: 1.2rem;\n color: #4cd695;\n font-weight: bold;\n }\n }\n\n .quantity-wrapper{\n text-align: center;\n margin: 1rem 0;\n\n .special-checkbox {\n bottom: 80%!important;\n }\n\n span.checkmark.disabled {\n background-color: ${props => props.theme.colors.disabled};\n }\n }\n\n .withImage{\n .additional-image.typeAdditional {\n background: transparent;\n padding: 0px;\n justify-content: center;\n height: 230px;\n img {\n width: 100%;\n height: 100%;\n border-radius: 0.5rem; \n }\n }\n }\n\n .typeAdditional{\n .additional-image{\n background: #ffefe6;\n padding: 5px;\n }\n }\n\n .typeInsurance{\n .additional-image{\n background: #ffefe6;\n padding: 5px;\n }\n }\n\n .withImage{\n .additional-image.typeInsurance {\n background: transparent;\n padding: 0px;\n justify-content: center;\n height: 230px;\n margin-bottom: 5rem;\n img {\n width: 100%;\n height: 100%;\n border-radius: 0.5rem; \n }\n }\n }\n\n\n div{\n .additional-image,.addButton{\n width: 100%;\n }\n\n .quantity input {\n text-align: center;\n padding: 0;\n background: aliceblue;\n width: 20%;\n }\n\n .additional-name,.adicional-price{\n width: 80%;\n margin: 1rem auto;\n text-align: center;\n }\n\n .addButton.typeAdditional.no-border-radius.btn {\n color: ${props => props.theme.colors.primary}!important;\n background-color: ${props => props.theme.colors.bg}!important;\n border: 3px solid ${props => props.theme.colors.primary}!important;\n }\n }\n\n .additional-image.typeAdditional {\n background: #ffefe6;\n border-radius: 0.3rem;\n padding: 10px;\n justify-content: center;\n \n p {\n margin: 0;\n font-size: 0.9rem;\n\n img {\n width:30px;\n height: 30px;\n margin-right: 1rem;\n text-align: center;\n }\n }\n }\n }\n } \n\n @media only screen and (max-width: ${props => props.theme.screens.xs}){\n .checkout-additionals{\n .table tr td:first-child{\n max-width: 15px;\n padding-right: 45px;\n }\n }\n .send-budget a{\n width: 100%;\n display:block;\n i{\n margin-left: 0 !important;\n }\n }\n .additional-name {\n padding-left: 0px !important;\n\n .additional-name-button{\n font-size: 0.8rem;\n text-decoration: none!important;\n vertical-align: middle;\n color: ${({ theme }) => theme.colors.secondary}!important;\n\n &:hover, & > i { \n text-decoration: none!important; \n }\n }\n\n .see-less{\n padding-left: 0px;\n }\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .checkout-additionals{\n table{\n font-size: 14px;\n .adicional-price{\n font-size: 13px;\n span {\n display: block;\n font-size: 16px;\n }\n }\n }\n\n .additional-row-v2-wrapper {\n flex-direction: column;\n\n .additional-row-v2 {\n max-width: 100%;\n }\n }\n }\n \n .othercar {\n display: none !important;\n }\n }\n\n\n\n\n\n @media only screen and (max-width: ${props => props.theme.screens.xl})\n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl})\n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td:first-child {\n padding-right: 20px;\n max-height: 100px;\n width: 15px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n }\n\n .adicionales{\n background-color: #fff;\n padding: 2% 3%;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 9px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n\n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 3%;\n background-color: #fff;\n }\n\n form input {\n font-weight: 400;\n }\n\n form input:focus {\n border-color: #FFBB3C;\n box-shadow: none;\n }\n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .CustomAdressesContainer {\n display: flex;\n\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n flex-direction: column;\n div {\n width: 100%;\n }\n }\n }\n\n .alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n width: 100%;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n\n .quantity {\n input{\n text-align: center;\n padding: 0;\n }\n .input-wrapper {\n border:none!important;\n }\n }\n }\n`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nimport { TextInput, NumberDisplay } from 'components';\nimport { Collapse, Button } from 'react-bootstrap';\nimport { MODERN_THEME } from 'styled/constants';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from '../../../utils/priceHelper';\n\nclass AdditionalRow extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n expanded: false,\n };\n }\n\n handleRowClick = (additional, event) => {\n const { seeMore, seeLess } = this.props;\n const buttonsRendered = seeMore && seeLess;\n\n if (\n buttonsRendered &&\n (event.target.classList.contains('additional-name-button') ||\n event.target.classList.contains('additional-name') ||\n event.target.classList.contains('additional-image'))\n ) {\n return;\n }\n\n if (additional.isRequired || additional.availableStock < 1) return;\n if (additional.maxQuantityPerBooking === 1) this.onRowCheckedChange();\n else this.onRowValueChange();\n };\n\n onRowValueChange = () => {\n const { value } = this.props;\n\n let number = value && value.number > 0 ? value.number - 1 : 1;\n\n const { additional, listAdditionals, onAdditionalChange } = this.props;\n const maxValue = listAdditionals.find(a => a.id === additional.id).maxQuantityPerBooking;\n\n const input = document.getElementById(additional.id);\n input.focus();\n input.select();\n\n if (number > maxValue) return;\n onAdditionalChange({ id: additional.id, number, type: additional.type });\n };\n\n onRowCheckedChange = async () => {\n const { value, additional, onAdditionalChange } = this.props;\n\n onAdditionalChange({\n id: additional.id,\n number: !value || value === 0 ? 1 : 0,\n type: additional.type,\n });\n };\n\n getPrice(additional) {\n const { t, currentCurrency, defaultCurrency, webCurrency } = this.props;\n if (additional.priceWithoutTaxes > 0) {\n let price = additional.isPriceByDay ? additional.dailyPrice : additional.priceWithoutTaxes;\n\n if (applyCurrencyExchangeRate(currentCurrency, webCurrency)) {\n price = getPriceWithExchangeRate(price, currentCurrency, defaultCurrency, webCurrency);\n }\n\n return (\n <>\n <NumberDisplay value={price} />\n {' ' + (additional.isPriceByDay ? t('perDay') : t('perBooking'))}\n </>\n );\n } else {\n return t('freeAdditional');\n }\n }\n\n getAdditionalName(additional, nameMaxLength, nameSplitNumber) {\n const { name, description } = additional;\n const fullName = description ? `${name} - ${description}` : name;\n const collapsedName =\n fullName.length > nameMaxLength ? fullName.slice(0, nameSplitNumber) + '...' : fullName;\n\n return { fullName, collapsedName };\n }\n\n onNumberChange = newValue => {\n const { additional, onAdditionalChange } = this.props;\n let number = newValue;\n\n if (newValue < 0) {\n number = 0;\n }\n\n if (newValue > additional.maxQuantityPerBooking) {\n number = additional.maxQuantityPerBooking;\n }\n\n onAdditionalChange({ id: additional.id, number, type: additional.type });\n };\n\n render() {\n const {\n additional,\n t,\n settings: { theme },\n nameMaxLength,\n nameSplitNumber,\n seeMore,\n seeLess,\n } = this.props;\n const { value, onAdditionalChange } = this.props;\n const { fullName, collapsedName } = this.getAdditionalName(\n additional,\n nameMaxLength,\n nameSplitNumber,\n );\n const { expanded } = this.state;\n\n return (\n <tr\n id={`additional-${additional.id}`}\n className={\n additional.isRequired || additional.availableStock < 1 ? 'mandatory-additional' : ''\n }\n >\n <td>\n {additional.maxQuantityPerBooking === 1 ? (\n <label className=\"special-checkbox d-inline\">\n <input\n type=\"checkbox\"\n checked={value && value.number > 0 ? true : false}\n onChange={({ target }) =>\n onAdditionalChange({\n id: additional.id,\n number: target.checked ? 1 : 0,\n type: additional.type,\n })\n }\n disabled={additional.isRequired || additional.availableStock < 1}\n />\n <span className=\"checkmark\" />\n </label>\n ) : (\n <TextInput\n type=\"number\"\n value={value ? value.number : ''}\n placeholder={''}\n onChange={value => {\n this.onNumberChange(value ? parseInt(value) : 0);\n }}\n inputClass=\"form-control number\"\n wrapperClass=\"quantity\"\n min={0}\n id={additional.id}\n options={{\n pattern: '[0-9]*',\n inputMode: 'numeric',\n min: 0,\n max: additional.maxQuantityPerBooking,\n }}\n disabled={additional.isRequired || additional.availableStock < 1}\n />\n )}\n </td>\n <td className=\"additional-image\" onClick={event => this.handleRowClick(additional, event)}>\n <img\n width={theme.template === MODERN_THEME ? '32' : '40'}\n className=\"d-inline\"\n src={additional.imagePath}\n title={additional.name}\n alt={additional.name}\n />\n </td>\n <td onClick={event => this.handleRowClick(additional, event)}>\n <div className=\"additional-name\">\n <Collapse in={expanded}>\n <div>{expanded ? fullName : collapsedName}</div>\n </Collapse>\n {!expanded && (fullName.length > nameMaxLength ? collapsedName : fullName)}\n {fullName.length > nameMaxLength && (\n <Button\n variant=\"link\"\n onClick={() => this.setState({ expanded: !expanded })}\n aria-controls=\"additional-name-collapse\"\n aria-expanded={expanded}\n className={`additional-name-button ${expanded && seeLess ? 'see-less' : ''}`}\n >\n {expanded ? seeLess : seeMore}\n </Button>\n )}\n {additional.isRequired && (\n <span className=\"mandatory-legend\">{t('additionalMandatoryLegend')}</span>\n )}\n {additional.availableStock < 1 && (\n <span className=\"mandatory-legend\">{t('noStock')}</span>\n )}\n </div>\n </td>\n <td\n className=\"text-right adicional-price\"\n onClick={event => this.handleRowClick(additional, event)}\n >\n {this.getPrice(additional)}\n </td>\n </tr>\n );\n }\n}\n\nAdditionalRow.propTypes = {\n additional: PropTypes.shape({}),\n listAdditionals: PropTypes.array,\n onAdditionalChange: PropTypes.func,\n seeMore: PropTypes.string,\n seeLess: PropTypes.string,\n nameMaxLength: PropTypes.number,\n nameCharsSplit: PropTypes.number,\n t: PropTypes.func,\n};\n\nconst mapStateToProps = ({ bookings, siteConfiguration, global }) => ({\n listAdditionals: bookings.listAdditionals,\n settings: siteConfiguration.settings,\n currentCurrency: global.currentCurrency,\n defaultCurrency: global.defaultCurrency,\n webCurrency: global.webCurrency,\n});\n\nexport default connect(mapStateToProps)(withTranslation()(AdditionalRow));\n","import style from 'styled-components';\n\nexport const StyledAdditionalsModern = style.section`\n @media print {\n .searchFilter, .car-block {\n display:none !important;\n visibility: hidden;\n }\n }\n\n .constant-arrows::-webkit-inner-spin-button,\n .constant-arrows::-webkit-outer-spin-button {\n opacity: 1;\n }\n\n button.additional-name-button.btn.btn-link {\n background: #fff!important;\n color: black!important;\n }\n\n .DateInput{\n background-color: #f2f5f7;\n margin-left: -5px;\n }\n\n .SingleDatePickerInput{\n background-color: #f2f5f7;\n }\n\n .additionals-loader {\n width: 100px;\n height: 100px;\n }\n\n input.form-control {\n text-overflow: ellipsis;\n }\n\n .adicional-price{\n font-weight:500;\n color: #858C99;\n margin-bottom: 10px;\n }\n\n .adicional-price:hover{\n color: #2BCE81;\n }\n\n table{\n background:#FFF;\n border-radius:8px;\n box-shadow:3px 3px 6px #00000016;\n }\n\n .titleRow {\n .first-col {\n padding: 0;\n }\n }\n\n .mandatory-additional {\n cursor: auto !important;\n\n label {\n cursor: auto !important;\n\n .checkmark {\n background-color: #BBBBBB !important;\n }\n }\n\n .additional-name {\n display: flex;\n flex-direction: column;\n\n .mandatory-legend {\n font-size: 0.8em;\n color: #f80;\n }\n\n button.additional-name-button.btn.btn-link {\n text-decoration: none!important;\n font-size: 0.8rem;\n color: #fd7e14;\n justify-content: flex-start;\n display: flex;\n padding: 0.5rem 0px;\n }\n\n }\n }\n\n .additional-row-v2-wrapper {\n display: flex;\n width: 100%;\n flex-wrap: wrap;\n\n .additional-row-v2 {\n max-width: 30%;\n min-width: 30%;\n box-shadow:3px 3px 6px #00000016;\n margin: 1rem;\n background-color: ${props => props.theme.colors.bg}\n padding: 1rem;\n border-radius: 0.5rem;\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n\n .additional-image{\n p {\n font-weight: bold;\n text-transform: uppercase;\n margin: 0;\n font-size: 0.9rem;\n \n img {\n margin-right: 1rem;\n width: 10%;\n }\n }\n }\n\n span.checkmark.disabled {\n background-color: ${props => props.theme.colors.disabled};\n }\n\n .special-checkbox {\n bottom: 80%!important;\n }\n\n .quantity-wrapper{\n text-align: center;\n\n span.checkmark.disabled {\n background-color: ${props => props.theme.colors.disabled};\n }\n\n .special-checkbox {\n bottom: 80%!important;\n }\n }\n\n .additional-name {\n font-size: 0.9rem;\n }\n\n .withQuantity {\n margin: 3rem 0!important;\n }\n\n .adicional-price{\n span {\n font-size: 1.2rem;\n color: #4cd695;\n font-weight: bold;\n }\n }\n\n div{\n .additional-image,.addButton{\n width: 100%;\n }\n\n .quantity input {\n text-align: center;\n padding: 0;\n background: aliceblue;\n width: 20%;\n }\n\n .additional-name,.adicional-price{\n width: 80%;\n margin: 1rem auto;\n text-align: center;\n }\n\n .addButton.typeAdditional.no-border-radius.btn {\n color: ${props => props.theme.colors.primary}!important;\n background-color: ${props => props.theme.colors.bg}!important;\n border: 3px solid ${props => props.theme.colors.primary}!important;\n }\n }\n\n .additional-image.typeAdditional {\n background: #ffefe6;\n border-radius: 0.3rem;\n padding: 10px;\n justify-content: center;\n \n p {\n margin: 0;\n font-size: 0.9rem;\n\n img {\n margin-right: 1rem;\n width: 30px;\n height: 30px; \n }\n }\n }\n\n .withImage{\n .additional-image.typeAdditional {\n background: transparent;\n padding: 0px;\n justify-content: center;\n height: 230px;\n img {\n width: 100%;\n height: 100%;\n border-radius: 0.5rem; \n }\n }\n }\n\n \n\n .typeAdditional{\n .additional-image{\n background: #ffefe6;\n padding: 5px;\n }\n }\n\n .typeInsurance{\n .additional-image{\n background: #ffefe6;\n padding: 5px;\n }\n }\n\n .withImage{\n .additional-image.typeInsurance {\n background: transparent;\n padding: 0px;\n justify-content: center;\n height: 230px;\n margin-bottom: 5rem;\n\n\n img {\n width: 100%;\n height: 100%;\n border-radius: 0.5rem; \n }\n }\n }\n }\n } \n}\n\n .conditions {\n margin-top: 1rem;\n }\n\n .conditions-legend {\n font-weight: bold;\n font-size: 0.9em;\n }\n\n width: 73%;\n flex: 73%;\n max-width: 73%;\n margin-right: 2%;\n .table-hover tbody tr:hover {\n background-color: #f2f2f27d;\n font-weight:500;\n }\n\n .checkout-additionals{\n .table tr .input-wrapper {\n border:none;\n width: 32px;\n height: 32px;\n margin-top: 5px;\n margin-bottom: 5px !important;\n\n input[type=number]{\n background: #f2f2f2;\n border: none !important;\n font-size: 12px;\n }\n }\n }\n\n .titleRow{\n align-items:flex-end;\n }\n \n .additional-title {\n margin: 20px 0px 10px 0px;\n color: #2E2D35;\n font-weight: 400;\n }\n\n .must-have-insurance-wrapper {\n display: flex;\n align-items: center;\n align-content: center;\n flex-direction: row;\n\n i.fas.fa-exclamation-circle {\n margin: 0 0.5rem;\n color: red;\n }\n\n p {\n margin: 0;\n font-weight: bold;\n }\n }\n\n .additional-image {\n text-align: center;\n width: 50px;\n }\n\n .d-inline-flex .btn{\n padding:15px 25px;\n }\n\n .send-budget{\n font-size:14px;\n }\n\n .checkout-submit-button {\n margin-top: 0.25rem;\n }\n\n .log-in-out-btn {\n background: transparent;\n padding: 0;\n border: none;\n transition: all 0.3s;\n outline: none;\n\n &:hover, & > i { \n color: ${({ theme }) => theme.colors.buttonPrimaryBg}; \n }\n\n i {\n margin-right: 10px;\n }\n }\n\n .form-subtitle { \n font-size: 1rem;\n margin-top: 11px;\n }\n\n .file-input input { \n padding: 10px;\n background: white;\n margin-bottom: 1rem;\n }\n\n\n .text-error {\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic;\n }\n\n .file-input {\n display: flex; \n align-items: center;\n justify-content: center;\n\n & > div {\n width: 100%;\n }\n\n .input-wrapper, .form-control {\n margin-bottom: 0 !important;\n }\n }\n\n .delete-file {\n background: transparent;\n border: none;\n margin-left: 10px;\n padding: 0;\n transition: all 0.3s;\n color: #656970;\n\n &:hover { \n color: ${props => props.theme.colors.alert};\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xs}){\n .checkout-additionals{\n .table tr td:first-child{\n max-width: 15px;\n }\n }\n .send-budget a{\n width: 100%;\n display:block;\n i{\n margin-left: 0 !important;\n }\n }\n .additional-name {\n padding-left: 0px !important;\n\n button.additional-name-button.btn.btn-link {\n text-decoration: none!important;\n font-size: 0.8rem;\n color: #fd7e14;\n justify-content: flex-start;\n display: flex;\n padding: 0.5rem 0px;\n }\n }\n }\n\n @media(max-width:767px){\n .table tr td:first-child {\n padding-right: 20px !important;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n .checkout-additionals{\n table{\n font-size: 14px;\n .adicional-price{\n font-size: 13px;\n span {\n display: block;\n font-size: 16px;\n }\n }\n }\n }\n .othercar {\n display: none !important;\n }\n\n .additional-row-v2-wrapper {\n display: flex;\n max-width: 100%;\n flex-direction: column;\n margin: auto;\n\n .additional-row-v2 {\n min-width: 100%;\n margin: 1rem auto;\n }\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl})\n and (min-width: ${props => props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n margin-right: 0;\n\n a.othercar, .print-btn {\n display: none !important;\n }\n\n .send-budget{\n text-align: center;\n }\n\n .adicionales-table td {\n font-size: 12px;\n }\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl})\n and (min-width: ${props => props.theme.screens.xl}){\n width: 68%;\n flex: 68%;\n max-width: 68%;\n margin-right: 0;\n }\n\n .table td, .table th {\n padding: .6rem .2rem;\n vertical-align: middle;\n }\n\n .table tr:first-child td{\n border-width: 0;\n }\n\n .table tr td{\n padding:15px;\n }\n\n .table tr td:first-child {\n padding-right:0;\n max-height: 100px;\n width: 15px;\n }\n\n .checkout-additionals {\n\n h2{\n margin-bottom: 2px !important;\n font-weight:500;\n }\n\n .adicionales-table tr {\n cursor: pointer;\n\n :first {\n width: 3.5%;\n\n input {\n width: 100%;\n }\n }\n }\n\n a.othercar {\n cursor: pointer;\n }\n\n /* Custom Checkbox */\n /* The container */\n .special-checkbox {\n display: block;\n position: relative;\n padding-left: 20px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n /* Hide the browser's default checkbox */\n .special-checkbox input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n }\n\n /* Create a custom checkbox */\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 20px;\n width: 20px;\n border-radius: 20px;\n background-color: #ccc;\n }\n\n /* On mouse-over, add a grey background color */\n .container:hover input ~ .checkmark {\n background-color: #ccc;\n }\n\n /* When the checkbox is checked, add a blue background */\n .special-checkbox input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n\n /* Create the checkmark/indicator (hidden when not checked) */\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n }\n\n /* Show the checkmark when checked */\n .special-checkbox input:checked ~ .checkmark:after {\n display: block;\n }\n\n /* Style the checkmark/indicator */\n .special-checkbox .checkmark:after {\n left: 8px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid white;\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n\n a {\n transition: all 0.4s;\n margin-top:10px;\n margin-bottom:10px;\n }\n\n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg}; }\n\n .user-info {\n padding: 4% 0%;\n background-color: transparent;\n }\n\n .input-wrapper{\n border:none;\n border-radius:8px;\n }\n\n .input-wrapper:hover{\n border:none;\n }\n \n .form-control-select{\n font-weight: 400;\n border:1px solid #e0e6f1;\n border-radius:8px !important;\n padding:10px;\n }\n\n .form-control-select:focus{\n border:1px solid ${props => props.theme.colors.primary};\n }\n\n form input {\n font-weight: 400;\n border: 1px solid #e0e6f1;\n border-radius: 8px !important;\n height: 45px;\n }\n\n form textarea {\n font-weight: 400;\n border: 1px solid #e0e6f1;\n border-radius: 8px !important;\n padding: 10px;\n }\n\n form input::placeholder, form textarea::placeholder {\n font-size: 16px;\n color: ${({ theme }) => theme.font.colors.secondary};\n opacity: 0.8;\n }\n\n\n form input:focus, form textarea:focus {\n border:1px solid ${props => props.theme.colors.primary};\n box-shadow: none;\n }\n\n \n\n .form-datos{\n h2{\n @media only screen and (max-width: 1480px) and (min-width: 1271px){\n font-size: 18px;\n }\n }\n }\n\n .CustomAdressesContainer {\n display: flex;\n\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n flex-direction: column;\n div {\n width: 100%;\n }\n }\n }\n\n .alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n width: 100%;\n margin-left: 1rem;\n margin-right: 1rem;\n }\n\n .quantity {\n input{\n text-align: center;\n padding: 0;\n }\n }\n }\n`;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nimport { TextInput, NumberDisplay } from 'components';\nimport { Collapse, Button } from 'react-bootstrap';\nimport { MODERN_THEME } from 'styled/constants';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from '../../../utils/priceHelper';\n\nconst AdditionalCard = ({\n additional,\n onAdditionalChange,\n seeMore,\n seeLess,\n insuranceImage,\n additionalImage,\n t,\n settings: { theme },\n nameMaxLength,\n nameSplitNumber,\n value,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const getPrice = () => {\n if (additional.price > 0) {\n let price = additional.isPriceByDay ? additional.dailyPrice : additional.price;\n\n if (applyCurrencyExchangeRate(currentCurrency, webCurrency))\n price = getPriceWithExchangeRate(price, currentCurrency, defaultCurrency, webCurrency);\n\n return (\n <>\n <NumberDisplay value={price} />\n {' ' + (additional.isPriceByDay ? t('perDay') : t('perBooking'))}\n </>\n );\n }\n return null;\n };\n\n const getAdditionalName = () => {\n const { name, description } = additional;\n const fullName = description ? `${description}` : name;\n const collapsedName =\n fullName.length > nameMaxLength ? fullName.slice(0, nameSplitNumber) + '...' : fullName;\n\n return { fullName, collapsedName };\n };\n\n const onNumberChange = newValue => {\n let number = newValue;\n\n if (newValue < 0) {\n number = 0;\n }\n\n if (newValue > additional.maxQuantityPerBooking) {\n number = additional.maxQuantityPerBooking;\n }\n\n onAdditionalChange({ id: additional.id, number, type: additional.type });\n };\n\n const { fullName, collapsedName } = getAdditionalName();\n\n const getInsuranceComponent = additional => {\n const renderImage = !insuranceImage ? renderAdditionalWithIcon : renderAdditionalWithImage;\n return (\n <>\n <div\n className={\n `${\n additional.isRequired || additional.availableStock < 1\n ? 'mandatory-additional typeAdditional'\n : 'typeAdditional'\n } ${insuranceImage ? 'withImage' : ''}` || ''\n }\n >\n <div className=\"additional-image typeInsurance\">{renderImage(additional)}</div>\n <div className={`${additional.maxQuantityPerBooking !== 1 ? 'withQuantity' : ''}`}>\n <div className=\"additional-name\">\n <Collapse in={expanded}>\n <div>{expanded ? fullName : collapsedName}</div>\n </Collapse>\n {!expanded && (fullName.length > nameMaxLength ? collapsedName : fullName)}\n {fullName.length > nameMaxLength && (\n <Button\n variant=\"link\"\n onClick={() => setExpanded(!expanded)}\n aria-controls=\"additional-name-collapse\"\n aria-expanded={expanded}\n className={`additional-name-button ${expanded && seeLess ? 'see-less' : ''}`}\n >\n {expanded ? seeLess : seeMore}\n </Button>\n )}\n {additional.isRequired ? (\n <span className=\"mandatory-legend\">{t('additionalMandatoryLegend')}</span>\n ) : (\n <span className=\"mandatory-legend\"></span>\n )}\n {additional.availableStock < 1 && (\n <span className=\"mandatory-legend\">{t('noStock')}</span>\n )}\n </div>\n </div>\n <div className=\"text-center adicional-price\">{getPrice()}</div>\n </div>\n <div className=\"quantity-wrapper\">\n {additional.maxQuantityPerBooking === 1 ? (\n <label className=\"special-checkbox d-inline\">\n <input\n type=\"checkbox\"\n checked={value && value.number > 0 ? true : false}\n onChange={({ target }) =>\n onAdditionalChange({\n id: additional.id,\n number: target.checked ? 1 : 0,\n type: additional.type,\n })\n }\n disabled={additional.isRequired || additional.availableStock < 1}\n />\n <span className={additional.isRequired ? 'checkmark disabled' : 'checkmark'} />\n </label>\n ) : (\n <TextInput\n type=\"number\"\n value={value ? value.number : ''}\n placeholder={''}\n onChange={value => {\n onNumberChange(value ? parseInt(value) : 0);\n }}\n inputClass=\"form-control number constant-arrows\"\n wrapperClass=\"quantity\"\n min={0}\n id={additional.id}\n options={{\n pattern: '[0-9]*',\n inputMode: 'numeric',\n min: 0,\n max: additional.maxQuantityPerBooking,\n }}\n disabled={additional.isRequired || additional.availableStock < 1}\n />\n )}\n </div>\n </>\n );\n };\n\n const renderAdditionalWithIcon = additional => (\n <p>\n {' '}\n <img\n width={theme.template === MODERN_THEME ? '32' : '40'}\n className=\"d-inline\"\n src={additional.imagePath}\n title={additional.name}\n alt={additional.name}\n />\n {additional.name}\n </p>\n );\n\n const renderAdditionalWithImage = additional => (\n <>\n <img src={additional.imagePath} title={additional.name} alt={additional.name} />\n\n <p>{additional.name}</p>\n </>\n );\n\n const getAdditionalComponent = additional => {\n const renderImage = !additionalImage ? renderAdditionalWithIcon : renderAdditionalWithImage;\n\n return (\n <>\n <div\n className={\n `${\n additional.isRequired || additional.availableStock < 1\n ? 'mandatory-additional typeAdditional'\n : 'typeAdditional'\n } ${additionalImage ? 'withImage' : ''}` || ''\n }\n >\n <div className={`additional-image typeAdditional`}>{renderImage(additional)}</div>\n </div>\n <div className={`${additional.maxQuantityPerBooking !== 1 ? 'withQuantity' : ''}`}>\n <div className=\"additional-name\">\n <Collapse in={expanded}>\n <div>{expanded ? fullName : collapsedName}</div>\n </Collapse>\n {!expanded && (fullName.length > nameMaxLength ? collapsedName : fullName)}\n {fullName.length > nameMaxLength && (\n <Button\n variant=\"link\"\n onClick={() => setExpanded(!expanded)}\n aria-controls=\"additional-name-collapse\"\n aria-expanded={expanded}\n className={`additional-name-button ${expanded && seeLess ? 'see-less' : ''}`}\n >\n {expanded ? seeLess : seeMore}\n </Button>\n )}\n {additional.isRequired ? (\n <span className=\"mandatory-legend\">{t('additionalMandatoryLegend')}</span>\n ) : (\n <span className=\"mandatory-legend\"></span>\n )}\n {additional.availableStock < 1 && (\n <span className=\"mandatory-legend\">{t('noStock')}</span>\n )}\n </div>\n </div>\n <div className=\"text-center adicional-price\">{getPrice()}</div>\n\n <div className=\"quantity-wrapper\">\n {additional.maxQuantityPerBooking === 1 ? (\n <label className=\"special-checkbox d-inline\">\n <input\n type=\"checkbox\"\n checked={value && value.number > 0 ? true : false}\n onChange={({ target }) =>\n onAdditionalChange({\n id: additional.id,\n number: target.checked ? 1 : 0,\n type: additional.type,\n })\n }\n disabled={additional.isRequired || additional.availableStock < 1}\n />\n <span className={additional.isRequired ? 'checkmark disabled' : 'checkmark'} />\n </label>\n ) : (\n <TextInput\n type=\"number\"\n value={value ? value.number : ''}\n placeholder={''}\n onChange={value => {\n onNumberChange(value ? parseInt(value) : 0);\n }}\n inputClass=\"form-control number constant-arrows\"\n wrapperClass=\"quantity\"\n min={0}\n id={additional.id}\n options={{\n pattern: '[0-9]*',\n inputMode: 'numeric',\n min: 0,\n max: additional.maxQuantityPerBooking,\n }}\n disabled={additional.isRequired || additional.availableStock < 1}\n />\n )}\n </div>\n </>\n );\n };\n\n return (\n <div id={`additional-${additional.id}`} className=\"additional-row-v2\">\n {additional.type?.toLowerCase() === 'insurance' && getInsuranceComponent(additional)}\n {additional.type?.toLowerCase() === 'additional' && getAdditionalComponent(additional)}\n </div>\n );\n};\n\nAdditionalCard.propTypes = {\n additional: PropTypes.shape({}),\n listAdditionals: PropTypes.array,\n onAdditionalChange: PropTypes.func,\n seeMore: PropTypes.string,\n seeLess: PropTypes.string,\n nameMaxLength: PropTypes.number,\n nameCharsSplit: PropTypes.number,\n insuranceImage: PropTypes.bool,\n additionalImage: PropTypes.bool,\n t: PropTypes.func,\n settings: PropTypes.shape({\n theme: PropTypes.string,\n }),\n value: PropTypes.shape({\n number: PropTypes.number,\n }),\n};\n\nconst mapStateToProps = ({ bookings, siteConfiguration, global }) => ({\n listAdditionals: bookings.listAdditionals,\n settings: siteConfiguration.settings,\n currentCurrency: global.currentCurrency,\n defaultCurrency: global.defaultCurrency,\n webCurrency: global.webCurrency,\n});\n\nexport default connect(mapStateToProps)(withTranslation()(AdditionalCard));\n","import React from 'react';\nimport { orderBy, groupBy } from 'lodash';\nimport { connect } from 'react-redux';\nimport FormFile from 'react-bootstrap/FormFile';\nimport { props, defaultProps } from './CheckoutAdditionals.props';\nimport { StyledAdditionals } from './CheckoutAdditionals.styled';\nimport {\n Title,\n Btn,\n TextInput,\n Paragraph,\n CustomLoading,\n LoginForm,\n TextAreaInput,\n DateInput,\n} from 'components/';\nimport AdditionalRow from './AdditionalRow';\nimport { withTranslation } from 'react-i18next';\nimport { tt, tlink } from '../../../utils/translationHelper';\nimport { debounce } from '../../../utils/debounceHelper';\nimport { withRouter } from 'react-router-dom';\nimport * as yup from 'yup';\nimport { CheckboxInput, PaymentMethods, SelectInput } from '/components';\nimport { CheckoutMobileDetails, CheckoutFilter } from '/sections';\nimport { history } from '../../../store';\nimport { book } from '../../../actions/bookings.actions';\nimport {\n fetchDocumentTypes,\n fetchCountries,\n fetchCities,\n fetchFiscalConditions,\n} from '../../../actions/global.actions';\nimport { handleLogOut, handleLogIn } from 'actions';\nimport {\n is_gtag_enabled,\n gtag_additional_impresions,\n gtag_checkout_process,\n gtag_purchase,\n gtag_manage_shopping_cart,\n} from '../../../utils/googleTagsHelper';\n\nimport {\n cleanRUT,\n getDocumentSample,\n isValidDocument,\n transformDocTypesToSelectOptions,\n transformFiscalConditionsToSelectOptions,\n} from '../../../utils/documentHelper';\nimport { MODERN_THEME } from 'styled/constants';\nimport { StyledAdditionalsModern } from './CheckoutAdditionals.style.modern';\nimport {\n convertToBase64,\n getDocumentMask,\n getDocumentTypeName,\n isCompanyUser,\n transformCountriesToSelectOptions,\n} from 'utils/dataHelper';\nimport { Modal } from 'react-bootstrap';\nimport { register } from 'services/userService';\nimport moment from 'moment';\nimport Alert from 'react-bootstrap/Alert';\nimport AdditionalCard from './AdditionalCard';\nimport 'react-phone-number-input/style.css';\nimport PhoneInputWithCountrySelect from 'react-phone-number-input';\n\nclass CheckoutAdditionals extends React.Component {\n constructor(props) {\n const {\n t,\n withBillingInformation,\n hideZipCode,\n showIsCompany,\n profile,\n settings: {\n featureFlags,\n configurations: { fiscalConditionValidation },\n myAccountConfiguration,\n },\n bookingsConfiguration,\n booking,\n } = props;\n super(props);\n\n this.state = {\n additionals: [],\n isInsuranceSelected: false,\n documentTypes: [],\n fiscalConditions: [],\n customDelivery: booking?.deliveryPlace?.canAddCustomAddress ? true : false,\n customReturn: booking?.returnPlace?.canAddCustomAddress ? true : false,\n userInfo: {\n isCustomAddress: false,\n tcAccept: featureFlags?.hideTermsCheckbox ? true : false,\n paymentMethod: false,\n paymentMethodObj: null,\n showPaymentMethod:\n this.props.settings.paymentConfiguration != null &&\n this.props.onlinePayment &&\n this.props.settings.paymentConfiguration.paymentMethods != null,\n showBillingFields: withBillingInformation !== undefined ? withBillingInformation : false,\n tenantDocumentTypes: [],\n tenantFiscalConditions: [],\n fiscalConditionId: null,\n hideFiscalCondition: featureFlags?.hideFiscalCondition || false,\n registerMe: false,\n hideAddressField: this.props.hideAddressField || false,\n hideCountryField: this.props.hideCountryField || false,\n hideDocumentField: this.props.hideDocumentField || false,\n hideFlightNumber: this.props.hideFlightNumber || false,\n hidePhoneField: this.props.hidePhoneField || false,\n airlineField: this.props.airlineField || false,\n hideZipCode: hideZipCode !== undefined ? hideZipCode : false,\n showIsCompany: showIsCompany !== undefined ? showIsCompany : false,\n isCompany: false,\n loggedAsCompany: isCompanyUser(profile),\n withPurchaseOrder: null,\n withPurchaseOrderFile: null,\n companyFiles: [],\n enableLicenseData:\n featureFlags.enableLicenseData != undefined ? featureFlags.enableLicenseData : false,\n enableCityInput:\n featureFlags.enableCityInput != undefined ? featureFlags.enableCityInput : false,\n enableStateInput:\n featureFlags.enableStateInput != undefined ? featureFlags.enableStateInput : false,\n showBirthDateField:\n featureFlags.showBirthDateField != undefined ? featureFlags.showBirthDateField : false,\n birthDate: null,\n forceRutWhenChile:\n featureFlags.forceRutWhenChile != undefined ? featureFlags.forceRutWhenChile : false,\n showCompanyExtraDocumentsFields:\n myAccountConfiguration?.showCompanyExtraDocumentsFields != undefined\n ? myAccountConfiguration.showCompanyExtraDocumentsFields\n : false,\n hidePurchaseOrderFields: myAccountConfiguration?.hidePurchaseOrderFields || false,\n requireNotes: myAccountConfiguration?.requireNotes || false,\n showAddressAllFields:\n featureFlags.showAddressAllFields != undefined\n ? featureFlags.showAddressAllFields\n : false,\n },\n formErrors: {\n firstName: '',\n lastName: '',\n email: '',\n country: '',\n birthDay: '',\n city: '',\n cityInput: '',\n stateInput: '',\n phone: '',\n address: '',\n addressNumber: '',\n addressDepartment: '',\n zipCode: '',\n id: '',\n fiscalConditionId: null,\n typeId: '',\n tcAccept: '',\n paymentMethod: '',\n flightNumber: '',\n password: '',\n repeatPassword: '',\n isCompany: '',\n driverFirstName: '',\n driverLastName: '',\n driverEmail: '',\n driverCountry: '',\n driverCity: '',\n driverPhone: '',\n driverAddress: '',\n driverAddressNumber: '',\n driverAddressDepartment: '',\n driverZipCode: '',\n driverId: '',\n driverTypeId: '',\n driverLicenseNumber: '',\n driverLicenseCountry: '',\n driverLicenseExpiration: '',\n purchaseOrder: '',\n companyFiles: '',\n notes: '',\n withPurchaseOrder: '',\n withPurchaseOrderFile: '',\n customDeliveryAddress: '',\n customDeliveryCity: '',\n customReturnAddress: '',\n customReturnCity: '',\n },\n formLoading: false,\n quotationLoading: false,\n popUpErrorShow: false,\n isCheckoutFilterVisible: true,\n modalState: false,\n sampleDocFormat: '',\n docInputFocus: false,\n sampleDriverDocFormat: '',\n docDriverInputFocus: false,\n };\n\n yup.addMethod(yup.string, 'isValidDocument', function(documentId) {\n return this.test(\n 'test-document-format',\n t('billingInformation.errors.wrongDocumentFormat'),\n function(documentId) {\n const { tenantDocumentTypes, typeId } = this.parent;\n return isValidDocument(tenantDocumentTypes, typeId, documentId);\n },\n );\n });\n\n yup.addMethod(yup.string, 'isValidDriverDocument', function(documentId) {\n return this.test(\n 'test-document-format',\n t('billingInformation.errors.wrongDocumentFormat'),\n function(documentId) {\n const { tenantDocumentTypes, driverTypeId } = this.parent;\n return isValidDocument(tenantDocumentTypes, driverTypeId, documentId);\n },\n );\n });\n\n yup.addMethod(yup.string, 'hasValidDocumentType', function(fiscalCondition) {\n return this.test(\n 'test-document-format',\n t('billingInformation.errors.wrongFiscalCondition'),\n function(fiscalCondition) {\n const taxPayerValidation = (fiscalConditionValidation || [])?.find(\n i => `${i.id}` === fiscalCondition,\n );\n\n if (!taxPayerValidation?.validDocumentIds) return true;\n else {\n const validIds = taxPayerValidation?.validDocumentIds;\n if (validIds.includes(this.parent.typeId)) return true;\n return false;\n }\n },\n );\n });\n\n yup.addMethod(yup.string, 'isValidPassword', function(password) {\n return this.test('test-password', t('passwordError'), function(password) {\n return password.length > 5;\n });\n });\n\n yup.addMethod(yup.string, 'isValidRepeatPassword', function(repeatPassword) {\n return this.test('test-password', t('passwordMatch'), function(repeatPassword) {\n const { password } = this.parent;\n return password === repeatPassword;\n });\n });\n\n yup.addMethod(yup.string, 'isValidCity', function(city) {\n return this.test('test-city', t('inputIsRequired', { field: t('city') }), function(city) {\n const { country } = this.parent;\n\n if (country !== 'Chile' || (country === 'Chile' && city)) return true;\n return false;\n });\n });\n\n yup.addMethod(yup.mixed, 'birthDay', function(date) {\n const driverAgeAllowedMin =\n bookingsConfiguration && bookingsConfiguration.driverAgeAllowedMin\n ? bookingsConfiguration.driverAgeAllowedMin\n : 21;\n\n const driverAgeAllowedMax =\n bookingsConfiguration && bookingsConfiguration.driverAgeAllowedMax\n ? bookingsConfiguration.driverAgeAllowedMax\n : 85;\n return this.test(\n 'birthDay',\n t('driverAgeBetween', {\n min: driverAgeAllowedMin,\n max: driverAgeAllowedMax,\n }),\n function(date) {\n const isAgeAllowed = date =>\n moment().diff(date, 'years') >= driverAgeAllowedMin &&\n moment().diff(date, 'years') <= driverAgeAllowedMax;\n return isAgeAllowed(date);\n },\n );\n });\n\n yup.addMethod(yup.mixed, 'driverLicenseExpiration', function(toDate, licenseValidDays) {\n return this.test(\n 'driverLicenseExpiration',\n t('driverLicenseExpirationMessage', { licenseValidDays }),\n function(driverLicenseExpiration) {\n if (!driverLicenseExpiration) {\n return true;\n }\n\n const toDateMoment = moment(toDate, 'DD-MM-YYYY');\n const driverLicenseExpirationMoment = moment(driverLicenseExpiration);\n const toDatePlusDaysMoment = toDateMoment.add(licenseValidDays, 'days');\n\n const isValid = toDatePlusDaysMoment.isSameOrBefore(driverLicenseExpirationMoment);\n\n return isValid;\n },\n );\n });\n\n yup.addMethod(yup.string, 'isValidDriverCity', function(city) {\n return this.test('test-city', t('inputIsRequired', { field: t('city') }), function(city) {\n const { driverCountry } = this.parent;\n\n if (driverCountry !== 'Chile' || (driverCountry === 'Chile' && city)) return true;\n return false;\n });\n });\n\n yup.addMethod(yup.array, 'areCompanyFilesValid', function(companyFiles) {\n return this.test('company-files', t('companyFilesError'), function(companyFiles) {\n if (companyFiles.length === 0 || companyFiles.some(f => !f.name || !f.file)) {\n return false;\n }\n return true;\n });\n });\n\n yup.addMethod(yup.boolean, 'isWithPurchaseOrderSelected', function() {\n return this.test('with-purchase-order', t('withPurchaseOrderError'), function(\n withPurchaseOrder,\n ) {\n if (withPurchaseOrder === null) return false;\n return true;\n });\n });\n\n yup.addMethod(yup.boolean, 'isWithPurchaseOrderFileUndefined', function() {\n return this.test('with-purchase-order-file', t('withPurchaseOrderError'), function(\n withPurchaseOrderFile,\n ) {\n if (withPurchaseOrderFile === null) return false;\n return true;\n });\n });\n\n this.userInfoFormSchema = yup.object().shape({\n firstName: yup.string().required(t('inputIsRequired', { field: t('name') })),\n lastName: yup.string().required(t('inputIsRequired', { field: t('lastname') })),\n email: yup\n .string()\n .email(t('validEmail'))\n .required(t('inputIsRequired', { field: t('mail') })),\n phone: yup.string().when('hidePhoneField', {\n is: hidePhoneField => !hidePhoneField,\n then: yup.string().required(t('inputIsRequired', { field: t('phone') })),\n otherwise: yup.string(),\n }),\n flightNumber: yup.string().when('airlineField', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('airline') })),\n otherwise: yup.string(),\n }),\n address: yup.string().when('hideAddressField', {\n is: hideAddressField => !hideAddressField,\n then: yup.string().required(t('inputIsRequired', { field: t('address') })),\n otherwise: yup.string(),\n }),\n customDeliveryAddress: yup.string().when('isCustomDeliveryCity', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('customDeliveryAddress') })),\n otherwise: yup.string(),\n }),\n customDeliveryCity: yup.string().when('isCustomDeliveryAddress', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('customDeliveryCity') })),\n otherwise: yup.string(),\n }),\n customReturnAddress: yup.string().when('isCustomReturnCity', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('customReturnAddress') })),\n otherwise: yup.string(),\n }),\n customReturnCity: yup.string().when('isCustomReturnAddress', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('customReturnCity') })),\n otherwise: yup.string(),\n }),\n id: yup.string().when('forceRutWhenChile', {\n is: true,\n then: yup\n .string()\n .isValidDocument()\n .required(t('inputIsRequired', { field: t('document') })),\n otherwise: yup.string().when('hideDocumentField', {\n is: hideDocumentField => !hideDocumentField,\n then: yup\n .string()\n .isValidDocument()\n .required(t('inputIsRequired', { field: t('document') })),\n otherwise: yup.string(),\n }),\n }),\n isCustomAddress: yup.boolean(),\n tcAccept: yup\n .boolean()\n .required(t('mustAcceptTermAndConditions'))\n .oneOf([true], t('mustAcceptTermAndConditions')),\n showPaymentMethod: yup.boolean(),\n paymentMethod: yup\n .boolean()\n .required(t('mustHaveOnePaymentMethod'))\n .when('showPaymentMethod', {\n is: true,\n then: yup.boolean().oneOf([true], t('mustHaveOnePaymentMethod')),\n }),\n country: yup.string().when(['hideCountryField', 'showBillingFields'], {\n is: (hideCountryField, showBillingFields) => !hideCountryField || showBillingFields,\n then: yup.string().required(t('inputIsRequired', { field: t('country') })),\n otherwise: yup.string(),\n }),\n showBirthDateField: yup.boolean(),\n birthDay: yup.date().when('showBirthDateField', {\n is: true,\n then: yup\n .date()\n .birthDay()\n .required(t('inputIsRequired', { field: t('birthDay') })),\n }),\n addressNumber: yup.string().when('showBillingFields', {\n is: true,\n then: yup\n .string()\n .typeError(t('invalidNumber'))\n .required(t('inputIsRequired', { field: t('addressNumber') })),\n }),\n zipCode: yup.string().when(['showBillingFields', 'hideZipCode'], {\n is: (showBillingFields, hideZipCode) => showBillingFields && !hideZipCode,\n then: yup.string().required(t('inputIsRequired', { field: t('zipCode') })),\n }),\n typeId: yup.number().when('showBillingFields', {\n is: true,\n then: yup.number().required(t('inputIsRequired', { field: t('tipodocumento') })),\n }),\n fiscalConditionId: yup\n .string()\n .nullable()\n .when(['showBillingFields', 'hideFiscalCondition'], {\n is: (showBillingFields, hideFiscalCondition) => showBillingFields && !hideFiscalCondition,\n then: yup\n .string()\n .nullable()\n .hasValidDocumentType()\n .required(\n t('inputIsRequired', {\n field: t('billingInformation.fields.fiscalCondition'),\n }),\n ),\n }),\n city: yup.string().isValidCity(),\n password: yup.string().when('registerMe', {\n is: true,\n then: yup\n .string()\n .isValidPassword()\n .required(t('inputIsRequired', { field: t('myAccount.password') })),\n }),\n repeatPassword: yup.string().when('registerMe', {\n is: true,\n then: yup\n .string()\n .isValidRepeatPassword()\n .required(t('inputIsRequired', { field: t('myAccount.repeatPassword') })),\n }),\n isCompany: yup.boolean(),\n enableLicenseData: yup.boolean(),\n driverFirstName: yup.string().when('isCompany', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('name') })),\n }),\n driverLastName: yup.string().when('isCompany', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('lastname') })),\n }),\n driverEmail: yup\n .string()\n .email(t('validEmail'))\n .when('isCompany', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('mail') })),\n }),\n driverPhone: yup.string().when('isCompany', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('phone') })),\n }),\n driverAddress: yup.string().when('isCompany', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('address') })),\n }),\n driverId: yup.string().when('isCompany', {\n is: true,\n then: yup\n .string()\n .isValidDriverDocument()\n .required(t('inputIsRequired', { field: t('document') })),\n }),\n driverCountry: yup.string().when(['isCompany', 'showBillingFields'], {\n is: (isCompany, showBillingFields) => isCompany && showBillingFields,\n then: yup.string().required(t('inputIsRequired', { field: t('country') })),\n }),\n driverAddressNumber: yup.string().when(['isCompany', 'showBillingFields'], {\n is: (isCompany, showBillingFields) => isCompany && showBillingFields,\n then: yup\n .string()\n .typeError(t('invalidNumber'))\n .required(t('inputIsRequired', { field: t('addressNumber') })),\n }),\n driverZipCode: yup.string().when(['isCompany', 'showBillingFields', 'hideZipCode'], {\n is: (isCompany, showBillingFields, hideZipCode) =>\n isCompany && showBillingFields && !hideZipCode,\n then: yup.string().required(t('inputIsRequired', { field: t('zipCode') })),\n }),\n driverTypeId: yup.number().when(['isCompany', 'showBillingFields'], {\n is: (isCompany, showBillingFields) => isCompany && showBillingFields,\n then: yup.number().required(t('inputIsRequired', { field: t('tipodocumento') })),\n }),\n driverCity: yup.string().isValidDriverCity(),\n companyFiles: yup.array().when(['loggedAsCompany', 'withPurchaseOrderFile'], {\n is: true,\n then: yup\n .array()\n .areCompanyFilesValid()\n .required(t('companyFilesError')),\n }),\n cityInput: yup.string().when(['enableCityInput'], {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('cityInput') })),\n }),\n stateInput: yup.string().when(['enableStateInput'], {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('stateInput') })),\n }),\n driverLicenseNumber: yup.string().when(['enableLicenseData'], {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('driverLicenseNumber') })),\n }),\n driverLicenseCountry: yup.string().when(['enableLicenseData'], {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('driverLicenseCountry') })),\n }),\n driverLicenseExpiration: yup.string().when('enableLicenseData', {\n is: true,\n then: yup\n .string()\n .required(t('inputIsRequired', { field: t('driverLicenseExpiration') }))\n .driverLicenseExpiration(\n this.props.bookingParams.dateTo,\n this.props.settings.featureFlags.licenseValidDays,\n ),\n }),\n withPurchaseOrder: yup\n .boolean()\n .nullable()\n .when(['loggedAsCompany', 'showCompanyExtraDocumentsFields', 'hidePurchaseOrderFields'], {\n is: (loggedAsCompany, showCompanyExtraDocumentsFields, hidePurchaseOrderFields) =>\n loggedAsCompany && showCompanyExtraDocumentsFields && !hidePurchaseOrderFields,\n then: yup\n .boolean()\n .nullable()\n .isWithPurchaseOrderSelected()\n .required(t('withPurchaseOrderError')),\n }),\n withPurchaseOrderFile: yup\n .boolean()\n .nullable()\n .when(['loggedAsCompany', 'withPurchaseOrder', 'showCompanyExtraDocumentsFields'], {\n is: true,\n then: yup\n .boolean()\n .nullable()\n .isWithPurchaseOrderFileUndefined(),\n }),\n notes: yup.string().when('requireNotes', {\n is: true,\n then: yup.string().required(t('inputIsRequired', { field: t('notes') })),\n }),\n });\n this.formRef = React.createRef(null);\n }\n\n async componentDidMount() {\n const {\n fetchPrices,\n fetchBookingAdditionals,\n fetchDocumentTypes,\n fetchFiscalConditions,\n bookingParams,\n booking,\n i18n,\n searchCars: {\n checkout: { onlinePayment },\n },\n listDocumentTypes,\n listTaxPayerTypes,\n countries,\n fetchCountries,\n profile,\n } = this.props;\n\n if (this.state.userInfo.showBillingFields) {\n const tenantDocumentTypes =\n listDocumentTypes || (await fetchDocumentTypes(i18n.language)).payload;\n\n const tenantFiscalConditions =\n listTaxPayerTypes || (await fetchFiscalConditions(i18n.language))?.payload;\n\n this.setState(prevState => ({\n ...prevState,\n fiscalConditions: tenantFiscalConditions,\n }));\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, tenantDocumentTypes },\n }));\n }\n\n if (!countries) await fetchCountries(i18n.language);\n\n if (booking && bookingParams) {\n const globalId = profile ? profile.globalId : bookingParams.agencyGuid ?? null;\n fetchBookingAdditionals(bookingParams, booking, i18n.language, globalId);\n fetchPrices(\n i18n.language,\n this.state.additionals,\n bookingParams,\n booking,\n false,\n onlinePayment,\n globalId,\n );\n }\n\n if (profile && !profile.isCompany && !profile.isAgency) {\n if (profile.country && profile.city) {\n const countryInfo = (countries || []).find(c => c.name === profile.country);\n if (countryInfo) await fetchCities(countryInfo.isoCode3166);\n }\n\n this.setState({\n ...this.state,\n userInfo: {\n ...this.state.userInfo,\n firstName: profile.firstName || '',\n lastName: profile.lastName || '',\n id: profile.documentId || '',\n email: profile.emailAddress || '',\n address: profile.address || '',\n ...(profile.addressNumber && {\n addressNumber: profile.addressNumber,\n }),\n ...(profile.addressDepartment && {\n addressDepartment: profile.addressDepartment,\n }),\n ...(profile.documentTypeId && { typeId: profile.documentTypeId }),\n ...(profile.fiscalConditionId && {\n fiscalConditionId: profile.fiscalConditionId,\n }),\n ...(profile.cellPhone && { phone: profile.cellPhone }),\n ...(profile.zipCode && { zipCode: profile.zipCode || '' }),\n ...(profile.country && { country: profile.country }),\n ...(profile.city && { city: profile.city }),\n ...(profile.region && { region: profile.region }),\n ...(profile.state && { state: profile.state }),\n ...(profile.globalId && { globalId: profile.globalId }),\n },\n });\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const {\n listAdditionals,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n isWidget,\n } = this.props;\n\n // Add required additional\n if (prevProps.listAdditionals !== listAdditionals && listAdditionals.length) {\n listAdditionals.forEach(a => {\n if (a.isRequired || a.isDefault) {\n this.onAdditionalChange({ id: a.id, number: 1, type: a.type });\n }\n });\n }\n\n if (prevProps.listAdditionals !== listAdditionals && is_gtag_enabled(googleTagManager)) {\n const groupedAdditionals = this.groupByAdditionals(listAdditionals);\n const additionalTypes = ['additional', 'insurance', 'other'];\n gtag_additional_impresions(groupedAdditionals, additionalTypes, settings);\n gtag_checkout_process({ number: 1, option: 'Additionals' }, this.props.booking, settings);\n }\n\n if (isWidget) {\n window.top.postMessage(\n {\n height: document.body.scrollHeight,\n width: document.body.scrollWidth,\n },\n '*',\n );\n }\n }\n\n debouncedAdditionalChange = debounce((additionals, actionObject) => {\n const {\n fetchPrices,\n searchCars: {\n params,\n checkout: { booking, onlinePayment },\n },\n settings: {\n configurations: { googleTagManager },\n },\n listAdditionals,\n bookingsConfiguration,\n profile,\n i18n,\n t,\n } = this.props;\n const globalId = profile ? profile.globalId : params.agencyGuid ?? null;\n const isInsuranceSelected = additionals.some(\n additional => additional.type.toLowerCase() === 'insurance',\n );\n // Update state isInsuranceSelected\n if (bookingsConfiguration?.mustHaveAtLeastOneInsurance) {\n this.setState({ isInsuranceSelected });\n }\n fetchPrices(i18n.language, additionals, params, booking, false, onlinePayment, globalId);\n\n if (is_gtag_enabled(googleTagManager) && actionObject) {\n const fullInfoAdditional = listAdditionals.find(add => add.id === actionObject.additionalId);\n gtag_manage_shopping_cart(fullInfoAdditional, actionObject, booking);\n }\n }, 500);\n\n getAdditionalInfo = id => {\n const { listAdditionals } = this.props;\n const additional = listAdditionals.find(add => add.id === id);\n\n if (additional) {\n return { ...additional, excludes: additional.excludes || [] };\n }\n return { excludes: [] };\n };\n\n onAdditionalChange = additional => {\n const exists = this.state.additionals.find(a => a.id === additional.id);\n\n let additionals = this.state.additionals;\n\n const actionObject = this.parseActionObject(exists, additional);\n\n if (exists) {\n const index = additionals.indexOf(exists);\n additionals.splice(index, 1);\n }\n\n if (additional.number > 0) {\n additionals.push(additional);\n\n // Removed excluded\n additionals = additionals.filter(a => {\n const notExcludedInCurrent = !this.getAdditionalInfo(additional.id).excludes.includes(a.id);\n const notExcludedInOthers = !this.getAdditionalInfo(a.id).excludes.includes(additional.id);\n\n return notExcludedInCurrent && notExcludedInOthers;\n });\n }\n this.setState({ additionals });\n this.debouncedAdditionalChange(additionals, actionObject);\n };\n\n isExcludedAdditional = additional => {\n return this.state.additionals.find(a => a.id === additional.id) ? false : true;\n };\n\n parseActionObject = (previousAdditional, currentAdditional) => {\n let action = null;\n\n if (!previousAdditional)\n return {\n type: 'add',\n amount: currentAdditional.number,\n additionalId: currentAdditional.id,\n };\n\n if (previousAdditional.number > currentAdditional.number)\n action = {\n type: 'remove',\n amount: currentAdditional.number,\n additionalId: currentAdditional.id,\n };\n\n if (currentAdditional.number > previousAdditional.number)\n action = {\n type: 'add',\n amount: currentAdditional.number,\n additionalId: currentAdditional.id,\n };\n\n return action;\n };\n\n logIn = () => {\n const profile = this.props.profile;\n this.setState({\n ...this.state,\n userInfo: {\n ...this.state.userInfo,\n firstName: profile.firstName || '',\n lastName: profile.lastName || '',\n id: profile.documentId || '',\n email: profile.emailAddress || '',\n address: profile.address || '',\n ...(profile.addressNumber && {\n addressNumber: profile.addressNumber,\n }),\n ...(profile.addressDepartment && {\n addressDepartment: profile.addressDepartment,\n }),\n ...(profile.documentTypeId && { typeId: profile.documentTypeId }),\n ...(profile.fiscalConditionId && {\n fiscalConditionId: profile.fiscalConditionId,\n }),\n ...(profile.cellPhone && { phone: profile.cellPhone }),\n ...(profile.zipCode && { zipCode: profile.zipCode || '' }),\n ...(profile.country && { country: profile.country }),\n ...(profile.city && { city: profile.city }),\n ...(profile.region && { region: profile.region }),\n ...(profile.state && { state: profile.state }),\n ...(profile.globalId && { globalId: profile.globalId }),\n registerMe: false,\n loggedAsCompany: isCompanyUser(profile),\n },\n showLoginModal: false,\n });\n };\n\n logOut = async e => {\n e.preventDefault();\n await this.props.handleLogOut();\n\n const {\n addressNumber,\n addressDepartment,\n typeId,\n fiscalConditionId,\n zipCode,\n city,\n region,\n state,\n globalId,\n ...newUserInfo\n } = this.state.userInfo;\n\n this.setState({\n ...this.state,\n userInfo: newUserInfo,\n });\n };\n\n handleSubmit = e => {\n e.preventDefault();\n const { hideDocumentField, isOnRequest } = this.props;\n\n const idValue = hideDocumentField ? '' : this.state.userInfo.id;\n\n const userInfo = {\n ...this.state.userInfo,\n id: idValue,\n isOnRequest: isOnRequest,\n };\n let popUpErrorShow = this.state.popUpErrorShow;\n const {\n booking,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n searchCars: { params },\n handleLogIn,\n t,\n profile,\n } = this.props;\n this.userInfoFormSchema\n .validate(userInfo, { abortEarly: false })\n .then(async valid => {\n if (is_gtag_enabled(googleTagManager))\n gtag_checkout_process({ step: 2, option: 'Products selected' }, booking, settings);\n if (valid) {\n let userInfoWithGlobalId = {\n ...userInfo,\n driverAge: params.driverAge,\n profileIsCompany: profile && (profile.isCompany || profile.isAgency),\n profileGlobalId: profile && profile.globalId,\n };\n if (this.state.userInfo.registerMe) {\n try {\n this.setState({ formLoading: true });\n const response = await register(\n userInfo.firstName,\n userInfo.lastName,\n userInfo.email,\n userInfo.password,\n );\n if (response.globalId) {\n userInfoWithGlobalId = {\n ...userInfoWithGlobalId,\n globalId: response.globalId,\n };\n }\n await handleLogIn(userInfo.email, userInfo.password);\n } catch (error) {\n const message = error.response && error.response.data.message;\n this.setState({ formLoading: false });\n return alert(message || t('registerError'));\n }\n }\n this.book(userInfoWithGlobalId);\n }\n })\n .catch(err => {\n const formErrors = err.inner\n ? err.inner.reduce((prevErrors, currentError) => {\n return {\n ...prevErrors,\n [currentError.path]: currentError.message,\n };\n }, {})\n : {};\n window.scrollTo(0, this.formRef.current.offsetTop);\n popUpErrorShow = true;\n this.setState(prevState => ({\n ...prevState,\n formErrors,\n popUpErrorShow,\n }));\n });\n };\n\n handlesendQuotation = e => {\n e.preventDefault();\n let userInfo = this.state.userInfo;\n userInfo['isQuotation'] = true;\n this.setState({ formLoading: true });\n\n this.userInfoFormSchema\n .validate(userInfo, { abortEarly: false })\n .then(valid => {\n if (valid) this.sendQuotation(userInfo);\n })\n .catch(err => {\n const formErrors = err.inner.reduce((prevErrors, currentError) => {\n return { ...prevErrors, [currentError.path]: currentError.message };\n }, {});\n window.scrollTo(0, this.formRef.current.offsetTop);\n this.setState(prevState => ({\n ...prevState,\n formErrors,\n formLoading: false,\n }));\n });\n };\n\n sendQuotation = info => {\n const {\n booking,\n book,\n bookingParams,\n t,\n i18n,\n settings,\n searchCars: { params },\n } = this.props;\n this.setState({ quotationLoading: true });\n\n const userInfo = { ...info, driverAge: params.driverAge };\n\n book(booking, userInfo, bookingParams, true, i18n.language)\n .then(res => {\n if (booking.onlyQuote)\n history.push(\n tlink('__Routes.toRequireSuccess', t, i18n, null, settings.configurations.langConfig),\n );\n\n history.push(\n tlink('__Routes.quotationSuccess', t, i18n, null, settings.configurations.langConfig),\n );\n })\n .catch(error => {\n history.push(\n tlink('__Routes.quotationFail', t, i18n, null, settings.configurations.langConfig),\n );\n });\n };\n\n book = info => {\n const {\n booking,\n book,\n bookingParams,\n t,\n onlinePayment,\n i18n,\n settings,\n settings: {\n configurations: { googleTagManager },\n },\n searchCars: { params },\n bookOnCounterNeedsConfirmation,\n } = this.props;\n\n bookingParams['onlinePayment'] = this.props.onlinePayment;\n this.setState({ formLoading: true });\n let state = this.state;\n let isPaymentsConfig =\n settings.paymentConfiguration && settings.paymentConfiguration.paymentMethods;\n\n var needsCreditCardInformation = bookOnCounterNeedsConfirmation;\n const userInfo = { ...info, driverAge: params.driverAge };\n\n book(booking, userInfo, bookingParams, false, i18n.language)\n .then(res => {\n if (onlinePayment) {\n if (isPaymentsConfig) {\n history.push(\n tlink('__Routes.onlinePayment', t, i18n, null, settings.configurations.langConfig),\n { paymentMethod: state.userInfo.paymentMethodObj.component },\n );\n } else {\n history.push(\n tlink('__Routes.onlinePayment', t, i18n, null, settings.configurations.langConfig),\n );\n }\n window.scrollTo(0, 0);\n } else {\n const subtitle = t('feedbackBoxMessages.book.successSubtitle', {\n booking_id: res.payload.id,\n });\n if (is_gtag_enabled(googleTagManager)) {\n booking.id = res.payload.id;\n booking.customer = res.payload.customer;\n gtag_purchase(booking, settings);\n }\n\n if (needsCreditCardInformation) {\n history.push(\n tlink('__Routes.onlinePayment', t, i18n, null, settings.configurations.langConfig),\n { paymentMethod: 'CreditCardConfirmationComponent' },\n );\n } else {\n history.push(\n tlink('__Routes.bookSuccess', t, i18n, null, settings.configurations.langConfig),\n { subtitle },\n );\n }\n }\n })\n .catch(error => {\n history.push(\n tlink('__Routes.bookFailed', t, i18n, null, settings.configurations.langConfig),\n );\n });\n };\n\n goBack = () => {\n this.props.history.goBack();\n };\n\n getBookingButtonText() {\n const {\n payBookingButtonText,\n bookBookingButtonText,\n t,\n onlinePayment,\n quoteBtn,\n searchCars: {\n checkout: { booking },\n },\n } = this.props;\n\n if (booking.onlyQuote) return t(quoteBtn) || t('quoteBooking');\n if (!onlinePayment) return bookBookingButtonText || t('bookBooking');\n return payBookingButtonText || t('payBooking');\n }\n\n getConditionsLink() {\n const { t, conditionsLink } = this.props;\n if (conditionsLink) {\n return t(conditionsLink);\n }\n return '/condiciones';\n }\n\n getPrivacyLink() {\n const { t, privacyLink } = this.props;\n if (privacyLink) {\n return t(privacyLink);\n }\n return '/privacidad';\n }\n\n openModal = () => {\n const modalState = true;\n const isCheckoutFilterVisible = false;\n\n this.setState({ modalState, isCheckoutFilterVisible });\n };\n\n closeModal = () => {\n const modalState = false;\n const isCheckoutFilterVisible = true;\n\n this.setState({ modalState, isCheckoutFilterVisible });\n };\n\n filterByAgreement = (additionals, commercialAgreementCode, commercialAgreementExtras) => {\n // if no commercial agreement code is provided, filter all commercialAgreementExtras\n const additionalList = additionals || [];\n const extras = commercialAgreementExtras || [];\n if (!commercialAgreementCode)\n return additionalList.filter(a => {\n return !extras.find(c => c.id === a.id);\n });\n\n const matchedExtrasIds = extras\n .filter(c => c.agreementId.includes(commercialAgreementCode))\n .map(c => c.id);\n\n // filter all commercialAgreementExtras except matched ones\n return additionalList.filter(a => {\n return !extras.find(c => c.id === a.id) || matchedExtrasIds.includes(a.id);\n });\n };\n\n groupByAdditionals = additionals => {\n const orderedListAdditionals = orderBy(\n additionals,\n ['isRequired', 'order', 'name'],\n ['desc', 'asc', 'asc'],\n );\n\n return groupBy(orderedListAdditionals, a => a.type.toLowerCase());\n };\n\n parseTermsAndConditionsBlock = () => {\n const { t, customTermsAndConditions } = this.props;\n\n if (customTermsAndConditions) {\n return (\n <span>\n <Paragraph text={customTermsAndConditions} />\n </span>\n );\n }\n\n return (\n <span>\n {t('acceptConditions')}\n <a href={this.getConditionsLink()} target=\"_blank\" rel=\"noopener noreferrer\">\n {t('purchaseConditions')}\n </a>\n  {t('andalso')} \n <a href={this.getPrivacyLink()} target=\"_blank\" rel=\"noopener noreferrer\">\n {t('privacyPolicy')}\n </a>\n </span>\n );\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledAdditionalsModern;\n }\n return StyledAdditionals;\n }\n\n getFirstColumnWidth() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return 'col-md-8';\n }\n return 'col-md-6';\n }\n\n getSndColumnWidth() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return 'col-md-4';\n }\n return 'col-md-6';\n }\n\n //#region Event OnChange\n\n onUserFirstNameChange = firstName => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, firstName },\n formErrors: { ...prevState.formErrors, firstName: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserLastNameChange = lastName => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, lastName },\n formErrors: { ...prevState.formErrors, lastName: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserBirthday = date => {\n const birthDay = date ? date.toISOString() : null;\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, birthDay },\n formErrors: { ...prevState.formErrors, birthDay: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserMailChange = email => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, email },\n formErrors: { ...prevState.formErrors, email: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserCountryChange = async country => {\n const { countries, cities, fetchCities } = this.props;\n const { userInfo } = this.state;\n\n if (country && (!cities || userInfo.country !== country)) {\n const countryInfo = countries.find(c => c.name === country);\n if (countryInfo) await fetchCities(countryInfo.isoCode3166);\n }\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n country,\n city: '',\n region: '',\n state: '',\n },\n formErrors: { ...prevState.formErrors, country: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserDriverLicenseExpiration = date => {\n const driverLicenseExpiration = date ? date.toISOString() : null;\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, driverLicenseExpiration },\n formErrors: { ...prevState.formErrors, driverLicenseExpiration: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserDriverLicenseCountry = async (driverLicenseCountry, country) => {\n const { countries, cities, fetchCities } = this.props;\n const { userInfo } = this.state;\n\n if (country && (!cities || userInfo.driverLicenseCountry !== driverLicenseCountry)) {\n const countryInfo = countries.find(c => c.name === country);\n if (countryInfo) await fetchCities(countryInfo.isoCode3166);\n }\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n driverLicenseCountry,\n city: '',\n region: '',\n state: '',\n },\n formErrors: { ...prevState.formErrors, driverLicenseCountry: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserDriverLicenseNumber = driverLicenseNumber => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, driverLicenseNumber },\n formErrors: { ...prevState.formErrors, driverLicenseNumber: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserCityInputChange = cityInput => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, cityInput },\n formErrors: { ...prevState.formErrors, cityInput: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserStateInputChange = stateInput => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, stateInput },\n formErrors: { ...prevState.formErrors, stateInput: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserPhoneChange = phone => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, phone },\n formErrors: { ...prevState.formErrors, phone: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserFligthNumberChange = flightNumber => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, flightNumber },\n formErrors: { ...prevState.formErrors, flightNumber: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserAddressChange = address => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, address },\n formErrors: { ...prevState.formErrors, address: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserCustomDeliveryAddressChange = customDeliveryAddress => {\n this.setState(prevState => {\n // Verificar si el campo customDeliveryAddress ha sido modificado y no está vacío\n const isCustomDeliveryAddress =\n customDeliveryAddress !== prevState.userInfo.customDeliveryAddress &&\n customDeliveryAddress !== '';\n\n return {\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n customDeliveryAddress,\n isCustomAddress: true,\n isCustomDeliveryAddress: isCustomDeliveryAddress,\n },\n formErrors: { ...prevState.formErrors, customDeliveryAddress: '' },\n popUpErrorShow: false,\n };\n });\n };\n\n onUserCustomDeliveryCityChange = customDeliveryCity => {\n this.setState(prevState => {\n const isCustomDeliveryCity =\n customDeliveryCity !== prevState.userInfo.customDeliveryCity && customDeliveryCity !== '';\n\n return {\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n customDeliveryCity,\n isCustomAddress: true,\n isCustomDeliveryCity: isCustomDeliveryCity,\n },\n formErrors: { ...prevState.formErrors, customDeliveryCity: '' },\n popUpErrorShow: false,\n };\n });\n };\n\n onUserCustomReturnAddressChange = customReturnAddress => {\n this.setState(prevState => {\n const isCustomReturnAddress =\n customReturnAddress !== prevState.userInfo.customReturnAddress &&\n customReturnAddress !== '';\n return {\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n customReturnAddress,\n isCustomAddress: true,\n isCustomReturnAddress: isCustomReturnAddress,\n },\n formErrors: { ...prevState.formErrors, customReturnAddress: '' },\n popUpErrorShow: false,\n };\n });\n };\n\n onUserCustomReturnCityChange = customReturnCity => {\n this.setState(prevState => {\n const isCustomReturnCity =\n customReturnCity !== prevState.userInfo.customReturnCity && customReturnCity !== '';\n return {\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n customReturnCity,\n isCustomAddress: true,\n isCustomReturnCity: isCustomReturnCity,\n },\n formErrors: { ...prevState.formErrors, customReturnCity: '' },\n popUpErrorShow: false,\n };\n });\n };\n\n onUserAddressNumberChange = addressNumber => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, addressNumber },\n formErrors: { ...prevState.formErrors, addressNumber: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserAddressDepartmentChange = addressDepartment => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, addressDepartment },\n formErrors: { ...prevState.formErrors, addressDepartment: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserZipCodeChange = zipCode => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, zipCode },\n formErrors: { ...prevState.formErrors, zipCode: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserIDChange = id => {\n let cleanId = id;\n const typeName = getDocumentTypeName(this.props.listDocumentTypes, this.state.userInfo.typeId);\n\n if (typeName === 'RUT') cleanId = cleanRUT(id);\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, id: cleanId },\n formErrors: { ...prevState.formErrors, id: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserCityChange = city => {\n const cityInfo = this.props.cities.find(c => c.name === city);\n\n if (cityInfo) {\n this.setState(prevState => ({\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n city,\n region: cityInfo.region,\n state: cityInfo.state,\n },\n formErrors: { ...prevState.formErrors, city: '' },\n popUpErrorShow: false,\n }));\n }\n };\n\n onTCChange = tcAccept => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, tcAccept },\n formErrors: { ...prevState.formErrors, tcAccept: '' },\n popUpErrorShow: false,\n }));\n };\n\n onPaymentMethodChange = (paymentMethod, paymentMethodObj) => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, paymentMethod, paymentMethodObj },\n formErrors: { ...prevState.formErrors, paymentMethod: '' },\n popUpErrorShow: false,\n }));\n };\n\n onDocumentTypeChange = typeId => {\n const { listDocumentTypes } = this.props;\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, typeId },\n formErrors: {\n ...prevState.formErrors,\n typeId: '',\n fiscalConditionId: null,\n },\n popUpErrorShow: false,\n sampleDocFormat: getDocumentSample(listDocumentTypes, typeId),\n }));\n };\n\n onFiscalConditionChange = fiscalConditionId => {\n const {\n settings: { configurations },\n } = this.props;\n const validDocumentIds = (configurations?.fiscalConditionValidation || []).find(\n i => `${i.id}` === fiscalConditionId,\n )?.validDocumentIds;\n let typeId = this.state.userInfo.typeId;\n\n if (validDocumentIds && (!typeId || !validDocumentIds?.includes(typeId))) {\n typeId = validDocumentIds[0];\n }\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, fiscalConditionId, typeId },\n formErrors: {\n ...prevState.formErrors,\n fiscalConditionId: null,\n typeId: null,\n },\n popUpErrorShow: false,\n }));\n };\n\n onIsCompanyChange = isCompany => {\n const { listDocumentTypes } = this.props;\n\n let typeIdAux = this.state.userInfo.typeId;\n const docType = listDocumentTypes.find(f => f.name == 'RUT');\n\n if (docType !== undefined && isCompany) {\n typeIdAux = docType.id;\n }\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n isCompany,\n typeId: typeIdAux,\n },\n formErrors: { ...prevState.formErrors, isCompany: '' },\n popUpErrorShow: false,\n sampleDocFormat: getDocumentSample(listDocumentTypes, typeIdAux),\n }));\n };\n\n onUserPasswordChange = password => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, password },\n formErrors: { ...prevState.formErrors, password: '' },\n }));\n };\n\n onUserRepeatPasswordChange = repeatPassword => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, repeatPassword },\n formErrors: { ...prevState.formErrors, repeatPassword: '' },\n }));\n };\n\n onDriverFirstNameChange = driverFirstName => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, driverFirstName },\n formErrors: { ...prevState.formErrors, driverFirstName: '' },\n popUpErrorShow: false,\n }));\n };\n\n onDriverLastNameChange = driverLastName => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, driverLastName },\n formErrors: { ...prevState.formErrors, driverLastName: '' },\n popUpErrorShow: false,\n }));\n };\n\n onDriverMailChange = driverEmail => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, driverEmail },\n formErrors: { ...prevState.formErrors, driverEmail: '' },\n popUpErrorShow: false,\n }));\n };\n\n onDriverCountryChange = async driverCountry => {\n const { countries, cities, fetchCities } = this.props;\n const { userInfo } = this.state;\n\n if (driverCountry && (!cities || userInfo.driverCountry !== driverCountry)) {\n const countryInfo = countries.find(c => c.name === driverCountry);\n if (countryInfo) await fetchCities(countryInfo.isoCode3166);\n }\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n driverCountry,\n driverCity: '',\n driverRegion: '',\n driverState: '',\n },\n formErrors: { ...prevState.formErrors, driverCountry: '' },\n popUpErrorShow: false,\n }));\n };\n\n onDriverPhoneChange = driverPhone => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, driverPhone },\n formErrors: { ...prevState.formErrors, driverPhone: '' },\n popUpErrorShow: false,\n }));\n };\n\n onDriverAddressChange = driverAddress => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, driverAddress },\n formErrors: { ...prevState.formErrors, driverAddress: '' },\n popUpErrorShow: false,\n }));\n };\n\n onDriverAddressNumberChange = driverAddressNumber => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, driverAddressNumber },\n formErrors: { ...prevState.formErrors, driverAddressNumber: '' },\n popUpErrorShow: false,\n }));\n };\n\n onDriverAddressDepartmentChange = driverAddressDepartment => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, driverAddressDepartment },\n formErrors: { ...prevState.formErrors, driverAddressDepartment: '' },\n popUpErrorShow: false,\n }));\n };\n\n onDriverZipCodeChange = driverZipCode => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, driverZipCode },\n formErrors: { ...prevState.formErrors, driverZipCode: '' },\n popUpErrorShow: false,\n }));\n };\n\n onDriverIDChange = driverId => {\n let cleanId = driverId;\n const typeName = getDocumentTypeName(\n this.props.listDocumentTypes,\n this.state.userInfo.driverTypeId,\n );\n\n if (typeName === 'RUT') cleanId = cleanRUT(driverId);\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, driverId: cleanId },\n formErrors: { ...prevState.formErrors, driverId: '' },\n popUpErrorShow: false,\n }));\n };\n\n onDriverCityChange = driverCity => {\n const cityInfo = this.props.cities.find(c => c.name === driverCity);\n\n if (cityInfo) {\n this.setState(prevState => ({\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n driverCity,\n driverRegion: cityInfo.region,\n driverState: cityInfo.state,\n },\n formErrors: { ...prevState.formErrors, driverCity: '' },\n popUpErrorShow: false,\n }));\n }\n };\n\n onDriverDocumentTypeChange = driverTypeId => {\n const { listDocumentTypes } = this.props;\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, driverTypeId },\n formErrors: {\n ...prevState.formErrors,\n driverTypeId: '',\n },\n popUpErrorShow: false,\n sampleDriverDocFormat: getDocumentSample(listDocumentTypes, driverTypeId),\n }));\n };\n\n //#endregion\n\n //#region Company Events\n\n handleRequirePurchaseOrder = value => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n withPurchaseOrder: value,\n withPurchaseOrderFile: null,\n ...(!value && {\n purchaseOrder: '',\n companyFiles: [],\n }),\n },\n formErrors: {\n ...prevState.formErrors,\n withPurchaseOrder: '',\n },\n }));\n };\n\n handleWithPurchaseOrderFile = value => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n withPurchaseOrderFile: value,\n ...(!value && {\n purchaseOrder: '',\n companyFiles: [],\n }),\n },\n formErrors: {\n ...prevState.formErrors,\n withPurchaseOrderFile: '',\n },\n }));\n };\n\n onPurchaseOrderChange = purchaseOrder => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, purchaseOrder },\n formErrors: {\n ...prevState.formErrors,\n purchaseOrder: '',\n },\n popUpErrorShow: false,\n }));\n };\n\n onFileNameChange = (newName, index) => {\n const { userInfo } = this.state;\n\n const newFiles = userInfo.companyFiles.map((f, idx) => {\n if (index === idx) return { ...f, name: newName };\n return f;\n });\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, companyFiles: newFiles },\n formErrors: {\n ...prevState.formErrors,\n companyFiles: '',\n },\n popUpErrorShow: false,\n }));\n };\n\n handleDeleteFile = index => {\n const { userInfo } = this.state;\n\n const newFiles = userInfo.companyFiles.filter((f, idx) => idx !== index);\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, companyFiles: newFiles },\n formErrors: {\n ...prevState.formErrors,\n companyFiles: '',\n },\n popUpErrorShow: false,\n }));\n };\n\n onCompanyFilesChange = async ({ currentTarget: { files } }) => {\n let base64Files = files;\n\n if (files) {\n const formattedFiles = [...files];\n\n base64Files = await Promise.all(\n formattedFiles.map(async file => {\n const base64 = await convertToBase64(file);\n return {\n name: file.name,\n file: base64.split('base64,') && base64.split('base64,')[1],\n type: 8, // Purchase Order type\n };\n }),\n );\n }\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n companyFiles: base64Files,\n },\n formErrors: {\n ...prevState.formErrors,\n companyFiles: '',\n },\n popUpErrorShow: false,\n }));\n };\n\n onNotesChange = notes => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, notes },\n formErrors: {\n ...prevState.formErrors,\n notes: '',\n },\n popUpErrorShow: false,\n }));\n };\n\n //#endregion\n\n //#region Renders\n\n renderAddressFields = () => {\n const {\n t,\n addressText,\n addressNumberText,\n addressDepartmentText,\n zipCodeText,\n hideAddressField,\n } = this.props;\n const {\n userInfo: {\n showBillingFields,\n showAddressAllFields,\n country,\n address,\n addressNumber,\n addressDepartment,\n zipCode,\n hideZipCode,\n isCompany,\n },\n } = this.state;\n\n if (!showBillingFields && !showAddressAllFields)\n return (\n !hideAddressField && (\n <TextInput\n inputClass=\"form-control\"\n placeholder={isCompany ? t('businessAddress') : t(addressText) || t('address')}\n error={this.state.formErrors.address}\n value={address}\n onChange={this.onUserAddressChange}\n options={{ autoComplete: 'address-line1' }}\n wrapperId=\"address-input\"\n wrapperClass={country === 'Chile' ? 'col-md-5' : 'col-md-8'}\n />\n )\n );\n\n return (\n <>\n <TextInput\n inputClass=\"form-control\"\n placeholder={isCompany ? t('businessAddress') : t(addressText) || t('addressName')}\n error={this.state.formErrors.address}\n value={address}\n onChange={this.onUserAddressChange}\n options={{ autoComplete: 'address-line1' }}\n wrapperId=\"address-input\"\n wrapperClass=\"col-md-3\"\n />\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(addressNumberText) || t('addressNumber')}\n value={addressNumber}\n error={this.state.formErrors.addressNumber || ''}\n onChange={this.onUserAddressNumberChange}\n options={{ autoComplete: 'address-line2' }}\n wrapperId=\"address_number-input\"\n wrapperClass=\"col-md-2\"\n />\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(addressDepartmentText) || t('addressDepartment')}\n error={this.state.formErrors.addressDepartment}\n value={addressDepartment}\n onChange={this.onUserAddressDepartmentChange}\n options={{ autoComplete: 'address-department' }}\n wrapperId=\"address_department-input\"\n wrapperClass=\"col-md-2\"\n />\n {!hideZipCode && (\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(zipCodeText) || t('zipCode')}\n error={this.state.formErrors.zipCode}\n value={zipCode}\n onChange={this.onUserZipCodeChange}\n options={{ autoComplete: 'postal-code' }}\n wrapperId=\"zip_code-input\"\n wrapperClass=\"col-md-2\"\n />\n )}\n </>\n );\n };\n\n renderDocumentFields() {\n const {\n t,\n documentText,\n listDocumentTypes,\n hideDocumentField,\n isAuthenticated,\n profile,\n } = this.props;\n const {\n userInfo: {\n showBillingFields,\n id,\n country,\n typeId,\n fiscalConditionId,\n isCompany,\n enableLicenseData,\n forceRutWhenChile,\n hideFiscalCondition,\n },\n\n docInputFocus,\n fiscalConditions,\n } = this.state;\n\n if (!showBillingFields)\n return (\n !hideDocumentField && (\n <TextInput\n inputClass=\"form-control\"\n placeholder={\n documentText != undefined\n ? t(documentText)\n : enableLicenseData\n ? t('passportField')\n : t('document')\n }\n error={this.state.formErrors.id}\n value={id}\n onChange={this.onUserIDChange}\n options={{ autoComplete: 'document' }}\n legend={\n this.state.sampleDocFormat\n ? t('billingInformation.fields.formatExpected', {\n format_expected: this.state.sampleDocFormat,\n })\n : null\n }\n wrapperId=\"document-input\"\n wrapperClass=\"col-md-9\"\n />\n )\n );\n\n let rutDocumentType = this.state.userInfo.tenantDocumentTypes.filter(\n documentType => documentType.name === 'RUT',\n );\n\n return (\n <>\n {fiscalConditions && fiscalConditions.length > 0 && !hideFiscalCondition && (\n <SelectInput\n inputClass=\"form-control form-control-select\"\n onChange={this.onFiscalConditionChange}\n selected={fiscalConditionId}\n options={transformFiscalConditionsToSelectOptions(fiscalConditions, t)}\n error={this.state.formErrors.fiscalConditionId}\n defaultOption={t('billingInformation.fields.fiscalCondition')}\n wrapperId=\"fiscal_condition-input\"\n wrapperClass=\"col-md-3\"\n />\n )}\n <SelectInput\n inputClass=\"form-control form-control-select\"\n onChange={this.onDocumentTypeChange}\n selected={typeId}\n options={\n forceRutWhenChile && country === 'Chile'\n ? transformDocTypesToSelectOptions(\n rutDocumentType.length > 0\n ? rutDocumentType\n : this.state.userInfo.tenantDocumentTypes,\n )\n : transformDocTypesToSelectOptions(this.props.listDocumentTypes) || []\n }\n error={this.state.formErrors.typeId}\n defaultOption={t('tipodocumento')}\n wrapperId=\"document_type-input\"\n wrapperClass=\"col-md-3\"\n />\n <TextInput\n inputClass=\"form-control\"\n placeholder={isCompany ? t('businessDocument') : t(documentText) || t('document')}\n error={this.state.formErrors.id}\n value={isAuthenticated && !profile.isAgency ? id : null}\n onChange={this.onUserIDChange}\n options={{\n autoComplete: 'document',\n onFocus: () => {\n this.setState({ ...this.state, docInputFocus: true });\n },\n onBlur: () => {\n this.setState({ ...this.state, docInputFocus: false });\n },\n }}\n legend={\n this.state.sampleDocFormat\n ? t('billingInformation.fields.formatExpected', {\n format_expected: this.state.sampleDocFormat,\n })\n : null\n }\n mask={getDocumentMask(id, typeId, docInputFocus, listDocumentTypes)}\n wrapperId=\"document-input\"\n wrapperClass=\"col-md-3\"\n />\n </>\n );\n }\n\n renderCompanyExtraDocumentsFields = () => {\n const { t, bookingBackupInformationTitle, notesText } = this.props;\n const {\n userInfo: {\n purchaseOrder,\n notes,\n loggedAsCompany,\n companyFiles,\n withPurchaseOrder,\n withPurchaseOrderFile,\n showCompanyExtraDocumentsFields,\n hidePurchaseOrderFields,\n },\n formErrors,\n } = this.state;\n\n if (this.props.profile && loggedAsCompany && showCompanyExtraDocumentsFields) {\n return (\n <>\n <div className=\"col-md-12\">\n <h3 className=\"form-subtitle\">\n {bookingBackupInformationTitle\n ? tt(bookingBackupInformationTitle, t)\n : t('confirmationBackup')}\n </h3>\n </div>\n {!hidePurchaseOrderFields && (\n <div className=\"col-md-12\">\n <CheckboxInput\n onChange={() => this.handleRequirePurchaseOrder(true)}\n checked={withPurchaseOrder !== null ? withPurchaseOrder : undefined}\n text={t('bookingWithPO')}\n wrapperId=\"with_documents-input\"\n />\n {withPurchaseOrder && (\n <>\n <CheckboxInput\n onChange={() => this.handleWithPurchaseOrderFile(true)}\n checked={withPurchaseOrderFile !== null ? withPurchaseOrderFile : false}\n text={t('attachPO')}\n wrapperId=\"with_documents_file-input\"\n className=\"col-md-12\"\n />\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('purchaseOrder')}\n error={formErrors.purchaseOrder}\n value={purchaseOrder}\n onChange={this.onPurchaseOrderChange}\n wrapperId=\"documents-input\"\n wrapperClass=\"col-md-12\"\n />\n {companyFiles &&\n companyFiles.map((file, idx) => {\n return (\n <div key={idx} className=\"col-md-12\">\n <div className=\"form-group file-input\">\n <TextInput\n inputClass=\"form-control w-100\"\n placeholder={t('fileName')}\n value={file.name}\n onChange={value => this.onFileNameChange(value, idx)}\n />\n <button\n className=\"delete-file\"\n onClick={() => this.handleDeleteFile(idx)}\n >\n <i className=\"fas fa-times-circle\"></i>\n </button>\n </div>\n </div>\n );\n })}\n <div id=\"company_documents-input\" className=\"col-md-12\">\n <div className=\"form-group\">\n <FormFile\n className=\"file-input\"\n value=\"\"\n onChange={this.onCompanyFilesChange}\n error={formErrors.companyFiles}\n />\n {formErrors.companyFiles && (\n <div className=\"text-error\">{formErrors.companyFiles}</div>\n )}\n </div>\n </div>\n <CheckboxInput\n onChange={() => this.handleWithPurchaseOrderFile(false)}\n checked={withPurchaseOrderFile !== null ? !withPurchaseOrderFile : false}\n text={\n <>\n {t('takeBookingWithoutPO')}{' '}\n <span className=\"text-error\">{t('noPurchaseOrderUploaded')}</span>\n </>\n }\n wrapperId=\"without_purchase_order-input\"\n className=\"col-md-12 mb-3\"\n />\n {formErrors.withPurchaseOrderFile && (\n <div className=\"col-md-12\">\n <p className=\"text-error\">{formErrors.withPurchaseOrderFile}</p>\n </div>\n )}\n </>\n )}\n <CheckboxInput\n onChange={() => this.handleRequirePurchaseOrder(false)}\n checked={withPurchaseOrder !== null ? !withPurchaseOrder : undefined}\n text={t('bookingWithoutPO')}\n error={formErrors.withPurchaseOrder}\n wrapperId=\"without_documents-input\"\n />\n </div>\n )}\n <TextAreaInput\n inputClass=\"form-control\"\n placeholder={t(notesText) || t('notes')}\n error={formErrors.notes}\n value={notes}\n onChange={this.onNotesChange}\n wrapperId=\"notes-input\"\n wrapperClass=\"col-md-12\"\n />\n </>\n );\n }\n return null;\n };\n\n renderDriverFields = () => {\n const {\n t,\n cityText,\n settings: { featureFlags },\n hideCountryField,\n } = this.props;\n\n const {\n userInfo: {\n showBillingFields,\n driverFirstName,\n driverLastName,\n driverEmail,\n driverCountry,\n driverCity,\n driverPhone,\n isCompany,\n },\n } = this.state;\n\n if (isCompany)\n return (\n <>\n <div className=\"container-fluid p-0\">\n <div className=\"col-md-6 mb-3 mt-1\">\n <Title type=\"h2\" text={t('DriverData')} weight=\"700\" fontSize={16} italic={false} />\n </div>\n </div>\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('name')}\n error={this.state.formErrors.driverFirstName}\n value={driverFirstName}\n onChange={this.onDriverFirstNameChange}\n options={{ autoComplete: 'given-name' }}\n wrapperId=\"driver_first_name-input\"\n wrapperClass=\"col-md-3\"\n />\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('lastname')}\n error={this.state.formErrors.driverLastName}\n value={driverLastName}\n onChange={this.onDriverLastNameChange}\n options={{ autoComplete: 'family-name' }}\n wrapperId=\"driver_last_name-input\"\n wrapperClass=\"col-md-3\"\n />\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('mail')}\n error={this.state.formErrors.driverEmail}\n value={driverEmail}\n onChange={this.onDriverMailChange}\n options={{ autoComplete: 'email' }}\n wrapperId=\"driver_mail-input\"\n wrapperClass=\"col-md-3\"\n />\n {!hideCountryField && (\n <SelectInput\n inputClass=\"form-control form-control-select\"\n onChange={this.onDriverCountryChange}\n selected={driverCountry || ''}\n options={transformCountriesToSelectOptions(this.props.countries) || []}\n error={this.state.formErrors.driverCountry}\n defaultOption={t('country')}\n wrapperId=\"driver_country-input\"\n wrapperClass=\"col-md-3\"\n />\n )}\n {driverCountry === 'Chile' && (\n <SelectInput\n inputClass=\"form-control form-control-select\"\n onChange={this.onDriverCityChange}\n selected={driverCity || ''}\n options={this.props.cities ? this.props.cities.map(c => c.name) : []}\n error={this.state.formErrors.driverCity}\n defaultOption={t(cityText) || t('city')}\n wrapperId=\"driver_city-input\"\n wrapperClass=\"col-md-3\"\n />\n )}\n {this.renderDriverAddressFields()}\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('phone')}\n error={this.state.formErrors.driverPhone}\n value={driverPhone}\n onChange={this.onDriverPhoneChange}\n options={{ autoComplete: 'tel' }}\n wrapperId=\"driver_phone-input\"\n wrapperClass={!showBillingFields ? 'col-md-4' : 'col-md-3'}\n />\n {this.renderDriverDocumentFields()}\n </>\n );\n };\n\n renderDriverAddressFields = () => {\n const { t, addressText, addressNumberText, addressDepartmentText, zipCodeText } = this.props;\n const {\n userInfo: {\n showBillingFields,\n driverCountry,\n driverAddress,\n driverAddressNumber,\n driverAddressDepartment,\n driverZipCode,\n hideZipCode,\n },\n } = this.state;\n\n if (!showBillingFields)\n return (\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(addressText) || t('address')}\n error={this.state.formErrors.driverAddress}\n value={driverAddress}\n onChange={this.onDriverAddressChange}\n options={{ autoComplete: 'address-line1' }}\n wrapperId=\"driver_address-input\"\n wrapperClass={driverCountry === 'Chile' ? 'col-md-5' : 'col-md-8'}\n />\n );\n\n return (\n <>\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(addressText) || t('addressName')}\n error={this.state.formErrors.driverAddress}\n value={driverAddress}\n onChange={this.onDriverAddressChange}\n options={{ autoComplete: 'address-line1' }}\n wrapperId=\"driver_address-input\"\n wrapperClass=\"col-md-3\"\n />\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(addressNumberText) || t('addressNumber')}\n value={driverAddressNumber}\n error={this.state.formErrors.driverAddressNumber || ''}\n onChange={this.onDriverAddressNumberChange}\n options={{ autoComplete: 'address-line2' }}\n wrapperId=\"driver_address_number-input\"\n wrapperClass=\"col-md-2\"\n />\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(addressDepartmentText) || t('addressDepartment')}\n error={this.state.formErrors.driverAddressDepartment}\n value={driverAddressDepartment}\n onChange={this.onDriverAddressDepartmentChange}\n options={{ autoComplete: 'address-department' }}\n wrapperId=\"driver_address_department-input\"\n wrapperClass=\"col-md-2\"\n />\n {!hideZipCode && (\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(zipCodeText) || t('zipCode')}\n error={this.state.formErrors.driverZipCode}\n value={driverZipCode}\n onChange={this.onDriverZipCodeChange}\n options={{ autoComplete: 'postal-code' }}\n wrapperId=\"driver_zip_code-input\"\n wrapperClass=\"col-md-2\"\n />\n )}\n </>\n );\n };\n\n renderDriverDocumentFields = () => {\n const { t, documentText, listDocumentTypes } = this.props;\n const {\n userInfo: { showBillingFields, driverId, driverTypeId },\n docDriverInputFocus,\n } = this.state;\n\n if (!showBillingFields)\n return (\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(documentText) || t('document')}\n error={this.state.formErrors.driverId}\n value={driverId}\n onChange={this.onDriverIDChange}\n options={{ autoComplete: 'document' }}\n legend={\n this.state.sampleDriverDocFormat\n ? t('billingInformation.fields.formatExpected', {\n format_expected: this.state.sampleDriverDocFormat,\n })\n : null\n }\n wrapperId=\"driver_document-input\"\n wrapperClass=\"col-md-6\"\n />\n );\n\n return (\n <>\n <SelectInput\n inputClass=\"form-control form-control-select\"\n onChange={this.onDriverDocumentTypeChange}\n selected={driverTypeId}\n options={transformDocTypesToSelectOptions(this.props.listDocumentTypes) || []}\n error={this.state.formErrors.driverTypeId}\n defaultOption={t('tipodocumento')}\n wrapperId=\"driver_document_type-input\"\n wrapperClass=\"col-md-3\"\n />\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(documentText) || t('document')}\n error={this.state.formErrors.driverId}\n value={driverId}\n onChange={this.onDriverIDChange}\n options={{\n autoComplete: 'document',\n onFocus: () => {\n this.setState({ ...this.state, docDriverInputFocus: true });\n },\n onBlur: () => {\n this.setState({ ...this.state, docDriverInputFocus: false });\n },\n }}\n legend={\n this.state.sampleDriverDocFormat\n ? t('billingInformation.fields.formatExpected', {\n format_expected: this.state.sampleDriverDocFormat,\n })\n : null\n }\n mask={getDocumentMask(driverId, driverTypeId, docDriverInputFocus, listDocumentTypes)}\n wrapperId=\"driver_document-input\"\n wrapperClass=\"col-md-3\"\n />\n </>\n );\n };\n\n //#endregion\n\n render() {\n const {\n listAdditionals,\n t,\n title,\n subtitle,\n settings: {\n featureFlags,\n paymentConfiguration,\n configurations: { commercialAgreementExtras },\n },\n searchCars: {\n checkout: { booking },\n params: { commercialAgreementCode },\n },\n onlinePayment,\n additionalComponentVersion,\n customerNameText,\n customerLastNameText,\n mailText,\n phoneText,\n flightNumberText,\n acceptConditionsLegend,\n usePhoneWithCountry,\n showPrintButton,\n showQuotationLink,\n insuranceMessage,\n cityText,\n isAuthenticated,\n profile,\n customerTitle,\n paymentTitle,\n hideCountryField,\n seeMore,\n seeLess,\n nameMaxLength,\n nameCharsSplit,\n insuranceImage,\n additionalImage,\n customAddressText,\n customAddressTexts,\n sendQuotationMsg,\n bookingsConfiguration,\n insuranceTitle,\n additionalTitle,\n hidePhoneField,\n notesText,\n } = this.props;\n\n const {\n formLoading,\n quotationLoading,\n popUpErrorShow,\n modalState,\n customReturn,\n customDelivery,\n userInfo: {\n showBillingFields,\n showAddressAllFields,\n firstName,\n lastName,\n email,\n country,\n city,\n cityInput,\n stateInput,\n phone,\n password,\n notes,\n repeatPassword,\n registerMe,\n hideFlightNumber,\n airlineField,\n showIsCompany,\n isCompany,\n loggedAsCompany,\n driverLicenseCountry,\n driverLicenseExpiration,\n driverLicenseNumber,\n birthDay,\n customDeliveryAddress,\n customReturnAddress,\n customDeliveryCity,\n customReturnCity,\n },\n showLoginModal,\n formErrors,\n } = this.state;\n\n if (booking == null) {\n return null;\n }\n\n let filteredAdditionals = [];\n let listAdditionalsByType = [];\n\n if (listAdditionals) {\n filteredAdditionals = this.filterByAgreement(\n listAdditionals,\n commercialAgreementCode,\n commercialAgreementExtras,\n );\n\n listAdditionalsByType = this.groupByAdditionals(filteredAdditionals);\n }\n\n const StyledSection = this.getTemplateStyledComponent();\n\n let showCustomAddressessFields = customDelivery || customReturn ? true : false;\n\n function CustomAddressAlert() {\n const customAddressAlertContent =\n customAddressTexts?.find(\n x => x.id === booking.deliveryPlace.id || x.id === booking.returnPlace.id,\n )?.text ||\n tt(customAddressText, t) ||\n t('customAddressAlertText');\n\n return (\n <Alert variant=\"warning\">\n <p className=\"mb-0\">{customAddressAlertContent}</p>\n </Alert>\n );\n }\n\n const additionalComponentVersionEnum = {\n 1: 'CLASSIC',\n 2: 'NEW',\n };\n\n return (\n <>\n <CheckoutFilter onClick={this.goBack} />\n <StyledSection className=\"no-print col-md-9\">\n <Modal\n show={showLoginModal}\n size=\"lg\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n >\n <Modal.Header closeButton>\n <Modal.Title id=\"contained-modal-title-vcenter\">{t('cancelbooking')}</Modal.Title>\n </Modal.Header>\n <Modal.Body className=\"pl-5 pr-5\">\n <LoginForm modal loginCallBack={this.logIn} />\n </Modal.Body>\n <Modal.Footer>\n <Btn\n onClick={() => this.setState({ ...this.state, showLoginModal: false })}\n text={t('cancel')}\n />\n </Modal.Footer>\n </Modal>\n\n <div className=\"checkout-additionals\">\n <div className=\"row titleRow\">\n <div className={`${this.getFirstColumnWidth()} first-col`}>\n <Title\n type=\"h2\"\n text={title}\n weight=\"900\"\n fontSize={30}\n className={`${title != null ? '' : 'd-none'}`}\n />\n <p className={subtitle != null ? '' : 'd-none'}>{tt(subtitle, t)}</p>\n </div>\n <div className={`${this.getSndColumnWidth()} text-right mt-3`}>\n <a className=\"d-block othercar\" onClick={this.goBack}>\n <i className=\"fa fa-angle-double-left mr-2\" />\n {t('chooseOtherCar')}\n </a>\n </div>\n </div>\n\n {!listAdditionals && (\n <CustomLoading\n className=\"additionals-loader\"\n loadingGif={t('loadingGif')}\n ></CustomLoading>\n )}\n <div className=\"row adicionales\">\n {listAdditionalsByType?.insurance && (\n <>\n <div>\n <Title\n className=\"additional-title\"\n type=\"h2\"\n text={insuranceTitle == null ? t('insurances') : tt(insuranceTitle, t)}\n fontSize={20}\n italic={false}\n />\n {insuranceMessage && <Paragraph className=\"label\" text={insuranceMessage} />}\n {bookingsConfiguration?.mustHaveAtLeastOneInsurance &&\n !this.state.isInsuranceSelected && (\n <div className=\"must-have-insurance-wrapper\">\n <i\n className=\"fas fa-exclamation-circle\"\n data-toggle=\"tooltip\"\n title=\"\"\n data-original-title\n />\n <Paragraph\n className=\"label\"\n color=\"red\"\n text={t('insuranceMustBeSelected')}\n />\n </div>\n )}\n </div>\n {(!additionalComponentVersion ||\n additionalComponentVersionEnum[additionalComponentVersion] === 'CLASSIC') && (\n <table className=\"table table-hover adicionales-table\">\n <tbody>\n {listAdditionalsByType?.insurance?.map((additional, key) => (\n <AdditionalRow\n key={key}\n additional={additional}\n value={this.state.additionals.find(a => a.id === additional.id)}\n onAdditionalChange={this.onAdditionalChange}\n seeMore={tt(seeMore, t)}\n seeLess={tt(seeLess, t)}\n nameMaxLength={tt(nameMaxLength, t)}\n nameSplitNumber={tt(nameCharsSplit, t)}\n currentCurrency={this.props.currentCurrency}\n defaultCurrency={this.props.defaultCurrency}\n webCurrency={this.props.webCurrency}\n />\n ))}\n </tbody>\n </table>\n )}\n\n {additionalComponentVersionEnum[additionalComponentVersion] === 'NEW' && (\n <div className=\"additional-row-v2-wrapper\">\n {listAdditionalsByType?.insurance?.map((additional, key) => (\n <AdditionalCard\n key={key}\n additional={additional}\n value={this.state.additionals.find(a => a.id === additional.id)}\n onAdditionalChange={this.onAdditionalChange}\n seeMore={tt(seeMore, t)}\n seeLess={tt(seeLess, t)}\n insuranceImage={insuranceImage}\n additionalImage={additionalImage}\n nameMaxLength={tt(nameMaxLength, t)}\n nameSplitNumber={tt(nameCharsSplit, t)}\n currentCurrency={this.props.currentCurrency}\n defaultCurrency={this.props.defaultCurrency}\n webCurrency={this.props.webCurrency}\n />\n ))}\n </div>\n )}\n </>\n )}\n {listAdditionalsByType?.additional && (\n <>\n <Title\n className=\"additional-title\"\n type=\"h2\"\n text={additionalTitle == null ? t('additionals') : tt(additionalTitle, t)}\n fontSize={20}\n italic={false}\n />\n {(!additionalComponentVersion ||\n additionalComponentVersionEnum[additionalComponentVersion] === 'CLASSIC') && (\n <table className=\"table table-hover adicionales-table\">\n <tbody>\n {listAdditionalsByType?.additional?.map((additional, key) => (\n <AdditionalRow\n key={key}\n additional={additional}\n value={this.state.additionals.find(a => a.id === additional.id)}\n onAdditionalChange={this.onAdditionalChange}\n seeMore={tt(seeMore, t)}\n seeLess={tt(seeLess, t)}\n nameMaxLength={tt(nameMaxLength, t)}\n nameSplitNumber={tt(nameCharsSplit, t)}\n />\n ))}\n </tbody>\n </table>\n )}\n\n {additionalComponentVersionEnum[additionalComponentVersion] === 'NEW' && (\n <div className=\"additional-row-v2-wrapper\">\n {listAdditionalsByType?.additional?.map((additional, key) => (\n <AdditionalCard\n key={key}\n additional={additional}\n value={this.state.additionals.find(a => a.id === additional.id)}\n onAdditionalChange={this.onAdditionalChange}\n seeMore={tt(seeMore, t)}\n seeLess={tt(seeLess, t)}\n insuranceImage={insuranceImage}\n additionalImage={additionalImage}\n nameMaxLength={tt(nameMaxLength, t)}\n nameSplitNumber={tt(nameCharsSplit, t)}\n />\n ))}\n </div>\n )}\n </>\n )}\n {listAdditionalsByType?.other && (\n <>\n <Title\n className=\"additional-title\"\n type=\"h2\"\n text={t('others')}\n fontSize={20}\n italic={false}\n />\n <table className=\"table table-hover adicionales-table\">\n <tbody>\n {listAdditionalsByType?.other?.map((additional, key) => (\n <AdditionalRow\n key={key}\n additional={additional}\n onAdditionalChange={this.onAdditionalChange}\n value={this.state.additionals.find(a => a.id === additional.id)}\n seeMore={tt(seeMore, t)}\n seeLess={tt(seeLess, t)}\n nameMaxLength={tt(nameMaxLength, t)}\n nameSplitNumber={tt(nameCharsSplit, t)}\n />\n ))}\n </tbody>\n </table>\n </>\n )}\n </div>\n\n <div className=\"row user-info form-datos pt-1 mb-5\" ref={this.formRef}>\n <div className=\"container-fluid p-0\">\n <div className=\"row\">\n <div className=\"col-md-6 mb-3 mt-5\">\n <Title\n type=\"h2\"\n text={customerTitle ? tt(customerTitle, t) : t('CustomerData')}\n weight=\"700\"\n fontSize={20}\n italic={false}\n />\n </div>\n {featureFlags && featureFlags.customerRegistration && (\n <div className=\"col-md-6 text-right register-user mt-5\">\n {isAuthenticated ? (\n <button className=\"log-in-out-btn\" onClick={this.logOut}>\n <i class=\"fas fa-sign-out-alt\"></i> {t('myAccount.logOut')}\n </button>\n ) : (\n <button\n className=\"log-in-out-btn\"\n onClick={() =>\n this.setState({\n ...this.state,\n showLoginModal: true,\n })\n }\n >\n <i className=\"fa fa-user\" /> {t('registeredUserLink')}\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n <form\n id=\"bookingUserDataForm\"\n onSubmit={booking.onlyQuote ? this.handlesendQuotation : this.handleSubmit}\n className=\"container-fluid p-0\"\n >\n {showIsCompany && (!profile || !loggedAsCompany) && (\n <div className=\"row\">\n <div className=\"col-md-12\">\n <CheckboxInput\n error={this.state.formErrors.isCompany}\n onChange={this.onIsCompanyChange}\n checked={this.state.userInfo.isCompany}\n text={t('isCompany')}\n />\n </div>\n </div>\n )}\n <div className=\"row\">\n <TextInput\n inputClass=\"form-control\"\n placeholder={\n isCompany ? t('businessFantasyName') : t(customerNameText) || t('name')\n }\n error={this.state.formErrors.firstName}\n value={isAuthenticated && !profile.isAgency ? firstName : null}\n onChange={this.onUserFirstNameChange}\n options={{ autoComplete: 'given-name' }}\n wrapperId=\"first_name-input\"\n wrapperClass=\"col-md-3\"\n />\n <TextInput\n inputClass=\"form-control\"\n placeholder={\n isCompany ? t('businessName') : t(customerLastNameText) || t('lastname')\n }\n error={this.state.formErrors.lastName}\n value={isAuthenticated && !profile.isAgency ? lastName : null}\n onChange={this.onUserLastNameChange}\n options={{ autoComplete: 'family-name' }}\n wrapperId=\"last_name-input\"\n wrapperClass=\"col-md-3\"\n />\n {featureFlags && featureFlags.showBirthDateField && (\n <DateInput\n onDateChange={this.onUserBirthday}\n onFocusChange={() => {}}\n error={this.state.formErrors.birthDay}\n placeholder={t('birthDay')}\n id=\"birthDay-field\"\n showClearDate={true}\n date={birthDay}\n small={true}\n wrapperId=\"birthday-input\"\n wrapperClass=\"col-md-3\"\n />\n )}\n <TextInput\n inputClass=\"form-control\"\n placeholder={isCompany ? t('businessEmail') : t(mailText) || t('mail')}\n error={this.state.formErrors.email}\n value={isAuthenticated && !profile.isAgency ? email : null}\n onChange={this.onUserMailChange}\n options={{ autoComplete: 'email' }}\n readOnly={isAuthenticated && !profile.isCompany && !profile.isAgency}\n wrapperId=\"mail-input\"\n wrapperClass=\"col-md-3\"\n />\n {!hideCountryField && (\n <SelectInput\n inputClass=\"form-control form-control-select\"\n onChange={this.onUserCountryChange}\n selected={country || ''}\n options={transformCountriesToSelectOptions(this.props.countries) || []}\n error={this.state.formErrors.country}\n defaultOption={t('country')}\n wrapperId=\"country-input\"\n wrapperClass=\"col-md-3\"\n />\n )}\n {featureFlags && featureFlags.enableCityInput && country !== 'Chile' && (\n <>\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(cityInput) || t('cityInput')}\n error={this.state.formErrors.cityInput}\n value={cityInput}\n onChange={this.onUserCityInputChange}\n options={{ autoComplete: 'cityInput' }}\n wrapperId=\"city-input\"\n wrapperClass=\"col-md-3\"\n />\n </>\n )}\n {featureFlags && featureFlags.enableStateInput && country !== 'Chile' && (\n <>\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(stateInput) || t('stateInput')}\n error={this.state.formErrors.stateInput}\n value={stateInput}\n onChange={this.onUserStateInputChange}\n options={{ autoComplete: 'stateInput' }}\n wrapperId=\"state-input\"\n wrapperClass=\"col-md-3\"\n />\n </>\n )}\n {country === 'Chile' && (\n <SelectInput\n inputClass=\"form-control form-control-select\"\n onChange={this.onUserCityChange}\n selected={city || ''}\n options={this.props.cities ? this.props.cities.map(c => c.name) : []}\n error={this.state.formErrors.city}\n defaultOption={t(cityText) || t('city')}\n wrapperId=\"chile_city-input\"\n wrapperClass=\"col-md-3\"\n />\n )}\n {featureFlags && featureFlags.enableLicenseData && (\n <>\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(driverLicenseNumber) || t('driverLicenseNumber')}\n error={this.state.formErrors.driverLicenseNumber}\n value={driverLicenseNumber}\n onChange={this.onUserDriverLicenseNumber}\n options={{ autoComplete: 'driverLicenseNumber' }}\n wrapperId=\"driver_license_number-input\"\n wrapperClass=\"col-md-3\"\n />\n <DateInput\n onDateChange={this.onUserDriverLicenseExpiration}\n onFocusChange={() => {}}\n error={this.state.formErrors.driverLicenseExpiration}\n placeholder={t('driverLicenseExpiration')}\n id=\"driver-license-exp\"\n showClearDate={true}\n date={driverLicenseExpiration}\n small={true}\n wrapperId=\"driver_license_expiration-input\"\n wrapperClass=\"col-md-3 DriverLicenseExpirationContainer\"\n />\n <SelectInput\n inputClass=\"form-control form-control-select\"\n onChange={this.onUserDriverLicenseCountry}\n selected={driverLicenseCountry || ''}\n options={transformCountriesToSelectOptions(this.props.countries) || []}\n error={this.state.formErrors.driverLicenseCountry}\n defaultOption={t('countryIssuing')}\n wrapperId=\"driver_license_country-input\"\n wrapperClass=\"col-md-3\"\n />\n </>\n )}\n {this.renderAddressFields()}\n {!hidePhoneField &&\n (usePhoneWithCountry ? (\n <div\n id=\"phone-input\"\n className={\n !showBillingFields && !hideCountryField && !showAddressAllFields\n ? 'col-md-4'\n : 'col-md-3'\n }\n >\n <PhoneInputWithCountrySelect\n className=\"mb-2\"\n placeholder={t(phoneText) || t('phone')}\n error={this.state.formErrors.phone}\n value={phone}\n onChange={this.onUserPhoneChange}\n international\n />\n {this.state.formErrors.phone && (\n <div className=\"text-error\">{this.state.formErrors.phone}</div>\n )}\n </div>\n ) : (\n <TextInput\n inputClass=\"form-control\"\n placeholder={t(phoneText) || t('phone')}\n error={this.state.formErrors.phone}\n value={phone}\n onChange={this.onUserPhoneChange}\n options={{ autoComplete: 'tel' }}\n wrapperId=\"phone-input\"\n wrapperClass={\n !showBillingFields && !hideCountryField && !showAddressAllFields\n ? 'col-md-4'\n : 'col-md-3'\n }\n />\n ))}\n {this.renderDocumentFields()}\n {!hideFlightNumber && (\n <TextInput\n inputClass=\"form-control\"\n placeholder={\n t(flightNumberText) || airlineField ? t('airline') : t('flightNumber')\n }\n error={this.state.formErrors.flightNumber}\n onChange={this.onUserFligthNumberChange}\n options={{ autoComplete: 'flight' }}\n wrapperId=\"flight_number-input\"\n wrapperClass=\"col-md-3\"\n />\n )}\n {featureFlags.showNotesFieldOnCheckout && (\n <TextAreaInput\n inputClass=\"form-control\"\n placeholder={t(notesText) || t('notes')}\n error={formErrors.notes}\n value={notes}\n onChange={this.onNotesChange}\n wrapperId=\"notes-input\"\n wrapperClass=\"col-md-12\"\n />\n )}\n {this.renderDriverFields()}\n {this.renderCompanyExtraDocumentsFields()}\n {registerMe && (\n <>\n <TextInput\n inputClass=\"form-control\"\n type=\"password\"\n className=\"form-control\"\n placeholder={t('myAccount.password')}\n value={password}\n onChange={this.onUserPasswordChange}\n error={this.state.formErrors.password}\n wrapperId=\"password-input\"\n wrapperClass=\"col-md-3\"\n />\n <TextInput\n inputClass=\"form-control\"\n type=\"password\"\n className=\"form-control\"\n placeholder={t('myAccount.repeatPassword')}\n value={repeatPassword}\n onChange={this.onUserRepeatPasswordChange}\n error={this.state.formErrors.repeatPassword}\n wrapperId=\"repeat_password-input\"\n wrapperClass=\"col-md-3\"\n />\n </>\n )}\n {showCustomAddressessFields && (\n <>\n {CustomAddressAlert()}\n <div className=\"container-fluid p-0 CustomAdressesContainer\">\n {customDelivery && (\n <>\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('customDeliveryCity')}\n value={customDeliveryCity}\n error={this.state.formErrors.customDeliveryCity}\n onChange={this.onUserCustomDeliveryCityChange}\n options={{ autoComplete: 'customDeliveryCity' }}\n wrapperId=\"custom_delivery_city-input\"\n wrapperClass=\"col-md-3\"\n />\n <TextInput\n inputClass=\"form-control\"\n value={customDeliveryAddress}\n placeholder={t('customDeliveryAddress')}\n onChange={this.onUserCustomDeliveryAddressChange}\n error={this.state.formErrors.customDeliveryAddress}\n options={{ autoComplete: 'customDeliveryAddress' }}\n wrapperId=\"custom_delivery_address-input\"\n wrapperClass=\"col-md-3\"\n />\n </>\n )}\n {customReturn && (\n <>\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('customReturnCity')}\n value={customReturnCity}\n error={this.state.formErrors.customReturnCity}\n onChange={this.onUserCustomReturnCityChange}\n options={{ autoComplete: 'customReturnCity' }}\n wrapperId=\"custom_return_city-input\"\n wrapperClass=\"col-md-3\"\n />\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('customReturnAddress')}\n value={customReturnAddress}\n error={this.state.formErrors.customReturnAddress}\n onChange={this.onUserCustomReturnAddressChange}\n options={{ autoComplete: 'customReturnAddress' }}\n wrapperId=\"custom_return_address-input\"\n wrapperClass=\"col-md-3\"\n />\n </>\n )}\n </div>\n </>\n )}\n </div>\n {featureFlags && featureFlags.customerRegistration && !isAuthenticated && (\n <div className=\"row\">\n <div className=\"col-md-12 text-right register\">\n <div className=\"form-group\">\n <label className=\"special-checkbox d-inline\">\n <input\n type=\"checkbox\"\n checked={registerMe}\n onClick={() =>\n this.setState({\n ...this.state,\n userInfo: {\n ...this.state.userInfo,\n registerMe: !registerMe,\n },\n })\n }\n />\n <span className=\"checkmark\" />\n <span>\n <strong>{t('registerme')}</strong>\n </span>\n </label>\n </div>\n </div>\n </div>\n )}\n </form>\n <div className=\"container-fluid p-0\">\n <div className=\"row\">\n <div className=\"col-md-12 mb-4\">\n {onlinePayment &&\n paymentConfiguration &&\n paymentConfiguration.paymentMethods && (\n <PaymentMethods\n checked={this.state.userInfo.paymentMethod}\n error={this.state.formErrors.paymentMethod}\n onChange={this.onPaymentMethodChange}\n paymentMethods={paymentConfiguration.paymentMethods}\n paymentTitle={paymentTitle}\n />\n )}\n {!featureFlags?.hideTermsCheckbox && (\n <div className=\"form-group conditions\">\n <CheckboxInput\n error={this.state.formErrors.tcAccept}\n onChange={this.onTCChange}\n checked={this.state.userInfo.tcAccept}\n text={this.parseTermsAndConditionsBlock()}\n />\n {acceptConditionsLegend &&\n (!profile || profile.isCompany === false || profile.isAgency === false ? (\n <Paragraph\n className=\"conditions-legend\"\n text={acceptConditionsLegend}\n />\n ) : (\n <Paragraph className=\"conditions-legend\" text={''} />\n ))}\n </div>\n )}\n <div className=\"d-inline-flex\">\n <Btn\n form=\"bookingUserDataForm\"\n type=\"submit\"\n text={formLoading ? t('creatingReservation') : this.getBookingButtonText()}\n disabled={\n formLoading ||\n (bookingsConfiguration?.mustHaveAtLeastOneInsurance &&\n !this.state.isInsuranceSelected)\n }\n className=\"checkout-submit-button mr-2\"\n />\n {paymentConfiguration && paymentConfiguration.isQuotationHighligthed && (\n <Btn\n form=\"\"\n type=\"\"\n text={\n quotationLoading\n ? t('sending')\n : sendQuotationMsg\n ? tt(sendQuotationMsg, t)\n : t('sendQuotation')\n }\n disabled={formLoading}\n className=\"btn-reservation\"\n onClick={this.handlesendQuotation}\n />\n )}\n </div>\n </div>\n <div className=\"col-md-12 mt-3 send-budget\">\n {!booking.onlyQuote &&\n !(paymentConfiguration && paymentConfiguration.isQuotationHighligthed) &&\n !(showQuotationLink === false) && (\n <a href=\"#\" onClick={this.handlesendQuotation} className=\"mr-5\">\n <i className=\"far fa-envelope\" />{' '}\n {quotationLoading\n ? t('sending')\n : sendQuotationMsg\n ? tt(sendQuotationMsg, t)\n : t('sendQuotation')}\n </a>\n )}\n {!(showPrintButton === false) && (\n <a href=\"#\" onClick={() => window.print()} className=\"print-btn\">\n <i className=\"fas fa-print\" /> {t('print')}\n </a>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n </StyledSection>\n <CheckoutMobileDetails\n popUpErrorShow={popUpErrorShow}\n disabled={\n formLoading ||\n (bookingsConfiguration?.mustHaveAtLeastOneInsurance && !this.state.isInsuranceSelected)\n }\n text={formLoading ? t('creatingReservation') : this.getBookingButtonText()}\n openModal={this.openModal}\n closeModal={this.closeModal}\n modalState={modalState}\n />\n </>\n );\n }\n}\n\nCheckoutAdditionals.propTypes = props;\nCheckoutAdditionals.defaultProps = defaultProps;\n\nconst mapStateToProps = ({ siteConfiguration, searchCars, global, user, bookings }) => ({\n settings: siteConfiguration.settings,\n booking: searchCars.checkout.booking,\n onlinePayment: searchCars.checkout.onlinePayment,\n bookingParams: searchCars.params,\n listDocumentTypes: global.listDocumentTypes,\n countries: global.listCountries,\n cities: global.listCities,\n profile: user.profile,\n currentCurrency: global.currentCurrency,\n defaultCurrency: global.defaultCurrency,\n webCurrency: global.webCurrency,\n isAuthenticated: user.isAuthenticated,\n bookingsConfiguration: bookings.configuration,\n});\nexport default connect(mapStateToProps, {\n book,\n fetchDocumentTypes,\n fetchFiscalConditions,\n fetchCountries,\n fetchCities,\n handleLogOut,\n handleLogIn,\n})(withRouter(withTranslation()(CheckoutAdditionals)));\n","export const debounce = (callback, delay) => {\n let timer;\n\n return (...args) => {\n clearTimeout(timer);\n timer = setTimeout(() => callback(...args), delay);\n };\n};\n","import { connect } from 'react-redux';\nimport CheckoutAdditionals from './CheckoutAdditionals';\nimport { fetchPrices, fetchBookingAdditionals } from 'actions/';\n\nconst mapStateToProps = ({ bookings, searchCars }) => ({\n listAdditionals: bookings.listAdditionals,\n searchCars,\n});\n\nexport default connect(mapStateToProps, { fetchBookingAdditionals, fetchPrices })(\n CheckoutAdditionals,\n);\n","import PropTypes from 'prop-types';\n\nexport const props = {\n params: PropTypes.shape({}),\n prefixForNumeric: PropTypes.string,\n};\n\nexport const defaultProps = {\n params: {},\n};\n","import style from 'styled-components';\n\nexport const StyledDetails = style.section`\n @media print {\n #checkout-print {\n background-color: white;\n height: 100% !important;\n width: 100% !important;\n position: fixed !important;\n top: 0;\n left: 0;\n margin: 0;\n padding: 15px;\n font-size: 14px;\n line-height: 18px;\n }\n }\n\n .total-price-text-wrapper {\n flex: 0 0 50%;\n max-width: 50%;\n }\n\n .total-price-number-wrapper {\n flex: 0 0 50%;\n max-width: 50%;\n text-align: right;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.lg}) {\n display:none;\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.md}){\n -webkit-box-flex: 0;\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) and (min-width: ${props =>\n props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl})\n and (min-width: ${props => props.theme.screens.xl}) {\n flex: 0 0 32%;\n max-width: 32%;\n }\n\n .checkout-details {\n .title-col1 p { font-size: 18px; }\n\n .title-col1 h3 {\n margin-bottom: 0px !important;\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl})\n and (min-width: ${props => props.theme.screens.xl}){\n font-size: 20px;\n margin-top: 2.5%;\n }\n }\n\n .img-fluid {\n max-width: 100%;\n height: auto;\n max-height: 164px;\n }\n\n .car-item .car-name {\n font-size: 20px;\n font-weight: 700;\n font-style: normal;\n margin-top: 0px;\n margin-bottom: 5px;\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl})\n and (min-width: ${props => props.theme.screens.xl}){\n font-size: 18px;\n margin-bottom: 3px;\n }\n }\n\n .car-category{\n font-weight: 600;\n span{\n text-transform: uppercase;\n }\n .tachometer {\n color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n }\n\n .car-item .details {\n margin-bottom: 0;\n }\n\n .car-item .details-item {\n display: inline-block;\n text-align: center;\n margin-right: 6px;\n width: 10.5%;\n }\n\n .car-item .details-item img {\n width: 100%;\n border: 1px solid #CCCCCC;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n max-width: 65px;\n }\n\n .pickup-details {\n font-size: 13px;\n }\n\n .franchise-details {\n font-size: 13px;\n }\n\n .rent-details {\n background-color: #fff;\n @media only screen {\n padding: 6% 7% 3% 7%;\n }\n }\n\n .rent-details .payment-details li {\n font-size: 13px;\n margin-bottom: 5px;\n\n i {font-size: 8px; display: inline-block; margin-right: 5px;}\n\n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n font-size: 11px;\n margin-bottom: 7px;\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.xl})\n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 11px;\n margin-bottom: 5px;\n }\n }\n\n .rent-details .payment-details .item-name {\n font-weight: bold;\n }\n\n .payment {\n background-color: ${props => props.priceBackground || props.theme.colors.primary};\n color: ${props => props.priceColor || props.theme.font.colors.secondary};\n @media only screen {\n padding: 5% 7% 0% 7%;\n }\n\n .long-value{font-size: 23px;}\n\n .total-price {\n font-size: 40px;\n font-weight: 700;\n line-height: 22px;\n margin-bottom: 8px;\n margin-top: 10px;\n white-space: nowrap;\n\n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n font-size: 30px;\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.xl})\n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 35px;\n }\n }\n\n .days{\n font-size:12px;\n }\n\n .diario {\n font-size:12px;\n font-weight: lighter;\n }\n }\n\n .payment .total-name h3{\n font-size: 18px;\n margin-bottom: 0px !important;\n margin-top: 6% !important;\n\n @media only screen and (min-width: ${props => props.theme.screens.xl})\n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 16px;\n }\n }\n\n .flex-booking {\n padding: 20px;\n border: 1px solid #ccc;\n\n h4 {\n font-size: 20px;\n font-weight: 600;\n margin-bottom: 0.7em;\n }\n\n span {\n background-color: #270570;\n padding: 5px 10px;\n border-radius: 7px;\n color: white;\n font-weight: bold;\n }\n\n ul {\n margin-top: 20px;\n margin-left: 1em !important;\n color: #03a691\n }\n\n i {\n margin-right: 0.5em;\n margin-bottom: 0.5em;\n ;\n }\n }\n\n }\n`;\n\nexport const NoBookingDivStyled = style.div`\n text-align: center;\n\n p{\n margin-bottom: 20px;\n }\n\n a {\n transition: all 0.4s;\n cursor: pointer;\n text-align: center;\n margin: 40px auto;\n }\n\n a:hover, a i { color: ${props => props.theme.colors.buttonPrimaryBg} !important; }\n\n .error{\n font-size:90px;\n margin: 40px auto;\n text-align: center;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledDetailsModern = style.section`\n @media print {\n #checkout-print {\n background-color: white;\n height: 100% !important;\n width: 100% !important;\n position: fixed !important;\n top: 0;\n left: 0;\n margin: 0;\n padding: 15px;\n font-size: 14px;\n line-height: 18px;\n }\n }\n\n\n .total-price-text-wrapper {\n flex: 0 0 100%;\n max-width: 100%;\n }\n\n .total-price-number-wrapper {\n flex: 0 0 100%;\n max-width: 100%; \n }\n\n @media only screen and (max-width: ${props => props.theme.screens.lg}) {\n display:none;\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.md}){\n -webkit-box-flex: 0;\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) and (min-width: ${props =>\n props.theme.screens.md}){\n width: 100%;\n flex: 100%;\n max-width: 100%;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl})\n and (min-width: ${props => props.theme.screens.xl}) {\n flex: 0 0 32%;\n max-width: 32%;\n }\n\n .checkout-details {\n .title-col1 p { font-size: 18px; }\n\n .title-col1 h3 {\n margin-bottom: 0px !important;\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl})\n and (min-width: ${props => props.theme.screens.xl}){\n font-size: 20px;\n margin-top: 2.5%;\n }\n }\n\n .img-fluid {\n max-width: 80%;\n height: auto;\n max-height: 164px;\n }\n\n .car-item .car-name {\n font-size: 18px;\n font-weight: 700;\n font-style: normal;\n margin-top: 0px;\n margin-bottom: 5px;\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl})\n and (min-width: ${props => props.theme.screens.xl}){\n font-size: 18px;\n margin-bottom: 3px;\n }\n }\n\n .car-category{\n font-weight: 400;\n span{\n text-transform: uppercase;\n }\n .tachometer {\n color: #1a73e8;\n }\n }\n\n .car-item .details {\n margin-bottom: 0;\n }\n\n .car-item .details-item {\n text-align: center;\n margin-right: 10px;\n display: -webkit-inline-box;\n display: -webkit-inline-flex;\n display: -ms-inline-flexbox;\n display: inline-flex;\n width: auto;\n }\n\n .car-item .details-item p {\n position:relative;\n top:10px;\n }\n\n .car-item .details-item img {\n width: 100%;\n border: 1px solid #CCCCCC;\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n max-width: 65px;\n }\n\n .pickup-details {\n font-size: 13px;\n }\n\n .pickup-details h4 {\n color:#1a73e8;\n font-weight:400;\n }\n\n .franchise {\n padding: 10px 0;\n font-size: 13px;\n color: #2BCE81;\n }\n\n .rent-details {\n margin-top:115px;\n background-color: #fff;\n border-radius:12px;\n box-shadow:3px 3px 6px #00000016;\n @media only screen {\n padding: 6% 7% 3% 7%;\n }\n }\n\n .rent-details .payment-details li {\n font-size: 13px;\n margin-bottom: 5px;\n\n i {font-size: 8px; display: inline-block; margin-right: 5px;}\n\n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n font-size: 11px;\n margin-bottom: 7px;\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.xl})\n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 11px;\n margin-bottom: 5px;\n }\n }\n\n .rent-details .payment-details .item-name {\n font-weight: bold;\n }\n\n .payment {\n background-color: #FFF;\n box-shadow:3px 3px 6px #00000016;\n border-radius:12px;\n @media only screen {\n padding: 0 40px;\n }\n\n .long-value{\n font-size: 28px;\n }\n\n .total-price {\n font-size: 30px !important;\n font-weight: 700;\n line-height: 22px;\n margin-bottom: 8px;\n margin-top: 10px;\n white-space: nowrap;\n color: #2E2D35;\n\n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n font-size: 30px;\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.xl})\n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 35px;\n }\n }\n\n .days{\n font-size:12px;\n color: #1a73e8;\n margin:0;\n }\n\n .diario {\n font-size:14px;\n font-weight:400;\n color: #2E2D35;\n }\n \n .diario span {\n font-size:14px;\n }\n }\n\n .payment .total-name h3{\n font-size: 28px !important;\n margin-bottom: 0px !important;\n margin-top: 6% !important;\n font-weight:400;\n color: #2E2D35;\n\n @media only screen and (min-width: ${props => props.theme.screens.xl})\n and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 16px;\n }\n }\n\n .flex-booking {\n padding: 20px;\n border: 1px solid #ccc;\n\n h4 {\n font-size: 20px;\n font-weight: 600;\n margin-bottom: 0.7em;\n }\n\n span {\n background-color: #270570;\n padding: 5px 10px;\n border-radius: 7px;\n color: white;\n font-weight: bold;\n }\n\n ul {\n margin-top: 20px;\n margin-left: 1em !important;\n color: #03a691\n }\n\n i {\n margin-right: 0.5em;\n margin-bottom: 0.5em;\n ;\n }\n }\n\n }\n`;\n","import React from 'react';\nimport { props, defaultProps } from './CheckoutDetails.props';\nimport { connect } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nimport { withRouter } from 'react-router-dom';\nimport { tt } from 'utils/translationHelper';\nimport { getSippByCategory } from '../../../utils/categoryGroupHelper';\nimport { StyledDetails, NoBookingDivStyled } from './CheckoutDetails.styled';\nimport { StyledDetailsModern } from './CheckoutDetails.styled.modern';\nimport { Title, Paragraph, ModelDetail, Icon, NumberDisplay, CustomLoading } from 'components/';\nimport { dateFormatEdition } from 'utils/dataHelper';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\nimport { getPriceWithCommission, isAgencyUser } from 'utils/dataHelper';\nimport { sumBy } from 'lodash';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\nimport ExchangeMessage from 'components/ExchangeMessage';\n\nconst mapStateToProps = state => ({\n currentCurrency: state.global.currentCurrency,\n defaultCurrency: state.global.defaultCurrency,\n webCurrency: state.global.webCurrency,\n profile: state.user.profile,\n bookingsConfiguration: state.bookings.configuration,\n});\n\nconst PriceComponent = ({ name, price }) => {\n return (\n <li>\n <i className=\"fas fa-plus\" /> <span className=\"item-name\">{name} </span>{' '}\n <span className=\"item-price\">\n <NumberDisplay value={price} />\n </span>\n </li>\n );\n};\n\nclass CheckoutDetails extends React.Component {\n goBack = () => {\n this.props.history.goBack();\n };\n\n getModelName(model) {\n const {\n t,\n settings: { featureFlags },\n } = this.props;\n const availabilityGroup =\n featureFlags.availabilityGroup === undefined ? 'model' : featureFlags.availabilityGroup;\n const showOrSimilar =\n featureFlags.ShowOrSimilar === undefined ? true : featureFlags.ShowOrSimilar;\n const legend = availabilityGroup === 'category' && showOrSimilar ? t('orSimilar') : '';\n\n return `${model.brand.name} ${model.name} ${legend}`;\n }\n\n getCategoryOrGroupName = carModel => {\n const {\n showSipp,\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n if (!categoryGroups) return carModel.category.name;\n\n const categoryGroupName = getSippByCategory(categoryGroups, carModel.category).toUpperCase();\n return showSipp && carModel.sipp\n ? `${categoryGroupName} - ${carModel.sipp}`\n : categoryGroupName;\n };\n\n getDailyFinalPrice = booking => {\n if (!booking) return null;\n\n return getPriceWithCommission(booking.price) / booking.totalDays;\n };\n\n showBookingLenght = booking => {\n const {\n t,\n diasDeAlquiler,\n settings: { configurations },\n } = this.props;\n const bookingLength = Number.isInteger(booking.totalDays)\n ? booking.totalDays\n : booking.totalDaysString;\n\n const bookingText = diasDeAlquiler\n ? `Por ${bookingLength} ${diasDeAlquiler}`\n : t('forDaysOfRent', { totalDays: bookingLength });\n\n const openRateText = configurations.openRate ? ` ${t('from').toLowerCase()}` : '';\n\n return bookingText + openRateText;\n };\n\n showFranchiseValues = booking => {\n const {\n settings: { featureFlags },\n } = this.props;\n\n if (!booking) return;\n const {\n t,\n franchiseDamagesText,\n franchiseRolloverText,\n franchiseTheftText,\n franchiseHailText,\n } = this.props;\n\n const showFranchiseDetails = featureFlags?.showFranchiseDetails || false;\n const showFranchiseDamages = featureFlags?.showFranchiseDamages || false;\n const showFranchiseRollover = featureFlags?.showFranchiseRollover || false;\n const showFranchiseTheft = featureFlags?.showFranchiseTheft || false;\n const showFranchiseHail = featureFlags?.showFranchiseHail || false;\n\n if (!showFranchiseDetails) return null;\n\n return (\n <div className=\"franchise-details\">\n <hr />\n <ul className=\"list-unstyled\">\n {showFranchiseDamages && (\n <li>\n {t(franchiseDamagesText) || t('franchises.franchiseDamages')}:{' '}\n <NumberDisplay value={booking.franchiseDamage || 0} />\n </li>\n )}\n {showFranchiseRollover && (\n <li>\n {t(franchiseRolloverText) || t('franchises.franchiseRollover')}:{' '}\n <NumberDisplay value={booking.franchiseRollover || 0} />\n </li>\n )}\n {showFranchiseTheft && (\n <li>\n {t(franchiseTheftText) || t('franchises.franchiseTheft')}:{' '}\n <NumberDisplay value={booking.franchiseTheft || 0} />\n </li>\n )}\n {showFranchiseHail && (\n <li>\n {t(franchiseHailText) || t('franchises.franchiseHail')}:{' '}\n <NumberDisplay value={booking.franchiseHail || 0} />\n </li>\n )}\n </ul>\n </div>\n );\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledDetailsModern;\n }\n return StyledDetails;\n }\n\n getPriceItemsContent = () => {\n const {\n searchCars: {\n checkout: { booking },\n },\n settings: { configurations, paymentConfiguration },\n t,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n } = this.props;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const getDescription = item => {\n if (item.isBookingPrice && configurations.openRate) {\n let unitPrice = applyExchangeRate\n ? getPriceWithExchangeRate(item.unitPrice, currentCurrency, defaultCurrency, webCurrency)\n : item.unitPrice;\n\n return (\n <>\n {t('openRatePriceItem', { days: item.quantity })}\n (\n <NumberDisplay value={unitPrice} /> {t('xDay')})\n </>\n );\n }\n return item.description;\n };\n\n if (paymentConfiguration && paymentConfiguration.commissionPercentage > 0) {\n const bookingPriceItems = booking.priceItems.filter(i => i.isBookingPrice);\n const extraPriceItems = booking.priceItems.filter(i => !i.isBookingPrice);\n\n const bookingPriceItemsAmount = getPriceWithCommission(\n sumBy(bookingPriceItems, 'price'),\n paymentConfiguration,\n );\n\n return (\n <>\n <PriceComponent\n name={`${t('alquilerPor')} ${booking.totalDaysString}`}\n price={\n applyExchangeRate\n ? getPriceWithExchangeRate(\n bookingPriceItemsAmount,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n )\n : bookingPriceItemsAmount\n }\n />\n {extraPriceItems.map((item, i) => {\n return (\n <PriceComponent\n key={i}\n name={getDescription(item)}\n price={\n applyExchangeRate\n ? getPriceWithCommission(\n getPriceWithExchangeRate(\n item.price,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n ),\n paymentConfiguration,\n )\n : getPriceWithCommission(item.price, paymentConfiguration)\n }\n />\n );\n })}\n </>\n );\n }\n\n return booking.priceItems.map((item, i) => {\n return (\n <PriceComponent\n key={i}\n name={getDescription(item)}\n price={\n applyExchangeRate\n ? getPriceWithExchangeRate(item.price, currentCurrency, defaultCurrency, webCurrency)\n : item.price\n }\n />\n );\n });\n };\n\n render() {\n const {\n searchCars: {\n checkout: { booking, isLoading, isError, errorMessage },\n params: { dateFrom, dateTo, hourFrom, hourTo, commercialAgreementCode },\n },\n settings: { featureFlags, paymentConfiguration, configurations },\n t,\n title,\n subtitle,\n prefixForNumeric,\n loadingGif,\n loadingMessage,\n franquicia,\n detailsLegend,\n totalPayText,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n chargedMsg,\n chargedMsg2,\n profile,\n bookingsConfiguration,\n } = this.props;\n\n const loggedAsAgency = isAgencyUser(profile);\n\n const StyledComponent = this.getTemplateStyledComponent();\n\n if (isLoading) {\n return (\n <NoBookingDivStyled className=\"col-md-12\">\n <CustomLoading\n loadingGif={loadingGif || t('loadingGif')}\n loadingMessage={loadingMessage}\n ></CustomLoading>\n </NoBookingDivStyled>\n );\n }\n\n if (isError) {\n return (\n <NoBookingDivStyled className=\"col-md-12\">\n <div className=\"col-md-12 mb-5\">\n <Icon className=\"fas fa-times-circle error\" color=\"red\"></Icon>\n </div>\n <div className=\"col-md-12 mb-5 pb-5\">\n <Title\n type=\"h2\"\n text={errorMessage}\n weight=\"900\"\n fontSize={30}\n className={`${errorMessage != null ? '' : 'd-none'}`}\n />\n </div>\n </NoBookingDivStyled>\n );\n }\n\n if (booking == null) {\n return (\n <NoBookingDivStyled className=\"col-md-12\">\n <Icon className=\"fas fa-times-circle error\" color=\"red\"></Icon>\n <p>{t('bookingNotFound')}</p>\n <a className=\"d-block\" onClick={this.goBack}>\n <i className=\"fas fa-angle-double-left\" />\n {t('chooseOtherCar')}\n </a>\n </NoBookingDivStyled>\n );\n }\n\n const model = booking.car.model;\n const showDeposit = featureFlags.showDeposit === undefined ? true : featureFlags.showDeposit;\n const showFranchiseDetails =\n featureFlags.showFranchiseDetails === undefined ? false : featureFlags.showFranchiseDetails;\n const showFranchiseDamages =\n featureFlags.showFranchiseDamages === undefined ? false : featureFlags.showFranchiseDamages;\n const showFranchiseRollover =\n featureFlags.showFranchiseRollover === undefined ? false : featureFlags.showFranchiseRollover;\n const showFranchiseTheft =\n featureFlags.showFranchiseTheft === undefined ? false : featureFlags.showFranchiseTheft;\n const showCovidBox =\n featureFlags.showCovidBox === undefined ? false : featureFlags.showCovidBox;\n const dailyPrice = featureFlags.showDailyFinalPrice\n ? this.getDailyFinalPrice(booking)\n : getPriceWithCommission(booking.averageDayPrice, paymentConfiguration);\n const totalPrice = getPriceWithCommission(booking.price, paymentConfiguration);\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n const showExchangeMsg = applyExchangeRate;\n\n const kmText =\n booking.ilimitedKm === true\n ? t(\n bookingsConfiguration?.distanceUnit == 'Kilometers'\n ? 'KmIlimitados'\n : 'MillasIlimitados',\n )\n : t(bookingsConfiguration?.distanceUnit == 'Kilometers' ? 'KmDiarios' : 'MillasDiarios', {\n km: booking.maxAllowedDistanceByDay,\n });\n\n const dateFormat = configurations.dateDisplayFormat || t('dateFormat');\n\n return (\n <StyledComponent className=\"col-md-3\" priceBackground={this.props.priceBackground}>\n <div id=\"checkout-print\" className=\"checkout-details\">\n <div className=\"row\">\n <div className=\"col-md-12 title-col1\">\n <Title\n type=\"h2\"\n text={title}\n italic={false}\n weight=\"700\"\n fontSize={20}\n className=\"mt-1\"\n />\n <Paragraph>{tt(subtitle, t)}</Paragraph>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-12\">\n <div className=\"rent-details\">\n <div className=\"car-item\">\n <div className=\"car-details\">\n <h2 className=\"car-name mt-1\">{this.getModelName(model)}</h2>\n <Paragraph className=\"car-category mb-0\">\n {t('categoria')} \n <span>{this.getCategoryOrGroupName(model)}</span>\n <div className=\"d-inline-block\">\n <span className=\"mr-2 ml-2\">|</span>\n <span className=\"tachometer text-capitalize\">\n <i className=\"fas fa-tachometer-alt mr-1\"></i>\n {kmText}\n </span>\n </div>\n </Paragraph>\n {showDeposit && (\n <p className=\"franchise mb-3\">\n <i\n className=\"fas fa-info-circle\"\n data-toggle=\"tooltip\"\n title=\"\"\n data-original-title={t('franchiseHelpText')}\n />\n <strong> {t(franquicia) || t('franquicia')} </strong>\n <span>\n <NumberDisplay value={booking.franchise} useWebCurrency={true} />\n </span>\n </p>\n )}\n </div>\n <div className=\"car-image text-center mb-3\">\n <img\n className=\"img-fluid\"\n src={model.imagePath}\n alt={this.getModelName(model)}\n />\n </div>\n <ModelDetail model={model} prefixForNumeric={prefixForNumeric} />\n </div>\n <hr />\n <div className=\"pickup-details\">\n <Title\n type=\"h4\"\n text={t('delivery')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <p>\n {booking.deliveryPlace.name} -\n <span className=\"date\">{dateFormatEdition(dateFrom, dateFormat)}</span>{' '}\n <span className=\"hour\">{hourFrom} hs</span>\n </p>\n <Title\n type=\"h4\"\n text={t('return')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <p>\n {booking.returnPlace.name} -\n <span className=\"date\">{dateFormatEdition(dateTo, dateFormat)}</span>{' '}\n <span className=\"hour\">{hourTo} hs</span>\n </p>\n </div>\n <hr />\n <div className=\"payment-details\">\n <Title\n type=\"h4\"\n className=\"mb-3\"\n text={t('paymentDetail')}\n weight=\"700\"\n fontSize={14}\n italic={false}\n noMedia\n />\n <ul className=\"list-unstyled\">\n {this.getPriceItemsContent()}\n\n {commercialAgreementCode && (\n <li>\n <i className=\"fas fa-plus\" />{' '}\n <span className=\"item-name\">{t('commercialAgreement')} </span>{' '}\n <span className=\"item-price\">{commercialAgreementCode}</span>\n </li>\n )}\n </ul>\n </div>\n {(showFranchiseDetails ||\n showFranchiseDamages ||\n showFranchiseRollover ||\n showFranchiseTheft) &&\n this.showFranchiseValues(booking)}\n </div>\n <div className=\"payment mt-3 mb-3\">\n <div className=\"row text-light\">\n <div className=\"total-price-text-wrapper\">\n <Title\n type=\"h3\"\n className=\"total-name text-light\"\n text={totalPayText ? tt(totalPayText, t) : t('totalToPay')}\n />\n <p className=\"days\">{this.showBookingLenght(booking)}</p>\n </div>\n <div className=\"total-price-number-wrapper\">\n <p className=\"total-price\">\n <NumberDisplay\n value={\n applyExchangeRate\n ? getPriceWithExchangeRate(\n totalPrice,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n )\n : totalPrice\n }\n />\n </p>\n <p className=\"diario\">\n {t('dailyPrice')}{' '}\n <span>\n <NumberDisplay\n value={\n applyExchangeRate\n ? getPriceWithExchangeRate(\n dailyPrice,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n )\n : dailyPrice\n }\n />\n </span>\n </p>\n {loggedAsAgency && (\n <>\n <p className=\"diario\">\n {t('myAccount.customer')}:{' '}\n <strong>\n <NumberDisplay value={booking.customerPrice} />\n </strong>\n <br></br>\n {t('myAccount.agency')}:{' '}\n <strong>\n <NumberDisplay value={booking.agencyPrice} />\n </strong>\n <br></br>\n {t('myAccount.commision')}:{' '}\n <strong>\n <NumberDisplay value={booking.salesCommision} />\n </strong>\n </p>\n </>\n )}\n </div>\n {detailsLegend && (\n <div className=\"col-md-12\">\n <Paragraph className=\"text-light\">{tt(detailsLegend, t)}</Paragraph>\n </div>\n )}\n </div>\n </div>\n {showExchangeMsg && (\n <ExchangeMessage\n defaultCurrency={defaultCurrency}\n currentCurrency={currentCurrency}\n chargedMsg={chargedMsg}\n chargedMsg2={chargedMsg2}\n />\n )}\n {showCovidBox && (\n <div className=\"rent-details mt-3 mb-3 flex-booking\">\n <h4>{t('flexibleBooking.includes')}</h4>\n <span>{t('flexibleBooking.flexBooking')}</span>\n <ul className=\"fa-ul\">\n <li>\n <i class=\"fas fa-check\"></i>\n {t('flexibleBooking.cancel48hs')}\n </li>\n <li>\n <i class=\"fas fa-check\"></i>\n {t('flexibleBooking.accidents')}\n </li>\n <li>\n <i class=\"fas fa-check\"></i>\n {t('flexibleBooking.civilEnsurance')}\n </li>\n </ul>\n </div>\n )}\n </div>\n </div>\n </div>\n </StyledComponent>\n );\n }\n}\n\nCheckoutDetails.propTypes = props;\nCheckoutDetails.defaultProps = defaultProps;\nexport default connect(mapStateToProps)(\n withSettingsContext(withRouter(withTranslation()(CheckoutDetails))),\n);\n","import { connect } from 'react-redux';\nimport CheckoutDetails from './CheckoutDetails';\n\nconst mapStateToProps = ({ global, searchCars, siteConfiguration }) => ({\n listAdditionals: global.listAdditionals,\n settings: siteConfiguration.settings,\n searchCars,\n});\n\nexport default connect(mapStateToProps)(CheckoutDetails);\n","import PropTypes from 'prop-types';\n\nexport const props = {\n params: PropTypes.shape({}),\n prefixForNumeric: PropTypes.string,\n bgColor: PropTypes.string,\n color: PropTypes.string,\n weight: PropTypes.string,\n size: PropTypes.string,\n};\n\nexport const defaultProps = {\n params: {},\n};\n","import style from 'styled-components';\n\nexport const StyledMobileDetails = style.div`\n display:none;\n position: fixed;\n width: 100%;\n bottom: 0;\n left: 0;\n z-index: 1;\n color: ${props => props.theme.font.colors.primary};\n background: #f2f2f2;\n border-top: .3px solid #e6e6e6;\n box-shadow: 0 0 35px #00000012;\n\n .more-info{\n .button {\n height: 100%;\n width: 100%;\n background: transparent;\n border:none;\n i{\n color: ${props => props.theme.font.colors.primary};\n }\n &:focus{\n outline: none;\n }\n }\n }\n\n .total-block{\n line-height: 1.2;\n .days{\n margin: 0;\n font-size: 12px;\n margin-top: 15px;\n }\n .total-price{\n margin-bottom: 0;\n font-weight: bold;\n font-size:20px;\n }\n }\n .payment-button button{\n width: 100%;\n height: 100%;\n display: block;\n padding: 15px 7px 15px 7px;\n background: ${props => props.bgColor || props.theme.colors.primary};\n border-color: ${props => props.bgColor || props.theme.colors.primary};\n text-align: center;\n color: ${props => props.color || 'white'};\n font-weight: ${props => props.weight || 'bold'};\n font-size: ${props => props.size || '15px'};\n line-height: 1.2;\n } \n\n .popup-overlay .popup-content {\n width: 90% !important;\n min-height: 100px;\n padding: 0 !important;\n text-align: left;\n\n .modal{\n display: contents;\n \n .header{\n padding: 22px 20px 14px;\n border-bottom: 2px solid #f2f2f2;\n margin-bottom: -15px!important;\n div{\n width: 90%;\n display: inline-block;\n }\n i{\n font-size:20px;\n }\n }\n .payment-details{\n padding: 0 20px;\n ul li{\n font-size: 14px;\n margin-bottom: 8px;\n i{\n font-size: 10px;\n }\n }\n }\n .payment{\n background: #f2f2f2;\n padding: 15px 20px;\n margin-bottom: 0 !important;\n\n .total-name{\n h3{\n font-size: 16px;\n margin-bottom: 0 !important;\n margin-top: 7px;\n }\n }\n .days{\n font-size: 13px;\n margin-bottom: 0;\n }\n .total-price span{\n font-size: 22px;\n font-weight: bold;\n }\n .diario{\n font-size: 12px;\n margin-bottom: 0;\n .span{\n font-size: 12px;\n margin-bottom: 0;\n }\n }\n }\n .complete-info a{\n color: red;\n margin-bottom: 0;\n i{\n font-size: 14px;\n }\n }\n }\n }\n \n @media only screen and (max-width: ${props => props.theme.screens.lg}) {\n display: flex;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledMobileDetailsModern = style.div`\n display:none;\n position: fixed;\n width: 100%;\n bottom: 0;\n left: 0;\n z-index: 1;\n color: ${props => props.theme.font.colors.primary};\n background: #f2f2f2;\n border-top: .3px solid #e6e6e6;\n box-shadow: 0 0 35px #00000012;\n\n .more-info{\n .button {\n height: 100%;\n width: 100%;\n background: transparent;\n border:none;\n i{\n color: ${props => props.theme.font.colors.primary};\n }\n &:focus{\n outline: none;\n }\n }\n }\n\n .user-data-form_btn {\n border-radius: 20px; \n padding: 1rem!important;\n }\n\n .total-block{\n line-height: 1.2;\n .days{\n margin: 0;\n font-size: 12px;\n margin-top: 15px;\n }\n .total-price{\n margin-bottom: 0;\n font-weight: bold;\n font-size:20px;\n }\n }\n .payment-button button{\n width: 100%;\n height: 100%;\n display: block;\n padding: 15px 7px 15px 7px;\n background: ${props => props.bgColor || props.theme.colors.primary};\n border-color: ${props => props.bgColor || props.theme.colors.primary};\n text-align: center;\n color: ${props => props.color || 'white'};\n font-weight: ${props => props.weight || 'bold'};\n font-size: ${props => props.size || '15px'};\n line-height: 1.2;\n } \n .popup-overlay .popup-content {\n width: 90% !important;\n min-height: 100px;\n padding: 5px !important;\n text-align: left;\n border-radius:12px;\n\n .modal{\n display: contents;\n\n .header{\n padding: 22px 20px 14px;\n margin-bottom: -15px!important;\n div{\n width: 90%;\n display: inline-block;\n }\n i{\n font-size:20px;\n }\n }\n .payment-details{\n padding: 0 20px;\n ul li{\n font-size: 14px;\n margin-bottom: 8px;\n i{\n font-size: 10px;\n }\n }\n }\n .payment{\n background: #F2F5F7;\n padding: 15px 20px;\n margin-bottom: 10px !important;\n border-radius:8px;\n\n .total-name{\n h3{\n font-size: 16px;\n margin-bottom: 0 !important;\n margin-top: 3px;\n }\n }\n .days{\n font-size: 13px;\n margin-bottom: 0;\n }\n .total-price span{\n font-size: 22px;\n font-weight: bold;\n }\n .diario{\n font-size: 12px;\n margin-bottom: 0;\n .span{\n font-size: 12px;\n margin-bottom: 0;\n }\n }\n }\n .complete-info a{\n color: red;\n margin-bottom: 0;\n i{\n font-size: 14px;\n }\n }\n }\n }\n \n @media only screen and (max-width: ${props => props.theme.screens.lg}) {\n display: flex;\n }\n`;\n","import React from 'react';\nimport { props, defaultProps } from './CheckoutMobileDetails.props';\nimport { StyledMobileDetails } from './CheckoutMobileDetails.styled.js';\nimport { NoBookingDivStyled } from '../CheckoutDetails/CheckoutDetails.styled.js';\nimport { Title, NumberDisplay, Btn, Paragraph } from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport { tlink } from 'utils/translationHelper';\nimport { withRouter } from 'react-router-dom';\nimport { tt } from 'utils/translationHelper';\nimport Popup from 'reactjs-popup';\nimport { connect } from 'react-redux';\nimport { getPriceWithCommission } from 'utils/dataHelper';\nimport { StyledMobileDetailsModern } from './CheckoutMobileDetails.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { sumBy } from 'lodash';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\nimport ExchangeMessage from 'components/ExchangeMessage';\n\nconst PriceComponent = ({ name, price }) => {\n return (\n <li>\n <i className=\"fas fa-plus\" /> <span className=\"item-name\">{name} </span>{' '}\n <span className=\"item-price\">\n <NumberDisplay value={price} />\n </span>\n </li>\n );\n};\n\nclass CheckoutMobileDetails extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n formErrors: {\n name: null,\n email: null,\n phone: null,\n address: null,\n id: null,\n tcAccept: null,\n paymentMethod: null,\n },\n formLoading: false,\n };\n }\n\n goBack = () => {\n this.props.history.goBack();\n };\n\n getBookingButtonText() {\n const { payBookingButtonText, bookBookingButtonText, t, onlinePayment } = this.props;\n\n if (!onlinePayment) return bookBookingButtonText || t('bookBooking');\n else return payBookingButtonText || t('payBooking');\n }\n\n book = userInfo => {\n const { booking, book, bookingParams, t, i18n, onlinePayment, history, settings } = this.props;\n\n this.setState({ formLoading: true });\n let state = this.state;\n let isPaymentsConfig = settings.paymentConfiguration;\n\n book(booking, userInfo, bookingParams, false, i18n.language)\n .then(res => {\n if (onlinePayment) {\n if (isPaymentsConfig) {\n history.push(\n tlink('__Routes.onlinePayment', t, i18n, null, settings.configurations.langConfig),\n { paymentMethod: state.userInfo.paymentMethodObj.component },\n );\n } else {\n history.push(\n tlink('__Routes.onlinePayment', t, i18n, null, settings.configurations.langConfig),\n );\n }\n window.scrollTo(0, 0);\n } else {\n history.push(\n tlink('__Routes.bookSuccess', t, i18n, null, settings.configurations.langConfig),\n );\n }\n })\n .catch(error => {\n history.push(\n tlink('__Routes.bookFailed', t, i18n, null, settings.configurations.langConfig),\n );\n });\n };\n\n showBookingLenght = booking => {\n const {\n t,\n diasDeAlquiler,\n settings: { configurations },\n } = this.props;\n const bookingLength = Number.isInteger(booking.totalDays)\n ? booking.totalDays\n : booking.totalDaysString;\n\n const bookingText = diasDeAlquiler\n ? `Por ${bookingLength} ${diasDeAlquiler}`\n : t('forDaysOfRent', { totalDays: bookingLength });\n\n const openRateText = configurations.openRate ? ` ${t('from').toLowerCase()}` : '';\n\n return bookingText + openRateText;\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledMobileDetailsModern;\n }\n return StyledMobileDetails;\n }\n\n getDailyFinalPrice = booking => {\n if (!booking) return null;\n return getPriceWithCommission(booking.price) / booking.totalDays;\n };\n\n getPriceItemsContent = () => {\n const {\n searchCars: {\n checkout: { booking },\n },\n settings: { configurations, paymentConfiguration },\n t,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n } = this.props;\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const getDescription = item => {\n if (item.isBookingPrice && configurations.openRate) {\n return (\n <>\n {t('openRatePriceItem', { days: item.quantity })}\n (\n <NumberDisplay\n value={getPriceWithCommission(\n applyExchangeRate\n ? getPriceWithExchangeRate(\n item.unitPrice,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n )\n : item.unitPrice,\n )}\n />{' '}\n {t('xDay')})\n </>\n );\n }\n return item.description;\n };\n\n if (paymentConfiguration && paymentConfiguration.commissionPercentage > 0) {\n const bookingPriceItems = booking.priceItems.filter(i => i.isBookingPrice);\n const extraPriceItems = booking.priceItems.filter(i => !i.isBookingPrice);\n\n const bookingPriceItemsAmount = getPriceWithCommission(\n sumBy(bookingPriceItems, 'price'),\n paymentConfiguration,\n );\n\n return (\n <>\n <PriceComponent\n name={`${t('alquilerPor')} ${booking.totalDaysString}`}\n price={\n applyExchangeRate\n ? getPriceWithExchangeRate(\n bookingPriceItemsAmount,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n )\n : bookingPriceItemsAmount\n }\n />\n {extraPriceItems.map((item, i) => {\n return (\n <PriceComponent\n key={i}\n name={getDescription(item)}\n price={getPriceWithCommission(\n applyExchangeRate\n ? getPriceWithExchangeRate(\n item.price,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n )\n : item.price,\n paymentConfiguration,\n )}\n />\n );\n })}\n </>\n );\n }\n\n return booking.priceItems.map((item, i) => {\n return (\n <PriceComponent\n key={i}\n name={getDescription(item)}\n price={\n applyExchangeRate\n ? getPriceWithExchangeRate(item.price, currentCurrency, defaultCurrency, webCurrency)\n : item.price\n }\n />\n );\n });\n };\n\n render() {\n const {\n searchCars: {\n checkout: { booking, isLoading },\n params: { commercialAgreementCode },\n },\n t,\n bgColor,\n settings: { featureFlags, paymentConfiguration },\n color,\n weight,\n size,\n popUpErrorShow,\n text,\n disabled,\n openModal,\n closeModal,\n modalState,\n settings: { configurations },\n currentCurrency,\n defaultCurrency,\n webCurrency,\n chargedMsg,\n chargedMsg2,\n } = this.props;\n\n if (isLoading) {\n return <NoBookingDivStyled />;\n }\n\n if (booking == null) {\n return null;\n }\n\n const StyledMobileDetails = this.getTemplateStyledComponent();\n\n const dailyPrice = featureFlags.showDailyFinalPrice\n ? this.getDailyFinalPrice(booking)\n : getPriceWithCommission(booking.averageDayPrice, paymentConfiguration);\n\n const totalPrice = getPriceWithCommission(booking.price, paymentConfiguration);\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const showExchangeMsg = applyExchangeRate;\n\n return (\n <StyledMobileDetails\n className=\"col-xs-12\"\n bgColor={bgColor}\n color={color}\n weight={weight}\n size={size}\n >\n <div className=\"container-fluid p-0\">\n <div className=\"row\">\n <div className=\"col-3 more-info text-right\">\n <button className=\"button\" onClick={openModal}>\n <i className=\"fa fa-info-circle fa-lg\"></i>\n </button>\n <Popup open={modalState} modal closeOnDocumentClick onClose={closeModal}>\n <div className=\"modal\">\n <div className=\"header\">\n <Title\n type=\"h4\"\n className=\"mb-0\"\n text={t('paymentDetail')}\n weight=\"700\"\n fontSize={20}\n italic={false}\n noMedia\n />\n <a className=\"close\" onClick={closeModal}>\n <i className=\"fa fa-times\" aria-hidden=\"true\"></i>\n </a>\n </div>\n <div className=\"content\">\n <div className=\"payment-details\">\n <ul className=\"list-unstyled\">\n {this.getPriceItemsContent()}\n\n {commercialAgreementCode && (\n <li>\n <i className=\"fas fa-plus\" />{' '}\n <span className=\"item-name\">{t('commercialAgreement')} </span>{' '}\n <span className=\"item-price\">{commercialAgreementCode}</span>\n </li>\n )}\n </ul>\n </div>\n {featureFlags.showFranchiseDetails && (\n <>\n <hr />\n <div className=\"payment-details\">\n <ul className=\"list-unstyled\">\n {featureFlags.showFranchiseDamages && (\n <li>\n <i className=\"fas fa-plus\" />{' '}\n <span className=\"item-name\">\n {t('franchises.franchiseDamages')}{' '}\n </span>{' '}\n <span className=\"item-price\">\n <NumberDisplay value={booking.franchiseDamage || 0} />\n </span>\n </li>\n )}\n {featureFlags.showFranchiseRollover && (\n <li>\n <i className=\"fas fa-plus\" />{' '}\n <span className=\"item-name\">\n {t('franchises.franchiseRollover')}{' '}\n </span>{' '}\n <span className=\"item-price\">\n <NumberDisplay value={booking.franchiseRollover || 0} />\n </span>\n </li>\n )}\n {featureFlags.showFranchiseTheft && (\n <li>\n <i className=\"fas fa-plus\" />{' '}\n <span className=\"item-name\">{t('franchises.franchiseTheft')} </span>{' '}\n <span className=\"item-price\">\n <NumberDisplay value={booking.franchiseTheft || 0} />\n </span>\n </li>\n )}\n </ul>\n </div>\n </>\n )}\n {showExchangeMsg && (\n <ExchangeMessage\n defaultCurrency={defaultCurrency}\n currentCurrency={currentCurrency}\n chargedMsg={chargedMsg}\n chargedMsg2={chargedMsg2}\n />\n )}\n <div className=\"payment mt-3 mb-3\">\n <div className=\"row\">\n <div className=\"col-7\">\n <Title type=\"h3\" className=\"total-name mb-0\" text={t('totalToPay')} />\n <p className=\"days\">\n {t('forDaysOfRent', {\n totalDays: booking.totalDays,\n })}{' '}\n {configurations.openRate && t('from').toLowerCase()}\n </p>\n </div>\n <div className=\"col-5 text-right\">\n <p className=\"total-price mb-0\">\n <NumberDisplay\n value={\n applyExchangeRate\n ? getPriceWithExchangeRate(\n totalPrice,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n )\n : totalPrice\n }\n />\n </p>\n <p className=\"diario\">\n {t('dailyPrice')}{' '}\n <span>\n <NumberDisplay\n value={\n applyExchangeRate\n ? getPriceWithExchangeRate(\n dailyPrice,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n )\n : dailyPrice\n }\n />\n </span>\n </p>\n </div>\n </div>\n </div>\n <div>\n <Btn\n form=\"bookingUserDataForm\"\n type=\"submit\"\n text={text}\n disabled={disabled}\n className=\"user-data-form_btn mt-0 w-100\"\n />\n\n {popUpErrorShow && (\n <div className=\"complete-info text-center mt-2 mb-2\">\n <a onClick={closeModal}>\n <i className=\"fas fa-exclamation-triangle mr-1\"></i>{' '}\n {t('completeCheckoutInfo')}\n </a>\n </div>\n )}\n </div>\n </div>\n </div>\n </Popup>\n </div>\n\n <div className=\"col-5 text-right total-block\">\n <p className=\"days\">{this.showBookingLenght(booking)}</p>\n <p className=\"total-price mb-3\">\n <NumberDisplay\n value={\n applyExchangeRate\n ? getPriceWithExchangeRate(\n totalPrice,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n )\n : totalPrice\n }\n />\n </p>\n </div>\n <div className=\"col-4 payment-button\">\n <Btn\n form=\"bookingUserDataForm\"\n type=\"submit\"\n text={text}\n disabled={disabled}\n className=\"mt-0\"\n />\n </div>\n </div>\n {showExchangeMsg && (\n <Paragraph className=\"col-12 text-left total-block\" color={'red'}>\n <strong>{`${tt(chargedMsg, t) || t('chargedMsg')} ${currentCurrency?.isoCode} ${tt(\n chargedMsg2,\n t,\n ) || t('chargedMsg2')} ${currentCurrency?.exchangeRate}`}</strong>\n </Paragraph>\n )}\n </div>\n </StyledMobileDetails>\n );\n }\n}\n\nconst mapStateToProps = ({ global }) => ({\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n});\n\nCheckoutMobileDetails.propTypes = props;\nCheckoutMobileDetails.defaultProps = defaultProps;\n\nconst CheckoutMobileDetailsComp = withTranslation()(withRouter(CheckoutMobileDetails));\n\nexport default connect(mapStateToProps)(CheckoutMobileDetailsComp);\n","import { connect } from 'react-redux';\nimport CheckoutMobileDetails from './CheckoutMobileDetails';\n\nconst mapStateToProps = ({ global, searchCars, siteConfiguration }) => ({\n listAdditionals: global.listAdditionals,\n settings: siteConfiguration.settings,\n searchCars,\n});\n\nexport default connect(mapStateToProps)(CheckoutMobileDetails);\n","import PropTypes from 'prop-types';\n\nconst placeShape = PropTypes.shape({\n address: PropTypes.string,\n category: PropTypes.string,\n id: PropTypes.number,\n name: PropTypes.string,\n price: PropTypes.number,\n rentlyEndpointName: PropTypes.string,\n});\n\nexport const props = {\n params: PropTypes.shape({}),\n places: PropTypes.arrayOf(placeShape),\n setSearchCarParams: PropTypes.func.isRequired,\n fetchBookeableCars: PropTypes.func.isRequired,\n prefixForNumeric: PropTypes.string,\n};\n\nexport const defaultProps = {\n params: {},\n};\n","import style from 'styled-components';\n\nexport const StyledCheckoutFilter = style.section`\n min-height: 600px;\n z-index:2;\n display: none;\n box-shadow: 0 0 20px #00000017;\n margin-bottom: 20px;\n\n &.hidden{\n z-index: 0;\n }\n\n .overlay{\n width: 100%;\n height: 100vh;\n background: #00000042;\n position: absolute;\n z-index: -1;\n }\n\n @media only screen (max-width: ${props => props.theme.screens.lg}) {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n min-height: 0;\n margin-left: -2%;\n margin-right: -2%;\n width: 100vw;\n padding: 0;\n display:block !important;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.lg})\n and (min-width: ${props => props.theme.screens.md}){\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n min-height: 0;\n flex: 0 0 104%;\n max-width: initial;\n width: 100vw;\n padding: 0;\n margin-left: -2%;\n margin-right: -2%;\n display: block !important;\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.lg})\n and (max-width: ${props => props.theme.screens.xxl}){\n max-width: 30%;\n margin-right: 0;\n flex: 30%;\n }\n\n .searchFilter{\n box-shadow: 0 0 20px #00000026;\n\n section{\n background: transparent;\n }\n .card{\n border: none;\n margin-bottom: 0;\n background: transparent;\n }\n\n .card-header{\n border-bottom: 1px solid #f2f2f2;\n background: #fff;\n .fa-info-circle{\n display:none;\n }\n .fa-calendar-alt{\n color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n .divider{\n color: #c2c2c2;\n }\n }\n .collapse{\n border-bottom: 1px solid #f9f7f7;\n }\n\n .card-body{\n padding: 0;\n margin: 0;\n border: none;\n background: transparent;\n\n form{\n box-shadow: none;\n margin: 0 !important;\n padding: 1.25rem 1.25rem 2rem !important;\n .col-md-12{\n margin-bottom: 0;\n }\n }\n }\n }\n\n .car-block{\n display: flex;\n justify-content: space-between;\n padding: 10px 19px;\n background: #fff;\n z-index: 2;\n\n .car-image{\n flex: 0 0 80px;\n height: fit-content;\n border: 1px solid #eeeeee;\n }\n\n .car-details{\n display:flex;\n min-width: 90%;\n\n p{\n padding: 3px 20px 0 12px;\n font-size: 13px;\n font-weight: bold;\n line-height: 13px;\n margin-bottom: 0;\n }\n span{\n font-weight: normal;\n font-size: 12px;\n margin-top: 3px;\n display: block;\n }\n }\n .othercar{\n height: fit-content;\n margin: auto;\n\n i {\n color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n }\n\n }\n\n`;\n","import style from 'styled-components';\n\nexport const StyledCheckoutFilterModern = style.section`\n min-height: 600px;\n z-index:2;\n display: none;\n box-shadow: 0 0 20px #00000017;\n margin-bottom: 20px;\n\n &.hidden{\n z-index: 0;\n }\n\n .overlay{\n width: 100%;\n height: 100vh;\n background: #00000042;\n position: absolute;\n z-index: -1;\n }\n \n .details-item {\n text-align: center;\n margin-right: 10px;\n display: -webkit-inline-box;\n display: -webkit-inline-flex;\n display: -ms-inline-flexbox;\n display: inline-flex;\n width: auto;\n}\n\n @media only screen (max-width: ${props => props.theme.screens.lg}) {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n min-height: 0;\n margin-left: -2%;\n margin-right: -2%;\n width: 100vw;\n padding: 0;\n display:block !important;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.lg})\n and (min-width: ${props => props.theme.screens.md}){\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n min-height: 0;\n flex: 0 0 104%;\n max-width: initial;\n width: 100vw;\n padding: 0;\n margin-left: -2%;\n margin-right: -2%;\n display: block !important;\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.lg})\n and (max-width: ${props => props.theme.screens.xxl}){\n max-width: 30%;\n margin-right: 0;\n flex: 30%;\n }\n\n .searchFilter{\n box-shadow: 0 0 20px #00000026;\n\n section{\n background: transparent;\n }\n .card{\n border: none;\n margin-bottom: 0;\n background: transparent;\n }\n\n .card-header{\n border-bottom: 1px solid #f2f2f2;\n background: #fff;\n .fa-info-circle{\n display:none;\n }\n .fa-calendar-alt{\n color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n .divider{\n color: #c2c2c2;\n }\n }\n .collapse{\n border-bottom: 1px solid #f9f7f7;\n }\n\n .card-body{\n padding: 0;\n margin: 0;\n border: none;\n background: transparent;\n\n form{\n box-shadow: none;\n margin: 0 !important;\n padding: 1.25rem 1.25rem 2rem !important;\n .col-md-12{\n margin-bottom: 0;\n }\n }\n }\n }\n\n .car-block{\n display: flex;\n justify-content: space-between;\n padding: 10px 19px;\n background: #fff;\n z-index: 2;\n\n .car-image{\n flex: 0 0 80px;\n height: fit-content;\n border: 1px solid #eeeeee;\n }\n\n .car-details{\n display:flex;\n min-width: 90%;\n\n p{\n padding: 3px 20px 0 12px;\n font-size: 13px;\n font-weight: bold;\n line-height: 13px;\n margin-bottom: 0;\n }\n span{\n font-weight: normal;\n font-size: 12px;\n margin-top: 3px;\n display: block;\n }\n }\n .othercar{\n height: fit-content;\n margin: auto;\n\n i {\n color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n }\n\n }\n\n`;\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { props, defaultProps } from './CheckoutFilter.props';\nimport { StyledCheckoutFilter } from './CheckoutFilter.styled';\nimport { SearchForm, AccordionCard } from 'components/';\nimport { Accordion } from 'react-bootstrap';\nimport { withTheme } from 'styled-components';\nimport withSettingsContext from 'SettingsContext';\nimport { StyledCheckoutFilterModern } from './CheckoutFilter.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport useWindowDimensions from 'utils/windowHelper';\n\nclass CheckoutFilter extends React.Component {\n constructor(props) {\n super(props);\n this.accordion = React.createRef();\n }\n\n componentDidMount() {\n const { setSearchCarParams, params } = this.props;\n\n setSearchCarParams(params);\n }\n\n closeAccordion = () => {\n this.accordion.current.click();\n };\n\n shapeCarName = name => {\n if (name.length > 50) {\n return name.substring(0, 50) + '...';\n } else {\n return name;\n }\n };\n\n getModelName(model) {\n const {\n t,\n settings: { featureFlags },\n } = this.props;\n const availabilityGroup =\n featureFlags.availabilityGroup === undefined ? 'model' : featureFlags.availabilityGroup;\n const showOrSimilar =\n featureFlags.ShowOrSimilar === undefined ? true : featureFlags.ShowOrSimilar;\n const legend = availabilityGroup === 'category' && showOrSimilar ? t('orSimilar') : '';\n\n return `${model.brand.name} ${model.name} ${legend}`;\n }\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledCheckoutFilterModern;\n }\n return StyledCheckoutFilter;\n }\n\n render() {\n const {\n searchCars: {\n params: { dateFrom, dateTo, categories },\n checkout: { booking },\n },\n t,\n onClick,\n className,\n width,\n } = this.props;\n\n const StyledComponent = this.getTemplateStyledComponent();\n\n const mobileSearchForm = (\n <>\n <SearchForm\n className=\"home-form w-100 mt-5\"\n categories={categories}\n onSubmit={this.closeAccordion}\n />\n <div className=\"overlay\"></div>\n </>\n );\n\n const accordionHeader = (\n <span className=\"date\">\n <i className=\"far fa-calendar-alt mr-3\"></i> {dateFrom}{' '}\n <span className=\"divider ml-2 mr-2\">|</span> {dateTo}\n </span>\n );\n const model = booking.car.model;\n\n return (\n <StyledComponent className={`${className} col-md-3`} background={this.props.background}>\n {width < 768 && (\n <Accordion className=\"searchFilter sticky\">\n <AccordionCard\n refe={this.accordion}\n title={accordionHeader}\n element={mobileSearchForm}\n key=\"search\"\n keyValue=\"search\"\n />\n </Accordion>\n )}\n <div className=\"car-block\">\n <div className=\"car-details\">\n <div className=\"car-image\">\n <img className=\"img-fluid\" src={model.imagePath} alt={model.name} />\n </div>\n <p>\n {this.shapeCarName(this.getModelName(model))}\n <br />\n <span>\n {t('categoria')} {model.category.name}\n </span>\n </p>\n </div>\n <a className=\"d-block othercar\" onClick={onClick}>\n <i className=\"fas fa-pencil-alt\" />\n </a>\n </div>\n </StyledComponent>\n );\n }\n}\n\nconst FunctionalCheckoutFilter = props => {\n const { width } = useWindowDimensions();\n return <CheckoutFilter width={width} {...props} />;\n};\n\nCheckoutFilter.propTypes = props;\nCheckoutFilter.defaultProps = defaultProps;\nexport default withSettingsContext(withTheme(withTranslation()(FunctionalCheckoutFilter)));\n","import { connect } from 'react-redux';\nimport CheckoutFilter from './CheckoutFilter';\nimport { setSearchCarParams, fetchBookeableCars } from 'actions/';\n\nconst mapStateToProps = ({ global, searchCars, siteConfiguration }) => ({\n listCategories: global.listCategories,\n places: global.listPlaces,\n params: searchCars.params,\n searchCars,\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps, { setSearchCarParams, fetchBookeableCars })(CheckoutFilter);\n","import PropTypes from 'prop-types';\n\nexport const props = {\n whenLoggedAsCompany: PropTypes.object,\n whenLoggedAsUser: PropTypes.object,\n default: PropTypes.object.isRequired,\n};\n\nexport const defaultProps = {\n default: {\n title: '',\n subtitle: '',\n message: '',\n },\n};\n","import style from 'styled-components';\n\nexport const StyledBookingSuccess = style.section`\n text-align: center;\n`;\n","import React from 'react';\nimport { props, defaultProps } from './BookingSuccess.props';\nimport { withTranslation } from 'react-i18next';\nimport { withRouter } from 'react-router-dom';\nimport { StyledBookingSuccess } from './BookingSuccess.styled';\nimport { Title, Paragraph, Icon } from 'components/';\nimport withSettingsContext from 'SettingsContext';\nimport { Col, Row } from 'react-bootstrap';\n\nconst BookingSuccess = ({ profile, whenLoggedAsCompany, whenLoggedAsUser, defaultContent }) => {\n const getTitleText = () => {\n let title = defaultContent.title;\n\n if (profile) {\n if (profile.isCompany) {\n if (whenLoggedAsCompany && whenLoggedAsCompany.title) {\n title = whenLoggedAsCompany.title;\n }\n } else {\n if (whenLoggedAsUser && whenLoggedAsUser.title) {\n title = whenLoggedAsUser.title;\n }\n }\n }\n return title;\n };\n\n const getSubtitleText = () => {\n let subtitle = defaultContent.subtitle;\n\n if (profile) {\n if (profile.isCompany) {\n if (whenLoggedAsCompany && whenLoggedAsCompany.subtitle) {\n subtitle = whenLoggedAsCompany.subtitle;\n }\n } else {\n if (whenLoggedAsUser && whenLoggedAsUser.subtitle) {\n subtitle = whenLoggedAsUser.subtitle;\n }\n }\n }\n return subtitle;\n };\n\n const getMessageText = () => {\n let message = defaultContent.message;\n\n if (profile) {\n if (profile.isCompany) {\n if (whenLoggedAsCompany && whenLoggedAsCompany.message) {\n message = whenLoggedAsCompany.message;\n }\n } else {\n if (whenLoggedAsUser && whenLoggedAsUser.message) {\n message = whenLoggedAsUser.message;\n }\n }\n }\n return message;\n };\n\n return (\n <StyledBookingSuccess className=\"mt-5 pt-5\">\n <Row>\n <Col xs={12} md={{ span: 8, offset: 2 }}>\n <Icon className=\"fas fa-check-circle display-3 mb-5 text-success\" />\n <Title type=\"h2\" text={getTitleText()} />\n <Paragraph weight={300} fontSize=\"1.25rem\" className=\"mb-5\" text={getSubtitleText()} />\n <Paragraph text={getMessageText()} />\n </Col>\n </Row>\n </StyledBookingSuccess>\n );\n};\n\nBookingSuccess.propTypes = props;\nBookingSuccess.defaultProps = defaultProps;\n\nexport default withSettingsContext(withRouter(withTranslation()(BookingSuccess)));\n","import { connect } from 'react-redux';\nimport BookingSuccess from './BookingSuccess';\n\nconst mapStateToProps = ({ siteConfiguration, user }) => ({\n settings: siteConfiguration.settings,\n profile: user.profile,\n});\n\nexport default connect(mapStateToProps)(BookingSuccess);\n","import Fetcher from 'utils/fetcher';\n\nconst api = new Fetcher();\nconst apiUrl = process.env.REACT_APP_BACKEND_API;\n\nexport const fetchInitialSettings = async (version = null, isdraft = false) => {\n if (version != null) {\n return api.get(`${apiUrl}/customization/history/${version}?isdraft=${isdraft}`, true);\n }\n\n return api.get(`${apiUrl}/customization/SiteConfiguration`);\n};\n\nexport const listCategories = async (language = '') =>\n api.get(`${apiUrl}/data/categories?language=${language}`);\n\nexport const listPlaces = async (language = '') =>\n api.get(`${apiUrl}/data/places?language=${language}`);\n\nexport const listCountries = async (language = '') =>\n api.get(`${apiUrl}/data/countries?language=${language}`);\n\nexport const listStates = async () => api.get(`${apiUrl}/data/states`);\n\nexport const listCities = async (countryIsoCode = '') =>\n api.get(`${apiUrl}/data/cities?countryIsoCode=${countryIsoCode}`);\n\nexport const listPromotions = async (language = '') =>\n api.get(`${apiUrl}/data/promotions?language=${language}`);\n\nexport const listAdditionals = async (rentlyEndpointName = '', language = '') =>\n api.get(`${apiUrl}/data/additionals?endpoint=${rentlyEndpointName}&language=${language}`);\n\nexport const listHolidays = async () => api.get(`${apiUrl}/data/holidays`);\n\nexport const listSchedules = async () => api.get(`${apiUrl}/data/attentionschedule`);\n\nexport const listLanguages = async () => api.get(`${apiUrl}/data/languages`);\n\nexport const cancelBooking = async (branchOffice, bookingId, lastName) =>\n api.remove(\n `${apiUrl}/booking?branchOffice=${branchOffice}&bookingId=${bookingId}&lastname=${lastName}`,\n );\n\nexport const fetchCars = async (\n from,\n to,\n pickUpId,\n pickUpEndpoint,\n dropOffId,\n dropOffEndpoint,\n language = '',\n ilimitedKm,\n showFinalPrice = false,\n onlyFullAvailability,\n promotions,\n globalId,\n driverAge,\n commercialAgreementCode,\n) => {\n let promotionsQS = '';\n\n if (promotions && typeof promotions === 'object' && promotions.length > 0) {\n for (let i = 0; i < promotions.length; i++) {\n const promo = promotions[i];\n promotionsQS += `promotions=${promo}&`;\n }\n } else {\n promotionsQS += `promotions=${promotions}`;\n }\n\n const customerId = globalId ? `&customer.globalid=${globalId}` : '';\n const customerAge = driverAge ? `&driverAge=${driverAge}` : '';\n const caCode = commercialAgreementCode\n ? `&commercialAgreementCode=${commercialAgreementCode}`\n : '';\n const agencyGuid = globalId ? `&agencyGuid=${globalId}` : '';\n\n return api.get(\n `${apiUrl}/booking/search?From=${from}&to=${to}&fromPlace=${pickUpId}&PickupEndpoint=${pickUpEndpoint}&toPlace=${dropOffId}&returnendpoint=${dropOffEndpoint}&language=${language}&IlimitedKm=${ilimitedKm}&showFinalPrice=${showFinalPrice}&onlyFullAvailability=${onlyFullAvailability}&${promotionsQS}${customerId}${customerAge}${caCode}${agencyGuid}`,\n );\n};\n\nexport const fetchPrice = async (\n language,\n additionals,\n from,\n to,\n pickUpId,\n pickUpEndpoint,\n dropOffId,\n modelId,\n ilimitedKm,\n promotion,\n globalId,\n driverAge,\n commercialAgreementCode,\n) => {\n let serializedAdditionals = '';\n for (let i = 0; i < additionals.length; i++) {\n const additional = additionals[i];\n serializedAdditionals += `additionals[${i}].Additional.Id=${additional.id}&additionals[${i}].Quantity=${additional.number}&`;\n }\n\n const customerId = globalId ? `&customer.globalid=${globalId}` : '';\n const customerAge = driverAge ? `&driverAge=${driverAge}` : '';\n const caCode = commercialAgreementCode\n ? `&commercialAgreementCode=${commercialAgreementCode}`\n : '';\n const agencyGuid = globalId ? `&agencyGuid=${globalId}` : '';\n\n return await api.get(\n `${apiUrl}/booking/price?From=${from}&to=${to}&fromPlace=${pickUpId}&RentlyEndpointName=${pickUpEndpoint}&toPlace=${dropOffId}&modelid=${modelId}&${serializedAdditionals}&IlimitedKm=${ilimitedKm}&promotion=${promotion}&language=${language}${customerId}${customerAge}${caCode}${agencyGuid}`,\n );\n};\n\nexport const getBooking = async (rentlyEndpointName, bookingId) =>\n api.get(`${apiUrl}/booking/book?rentlyEndpointName=${rentlyEndpointName}&bookingId=${bookingId}`);\n\nexport const getBookingWithPromotion = async (rentlyEndpointName, bookingId, promotionId) =>\n api.get(\n `${apiUrl}/booking/book?rentlyEndpointName=${rentlyEndpointName}&bookingId=${bookingId}&promotionId=${promotionId}`,\n );\n\nexport const createBooking = async booking => api.post(`${apiUrl}/booking/book`, booking);\n\nexport const payBooking = async payInfo => {\n const roundPayInfo = { ...payInfo };\n roundPayInfo.price = parseFloat((Math.round(roundPayInfo.price * 100) / 100).toFixed(2));\n return api.post(`${apiUrl}/booking/pay`, roundPayInfo);\n};\n\nexport const confirmBooking = async confirmInfo =>\n api.post(`${apiUrl}/booking/confirm`, confirmInfo);\n\nexport const payInfraction = async payInfo => api.post(`${apiUrl}/infraction/pay`, payInfo);\n\nexport const cancelReservation = async reservation =>\n api.post(`${apiUrl}/booking/cancel`, reservation);\n\nexport const sendContact = async contact => api.post(`${apiUrl}/contacts/contact`, contact);\n\nexport const sendCompanyContact = async contact =>\n api.post(`${apiUrl}/contacts/company-contact`, contact);\n\nexport const listCurrencies = async () => api.get(`${apiUrl}/data/currencies`);\n\nexport const listLanguagesInfo = async () => api.get(`${apiUrl}/data/languages-info`);\n\nexport const getBookingsConfiguration = async () =>\n api.get(`${apiUrl}/data/bookings-configuration`);\n\nexport const getTransBankUri = async (bookingId, price) =>\n api.get(`${apiUrl}/booking/gettransbankuri?bookingId=${bookingId}&price=${price}`);\n\nexport const getBookingAdditionals = async (params, booking, language, globalId) => {\n let requestObject = {\n rentlyEndpointName: params.pickUpEndpoint,\n from: booking.fromDate,\n to: booking.toDate,\n fromPlace: params.pickUpId,\n toPlace: params.dropOffId,\n ilimitedKm: params.ilimitedKm,\n modelId: booking.car.model.id,\n categoryId: booking.category.id,\n promotion: booking.promotion !== undefined ? booking.promotion : '',\n language: language,\n };\n\n if (globalId) {\n requestObject = { ...requestObject, 'customer.globalid': globalId };\n }\n\n const url =\n `${apiUrl}/booking/additionals-price?` + new URLSearchParams(requestObject).toString();\n return api.get(url);\n};\n\nexport const getValidPromotionCode = async (rentlyEndpointName, promotionCode) =>\n api.get(\n `${apiUrl}/booking/validatepromotion?rentlyEndpointName=${rentlyEndpointName}&promotionCode=${promotionCode}`,\n );\n\nexport const getInfraction = async (customerId, infractionId) =>\n api.get(`${apiUrl}/infraction/infraction?customerId=${customerId}&infractionId=${infractionId}`);\n\nexport const listDocumentTypes = async (language = '') =>\n api.get(`${apiUrl}/data/document-types?language=${language}`);\n\nexport const listTaxPayerTypes = async (language = '') =>\n api.get(`${apiUrl}/data/taxPayerTypes?language=${language}`);\n\nexport const getGatewayInformation = async (branchOfficeId, gatewayId) =>\n api.get(\n `${apiUrl}/booking/getgatewayinformation?branchOfficeId=${branchOfficeId}&gatewayId=${gatewayId}`,\n );\n\nexport const listWebFiles = async () => api.get(`${apiUrl}/data/listWebFiles`);\n\nexport const uploadWebFiles = async formData => {\n return api.post(`${apiUrl}/data/addWebFile`, formData);\n};\n\nexport const getBookingAttachments = async (bookingId, category) => {\n return await api.get(`${apiUrl}/booking/attachments?bookingId=${bookingId}&category=${category}`);\n};\n\nexport const attachBookingFiles = async (bookingId, files) => {\n return await api.post(`${apiUrl}/booking/attachments?bookingId=${bookingId}`, files);\n};\n\nexport const getGeneralSettings = async () => api.get(`${apiUrl}/data/general-settings`);\n\nexport const getCecabankTransUri = async (branchOfficeId, bookingId, price, currencyCode) =>\n api.get(\n `${apiUrl}/booking/getcecabanktransuri?branchOfficeId=${branchOfficeId}&bookingId=${bookingId}&price=${price}¤cyCode=${currencyCode}`,\n );\n\nexport const stripeCreatePaymentIntent = async (\n branchOfficeId,\n amount,\n currencyCode,\n bookingId,\n infractionId,\n customerId,\n customerName,\n customerEmail,\n) => {\n return await api.post(\n `${apiUrl}/booking/stripeCreatePaymentIntent?branchOfficeId=${branchOfficeId}&amount=${amount}¤cyCode=${currencyCode}&bookingId=${bookingId}&infractionId=${infractionId}&customerId=${customerId}&customerName=${customerName}&customerEmail=${customerEmail}`,\n );\n};\n\nexport const getAxleIgnitionUrlToken = async () =>\n api.get(`${apiUrl}/data/axle-ignition-url-token`);\n\nexport const setAxleAuthCode = async (guid, authCode) => {\n return await api.post(`${apiUrl}/data/axle-set-auth-code?guid=${guid}&authCode=${authCode}`);\n};\n\nexport const getRedsysInitializeRedirect = async (branchOfficeId, amount, currencyCode, order) =>\n api.get(\n `${apiUrl}/booking/redsys-initialize-redirect?branchOfficeId=${branchOfficeId}&amount=${amount}¤cyCode=${currencyCode}&order=${order}`,\n );\n\nexport const getRedsysValidateRedirectSignature = async (\n branchOfficeId,\n order,\n dsMerchantParameters,\n dsSignature,\n) => {\n return api.post(\n `${apiUrl}/booking/redsys-validate-redirect-signature?branchOfficeId=${branchOfficeId}&order=${order}&dsMerchantParameters=${dsMerchantParameters}&dsSignature=${dsSignature}`,\n );\n};\n","import React, { useContext } from 'react';\n\nexport const SettingsContext = React.createContext({});\n\nexport default function withSettingsContext(Component) {\n return class extends React.Component {\n static contextType = SettingsContext;\n\n render() {\n return <Component {...this.props} settings={this.context} />;\n }\n };\n}\n\nexport function useSettingsContext() {\n return useContext(SettingsContext);\n}\n","import PropTypes from 'prop-types';\n\nexport const props = {\n type: PropTypes.string,\n text: PropTypes.string,\n bold: PropTypes.bool,\n italic: PropTypes.bool,\n className: PropTypes.string,\n color: PropTypes.string,\n weight: PropTypes.string,\n fontSize: PropTypes.any,\n noMedia: PropTypes.bool,\n lineHeight: PropTypes.string,\n};\n","const ONE_WAY_DROPOFF_TYPE = 10;\nconst ADDITIONALS_TYPE = 1;\nconst INSURANCES_TYPE = 16;\nconst DELIVERY_PLACE_TYPE = 3;\nconst RETURN_PLACE_TYPE = 11;\nconst TAXES_TYPE = 15;\n\nconst EVENT_NAME = 'rently.ec';\n\nexport function gtag_report_conversion(path, eventId) {\n var callback = function() {\n if (typeof path != 'undefined') {\n // window.location = path;\n window.open(path, '_blank');\n }\n };\n\n gtag('event', 'conversion', { send_to: eventId, event_callback: callback });\n return false;\n}\n\nexport function is_gtag_enabled(gtmConfiguration) {\n if (!gtmConfiguration) return false;\n return gtmConfiguration.id && gtmConfiguration.enableGtmEcommerce;\n}\n\nexport function gtag_additional_impresions(groupedAdditionals, additionalTypes, settings) {\n const { currencyCode } = readSettings(settings);\n\n const additionals = groupedAdditionals[additionalTypes[0]];\n const insurances = groupedAdditionals[additionalTypes[1]];\n const others = groupedAdditionals[additionalTypes[2]];\n\n let items = [];\n\n if (additionals)\n additionals.forEach((additional, index) =>\n items.push(parseAdditionalItem('Additionals', additional, index)),\n );\n\n if (insurances)\n insurances.forEach((additional, index) =>\n items.push(parseAdditionalItem('Insurances', additional, index)),\n );\n\n if (others)\n others.forEach((additional, index) =>\n items.push(parseAdditionalItem('Others', additional, index)),\n );\n\n gtag_product_impressions(items, currencyCode);\n}\n\nexport function gtag_car_impressions(cars, settings) {\n let items = [];\n const { availabilityGroup, currencyCode } = readSettings(settings);\n cars.forEach((item, index) => items.push(parseCarItem(item, index, availabilityGroup)));\n\n gtag_product_impressions(items, currencyCode);\n}\n\n// Checkout events\n// https://developers.google.com/analytics/devguides/collection/ua/gtm/enhanced-ecommerce#checkoutstep\nexport function gtag_checkout_process(step, booking, settings) {\n if (!booking || !booking.priceItems) return;\n\n let items = [];\n const { availabilityGroup } = readSettings(settings);\n\n booking.priceItems.forEach(item =>\n items.push(parseItemPriceToProduct(item, booking, availabilityGroup)),\n );\n const layer = window.dataLayer || [];\n\n layer.push({ ecommerce: null });\n layer.push({\n event: EVENT_NAME,\n eventAction: 'Checkout',\n eventCategory: 'Ecommerce',\n ecommerce: {\n checkout: {\n actionField: { step: step.number, option: step.option },\n products: items.filter(item => item),\n },\n },\n });\n}\n\n// Checkout option (Pay Method)\n// https://developers.google.com/analytics/devguides/collection/ua/gtm/enhanced-ecommerce#checkout_option\nexport function gtag_checkout_option(step) {\n const layer = window.dataLayer || [];\n layer.push({ ecommerce: null });\n layer.push({\n event: EVENT_NAME,\n eventAction: 'checkoutOption',\n eventCategory: 'Ecommerce',\n ecommerce: {\n checkout_option: {\n actionField: { step: step.number, option: step.option },\n },\n },\n });\n}\n\n// Purchase event\n// https://developers.google.com/analytics/devguides/collection/ua/gtm/enhanced-ecommerce#purchases\nexport function gtag_purchase(booking, settings) {\n if (!booking || !booking.priceItems) return;\n\n let items = [];\n const { availabilityGroup } = readSettings(settings);\n\n booking.priceItems.forEach(item =>\n items.push(parseItemPriceToProduct(item, booking, availabilityGroup)),\n );\n const layer = window.dataLayer || [];\n\n layer.push({ ecommerce: null });\n layer.push({\n event: EVENT_NAME,\n eventAction: 'purchase',\n eventCategory: 'Ecommerce',\n ecommerce: {\n purchase: {\n actionField: {\n id: booking.id,\n customerId: booking?.customer?.id,\n customerGlobalId: booking?.customer?.globalId || '',\n affiliation: 'Online Store',\n car: booking.car?.model?.name || booking.car?.model?.category?.name || '',\n pickupDate: booking.fromDate,\n dropoffDate: booking.toDate,\n revenue: booking.price,\n coupon: booking.promotionCode ? booking.promotionCode : '',\n tax: getBookingTaxAmount(booking),\n currency: booking.currency,\n shipping: 0,\n },\n products: items.filter(item => item),\n },\n },\n });\n}\n\nexport function gtag_manage_shopping_cart(additional, actionObject, booking) {\n const eventName = actionObject.type === 'add' ? 'addToCart' : 'removeFromCart';\n\n const layer = window.dataLayer || [];\n layer.push({ ecommerce: null });\n\n const object = {\n event: EVENT_NAME,\n eventAction: eventName,\n eventCategory: 'Ecommerce',\n ecommerce: {},\n };\n\n object['ecommerce'][actionObject.type] = {\n products: [\n {\n name: additional.name,\n id: additional.id,\n price: additional.price,\n category: booking.deliveryPlace.branchOfficeName,\n variant: additional.type,\n quantity: actionObject.amount,\n },\n ],\n };\n\n layer.push(object);\n}\n\nfunction parseItemPriceToProduct(priceItem, booking, availabilityGroup) {\n let item = null;\n\n if (priceItem.isBookingPrice) item = parseNightPriceItem(priceItem, booking, availabilityGroup);\n\n if (priceItem.type === ONE_WAY_DROPOFF_TYPE)\n item = parseOneWayDropOffPriceItem(priceItem, booking);\n\n if (priceItem.type === ADDITIONALS_TYPE || priceItem.type === INSURANCES_TYPE)\n item = parseAdditionalPriceItem(priceItem, booking);\n\n if (priceItem.type === DELIVERY_PLACE_TYPE)\n item = parseDeliveryPriceItem(priceItem, booking, 'delivery');\n\n if (priceItem.type === RETURN_PLACE_TYPE)\n item = parseDeliveryPriceItem(priceItem, booking, 'return');\n\n return item;\n}\n\nfunction parseNightPriceItem(item, booking, availabilityGroup) {\n return {\n name:\n availabilityGroup === 'category' || booking.car == null\n ? booking.category.name\n : booking.car.model.sipp || booking.car.model.name,\n id:\n availabilityGroup === 'category' || booking.car == null\n ? booking.category.id\n : booking.car.model.id,\n price: item.price,\n category: booking.deliveryPlace.branchOfficeName,\n quantity: 1,\n variant: 'Rents',\n };\n}\n\nfunction parseOneWayDropOffPriceItem(item, booking) {\n return {\n name: 'One Way Dropoff',\n id: 'oneWayDropOff',\n price: item.price,\n category: booking.deliveryPlace.branchOfficeName,\n quantity: 1,\n };\n}\n\nfunction parseAdditionalPriceItem(item, booking) {\n const additional = booking.additionals.find(obj => obj.additional.id === item.typeId);\n if (!additional) return null;\n\n return {\n name: additional.additional.name,\n id: item.typeId,\n price: item.price / additional.quantity,\n category: booking.deliveryPlace.branchOfficeName,\n quantity: additional.quantity,\n variant: item.type === 1 ? 'Additionals' : 'Insurances',\n };\n}\n\nfunction parseDeliveryPriceItem(item, booking, type) {\n return {\n name: type === 'delivery' ? booking.deliveryPlace.name : booking.returnPlace.name,\n id:\n type === 'delivery'\n ? `Place - ${booking.deliveryPlace.name}`\n : `Place - ${booking.returnPlace.name}`,\n price: item.price,\n category: booking.deliveryPlace.branchOfficeName,\n brand: booking.deliveryPlace.category,\n quantity: 1,\n variant: 'Deliveries',\n };\n}\n\nfunction getBookingTaxAmount(booking) {\n const taxItems = booking.priceItems.filter(pi => pi.type === TAXES_TYPE);\n if (!taxItems) return 0;\n\n return taxItems.map(i => i.price).reduce((prev, curr) => prev + curr, 0);\n}\n\n// Measure products impressions\n// https://developers.google.com/analytics/devguides/collection/ua/gtm/enhanced-ecommerce#product-impressions\nfunction gtag_product_impressions(items, currencyCode) {\n if (!items) return;\n const layer = window.dataLayer || [];\n\n layer.push({ event: EVENT_NAME, ecommerce: null });\n layer.push({\n event: EVENT_NAME,\n eventAction: 'Product Impression',\n eventCategory: 'Ecommerce',\n ecommerce: {\n currencyCode: currencyCode.toUpperCase(),\n impressions: items,\n },\n });\n}\n\n// Measure product clicks\n// https://developers.google.com/analytics/devguides/collection/ua/gtm/enhanced-ecommerce#product-clicks\nexport function gtag_product_click(item, settings) {\n const { availabilityGroup } = readSettings(settings);\n\n const items = [parseCarItem(item, 0, availabilityGroup)];\n\n const layer = window.dataLayer || [];\n layer.push({ ecommerce: null });\n layer.push({\n event: EVENT_NAME,\n eventAction: 'productClick',\n eventCategory: 'Ecommerce',\n ecommerce: {\n click: {\n actionField: { list: 'PayBtn' },\n products: items,\n },\n },\n });\n}\n\nfunction readSettings(settings) {\n const { featureFlags, currency } = settings;\n const availabilityGroup = featureFlags.availabilityGroup\n ? featureFlags.availabilityGroup\n : 'model';\n const currencyCode = currency && currency.code ? currency.code : '';\n\n return { availabilityGroup, currencyCode };\n}\n\nfunction parseCarItem(item, order, availabilityGroup) {\n return {\n name:\n availabilityGroup === 'category'\n ? item.category.name\n : item.car.model.sipp || item.car.model.name,\n id: availabilityGroup === 'category' ? item.category.id : item.car.model.id,\n price: item.price,\n list: 'Rents',\n category: item.deliveryPlace.branchOfficeName,\n position: order,\n };\n}\n\nfunction parseAdditionalItem(listType, item, order) {\n return {\n name: item.name,\n id: item.id,\n price: item.price,\n list: listType,\n position: order,\n variant: 'EXTRA',\n //category: TODO agregar el nombre del delivery branchoffice\n };\n}\n","module.exports = __webpack_public_path__ + \"static/media/user.b2e85f29.svg\";","import {\n LOG_IN,\n LOG_OUT,\n GET_USER_BOOKINGS,\n GET_USER_INFRACTIONS,\n UPDATE_PROFILE,\n RESET_PASSWORD,\n GET_USER_FILES,\n UPLOAD_USER_FILES,\n} from 'utils/types';\nimport {\n logIn,\n register,\n getUserProfile,\n getUserBookings,\n getUserInfractions,\n logOut,\n updateUserProfile,\n forgotPassword,\n resetPassword,\n loginWithMicrosoft,\n getMicrosoftAuthorizationUrl,\n getUserFiles,\n attachUserFile,\n} from 'services/userService';\n\nimport { registerCompany } from 'services/userCompanyService';\n\nexport const handleRegister = ({ name, lastname, email, password }) => async dispatch => {\n try {\n await register(name, lastname, email, password);\n const { data } = await getUserProfile();\n\n return Promise.resolve(\n dispatch({\n type: LOG_IN,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const handleLogIn = (email, password, remember) => async dispatch => {\n try {\n if (email && password) await logIn(email, password, remember);\n const { data } = await getUserProfile();\n\n Promise.resolve(\n dispatch({\n type: LOG_IN,\n payload: data,\n }),\n );\n return { error: '' };\n } catch (error) {\n return { error };\n }\n};\n\nexport const handleLoginWithMicrosoft = (code, state) => async dispatch => {\n try {\n await loginWithMicrosoft(code, state);\n const { data } = await getUserProfile();\n\n dispatch({\n type: LOG_IN,\n payload: data,\n });\n } catch (error) {\n throw error;\n }\n};\n\nexport const handleGetMicrosoftLoginUrl = async () => {\n try {\n const { data } = await getMicrosoftAuthorizationUrl();\n return data;\n } catch (error) {\n throw error;\n }\n};\n\nexport const handleGetProfile = () => async dispatch => {\n try {\n const { data } = await getUserProfile();\n\n return Promise.resolve(\n dispatch({\n type: UPDATE_PROFILE,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const handleLogOut = () => async dispatch => {\n try {\n await logOut();\n return Promise.resolve(\n dispatch({\n type: LOG_OUT,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const handleGetUserBookings = (offset, limit) => async dispatch => {\n try {\n const { data } = await getUserBookings(offset, limit);\n\n return Promise.resolve(\n dispatch({\n type: GET_USER_BOOKINGS,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const handleGetUserFiles = (offset, limit) => async dispatch => {\n try {\n const { data } = await getUserFiles(offset, limit);\n\n return Promise.resolve(\n dispatch({\n type: GET_USER_FILES,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const handleUploadUserFile = files => async dispatch => {\n try {\n let parsedFiles = files\n ? files.map(a => ({\n name: a.name,\n content: a.file,\n type: a.type,\n }))\n : null;\n\n const { data } = await attachUserFile(parsedFiles);\n\n return Promise.resolve(\n dispatch({\n type: UPLOAD_USER_FILES,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const handleGetUserInfractions = (offset, limit) => async dispatch => {\n try {\n const { data } = await getUserInfractions(offset, limit);\n\n return Promise.resolve(\n dispatch({\n type: GET_USER_INFRACTIONS,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const handleUpdateUserProfile = profile => async dispatch => {\n try {\n await updateUserProfile(profile);\n\n return Promise.resolve(\n dispatch({\n type: UPDATE_PROFILE,\n payload: profile,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const handleRegisterCompany = ({ globalId, password }) => async dispatch => {\n try {\n var result = await registerCompany(globalId, password);\n if (!result.success) {\n return Promise.reject(result);\n }\n const { data } = await getUserProfile();\n\n return Promise.resolve(\n dispatch({\n type: LOG_IN,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const handleForgotPassword = ({ email }) => async dispatch => {\n try {\n var result = await forgotPassword(email);\n\n return Promise.resolve(\n dispatch({\n type: RESET_PASSWORD,\n payload: result,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const handleResetPassword = ({ email, password, token }) => async dispatch => {\n try {\n var result = await resetPassword(email, password, token);\n if (!result.success) {\n return Promise.reject(result);\n }\n const { data } = await getUserProfile();\n\n return Promise.resolve(\n dispatch({\n type: LOG_IN,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n","import TranslatedComponent from './TranslatedComponent';\nexport default TranslatedComponent;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { translate } from 'utils/translationHelper';\n\nclass TranslatedComponent extends React.Component {\n static propTypes = {\n t: PropTypes.func,\n };\n\n tt(key, forceTranslate = true) {\n const { t } = this.props;\n\n return translate(key, t, forceTranslate);\n }\n}\n\nexport default TranslatedComponent;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport * as Comps from 'components';\nimport * as Sects from 'sections';\nimport * as Pages from 'pages';\nimport { TranslatedComponent } from 'components/';\nimport parse from 'html-react-parser';\n\nexport default class CompositeComponent extends TranslatedComponent {\n static propTypes = {\n sections: PropTypes.array,\n sharedComponents: PropTypes.array,\n headers: PropTypes.array,\n };\n\n findComponent(type) {\n let ComponentToRender = Pages[type];\n if (!ComponentToRender) ComponentToRender = Sects[type];\n if (!ComponentToRender) ComponentToRender = Comps[type];\n\n return ComponentToRender;\n }\n\n renderComponent(props, key) {\n if (!props) {\n const { withWrapper } = this.props;\n\n return <>{this.renderChilds(withWrapper, null)}</>;\n }\n\n let { component } = props;\n\n const { sharedComponents } = this.props;\n\n if (component === 'SharedComponents' && sharedComponents !== undefined) {\n let shared = sharedComponents.find(x => x.name === props.name);\n if (shared) {\n props = { ...shared, ...props, ...{ component: shared.component } };\n component = shared.component;\n }\n }\n\n let ComponentToRender = this.findComponent(component);\n\n if (!ComponentToRender) return <h3>Component {component} not found</h3>;\n\n return <ComponentToRender {...props} key={key} routerProps={this.props.routerProps} />;\n }\n\n renderChilds(withWrapper, childProps) {\n const { sections } = this.props;\n\n return (\n <>\n {sections &&\n sections.map((section, i) =>\n withWrapper\n ? withWrapper(section, this.renderComponent(section, i), childProps, i)\n : this.renderComponent(section, i),\n )}\n </>\n );\n }\n\n renderHeaders() {\n const options = {\n replace: function transform(node, index) {\n if (node.type === 'script') {\n if (node.children.length > 0)\n return (\n <script key={`script-${node.children[0].data.length}`}>\n {node.children[0].data}\n </script>\n );\n\n return node;\n }\n },\n };\n\n const { headers } = this.props;\n\n if (!headers) return null;\n\n return headers && headers.map((header, i) => parse(header, options));\n }\n\n render() {\n return this.renderComponent();\n }\n}\n","import CompositeComponent from './CompositeComponent';\nexport default CompositeComponent;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n headers: PropTypes.array,\n sections: PropTypes.arrayOf(\n PropTypes.shape({\n component: PropTypes.string.isRequired,\n title: PropTypes.string,\n subTitle: PropTypes.string,\n metaTitle: PropTypes.string,\n description: PropTypes.string,\n }),\n ),\n};\n","import React from 'react';\nimport { props } from './BasePage.props';\nimport { CompositeComponent } from 'components/';\nimport { connect } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nimport { withTheme } from 'styled-components';\nimport { Helmet } from 'react-helmet';\nimport { withRouter } from 'react-router-dom';\nimport { tlink } from 'utils/translationHelper';\nimport { getLanguagePath } from '../../../utils/translationHelper';\nimport parse from 'html-react-parser';\n\nclass BasePage extends CompositeComponent {\n static propTypes = props;\n\n componentDidMount() {\n const {\n settings: { configurations },\n theme,\n } = this.props;\n\n document.title = this.props.metaTitle\n ? `${this.tt(this.props.metaTitle)}`\n : `${this.tt(this.props.subTitle || this.props.title)} | ${configurations.title}`;\n\n let parent = document.getElementById('app-container');\n\n if (this.props.backgroundColor) {\n parent.style.backgroundColor = this.props.backgroundColor;\n } else {\n parent.style.backgroundColor = theme.colors.bg;\n }\n }\n\n getRobotsTag() {\n const { robots } = this.props;\n if (robots) return <meta name=\"robots\" content={robots}></meta>;\n else\n return (\n <meta\n name=\"robots\"\n content={window.location.origin.indexOf('rentlynetwork.com') >= 0 ? 'noindex' : 'index'}\n ></meta>\n );\n }\n\n getOgTags() {\n const { ogTags, t } = this.props;\n if (ogTags) {\n return (\n <Helmet>\n {ogTags.title && <meta property=\"og:title\" content={this.tt(ogTags.title, t)}></meta>}\n {ogTags.description && (\n <meta property=\"og:description\" content={this.tt(ogTags.description, t)}></meta>\n )}\n {ogTags.image && <meta property=\"og:image\" itemprop='image' content={this.tt(ogTags.image, t)}></meta>}\n {ogTags.site_name && (\n <meta property=\"og:site_name\" content={this.tt(ogTags.site_name, t)}></meta>\n )}\n {ogTags.url && <meta property=\"og:url\" content={this.tt(ogTags.url, t)}></meta>}\n <meta property=\"og:type\" content={this.tt(ogTags.type, t) || 'website'}></meta>\n {ogTags.locale && <meta property=\"og:locale\" content={this.tt(ogTags.locale, t)}></meta>}\n {ogTags.video && <meta property=\"og:video\" content={this.tt(ogTags.video, t)}></meta>}\n {ogTags.audio && <meta property=\"og:audio\" content={this.tt(ogTags.audio, t)}></meta>}\n {ogTags.published_time && (\n <meta property=\"og:published_time\" content={this.tt(ogTags.published_time, t)}></meta>\n )}\n\n {/* Facebook OG tags */}\n {ogTags.facebook?.fb_app_id && (\n <meta property=\"fb:app_id\" content={this.tt(ogTags.facebook.fb_app_id, t)}></meta>\n )}\n {ogTags.facebook?.fb_admins && (\n <meta property=\"fb:admins\" content={this.tt(ogTags.facebook.fb_admins, t)}></meta>\n )}\n {ogTags.facebook?.fb_page_id && (\n <meta property=\"fb:page_id\" content={this.tt(ogTags.facebook.fb_page_id, t)}></meta>\n )}\n {ogTags.facebook?.fb_profile_id && (\n <meta\n property=\"fb:profile_id\"\n content={this.tt(ogTags.facebook.fb_profile_id, t)}\n ></meta>\n )}\n {ogTags.facebook?.fb_publisher && (\n <meta property=\"fb:publisher\" content={this.tt(ogTags.facebook.fb_publisher, t)}></meta>\n )}\n {ogTags.facebook?.fb_section && (\n <meta property=\"fb:section\" content={this.tt(ogTags.facebook.fb_section, t)}></meta>\n )}\n {ogTags.facebook?.fb_tag && (\n <meta property=\"fb:tag\" content={this.tt(ogTags.facebook.fb_tag, t)}></meta>\n )}\n\n {/* Twitter OG tags */}\n {ogTags.twitter?.twitter_card && (\n <meta name=\"twitter:card\" content={this.tt(ogTags.twitter.twitter_card, t)}></meta>\n )}\n {ogTags.twitter?.twitter_site && (\n <meta name=\"twitter:site\" content={this.tt(ogTags.twitter.twitter_site, t)}></meta>\n )}\n {ogTags.twitter?.twitter_creator && (\n <meta\n name=\"twitter:creator\"\n content={this.tt(ogTags.twitter.twitter_creator, t)}\n ></meta>\n )}\n {ogTags.twitter?.twitter_title ? (\n <meta\n name=\"twitter:title\"\n content={this.tt(ogTags.twitter.twitter_title, t)}\n ></meta>\n ) : ogTags.title ? (\n <meta name=\"twitter:title\" content={this.tt(ogTags.title, t)}></meta>\n ) : null}\n {ogTags.twitter?.twitter_description ? (\n <meta\n name=\"twitter:description\"\n content={this.tt(ogTags.twitter.twitter_description, t)}\n ></meta>\n ) : ogTags.description ? (\n <meta name=\"twitter:description\" content={this.tt(ogTags.description, t)}></meta>\n ) : null}\n\n {ogTags.twitter?.twitter_image ? (\n <meta\n name=\"twitter:image\"\n content={this.tt(ogTags.twitter.twitter_image, t)}\n ></meta>\n ) : ogTags.image ? (\n <meta name=\"twitter:image\" content={this.tt(ogTags.image, t)}></meta>\n ) : null}\n\n {ogTags.twitter?.twitter_image_alt && (\n <meta\n name=\"twitter:image:alt\"\n content={this.tt(ogTags.twitter.twitter_image_alt, t)}\n ></meta>\n )}\n\n {/* LinkedIn+ OG tags */}\n {ogTags.linkedin?.linkedin_title ? (\n <meta\n property=\"linkedin:title\"\n content={this.tt(ogTags.linkedin.linkedin_title, t)}\n ></meta>\n ) : ogTags.title ? (\n <meta property=\"linkedin:title\" content={this.tt(ogTags.title, t)}></meta>\n ) : null}\n\n {ogTags.linkedin?.linkedin_description ? (\n <meta\n property=\"linkedin:description\"\n content={this.tt(ogTags.linkedin.linkedin_description, t)}\n ></meta>\n ) : ogTags.description ? (\n <meta property=\"linkedin:description\" content={this.tt(ogTags.description, t)}></meta>\n ) : null}\n {ogTags.linkedin?.linkedin_image ? (\n <meta\n property=\"linkedin:image\"\n content={this.tt(ogTags.linkedin.linkedin_image, t)}\n ></meta>\n ) : ogTags.image ? (\n <meta property=\"linkedin:image\" content={this.tt(ogTags.image, t)}></meta>\n ) : null}\n\n {ogTags.linkedin?.linkedin_image_alt && (\n <meta\n property=\"linkedin:image:alt\"\n content={this.tt(ogTags.linkedin.linkedin_image_alt, t)}\n ></meta>\n )}\n {ogTags.linkedin?.linkedin_url ? (\n <meta property=\"linkedin:url\" content={this.tt(ogTags.linkedin.linkedin_url, t)}></meta>\n ) : ogTags.url ? (\n <meta property=\"linkedin:url\" content={this.tt(ogTags.url, t)}></meta>\n ) : null}\n {ogTags.linkedin?.linkedin_author && (\n <meta\n property=\"linkedin:author\"\n content={this.tt(ogTags.linkedin.linkedin_author, t)}\n ></meta>\n )}\n {ogTags.linkedin?.linkedin_publisher && (\n <meta\n property=\"linkedin:publisher\"\n content={this.tt(ogTags.linkedin.linkedin_publisher, t)}\n ></meta>\n )}\n {ogTags.linkedin?.linkedin_section && (\n <meta\n property=\"linkedin:section\"\n content={this.tt(ogTags.linkedin.linkedin_section, t)}\n ></meta>\n )}\n {ogTags.linkedin?.linkedin_article_tag && (\n <meta\n property=\"linkedin:article:tag\"\n content={this.tt(ogTags.linkedin.linkedin_article_tag, t)}\n ></meta>\n )}\n {ogTags.linkedin?.linkedin_article_published_time ? (\n <meta\n property=\"linkedin:article:published_time\"\n content={this.tt(ogTags.linkedin.linkedin_article_published_time, t)}\n ></meta>\n ) : ogTags.published_time ? (\n <meta\n property=\"linkedin:article:published_time\"\n content={this.tt(ogTags.published_time, t)}\n ></meta>\n ) : null}\n {ogTags.linkedin?.linkedin_article_author && (\n <meta\n property=\"linkedin:article:author\"\n content={this.tt(ogTags.linkedin.linkedin_article_author, t)}\n ></meta>\n )}\n {ogTags.linkedin?.linkedin_article_section && (\n <meta\n property=\"linkedin:article:section\"\n content={this.tt(ogTags.linkedin.linkedin_article_section, t)}\n ></meta>\n )}\n {ogTags.linkedin?.linkedin_article_publisher && (\n <meta\n property=\"linkedin:article:publisher\"\n content={this.tt(ogTags.linkedin.linkedin_article_publisher, t)}\n ></meta>\n )}\n\n {/* Pinterest OG tags */}\n {ogTags.pinterest?.pinterest_article && (\n <meta\n property=\"pinterest:article\"\n content={this.tt(ogTags.pinterest.pinterest_article, t)}\n ></meta>\n )}\n {ogTags.pinterest?.pinterest_article_author && (\n <meta\n property=\"pinterest:article:author\"\n content={this.tt(ogTags.pinterest.pinterest_article_author, t)}\n ></meta>\n )}\n {ogTags.pinterest?.pinterest_article_section && (\n <meta\n property=\"pinterest:article:section\"\n content={this.tt(ogTags.pinterest.pinterest_article_section, t)}\n ></meta>\n )}\n {ogTags.pinterest?.pinterest_article_tag && (\n <meta\n property=\"pinterest:article:tag\"\n content={this.tt(ogTags.pinterest.pinterest_article_tag, t)}\n ></meta>\n )}\n {ogTags.pinterest?.pinterest_article_published_time ? (\n <meta\n property=\"pinterest:article:published_time\"\n content={this.tt(ogTags.pinterest.pinterest_article_published_time, t)}\n ></meta>\n ) : ogTags.published_time ? (\n <meta\n property=\"pinterest:article:published_time\"\n content={this.tt(ogTags.published_time, t)}\n ></meta>\n ) : null}\n {ogTags.pinterest?.pinterest_article_publisher && (\n <meta\n property=\"pinterest:article:publisher\"\n content={this.tt(ogTags.pinterest.pinterest_article_publisher, t)}\n ></meta>\n )}\n {ogTags.pinterest?.pinterest_article_section && (\n <meta\n property=\"pinterest:article:section\"\n content={this.tt(ogTags.pinterest.pinterest_article_section, t)}\n ></meta>\n )}\n\n {/* TikTok OG tags */}\n {ogTags.tiktok?.tiktok_title ? (\n <meta property=\"tiktok:title\" content={this.tt(ogTags.tiktok.tiktok_title, t)}></meta>\n ) : ogTags.title ? (\n <meta property=\"tiktok:title\" content={this.tt(ogTags.title, t)}></meta>\n ) : null}\n {ogTags.tiktok?.tiktok_description ? (\n <meta\n property=\"tiktok:description\"\n content={this.tt(ogTags.tiktok.tiktok_description, t)}\n ></meta>\n ) : ogTags.description ? (\n <meta property=\"tiktok:description\" content={this.tt(ogTags.description, t)}></meta>\n ) : null}\n {ogTags.tiktok?.tiktok_image ? (\n <meta property=\"tiktok:image\" content={this.tt(ogTags.tiktok.tiktok_image, t)}></meta>\n ) : ogTags.image ? (\n <meta property=\"tiktok:image\" content={this.tt(ogTags.image, t)}></meta>\n ) : null}\n {ogTags.tiktok?.tiktok_image_alt && (\n <meta\n property=\"tiktok:image:alt\"\n content={this.tt(ogTags.tiktok.tiktok_image_alt, t)}\n ></meta>\n )}\n {ogTags.tiktok?.tiktok_url ? (\n <meta property=\"tiktok:url\" content={this.tt(ogTags.tiktok.tiktok_url, t)}></meta>\n ) : ogTags.url ? (\n <meta property=\"tiktok:url\" content={this.tt(ogTags.url, t)}></meta>\n ) : null}\n {ogTags.tiktok?.tiktok_author && (\n <meta property=\"tiktok:author\" content={this.tt(ogTags.tiktok.tiktok_author, t)}></meta>\n )}\n {ogTags.tiktok?.tiktok_publisher && (\n <meta\n property=\"tiktok:publisher\"\n content={this.tt(ogTags.tiktok.tiktok_publisher, t)}\n ></meta>\n )}\n {ogTags.tiktok?.tiktok_section && (\n <meta\n property=\"tiktok:section\"\n content={this.tt(ogTags.tiktok.tiktok_section, t)}\n ></meta>\n )}\n {ogTags.tiktok?.tiktok_article_tag && (\n <meta\n property=\"tiktok:article:tag\"\n content={this.tt(ogTags.tiktok.tiktok_article_tag, t)}\n ></meta>\n )}\n </Helmet>\n );\n }\n }\n\n getSchemaTags() {\n const { schemaTags, t } = this.props;\n if (schemaTags) {\n const stringSchemaTags = this.tt(schemaTags, t);\n return (\n <Helmet>\n <script type=\"application/ld+json\">{`${stringSchemaTags}`}</script>\n </Helmet>\n );\n }\n }\n\n render() {\n const {\n description,\n subTitle,\n listLanguages,\n t,\n i18n,\n path,\n customHeadContent,\n settings,\n } = this.props;\n\n let pathForCanonical = path;\n if (Array.isArray(path)) {\n pathForCanonical = path[0];\n }\n\n const defaultLang = this.props.settings.configurations.defaultLang;\n\n return (\n <>\n <Helmet>\n {(description || subTitle) && (\n <meta name=\"description\" content={this.tt(description || subTitle)} />\n )}\n\n <link\n rel=\"canonical\"\n href={`${window.location.origin}${tlink(\n pathForCanonical,\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n )}`}\n />\n\n {listLanguages &&\n listLanguages.map((x, i) => (\n <link\n key={i}\n rel=\"alternate\"\n hreflang={getLanguagePath(settings.configurations.langConfig, x)}\n href={`${window.location.origin}${tlink(\n pathForCanonical,\n t,\n i18n,\n x,\n settings.configurations.langConfig,\n )}`}\n />\n ))}\n\n <link\n rel=\"alternate\"\n hreflang=\"x-default\"\n href={`${window.location.origin}${tlink(\n pathForCanonical,\n t,\n i18n,\n defaultLang,\n settings.configurations.langConfig,\n )}`}\n />\n\n {customHeadContent && parse(customHeadContent)}\n\n {this.getRobotsTag()}\n\n {this.renderHeaders()}\n </Helmet>\n\n {this.getOgTags()}\n\n {this.getSchemaTags()}\n\n {this.renderChilds()}\n </>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration, global }) => ({\n settings: siteConfiguration.settings,\n sharedComponents: siteConfiguration.settings.sharedComponents,\n listLanguages: global.listLanguages,\n});\n\nexport default connect(mapStateToProps)(withTheme(withTranslation()(withRouter(BasePage))));\n","import BasePage from './BasePage';\nexport default BasePage;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n body: PropTypes.string,\n element: PropTypes.element,\n titleType: PropTypes.string,\n};\n","import style from 'styled-components';\n\nexport const StyledAccordionCard = style.section`\n background: ${props => (props.background ? `url(${props.background}) no-repeat` : `white`)};\n i.fa-info-circle {\n color: ${props => props.theme.font.colors.third}\n }\n i.fa-angle-down{\n color:#ccc;\n }\n .card{\n background: ${props => (props.background ? `url(${props.background}) no-repeat` : `white`)};\n border-radius: 0;\n border: 1px solid rgba(0,0,0,.125);\n margin-bottom: 10px;\n }\n .card-header{\n background: none;\n border: none;\n display: flex;\n\n .accordion-title {\n flex-direction: row;\n display: flex;\n width: 100%;\n justify-content: space-between;\n }\n }\n\n .accordion-title:hover {\n div{\n color:${props => props.theme.colors.primary};\n font-weight:500;\n }\n }\n \n h5 {\n font-size: 15px;\n }\n .card-body{\n font-size: 13px;\n flex: 1 1 auto;\n padding: 1.25rem;\n }\n .card-body p{\n font-size: 13px;\n }\n .card-body a{\n color: ${props => props.theme.colors.primary};\n transition: all .2s;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledAccordionCardModern = style.section`\n background: ${props => (props.background ? `url(${props.background}) no-repeat` : `white`)};\n i.fa-info-circle {\n color: ${props => props.theme.font.colors.third}\n }\n i.fa-angle-down{\n color:#ccc;\n }.card {\n background:#FAFBFC;\n border-radius: 8px;\n border: none;\n margin-bottom: 10px;\n box-shadow:0 1px 3px rgb(29 99 71 / 5%), 0 2px 5px rgb(29 99 71 / 4%);\n }\n\n .card:hover {\n box-shadow:0 1px 3px rgb(29 99 71 / 8%), 0 2px 5px rgb(29 99 71 / 8%);\n }\n \n h5 {\n font-size: 15px;\n }\n .card-header {\n color:#2E2D35;\n font-weight:500;\n background: none;\n border: none;\n cursor:pointer;\n display: flex;\n\n .accordion-title {\n flex-direction: row;\n display: flex;\n width: 100%;\n justify-content: space-between;\n }\n }\n .card-header:hover {\n color:${props => props.theme.colors.primary};\n font-weight:500;\n }\n\n .accordion-title:hover {\n div{\n color:${props => props.theme.colors.primary};\n font-weight:500;\n }\n }\n\n .card-header .fa-info-circle {\n display:none;\n }\n\n .card-body {\n padding: 0 20px !important;\n }\n\n .card-body p {\n font-size: 15px !important;\n }\n\n @media (max-width: ${({ theme }) => theme.screens.lg}) {\n .card-body {\n padding: 0px !important;\n } \n }\n\n`;\n","import React, { Component } from 'react';\nimport { Card, Accordion} from 'react-bootstrap';\nimport { props } from './AccordionCard.props';\nimport { StyledAccordionCard } from './AccordionCard.styled';\nimport { StyledAccordionCardModern } from './AccordionCard.styled.modern';\nimport { Paragraph, Title } from 'components/';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\n\nclass AccordionCard extends Component {\n static propTypes = props;\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledAccordionCardModern;\n }\n return StyledAccordionCard;\n }\n\n render() {\n const { titleType, fontWeight, fontSize } = this.props;\n const StyledSection = this.getTemplateStyledComponent();\n\n return (\n <StyledSection>\n <Card>\n <Accordion.Toggle\n ref={this.props.refe}\n as={Card.Header}\n variant=\"link\"\n eventKey={this.props.keyValue}\n >\n <i className=\"fas fa-info-circle\" />\n <div className='accordion-title'>\n <Title type={titleType || 'h3'} fontSize={fontSize || '16'} weight={fontWeight || \"400\"} text={this.props.title} italic={false} />\n <i\n className=\"fas fa-angle-down float-right mt-1\"\n data-toggle=\"collapse\"\n data-target=\"#1\"\n aria-expanded=\"false\"\n aria-controls=\"1\"\n id=\"collapseSearch\"\n />\n </div>\n </Accordion.Toggle>\n <Accordion.Collapse eventKey={this.props.keyValue}>\n <Card.Body>\n {this.props.body && <Paragraph text={this.props.body} nonTranslate />}\n {this.props.element}\n </Card.Body>\n </Accordion.Collapse>\n </Card>\n </StyledSection>\n );\n }\n}\n\nexport default withSettingsContext(AccordionCard);\n","import AccordionCard from './AccordionCard';\nexport default AccordionCard;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n className: PropTypes.string,\n background: PropTypes.string,\n color: PropTypes.string,\n text: PropTypes.any.isRequired,\n textTransform: PropTypes.string,\n onClick: PropTypes.func,\n borderColor: PropTypes.string,\n hoverColor: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n disabled: PropTypes.bool,\n link: PropTypes.string,\n style: PropTypes.shape({}),\n selfLink: PropTypes.bool,\n noShadow: PropTypes.bool,\n borderWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n padding: PropTypes.string,\n iconSize: PropTypes.string,\n icon: PropTypes.string,\n secondary: PropTypes.bool,\n};\n\nexport const defaultProps = {\n disabled: false,\n secondary: false,\n};\n","import style from 'styled-components';\n\nexport const getBackgroundColor = (secondary, disabled, background, theme) => {\n if (secondary) return 'transparent';\n if (disabled) return theme.colors.disabled;\n return background || theme.colors.buttonPrimaryBg;\n};\n\nexport const getColor = (color, secondary, disabled, background, theme) => {\n if (color) return color;\n if (secondary) {\n if (disabled) return theme.colors.disabled;\n return background || theme.colors.buttonPrimaryBg;\n }\n return theme.colors.buttonPrimaryColor;\n};\n\nexport const getBorderColor = (secondary, disabled, borderColor, background, theme) => {\n if (disabled) return theme.colors.disabled;\n if (borderColor) return borderColor;\n if (secondary) return background || theme.colors.buttonPrimaryBg;\n return theme.colors.buttonPrimaryBorder;\n};\n\nexport const StyledBtn = style.button`\n display: flex;\n width: ${props => props.width || 'auto'};\n height: ${props => props.height || 'auto'};\n line-height: 1;\n border-radius: ${props => props.borderRadius || '0'};\n padding-top: ${props => props.padding || '7px'};\n padding-bottom: ${props => props.padding || '7px'};\n justify-content: center;\n align-items: center;\n cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n border-color: ${({ secondary, disabled, borderColor, background, theme }) =>\n getBorderColor(secondary, disabled, borderColor, background, theme)};\n border-width: ${({ secondary, borderWidth }) => (borderWidth || secondary ? '1.5px' : 'inherit')};\n box-shadow: ${props => (props.noShadow ? 'none' : '2px 2px 6px rgba(0,0,0,0.2)')};\n background: ${({ secondary, disabled, background, theme }) =>\n getBackgroundColor(secondary, disabled, background, theme)};\n font-weight: 700;\n font-size: ${props => props.fontSize || '15px'};\n text-transform: ${props => props.textTransform || 'uppercase'};\n color: ${({ color, secondary, disabled, background, theme }) =>\n getColor(color, secondary, disabled, background, theme)};\n \n &:disabled { \n color: ${({ color, secondary, disabled, background, theme }) =>\n getColor(color, secondary, disabled, background, theme)};\n }\n\n &.only-quote {\n display: none;\n }\n\n &:not([disabled]):hover {\n background-color: ${props =>\n props.disabled\n ? props.theme.colors.disabled\n : props.hoverColor || props.theme.colors.buttonPrimaryBgHover};\n color: ${props =>\n props.theme.colors.buttonPrimaryColorHover || props.theme.colors.buttonPrimaryColor}; \n border-color: ${props =>\n props.disabled\n ? props.theme.colors.disabled\n : props.hoverColor || props.theme.colors.buttonPrimaryBorder};\n }\n &:focus {\n outline: none;\n box-shadow: none;\n }\n .loading {\n color: ${props => props.iconColor || props.theme.font.colors.secondary};\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) and (min-width: ${props =>\n props.theme.screens.md}){\n padding: 7px 13px;\n font-size: 13px;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) and (min-width: ${props =>\n props.theme.screens.xl}){\n font-size: 10px;\n padding: 7px 15px;\n }\n\n @media only screen and (max-width: 1740px) and (min-width: ${props => props.theme.screens.xl}){\n white-space: pre-wrap;\n padding: 7px 15px;\n }\n`;\n","import style from 'styled-components';\nimport { getBackgroundColor, getBorderColor, getColor } from './Btn.styled';\n\nexport const StyledBtnModern = style.button`\n display: flex;\n width: ${props => props.width || 'auto'};\n height: ${props => props.height || 'auto'};\n line-height: 1;\n border-radius: ${props => props.borderRadius || '20'};\n padding-top: ${props => props.padding || '7px'};\n padding-bottom: ${props => props.padding || '7px'};\n justify-content: center;\n align-items: center;\n cursor: ${props => (props.disabled ? 'default' : 'pointer')};\n border-color: ${({ secondary, disabled, borderColor, background, theme }) =>\n getBorderColor(secondary, disabled, borderColor, background, theme)};\n border-width: ${({ secondary, borderWidth }) => (borderWidth || secondary ? '1.5px' : 'inherit')};\n background: ${({ secondary, disabled, background, theme }) =>\n getBackgroundColor(secondary, disabled, background, theme)};\n font-weight: 700;\n font-size: ${props => props.fontSize || '15px'};\n text-transform: ${props => props.textTransform || 'none'};\n color: ${({ color, secondary, disabled, background, theme }) =>\n getColor(color, secondary, disabled, background, theme)};\n\n\n &:disabled { \n color: ${({ color, secondary, disabled, background, theme }) =>\n getColor(color, secondary, disabled, background, theme)};\n }\n \n &:not([disabled]):hover {\n background-color: ${props =>\n props.disabled\n ? props.theme.colors.disabled\n : props.hoverColor || props.theme.colors.buttonPrimaryBgHover};\n color: ${props =>\n props.theme.colors.buttonPrimaryColorHover || props.theme.colors.buttonPrimaryColor}; \n border-color: ${props =>\n props.disabled\n ? props.theme.colors.disabled\n : props.hoverColor || props.theme.colors.buttonPrimaryBorder};\n }\n &:focus {\n outline: none;\n box-shadow: none;\n }\n\n .customButton {\n flex-direction: column;\n .button-container {\n width: 100%;\n display: flex;\n justify-content: center;\n\n .button-icon{\n margin: 0px 5px;\n }\n }\n }\n\n .second-btn{\n .CheckoutLink-icon {\n margin-right: 0.5rem;\n margin-left: -0.5rem;\n }\n }\n\n .loading {\n color: ${props => props.iconColor || props.theme.font.colors.secondary};\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xl}) and (min-width: ${props =>\n props.theme.screens.md}){\n padding: 7px 13px;\n font-size: 13px;\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.xxl}) and (min-width: ${props =>\n props.theme.screens.xl}){\n font-size: 0.8rem;\n padding: 7px 15px;\n }\n\n @media only screen and (max-width: 1740px) and (min-width: ${props => props.theme.screens.xl}){\n white-space: pre-wrap;\n padding: 7px 15px;\n }\n`;\n","import React from 'react';\nimport { props, defaultProps } from './Btn.props';\nimport { StyledBtn } from './Btn.styled';\nimport { StyledBtnModern } from './Btn.styled.modern';\nimport { Loading } from 'components';\nimport { useTranslation } from 'react-i18next';\nimport { tt } from 'utils/translationHelper';\nimport { useSettingsContext } from 'SettingsContext';\n\nimport { tlink } from 'utils/translationHelper';\nimport { history } from '../../store';\nimport { MODERN_THEME } from 'styled/constants';\n\nconst Btn = ({\n onClick,\n className,\n text,\n subText,\n isCustom,\n color,\n textTransform,\n fontSize,\n background,\n borderColor,\n borderRadius,\n borderWidth,\n onlyQuote,\n hoverColor,\n height,\n width,\n loading,\n icon,\n iconColor,\n iconSize,\n style,\n disabled,\n link,\n noShadow,\n padding,\n selfLink,\n internalLink,\n secondary,\n paymentMethod,\n ...rest\n}) => {\n const { t, i18n } = useTranslation();\n const settings = useSettingsContext();\n\n const goToLink = link => {\n if (!link) return;\n\n if (internalLink) {\n history.push(tlink(link, t, i18n, null, settings.configurations.langConfig));\n window.scrollTo(0, 0);\n } else {\n window.open(tt(link, t), selfLink ? '_self' : '_blank');\n }\n };\n\n const handleRedirect = () => {\n return goToLink(link);\n };\n\n const getTemplateStyledComponent = () => {\n if (settings.theme.template === MODERN_THEME) {\n return StyledBtnModern;\n }\n return StyledBtn;\n };\n\n const getCustomButton = (text, icon, subText, t) => {\n return (\n <>\n <div className=\"button-container\">\n {icon && (\n <div className=\"button-icon\">\n <i className={icon} />\n </div>\n )}\n <div className={`button-text ${icon ? 'with-icon' : ' '}`}> {tt(text, t)}</div>\n </div>\n <div className=\"button-subtext\">{tt(subText, t)}</div>\n </>\n );\n };\n\n const StyledComponent = getTemplateStyledComponent();\n\n return (\n <StyledComponent\n className={`${className} no-border-radius btn ${isCustom ? 'customButton' : ''} ${\n onlyQuote && paymentMethod === 'partial' ? 'only-quote' : ''\n }`}\n background={background}\n borderColor={borderColor}\n borderRadius={borderRadius}\n borderWidth={borderWidth}\n color={color}\n height={height}\n textTransform={textTransform}\n fontSize={fontSize}\n hoverColor={hoverColor}\n onClick={onClick || handleRedirect}\n width={width}\n style={style}\n icon={icon}\n noShadow={noShadow}\n disabled={disabled}\n padding={padding}\n secondary={secondary}\n {...rest}\n >\n {loading ? (\n <Loading show={loading} size={iconSize || '2em'} color={iconColor} />\n ) : isCustom ? (\n getCustomButton(text, icon, subText, t)\n ) : (\n <span className=\"button-text\"> {tt(text, t)}</span>\n )}\n </StyledComponent>\n );\n};\n\nBtn.propTypes = props;\nBtn.defaultProps = defaultProps;\n\nexport default Btn;\n","import Btn from './Btn';\nexport default Btn;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n background: PropTypes.string,\n active: PropTypes.string,\n color: PropTypes.string,\n hover: PropTypes.string,\n fontSize: PropTypes.string,\n iconSize: PropTypes.string,\n fontWeight: PropTypes.string,\n textTransform: PropTypes.string,\n height: PropTypes.string,\n isNavOpen: PropTypes.bool,\n navItems: PropTypes.arrayOf(\n PropTypes.shape({\n text: PropTypes.string,\n path: PropTypes.string,\n callback: PropTypes.func,\n }),\n ),\n padding: PropTypes.string,\n socialNetworks: PropTypes.array,\n width: PropTypes.string,\n mobileMenuItems: PropTypes.array,\n langs: PropTypes.array,\n currency: PropTypes.array,\n handleLangChange: PropTypes.func,\n sticky: PropTypes.bool,\n currentCurrency: PropTypes.object,\n};\n\nexport const defaultProps = {\n langs: [],\n navItems: [],\n socialNetworks: [],\n mobileMenuItems: [],\n handleLangChange: () => {},\n sticky: true,\n};\n","import style from 'styled-components';\n\nconst basicFlex = `\n display: flex;\n height: 100%;\n box-sizing: border-box;\n`;\n\nexport const StyledNavBar = style.nav`\n ${basicFlex}\n background: ${props => props.background || props.theme.colors.bg} !important;\n color: ${props => props.color || props.theme.font.colors.primary};\n font-size: ${props => props.fontSize || '12px'};\n font-weight: ${props => props.fontWeight || 400};\n flex-direction: row;\n flex-wrap: nowrap;\n height: ${props => props.height || '40px'};\n border-bottom: 3px solid ${props => props.active || props.theme.colors.secondary};\n top: 0;\n left: 0;\n z-index: 10000;\n\n .dropdown {\n flex-direction: column;\n }\n\n .dropdown-menu {\n padding: 0;\n border-radius: ${props => props.dropDownborderRadius || '0'};\n box-shadow: 1px 1px 20px #0000001a;\n border: 1px solid #f3f4f7;\n }\n .nav-sublink{\n padding: 10px 22px;\n font-size: 13px;\n font-weight: 400;\n color: ${props => props.subItemColor || '#000'};\n border-bottom: 1px solid #f3f4f7;\n display: flex;\n align-items: center;\n }\n .nav-sublink:before {\n display: inline-block;\n font: normal normal normal 14px/1 FontAwesome;\n font-size: inherit;\n text-rendering: auto;\n content: \"\\f105\";\n margin-right: 10px;\n color: ${props => props.subItemHover || props.theme.colors.secondary};\n }\n .nav-sublink:hover {\n color: ${props => props.subItemHover || props.theme.colors.secondary} !important;\n background: ${props => props.dropdownBkgHover || '#f3f4f7'};\n }\n .nav-sublink:active {\n background-color: transparent;\n }\n \n .nav-list .nav-list-item:hover .nav-sublink {\n color: ${props => props.subItemColor || '#000'} !important;\n }\n \n @media (min-width: ${props => props.theme.screens.lg}) {\n &.sticky {\n position: fixed;\n width:100%;\n margin:0px;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n transition: margin 300ms ease;\n height: 100vh;\n position: fixed;\n top: 0;\n width: 256px;\n padding: 1rem;\n display: block;\n background: ${props => props.theme.colors.primary} !important;\n color: ${props => props.theme.font.colors.third};\n border: none;\n a.nav-link{\n color: ${props => props.theme.font.colors.secondary} !important;\n }\n margin-left:-256px !important;\n\n .nav-list .navLogo{\n padding:0px !important;\n }\n\n .dropdown-menu {\n position: relative !important;\n transform: none !important;\n background: ${props => props.theme.colors.primary} !important;\n border: none;\n width: 100%;\n }\n .nav-sublink, .nav-list .nav-list-item:hover .nav-sublink{\n color: ${props => props.theme.font.colors.secondary} !important;\n padding: 10px 0;\n border-bottom: 1px solid #ffffff14;\n }\n .nav-sublink:last-child {\n border: none !important;\n }\n\n &.mobile-open {\n \n &.row-p {\n padding:1rem !important;\n margin-right:0px !important;\n margin-left:0px !important; \n height: 100%;\n max-height: 100%;\n overflow-y: scroll;\n } \n\n .nav-list .nav-list-item.active{\n background: ${props => props.active || props.theme.colors.primary} !important;\n }\n\n .my-account-link { \n border-radius: 5px; \n margin: 0;\n\n .dropdown-menu {\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n overflow: hidden;\n }\n\n .nav-link {\n color: ${props => props.theme.font.colors.primary} !important;\n }\n }\n\n .navbarLang { \n border-radius: 5px;\n margin: 0;\n margin-bottom: 10px;\n padding: 10px;\n }\n \n }\n \n }\n\n .nav-list {\n ${basicFlex}\n flex-direction: row;\n flex-wrap: nowrap;\n padding: 0;\n margin: 0;\n width:100%;\n justify-content: flex-start;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n flex-direction: column;\n width: 100%;\n font-size: 13px;\n }\n\n @media (min-width: ${props => props.theme.screens.lg}) {\n\n .navSocialList {\n width: 100%;\n justify-content: flex-end;\n flex-wrap: nowrap;\n }\n }\n\n .navLogo {\n padding: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n @media (min-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n\n .mobileSeparator {\n border: 1px solid #ffffff14;\n width: 100%;\n\n @media (min-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.lg}) {\n .navSocialList {\n display: none;\n }\n\n .navbarLang {\n color: ${props => props.theme.font.colors.primary}\n height: auto;\n position: relative;\n right: 10px;\n\n .dropdownItem {\n color: ${props => props.theme.colors.secondary}\n }\n }\n }\n @media (max-width: ${props => props.theme.screens.md}) {\n .navbarLang {\n position: relative;\n right: 0;\n }\n }\n\n .nav-list-item {\n ${basicFlex}\n height: auto;\n list-style-type: none;\n margin: 0;\n padding: 2px 10px;\n transition: background-color 200ms ease-in-out;\n justify-content: center;\n align-items: center;\n white-space: nowrap;\n\n \n &.active{\n background: ${props => props.active || props.theme.colors.secondary} !important;\n a{\n color: ${props => props.hover || props.theme.font.colors.secondary} !important;\n }\n }\n\n &.onlyMobile {\n display: none;\n\n .fa-angle-right {\n margin-right: 10px;\n color: ${props => props.theme.font.colors.third};\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n display: initial;\n }\n }\n\n .menuIcons {\n margin-right: 10px;\n\n @media (min-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.lg}) {\n padding: 2px 5px;\n\n &:last-child {\n border-bottom: none;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n width: auto;\n padding: 0;\n }\n\n @media (min-width: ${props => props.theme.screens.md}) {\n &:hover {\n background-color: ${props => props.active || props.theme.colors.secondary};\n a{\n color: ${props => props.hover || props.theme.font.colors.secondary} !important;\n }\n }\n }\n\n .nav-link {\n color: ${props => props.color || props.theme.font.colors.primary};\n text-decoration: none;\n ${basicFlex}\n align-items: center;\n padding-right: .5rem;\n padding-left: .5rem;\n font-weight: ${props => props.fontWeight || 400};\n text-transform: ${props => props.textTransform || 'none'};\n\n @media (max-width: ${props => props.theme.screens.md}) {\n padding: 10px 0;\n width: 100%;\n }\n }\n }\n .socialItem:hover{\n background: ${props => props.active || props.theme.colors.primary} !important;\n }\n\n .socialItem:hover a{\n color: ${props => props.hover || props.theme.font.colors.secondary} !important;\n }\n\n .socialItem a {\n font-size: ${props => props.iconSize || '12px'};\n }\n }\n\n @media (max-width: ${({ theme }) => theme.screens.md}) {\n .my-account-link {\n margin-bottom: 0.7rem;\n\n .my-account-button {\n width: 100%;\n }\n\n .dropdown-toggle {\n padding-left: 0;\n }\n\n .dropdown-menu {\n box-shadow: none;\n }\n\n .nav-link {\n color: ${({ theme }) => theme.font.colors.secondary} !important;\n }\n }\n }\n\n`;\n","import style from 'styled-components';\n\nconst basicFlex = `\n display: flex;\n height: 100%;\n box-sizing: border-box;\n`;\n\nexport const StyledNavBarModern = style.nav`\n ${basicFlex}\n background:${props => props.theme.colors.third};\n color: ${props => props.color || props.theme.font.colors.primary};\n font-size: ${props => props.fontSize || '12px'};\n font-weight: ${props => props.fontWeight || 400};\n flex-direction: row;\n flex-wrap: nowrap;\n height: ${props => props.height || '40px'};\n top: 0;\n left: 0;\n z-index: 10000;\n\n .dropdown {\n flex-direction: column;\n }\n\n .dropdown-menu {\n padding: 0;\n border-radius: ${props => props.dropDownborderRadius || '0'};\n box-shadow: 1px 1px 20px #0000001a;\n border: 1px solid #f3f4f7;\n }\n\n .nav-sublink{\n padding: 10px 22px;\n font-size: 13px;\n font-weight: 400;\n color: ${props => props.subItemColor || '#000'};\n border-bottom: 1px solid #f3f4f7;\n display: flex;\n align-items: center;\n }\n .nav-sublink:before {\n display: inline-block;\n font: normal normal normal 14px/1 FontAwesome;\n font-size: inherit;\n text-rendering: auto;\n content: \"\\f105\";\n margin-right: 10px;\n color: ${props => props.subItemHover || props.theme.colors.secondary};\n }\n .nav-sublink:hover {\n color: ${props => props.subItemHover || props.theme.colors.secondary} !important;\n background: ${props => props.dropdownBkgHover || '#f3f4f7'};\n }\n .nav-sublink:active {\n background-color: transparent;\n }\n \n .nav-list .nav-list-item:hover .nav-sublink {\n color: ${props => props.subItemColor || '#000'} !important;\n }\n \n @media (min-width: ${props => props.theme.screens.lg}) {\n &.sticky {\n position: fixed;\n width:100%;\n margin:0px;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n transition: margin 100ms ease;\n height: 100vh;\n position: fixed;\n top: 0;\n width: 256px;\n padding: 1rem;\n display: block;\n background: ${props => props.theme.colors.third} !important;\n color: ${props => props.theme.font.colors.third};\n border: none;\n a.nav-link{\n color: ${props => props.theme.font.colors.primary} !important;\n }\n margin-left:-256px !important;\n\n .nav-list .navLogo{\n padding:0px !important;\n }\n\n .dropdown-menu {\n position: relative !important;\n transform: none !important;\n background: ${props => props.theme.colors.primary} !important;\n border: none;\n width: 100%;\n }\n .nav-sublink, .nav-list .nav-list-item:hover .nav-sublink{\n color: ${props => props.theme.font.colors.secondary} !important;\n padding: 10px 0;\n border-bottom: 1px solid #ffffff14;\n }\n .nav-sublink:last-child {\n border: none !important;\n }\n\n &.mobile-open {\n \n &.row-p {\n padding:1rem !important;\n margin-right:0px !important;\n margin-left:0px !important; \n height: 100%;\n max-height: 100%;\n } \n\n .nav-list .nav-list-item.active{\n background: ${props => props.active || props.theme.colors.primary} !important;\n border-radius:8px;\n padding:0 10px;\n }\n\n .navbarLang {\n color: ${props => props.theme.font.colors.primary} !important;\n\n .currentLang .currentCurrency i{\n color: ${props => props.theme.font.colors.third};\n }\n\n .dropdownOptions.open{\n margin-top:0.5rem;\n left:0px;\n width:100%;\n .dropdownItem{\n color: ${props => props.theme.font.colors.primary} !important;\n }\n }\n }\n \n }\n \n }\n\n .nav-list {\n ${basicFlex}\n flex-direction: row;\n flex-wrap: nowrap;\n padding: 0;\n margin: 0;\n width:100%;\n justify-content: flex-start;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n flex-direction: column;\n width: 100%;\n font-size: 13px;\n }\n\n @media (min-width: ${props => props.theme.screens.lg}) {\n\n .navSocialList {\n width: 100%;\n justify-content: flex-end;\n }\n }\n\n .navLogo {\n padding: 20px;\n display: initial;\n align-items: center;\n justify-content: center;\n\n @media (min-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n\n .mobileSeparator {\n border: 1px solid #ffffff14;\n width: 100%;\n\n @media (min-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.lg}) {\n .navSocialList {\n display: none;\n }\n\n .navbarLang {\n color: ${props => props.theme.font.colors.primary}\n height: auto;\n position: absolute;\n right: 10px;\n\n .dropdownItem {\n color: ${props => props.theme.colors.secondary}\n }\n }\n }\n @media (max-width: ${props => props.theme.screens.md}) {\n .navbarLang {\n position: relative;\n right: 0;\n }\n }\n\n .nav-list-item {\n ${basicFlex}\n height: auto;\n list-style-type: none;\n margin: 0;\n padding: 2px 10px;\n transition: background-color 100ms ease-in-out;\n justify-content: center;\n align-items: center;\n white-space: nowrap;\n\n \n &.active{\n background: ${props => props.active || props.theme.colors.secondary} !important;\n a{\n color: ${props => props.hover || props.theme.font.colors.secondary} !important;\n }\n }\n\n &.onlyMobile {\n display: none;\n\n .fa-angle-right {\n margin-right: 10px;\n color: ${props => props.theme.font.colors.third};\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n display: initial;\n }\n }\n\n .menuIcons {\n margin-right: 10px;\n display:none;\n\n .menuIcons.active {\n color: ${props => props.active || props.theme.colors.primary} !important;\n }\n \n @media (min-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.lg}) {\n padding: 2px 5px;\n\n &:last-child {\n border-bottom: none;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n width: auto;\n padding: 0;\n }\n\n @media (min-width: ${props => props.theme.screens.md}) {\n &:hover {\n background-color: ${props => props.active || props.theme.colors.secondary};\n a{\n color: ${props => props.hover || props.theme.font.colors.secondary} !important;\n }\n }\n }\n\n .nav-link {\n font-size:12px;\n color: ${props => props.color || props.theme.font.colors.primary};\n text-decoration: none;\n ${basicFlex}\n align-items: center;\n padding-right: .5rem;\n padding-left: .5rem;\n font-weight: ${props => props.fontWeight || 400};\n text-transform: ${props => props.textTransform || 'none'};\n\n @media (max-width: ${props => props.theme.screens.md}) {\n padding: 10px 0;\n width: 100%;\n font-size:14px;\n }\n }\n }\n .socialItem:hover{\n background: ${props => props.active || props.theme.colors.primary} !important;\n color: ${props => props.hover || props.theme.font.colors.secondary} !important;\n }\n\n\n .socialItem a {\n font-size: ${props => props.iconSize || '12px'};\n }\n }\n`;\n","import React from 'react';\nimport { props, defaultProps } from './NavBar.props';\nimport { StyledNavBar } from './NavBar.styled';\nimport { Link, withRouter } from 'react-router-dom';\nimport { LangDropdown, Logo, SocialList, TranslatedLink, CurrenciesDropdown } from '../';\nimport { withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { TranslatedComponent, MyAccountNavLink } from 'components/';\nimport { tlink } from 'utils/translationHelper';\nimport { NavDropdown } from 'react-bootstrap/';\nimport { StyledNavBarModern } from './NavBar.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { changeCurrencyAction } from 'actions/global.actions';\n\nclass NavBar extends TranslatedComponent {\n constructor() {\n super();\n\n this.state = {\n showDropdown: true,\n };\n }\n static propTypes = props;\n static defaultProps = defaultProps;\n\n handleStickyNavbar = stickyNav => {\n const mainNav = document.getElementById('mainNav') || null;\n if (!mainNav) return;\n if (window.pageYOffset > stickyNav) {\n mainNav.classList.add('sticky');\n } else {\n mainNav.classList.remove('sticky');\n }\n };\n\n componentDidMount() {\n const mainNav = document.getElementById('mainNav') || null;\n\n if (mainNav) {\n window.onscroll = () => {\n this.handleStickyNavbar(100);\n };\n }\n }\n\n isActive(navItem) {\n const { location, t, i18n, settings } = this.props;\n\n if (\n location.pathname === tlink(navItem.path, t, i18n, null, settings.configurations.langConfig)\n )\n return 'active';\n\n return null;\n }\n\n isDropdownActive(navItem) {\n const { location, t, i18n, settings } = this.props;\n\n var pathMatch = navItem.subItems.find(\n subItem =>\n tlink(subItem.path, t, i18n, null, settings.configurations.langConfig) ===\n location.pathname,\n );\n\n if (pathMatch != null) return 'active';\n\n return null;\n }\n\n showMenu = event => {\n event.preventDefault();\n\n this.setState({ showDropdown: true }, () => {\n document.addEventListener('click', this.closeMenu);\n });\n };\n\n closeMenu = event => {\n if (!this.dropdownMenu.contains(event.target)) {\n this.setState({ showDropdown: false }, () => {\n document.removeEventListener('click', this.closeMenu);\n });\n }\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledNavBarModern;\n }\n return StyledNavBar;\n }\n\n render = () => {\n const {\n background,\n active,\n color,\n iconSize,\n hover,\n fontSize,\n fontWeight,\n textTransform,\n height,\n settings: {\n configurations: {\n sitemap: { links },\n },\n myAccountConfiguration,\n featureFlags,\n } = [],\n settings: { configurations: { socialNetworks } } = [],\n mobileLinks = [],\n padding,\n width,\n logo,\n mobileLogo,\n comm,\n dropDownborderRadius,\n subItemColor,\n subItemHover,\n dropdownBkgHover,\n } = this.props;\n\n const showMyAccount = myAccountConfiguration && myAccountConfiguration.showMyAccount;\n const showCurrenciesDropdown = featureFlags && featureFlags.showCurrenciesDropdown;\n\n const StyledSection = this.getTemplateStyledComponent();\n\n return (\n <StyledSection\n id=\"mainNav\"\n className={`${comm.isNavBarOpen() === true ? 'mobile-open' : ''} row row-p`}\n fontSize={fontSize}\n textTransform={textTransform}\n fontWeight={fontWeight}\n height={height}\n padding={padding}\n width={width}\n color={color}\n hover={hover}\n background={background}\n active={active}\n iconSize={iconSize}\n dropDownborderRadius={dropDownborderRadius}\n subItemColor={subItemColor}\n subItemHover={subItemHover}\n dropdownBkgHover={dropdownBkgHover}\n >\n <ul className=\"nav-list\">\n <span className=\"navLogo\">\n <Logo src={mobileLogo || logo} />\n </span>\n <hr className=\"mobileSeparator\" />\n {links.map((navItem, i) => {\n if (navItem && !navItem.noShowInHeader) {\n return (\n <React.Fragment key={i}>\n {navItem.dropdown === true ? (\n <NavDropdown\n title={this.tt(navItem.name)}\n className={'nav-list-item ' + this.isDropdownActive(navItem)}\n id=\"dropdown\"\n >\n {navItem.subItems.map((subItem, idx) => {\n return (\n <li\n className={'nav-list-subitem ' + this.isActive(subItem)}\n onClick={comm.toogleNavBar}\n key={idx}\n >\n <TranslatedLink key={i} className=\"nav-sublink\" {...subItem} />\n </li>\n );\n })}\n </NavDropdown>\n ) : (\n <li\n className={'nav-list-item ' + this.isActive(navItem)}\n onClick={comm.toogleNavBar}\n >\n {navItem.icon && <i className={`${navItem.icon} menuIcons`} />}\n <TranslatedLink className=\"nav-link\" {...navItem} />\n </li>\n )}\n </React.Fragment>\n );\n } else return null;\n })}\n\n <hr className=\"mobileSeparator\" />\n\n <SocialList\n bgColor=\"transparent\"\n className=\"navSocialList\"\n links={socialNetworks}\n borderRadius=\"0\"\n margins=\"0\"\n color={color}\n hover={hover}\n />\n\n {mobileLinks.map((navItem, i) => {\n if (navItem) {\n return (\n <li key={`onlyMobile_${i}`} className=\"nav-list-item onlyMobile\">\n <Link\n className=\"nav-link\"\n to={this.tt(navItem.path)}\n onClick={() => comm.toogleNavBar()}\n >\n <i className=\"fa fa-angle-right\" />\n {this.tt(navItem.name)}\n </Link>\n </li>\n );\n } else return null;\n })}\n\n {showMyAccount && (\n <MyAccountNavLink\n color={color}\n bgColor={background}\n hoverBkg={active}\n hoverColor={hover}\n className=\"my-account-link\"\n />\n )}\n {mobileLinks.length > 0 ? <hr className=\"mobileSeparator\" /> : null}\n\n {showCurrenciesDropdown && (\n <CurrenciesDropdown\n classNames=\"navbarLang\"\n currencies={this.props.listCurrencies}\n handleOnChange={currency => {\n this.props.changeCurrencyAction(currency);\n }}\n color={color}\n bgColor={background}\n hoverBkg={active}\n hoverColor={hover}\n />\n )}\n\n <LangDropdown\n classNames=\"navbarLang\"\n langs={this.props.langs}\n handleOnChange={lang => comm.changeLanguage(lang)}\n color={color}\n bgColor={background}\n hoverBkg={active}\n hoverColor={hover}\n />\n </ul>\n </StyledSection>\n );\n };\n}\n\nconst mapStateToProps = ({ siteConfiguration, global }) => ({\n settings: siteConfiguration.settings,\n langs: global.listLanguages,\n listCurrencies: global.listCurrencies,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n});\n\nconst mapDispatchToProps = dispatch => ({\n changeCurrencyAction: newCurrency => dispatch(changeCurrencyAction(newCurrency)),\n});\n\nconst NavBarComp = withTranslation()(withRouter(NavBar));\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NavBarComp);\n","import NavBar from './NavBar';\nexport default NavBar;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n alt: PropTypes.string,\n className: PropTypes.string,\n height: PropTypes.string,\n route: PropTypes.string,\n src: PropTypes.string,\n width: PropTypes.string,\n};\n\nexport const defaults = {\n src: '',\n alt: 'company name',\n};\n","import style from 'styled-components';\n\nexport const StyledLogo = style.span`\n box-sizing: border-box;\n display: flex;\n height: ${props => props.height || 'auto'};\n justify-content: center;\n align-items: center;\n padding: 5px 0px;\n margin: 0;\n width: ${props => props.width || '120px'};\n\n .logoImage {\n width: 100%;\n img{\n height: auto;\n }\n }\n`;\n","import React from 'react';\nimport { props, defaults } from './Logo.props';\nimport { StyledLogo } from './Logo.styled';\nimport { Link } from 'react-router-dom';\nimport { tlink } from 'utils/translationHelper';\nimport { withTranslation } from 'react-i18next';\nimport withSettingsContext from 'SettingsContext';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\nimport 'react-lazy-load-image-component/src/effects/blur.css';\n\nconst Logo = ({ alt, className, height, route, src, width, t, i18n, settings }) => (\n <React.Fragment>\n {settings.configurations.logoNavigateLink ? (\n <a href={settings.configurations.logoNavigateLink}>\n <StyledLogo className={className} height={height} width={width}>\n <LazyLoadImage\n src={src}\n alt={alt}\n threshold={100}\n effect=\"blur\"\n width=\"100%\"\n height=\"auto\"\n wrapperClassName=\"logoImage\"\n />\n </StyledLogo>\n </a>\n ) : (\n <Link to={tlink(route || '/', t, i18n, null, settings.configurations.langConfig)}>\n <StyledLogo className={className} height={height} width={width}>\n <LazyLoadImage\n src={src}\n alt={alt}\n threshold={100}\n effect=\"blur\"\n width=\"100%\"\n height=\"auto\"\n wrapperClassName=\"logoImage\"\n />\n </StyledLogo>\n </Link>\n )}\n </React.Fragment>\n);\n\nLogo.propTypes = props;\nLogo.defaultProps = defaults;\nexport default withSettingsContext(withTranslation()(Logo));\n","import Logo from './Logo';\nexport default Logo;\n","import React from 'react';\nimport { TranslatedComponent } from 'components/';\nimport { PropTypes } from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport { withTranslation } from 'react-i18next';\nimport { tlink } from 'utils/translationHelper';\nimport withSettingsContext from '../../SettingsContext';\n\nclass TranslatedLink extends TranslatedComponent {\n static propTypes = {\n name: PropTypes.string,\n path: PropTypes.string,\n };\n\n isExternal(link) {\n return link.indexOf('://') >= 0 || link.indexOf('tel:') >= 0 || link.indexOf('mailto:') >= 0;\n }\n\n getLink() {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n\n const { t, i18n, settings } = this.props;\n\n return tlink(this.props.path, t, i18n, null, settings.configurations.langConfig);\n }\n\n render() {\n return (\n <>\n {this.isExternal(this.props.path || '/') ? (\n <a\n className={this.props.className || 'linkItem'}\n href={this.props.path}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {this.props.children || this.tt(this.props.name)}\n </a>\n ) : (\n <Link className={this.props.className || 'linkItem'} to={this.getLink()}>\n {this.props.children || this.tt(this.props.name)}\n </Link>\n )}\n </>\n );\n }\n}\n\nexport default withSettingsContext(withTranslation()(TranslatedLink));\n","import TranslatedLink from './TranslatedLink';\nexport default TranslatedLink;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n items: PropTypes.array,\n className: PropTypes.string,\n logo: PropTypes.string,\n bgColor: PropTypes.string,\n color: PropTypes.string,\n logoWidth: PropTypes.string,\n rightNav: PropTypes.any,\n variant: PropTypes.string,\n activeColor: PropTypes.string,\n rightBtnColor: PropTypes.string,\n};\n","import styled from 'styled-components';\n\nexport const StyledHeader = styled.div`\n background: ${({ bgColor }) => bgColor || '#fff'};\n\n .nav-item {\n &.active .nav-link {\n color: ${({ activeColor, theme }) => activeColor || theme.colors.primary};\n }\n\n .nav-link {\n font-size: 0.9rem;\n color: ${({ color }) => color || '#656970'};\n\n &:hover {\n color: ${({ activeColor, theme }) => activeColor || theme.colors.primary};\n }\n }\n }\n\n .col {\n box-shadow: -1px 5px 13px -4px rgba(0, 0, 0, 0.1);\n }\n\n .navbar-light .navbar-toggler {\n border: none !important;\n }\n\n .right-navbar {\n .action-button .dropdown-toggle {\n border: ${({ theme, rightBtnColor }) =>\n `1px solid ${rightBtnColor || theme.colors.secondary}`};\n border-radius: 8px;\n color: ${({ theme, rightBtnColor }) => rightBtnColor || theme.colors.primary};\n padding: 7px 16px;\n transition: all 0.3s;\n\n &:hover {\n background: ${({ theme, rightBtnColor }) => rightBtnColor || theme.colors.secondary};\n color: white;\n }\n\n &::after {\n display: none;\n }\n }\n\n .cancel-button {\n border: ${({ theme, rightBtnColor }) =>\n `1px solid ${rightBtnColor || theme.colors.secondary}`};\n border-radius: 8px;\n color: ${({ theme, rightBtnColor }) => rightBtnColor || theme.colors.primary};\n transition: all 0.3s;\n\n .nav-link {\n color: ${({ theme, rightBtnColor }) => rightBtnColor || theme.colors.primary};\n }\n\n &:hover {\n background: ${({ theme, rightBtnColor }) => rightBtnColor || theme.colors.secondary};\n color: white;\n .nav-link {\n color: white;\n }\n }\n }\n\n .dropdown-menu {\n padding: 0;\n margin-top: 7px;\n min-width: 12rem;\n border-radius: 8px;\n\n & > div:last-child .nav-link {\n border-bottom: none;\n }\n\n .nav-link {\n font-size: 0.9rem;\n padding: 8px 16px;\n border-bottom: 1px solid #ecf0f5;\n color: ${({ theme }) => theme.font.colors.secondary};\n }\n }\n }\n\n .my-account_mobile {\n margin-top: 0.2rem;\n width: 100%;\n flex-wrap: wrap;\n margin: 0px 0px 1rem 0px;\n\n .login-button {\n margin-left: 0;\n margin-top: 18px;\n width: 100%;\n }\n\n .my-account-button {\n width: 100%;\n background-color: #fff;\n\n .dropdown-menu {\n border: none;\n\n .nav-link {\n font-size: 0.9rem;\n color: #656970;\n }\n }\n\n .dropdown-toggle {\n padding-left: 0;\n\n &:active span,\n span {\n max-width: 100%;\n overflow: visible;\n text-overflow: inherit;\n white-space: inherit;\n }\n }\n }\n }\n\n @media (max-width: 767px) {\n .navbar-nav {\n margin: 20px 0;\n }\n\n .cancel-button {\n width: 25%;\n text-align: center;\n }\n }\n`;\n","import styled from 'styled-components';\n\nexport const StyledCurrenciesDropdown = styled.div`\n color: ${props => props.theme.font.colors.primary};\n background: ${({ bgColor }) => bgColor};\n transition: background-color 200ms ease-in-out;\n cursor: pointer;\n padding: 0.5rem 1rem;\n text-transform: uppercase;\n width: auto;\n height: 100%;\n display: inline-block;\n position: relative;\n font-size: 12px;\n margin-left: 0.5rem;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n padding: 0;\n }\n\n @media (min-width: ${props => props.theme.screens.md}) {\n &:hover,\n &.active {\n background-color: ${props => props.bgColor || props.theme.colors.secondary};\n }\n\n &:hover span.currentCurrency {\n color: ${props => props.theme.font.colors.secondary};\n }\n }\n\n .currentCurrency {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n justify-content: flex-start;\n }\n\n &::after {\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: '';\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n }\n\n .fas.fa-dollar-sign {\n display: none;\n color: ${props => props.theme.font.colors.primary};\n margin-right: 10px;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n display: initial;\n }\n }\n\n .baseLang {\n @media (min-width: 0px) and (max-width: ${props => props.theme.screens.sm}) {\n display: initial;\n }\n }\n\n .baseLang {\n white-space: nowrap;\n @media (min-width: ${props => props.theme.screens.md}) {\n display: block;\n }\n }\n }\n\n .dropdownOptions {\n display: none;\n font-size: 12px;\n position: absolute;\n margin-top: 16px;\n z-index: 99999;\n left: 0;\n min-width: 5rem;\n padding: 0;\n flex-wrap: wrap;\n color: ${props => props.theme.font.colors.primary};\n overflow: hidden;\n border: 1px solid #f2f2f2;\n box-shadow: 0px 3px 8px #00000036;\n background-color: ${({ theme }) => theme.colors.bg};\n\n &.open {\n display: flex;\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n border-radius: 0.25rem;\n }\n\n .dropdownItem {\n padding: 5px 10px;\n cursor: pointer;\n width: 100%;\n\n .fa-dollar-sign {\n color: ${props => props.theme.font.colors.primary};\n margin-right: 10px;\n display: none;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n display: initial;\n }\n }\n\n &.active {\n background-color: ${props => props.hoverBkg || props.theme.colors.secondary};\n color: ${props => props.hoverColor || props.theme.font.colors.secondary};\n }\n\n @media (min-width: ${props => props.theme.screens.md}) {\n &:hover {\n background-color: ${props => props.hoverBkg || props.theme.colors.secondary};\n color: ${props => props.hoverColor || props.theme.font.colors.secondary};\n }\n }\n\n .baseLang {\n @media (min-width: 0px) and (max-width: ${props => props.theme.screens.sm}) {\n display: initial;\n }\n }\n\n .baseLang {\n @media (min-width: ${props => props.theme.screens.md}) {\n display: block;\n }\n }\n }\n }\n`;\n","import React, { useState, useEffect } from 'react';\nimport { StyledCurrenciesDropdown } from './CurrenciesDropdown.styled';\nimport { withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport queryString from 'query-string';\nimport Storage from 'utils/storage';\nimport { withRouter } from 'react-router-dom';\n\nconst CurrenciesDropdown = ({\n currentCurrency,\n currencies,\n handleOnChange,\n classNames,\n color,\n bgColor,\n hoverBkg,\n hoverColor,\n location,\n}) => {\n const [dropOpen, setDropOpen] = useState(false);\n\n const handleChangeCurrency = currency => {\n handleOnChange(currency);\n Storage.setElement('currency', JSON.stringify(currency));\n };\n\n useEffect(() => {\n const urlCurrency = queryString.parse(location.search).currencyCode;\n if (urlCurrency) {\n const currency = currencies.find(c => c.isoCode === urlCurrency.toUpperCase());\n if (currency) {\n return handleChangeCurrency(currency);\n }\n }\n\n const userCurrency = Storage.getElement('currency');\n if (userCurrency) {\n return handleOnChange(JSON.parse(userCurrency));\n }\n }, []);\n\n const toggleDropdown = () => setDropOpen(!dropOpen);\n\n const checkCurrency = currency => currentCurrency === currency;\n\n const getCurrencyName = currency => currency?.name || '';\n\n const changeCurrency = currency => {\n if (!checkCurrency(currency)) {\n handleChangeCurrency(currency);\n }\n toggleDropdown();\n };\n\n return (\n currencies.length > 1 && (\n <StyledCurrenciesDropdown\n className={`${classNames}`}\n color={color}\n bgColor={bgColor}\n hoverBkg={hoverBkg}\n hoverColor={hoverColor}\n onClick={toggleDropdown}\n >\n <span className=\"currentCurrency\">\n <span className=\"baseLang\">{getCurrencyName(currentCurrency)}</span>\n </span>\n <div className={`dropdownOptions ${dropOpen && 'open'}`}>\n {currencies.map(currency => {\n if (currentCurrency === currency) return null;\n\n return (\n <span\n key={`index_${currency.name}`}\n className={`${checkCurrency(currency) ? 'active' : ''} dropdownItem`}\n onClick={() => changeCurrency(currency)}\n >\n <span className=\"baseLang\">{getCurrencyName(currency)}</span>\n </span>\n );\n })}\n </div>\n </StyledCurrenciesDropdown>\n )\n );\n};\n\nconst mapStateToProps = ({ global }) => ({\n listCurrencies: global.listCurrencies,\n currentCurrency: global.currentCurrency,\n});\n\nexport default connect(mapStateToProps)(withRouter(withTranslation()(CurrenciesDropdown)));\n","import CurrenciesDropdown from './CurrenciesDropdown';\nexport default CurrenciesDropdown;","import Logo from 'components/logo';\nimport TranslatedLink from 'components/TranslatedLink';\nimport React from 'react';\nimport { Col } from 'react-bootstrap';\nimport Nav from 'react-bootstrap/Nav';\nimport Navbar from 'react-bootstrap/Navbar';\nimport NavDropdown from 'react-bootstrap/NavDropdown';\nimport { withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router';\nimport { props } from './NavBarHeader.props';\nimport { StyledHeader } from './NavBarHeader.styled';\nimport { tlink } from 'utils/translationHelper';\nimport { LangDropdown, MyAccountNavLink } from 'components';\nimport useWindowDimensions from 'utils/windowHelper';\nimport CurrenciesDropdown from 'components/CurrenciesDropdown';\nimport { changeCurrencyAction } from 'actions/global.actions';\n\nfunction NavBarHeader({\n t,\n settings,\n location,\n i18n,\n bgColor,\n color,\n logo,\n logoWidth,\n rightNav,\n variant,\n activeColor,\n rightBtnColor,\n langs,\n comm,\n listCurrencies,\n defaultCurrency,\n changeCurrencyAction,\n}) {\n const links = settings.configurations.sitemap.links;\n const showMyAccount =\n settings.myAccountConfiguration && settings.myAccountConfiguration.showMyAccount;\n const showCurrenciesDropdown =\n settings.featureFlags && settings.featureFlags.showCurrenciesDropdown;\n\n const { width } = useWindowDimensions();\n const isMobile = width < 1200;\n\n const isActive = navItem => {\n if (\n location.pathname === tlink(navItem.path, t, i18n, null, settings.configurations.langConfig)\n )\n return 'active';\n\n return '';\n };\n\n const settingsCurrency = settings.currency;\n\n return (\n <StyledHeader\n className=\"row\"\n color={color}\n bgColor={bgColor}\n activeColor={activeColor}\n rightBtnColor={rightBtnColor}\n >\n <Col>\n <Navbar collapseOnSelect expand=\"xl\" variant={variant || 'light'}>\n {logo && (\n <Logo src={logo} alt={settings.configurations.title || 'logo'} width={logoWidth} />\n )}\n\n <Navbar.Toggle aria-controls=\"responsive-navbar-nav\" />\n <Navbar.Collapse id=\"responsive-navbar-nav\">\n <Nav className=\"mr-auto ml-auto\">\n {links.map((link, idx) => {\n if (!link.noShowInHeader) {\n if (link.dropdown) {\n return (\n <NavDropdown\n key={idx}\n title={t(link.name)}\n id={`${link.name}-collasible-nav-dropdown`}\n >\n {link.subItems.map((item, index) => {\n return (\n <NavDropdown.Item className={isActive(item)} key={index}>\n <TranslatedLink className=\"nav-link\" {...item} />\n </NavDropdown.Item>\n );\n })}\n </NavDropdown>\n );\n }\n return (\n <Nav.Item key={idx} className={isActive(link)}>\n <TranslatedLink className=\"nav-link\" {...link} />\n </Nav.Item>\n );\n }\n return null;\n })}\n {showMyAccount && isMobile && <MyAccountNavLink className=\"my-account_mobile\" />}\n </Nav>\n {rightNav && (\n <Nav className=\"right-navbar\">\n {rightNav.links.length > 0 &&\n (settings.featureFlags && settings.featureFlags.cancelBookingButton ? (\n rightNav.links.map((item, idx) => {\n return (\n <div key={idx} className=\"cancel-button\">\n <TranslatedLink className=\"nav-link\" {...item}>\n {t(rightNav.title) || t('manageBooking')}\n </TranslatedLink>\n </div>\n );\n })\n ) : (\n <NavDropdown\n className=\"action-button\"\n title={t(rightNav.title) || t('manageBooking')}\n id=\"collasible-right-nav-dropdown\"\n >\n {rightNav.links.map((item, idx) => {\n return (\n <div key={idx}>\n <TranslatedLink className=\"nav-link\" {...item} />\n </div>\n );\n })}\n </NavDropdown>\n ))}\n </Nav>\n )}\n\n <LangDropdown\n classNames=\"navbarLang\"\n langs={langs}\n handleOnChange={lang => comm.changeLanguage(lang)}\n bgColor={bgColor || '#fff'}\n />\n\n {showCurrenciesDropdown && (\n <CurrenciesDropdown\n classNames=\"navbarLang\"\n currencies={listCurrencies}\n defaultCurrency={defaultCurrency}\n handleOnChange={currency => {\n changeCurrencyAction(currency);\n }}\n settingsCurrency={settingsCurrency}\n />\n )}\n\n {showMyAccount && !isMobile && <MyAccountNavLink />}\n </Navbar.Collapse>\n </Navbar>\n </Col>\n </StyledHeader>\n );\n}\n\nNavBarHeader.propTypes = props;\n\nconst mapStateToProps = ({ siteConfiguration, global }) => ({\n settings: siteConfiguration.settings,\n langs: global.listLanguages,\n listCurrencies: global.listCurrencies,\n defaultCurrency: global.defaultCurrency,\n currentCurrency: global.currentCurrency,\n});\n\nconst mapDispatchToProps = dispatch => ({\n changeCurrencyAction: newCurrency => dispatch(changeCurrencyAction(newCurrency)),\n});\n\nconst NavBarHeaderComp = withTranslation()(withRouter(NavBarHeader));\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NavBarHeaderComp);\n","import NavBarHeader from './NavBarHeader';\nexport default NavBarHeader;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n bgColor: PropTypes.string,\n color: PropTypes.string,\n hoverColor: PropTypes.string,\n contactLinks: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n socialHoverColor: PropTypes.string,\n showTopBarPhone: PropTypes.bool,\n};\n","import styled from 'styled-components';\n\nexport const StyledHeader = styled.div`\n background: ${({ bgColor }) => bgColor || '#EFEFEF'};\n z-index: 1;\n box-shadow: 0 1px 10px rgba(0, 0, 0, 0.2);\n padding: 0 15px;\n\n .col {\n display: flex;\n align-items: center;\n }\n\n .right-col {\n justify-content: flex-end;\n }\n\n .link-wrapper {\n flex-wrap: nowrap;\n display: flex;\n align-items: center;\n margin-right: 10px;\n\n &:hover {\n .linkItem,\n .link-icon {\n color: ${({ hoverColor, theme }) => hoverColor || theme.colors.primary};\n }\n }\n }\n\n .linkItem {\n font-size: 0.9rem;\n color: ${({ color }) => color || '#5F6368'};\n }\n\n .TopBarPhone {\n list-style: none;\n }\n\n .TopBarSocialList {\n padding-left: 0px;\n }\n\n .link-icon {\n margin-right: 5px;\n font-size: 0.8rem;\n color: ${({ color }) => color || '#5F6368'};\n transition: color 0.3s;\n }\n\n @media (max-width: 500px) {\n flex-direction: column;\n padding: 3px 10px;\n\n .col {\n justify-content: center;\n flex-wrap: wrap;\n }\n .navSocialList {\n padding: 0;\n }\n }\n`;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n links: PropTypes.array,\n className: PropTypes.string,\n borderRadius: PropTypes.string,\n bgColor: PropTypes.string,\n hoverBgColor: PropTypes.string,\n hoverColor: PropTypes.string,\n margin: PropTypes.string,\n showTopBarPhone: PropTypes.bool,\n location: PropTypes.string,\n};\n\nexport const defaults = {\n fontAwesomeClass: 'fa fa-cog',\n};\n","import styled from 'styled-components';\n\nexport const StyledSocialList = styled.ul`\n display: flex;\n box-sizing: border-box;\n list-style: none;\n margin: 0;\n flex-wrap: wrap;\n\n .socialItem {\n width: 40px;\n padding: 0px 10px;\n border-radius: ${props => props.borderRadius || '50%'};\n overflow: hidden;\n margin: ${props => props.margins || '10px 5px'};\n\n .socialLink {\n transition: background-color 200ms;\n text-decoration: none;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 0.5rem;\n color: ${props => props.color || props.theme.font.colors.primary};\n }\n\n .IconContainer {\n margin: 0px;\n\n .linkedin-logo {\n width: 1.4rem;\n }\n\n i.fab.fa-instagram {\n position: relative;\n bottom: -2px;\n font-size: 1rem;\n }\n\n .tripadvisor-logo {\n width: 1.3rem;\n }\n\n .x-logo,\n .tiktok-logo {\n width: 0.9rem;\n }\n }\n\n &:hover {\n background-color: ${props => props.theme.colors.secondary};\n fill: ${props => props.hover || props.theme.font.colors.hover};\n\n svg {\n path {\n fill: ${props => props.hover || props.theme.font.colors.hover};\n }\n }\n\n .socialLink i {\n color: ${props => props.hover || props.theme.font.colors.hover};\n }\n }\n }\n`;\n","import styled from 'styled-components';\n\nexport const StyledSocialListModern = styled.ul`\n display: flex;\n box-sizing: border-box;\n list-style: none;\n margin: 0;\n flex-wrap: wrap;\n\n .socialItem {\n width: 40px;\n padding: 2px 10px;\n border-radius: ${props => props.borderRadius || '50%'};\n overflow: hidden;\n margin: ${props => props.margins || '10px 5px'};\n transition: all 0.4s;\n\n .socialLink {\n text-decoration: none;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 0.5rem;\n color: ${props => props.color || props.theme.font.colors.primary};\n\n .IconContainer {\n font-size: 1.1rem;\n svg {\n width: 1.2rem;\n color: ${props => props.color || props.theme.colors.primary};\n path {\n fill: ${props => props.color || props.theme.colors.primary};\n }\n circle {\n fill: ${props => props.color || props.theme.colors.primary};\n }\n }\n\n svg.linkedin-logo {\n width: 1.4rem !important;\n }\n }\n }\n\n &:hover {\n background-color: ${props => props.theme.colors.secondary};\n\n .socialLink i {\n color: ${props => props.hover || props.theme.font.colors.secondary};\n fill: ${props => props.color || props.theme.font.colors.primary};\n }\n\n .socialLink {\n .IconContainer {\n svg {\n path {\n fill: ${props => props.theme.font.colors.secondary};\n }\n circle {\n fill: ${props => props.theme.font.colors.secondary};\n }\n }\n }\n }\n }\n }\n`;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M448,209.91a210.06,210.06,0,0,1-122.77-39.25V349.38A162.55,162.55,0,1,1,185,188.31V278.2a74.62,74.62,0,1,0,52.23,71.18V0l88,0a121.18,121.18,0,0,0,1.86,22.17h0A122.18,122.18,0,0,0,381,102.39a121.43,121.43,0,0,0,67,20.14Z\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n viewBox: \"0 0 448 512\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/tiktok.4f5375b2.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n viewBox: \"0 0 512 512\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/x.68c21700.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M18.72 3.99997H5.37C5.19793 3.99191 5.02595 4.01786 4.86392 4.07635C4.70189 4.13484 4.55299 4.22471 4.42573 4.34081C4.29848 4.45692 4.19537 4.59699 4.12232 4.75299C4.04927 4.909 4.0077 5.07788 4 5.24997V18.63C4.01008 18.9901 4.15766 19.3328 4.41243 19.5875C4.6672 19.8423 5.00984 19.9899 5.37 20H18.72C19.0701 19.9844 19.4002 19.8322 19.6395 19.5761C19.8788 19.32 20.0082 18.9804 20 18.63V5.24997C20.0029 5.08247 19.9715 4.91616 19.9078 4.76122C19.8441 4.60629 19.7494 4.466 19.6295 4.34895C19.5097 4.23191 19.3672 4.14059 19.2108 4.08058C19.0544 4.02057 18.8874 3.99314 18.72 3.99997ZM9 17.34H6.67V10.21H9V17.34ZM7.89 9.12997C7.72741 9.13564 7.5654 9.10762 7.41416 9.04768C7.26291 8.98774 7.12569 8.89717 7.01113 8.78166C6.89656 8.66615 6.80711 8.5282 6.74841 8.37647C6.6897 8.22474 6.66301 8.06251 6.67 7.89997C6.66281 7.73567 6.69004 7.57169 6.74995 7.41854C6.80986 7.26538 6.90112 7.12644 7.01787 7.01063C7.13463 6.89481 7.2743 6.80468 7.42793 6.74602C7.58157 6.68735 7.74577 6.66145 7.91 6.66997C8.07259 6.66431 8.2346 6.69232 8.38584 6.75226C8.53709 6.8122 8.67431 6.90277 8.78887 7.01828C8.90344 7.13379 8.99289 7.27174 9.05159 7.42347C9.1103 7.5752 9.13699 7.73743 9.13 7.89997C9.13719 8.06427 9.10996 8.22825 9.05005 8.3814C8.99014 8.53456 8.89888 8.6735 8.78213 8.78931C8.66537 8.90513 8.5257 8.99526 8.37207 9.05392C8.21843 9.11259 8.05423 9.13849 7.89 9.12997ZM17.34 17.34H15V13.44C15 12.51 14.67 11.87 13.84 11.87C13.5822 11.8722 13.3313 11.9541 13.1219 12.1045C12.9124 12.2549 12.7546 12.4664 12.67 12.71C12.605 12.8926 12.5778 13.0865 12.59 13.28V17.34H10.29V10.21H12.59V11.21C12.7945 10.8343 13.0988 10.5225 13.4694 10.3089C13.84 10.0954 14.2624 9.98848 14.69 9.99997C16.2 9.99997 17.34 11 17.34 13.13V17.34Z\",\n fill: \"#000000\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n viewBox: \"0 0 24 24\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/linkedin.cdfbd4f5.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"g\", {\n id: \"Capa_2\"\n},\n/*#__PURE__*/\nReact.createElement(\"circle\", {\n cx: 6.2,\n cy: 13.1,\n r: 2.1\n}),\n/*#__PURE__*/\nReact.createElement(\"circle\", {\n cx: 18.1,\n cy: 13.1,\n r: 2.1\n}));\n\nvar _ref2 =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M0.2,13.2c0,3.3,2.7,5.9,5.9,5.9c1.5,0,2.9-0.6,4-1.6l1.9,2.1l1.9-2.1c1.1,1,2.5,1.6,4,1.6c3.3,0,5.9-2.7,5.9-5.9 c0-1.7-0.7-3.3-1.9-4.4l1.9-2.1h-4.3c-4.4-3.1-10.4-3.1-15,0H0.2l1.9,2.1C0.9,9.9,0.2,11.5,0.2,13.2z M22.1,13.2c0,2.2-1.8,4-4,4 s-4-1.8-4-4s1.8-4,4-4S22.1,11,22.1,13.2L22.1,13.2z M12.1,6.3c1.5,0,3.1,0.3,4.5,0.9c-2.5,1-4.5,3.2-4.5,5.9c0-2.6-1.9-4.9-4.5-5.9 C9,6.6,10.6,6.3,12.1,6.3z M6.2,9.2c2.2,0,4,1.8,4,4s-1.8,4-4,4s-4-1.8-4-4C2.1,11,3.9,9.2,6.2,9.2L6.2,9.2L6.2,9.2z\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n version: 1.1,\n id: \"Capa_1\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 24 24\",\n style: {\n \"enableBackground\": \"new 0 0 24 24\"\n },\n xmlSpace: \"preserve\"\n }, props), _ref, _ref2)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/tripadvisor.7b3d852f.svg\";\nexport { SvgComponent as ReactComponent };","import React from 'react';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\nimport { props, defaults } from './SocialList.props';\nimport { StyledSocialList } from './SocialList.styled';\nimport { StyledSocialListModern } from './SocialList.styled.modern';\nimport { ReactComponent as TikTokIcon } from '../../assets/images/logos/tiktok.svg';\nimport { ReactComponent as XIcon } from '../../assets/images/logos/x.svg';\nimport { ReactComponent as LinkedInIcon } from '../../assets/images/logos/linkedin.svg';\nimport { ReactComponent as TripAdvisorIcon } from '../../assets/images/logos/tripadvisor.svg';\n\nconst SocialList = props => {\n const getIcon = name => (name === 'facebook' ? `fa-${name}-f` : `fa-${name}`);\n\n const renderNewIcons = name => {\n switch (name) {\n case 'tiktok':\n return <TikTokIcon className=\"tiktok-logo\" />;\n case 'twitter':\n return <XIcon className=\"x-logo\" />;\n case 'linkedin':\n return <LinkedInIcon className=\"linkedin-logo\" />;\n case 'tripadvisor':\n return <TripAdvisorIcon className=\"tripadvisor-logo\" />;\n default:\n return <i className={name === 'phone' ? `fas ${getIcon(name)}` : `fab ${getIcon(name)}`} />;\n }\n };\n\n const { className, links, settings, location } = props;\n\n const getTemplateStyledComponent = () => {\n if (settings.theme.template === MODERN_THEME) {\n return StyledSocialListModern;\n }\n return StyledSocialList;\n };\n\n const StyledComponent = getTemplateStyledComponent();\n\n return (\n <StyledComponent {...props} className={className}>\n {links.map((item, index) => (\n <li className=\"socialItem\" key={index}>\n <a\n name={item.name}\n className=\"socialLink\"\n href={item.path || '/'}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n id={item.name === 'whatsapp' ? `whatsapp-button-${location}` : ''}\n >\n <p className=\"IconContainer\">{renderNewIcons(item.name)}</p>\n </a>\n </li>\n ))}\n </StyledComponent>\n );\n};\n\nSocialList.propTypes = props;\nSocialList.defaultProps = defaults;\n\nexport default withSettingsContext(SocialList);\n","import SocialList from './SocialList';\nexport default SocialList;\n","import React from 'react';\nimport { Col } from 'react-bootstrap';\nimport { props } from './TopBar.props';\nimport { StyledHeader } from './TopBar.styled';\nimport SocialList from 'components/SocialList';\nimport TranslatedLink from 'components/TranslatedLink';\nimport withSettingsContext from 'SettingsContext';\n\nfunction TopBar({\n bgColor,\n color,\n hoverColor,\n contactLinks,\n socialHoverColor,\n settings: {\n configurations: { socialNetworks },\n },\n includeSocialNetworks,\n showTopBarPhone,\n}) {\n const getIcon = path => {\n if (path.includes('mailto')) {\n return 'far fa-envelope';\n }\n if (path.includes('wa.me')) {\n return 'fab fa-whatsapp';\n }\n if (path.includes('://')) {\n return 'fas fa-external-link-alt';\n }\n if (path.includes('tel')) {\n return 'fas fa-phone';\n }\n return 'fas fa-angle-right';\n };\n\n return (\n <StyledHeader className=\"row\" bgColor={bgColor} hoverColor={hoverColor}>\n <Col>\n {contactLinks\n .filter(f => f.path.includes('mailto'))\n .map((contact, idx) => {\n return (\n <div className=\"link-wrapper\" key={idx}>\n <i className={`link-icon ${getIcon(contact.path)}`} />\n <TranslatedLink {...contact} />\n </div>\n );\n })}\n </Col>\n <Col className=\"right-col\">\n {showTopBarPhone &&\n contactLinks\n .filter(f => f.path.includes('tel'))\n .map((contact, idx) => {\n return (\n <li className=\"socialItem TopBarPhone\" key={idx}>\n <a\n name=\"phone\"\n className=\"socialLink\"\n href={contact.path}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {contact.path.slice(4)}\n </a>\n </li>\n );\n })}\n <SocialList\n bgColor=\"transparent\"\n className=\"navSocialList TopBarSocialList\"\n links={contactLinks.filter(f => !f.path.includes('mailto'))}\n borderRadius=\"0\"\n margins=\"0\"\n color={color}\n hover={socialHoverColor}\n location=\"header\"\n />\n {includeSocialNetworks && socialNetworks && (\n <SocialList\n bgColor=\"transparent\"\n className=\"navSocialList\"\n links={socialNetworks}\n borderRadius=\"0\"\n margins=\"0\"\n color={color}\n hover={socialHoverColor}\n />\n )}\n </Col>\n </StyledHeader>\n );\n}\n\nTopBar.propTypes = props;\n\nexport default withSettingsContext(TopBar);\n","import TopBar from './TopBar';\nexport default TopBar;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n items: PropTypes.array,\n className: PropTypes.string,\n logo: PropTypes.string,\n slogan: PropTypes.object,\n color: PropTypes.string,\n background: PropTypes.string,\n menuCallback: PropTypes.func,\n location: PropTypes.string,\n};\n\nexport const defaults = {\n items: [],\n background: '#000',\n color: 'white',\n};\n\nexport const sloganProps = {\n label: PropTypes.string.isRequired,\n subLabel: PropTypes.string.isRequired,\n labelColor: PropTypes.string,\n labelFontSize: PropTypes.string,\n subLabelWeight: PropTypes.string,\n};\n\nexport const sloganDefaultProps = {};\n\nexport const HeaderDefaultProps = {\n color: '#fff',\n};\n\nexport const HeaderItemProps = {\n label: PropTypes.string,\n content: PropTypes.shape({\n type: PropTypes.string.isRequired,\n text: PropTypes.string,\n path: PropTypes.string.isRequired,\n }),\n icon: PropTypes.string.isRequired,\n className: PropTypes.string,\n callback: PropTypes.func,\n color: PropTypes.string,\n hover: PropTypes.string,\n iconHover: PropTypes.string,\n};\n\nexport const HeaderItemDefaultProps = {\n color: '#fff',\n};\n","import styled from 'styled-components';\n\nexport const StyledHeader = styled.header`\n display: flex;\n flex-wrap: wrap;\n box-sizing: border-box;\n background: ${props => props.bgcolor || props.theme.colors.primary};\n color: ${props => props.theme.font.colors.primary};\n align-item: center;\n padding: 10px 2%;\n padding-top: 1rem;\n padding-bottom: 1.5rem;\n\n * {\n margin-block-end: 0;\n margin-block-start: 0;\n }\n @media (max-width: 1400px) {\n padding-top: 0.8rem;\n padding-bottom: 0.8rem;\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n padding: 0px !important;\n padding-top: 0.5rem !important;\n\n .w50 {\n width: 50%;\n }\n }\n\n &.row-p {\n @media (max-width: ${props => props.theme.screens.md}) {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n &.sticky {\n @media (max-width: ${props => props.theme.screens.md}) {\n position: sticky;\n top: 0;\n z-index: 9999;\n }\n }\n }\n\n .mobileMenu {\n position: absolute;\n top: 0;\n padding: 10px;\n height: 100%;\n display: flex;\n left: 0;\n justify-content: center;\n align-items: center;\n opacity: 0.5;\n font-size: 25px;\n color: ${props => props.mobileMenuColor || props.theme.font.colors.secondary};\n\n @media (min-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n\n .header-item-container {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n\n .header-item {\n max-width: 100%;\n }\n }\n\n .header-logo {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n justify-content: center;\n img {\n width: 100px;\n }\n }\n }\n\n .header-slogan {\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n }\n\n .header-associates-btn {\n margin-left: 50px;\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n .header-item-container {\n background-color: ${props => props.theme.colors.mobileHeader};\n margin: 0;\n\n .header-item {\n border-right: 1px solid #3b3b3b;\n margin-right: 0;\n\n .icon {\n border: none;\n font-size: 1rem;\n color: ${props => props.theme.colors.mobileHeaderIcons || 'white'} !important;\n &:hover {\n color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n }\n }\n }\n\n .header-logo {\n margin-bottom: 10px;\n }\n }\n`;\n\nexport const StyledHeaderSlogan = styled.div`\n float: right;\n\n .label {\n color: ${props => props.labelColor || props.theme.colors.buttonPrimaryColor};\n font-size: ${props => props.labelFontSize || '23px'};\n font-weight: 700;\n font-style: ${props => props.labelStyle || 'normal'};\n line-height: 1;\n transition: color 0.2s ease-out;\n cursor: pointer;\n\n i {\n display: ${props => props.displayIcon || 'none'};\n margin-left: 10px;\n }\n\n &:hover {\n color: ${props => props.labelColorHover || props.theme.colors.buttonPrimaryBgHover};\n text-decoration: none;\n }\n }\n\n .sub-label {\n line-height: 1;\n font-size: 11.5px;\n font-weight: ${props => props.subLabelWeight || '400'};\n color: ${props => props.subLabelColor || props.theme.font.colors.secondary};\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n`;\n\nexport const StyledHeaderItem = styled.div`\n .content-item {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n color: ${props => props.color || props.theme.font.colors.secondary};\n text-decoration: none;\n cursor: pointer;\n text-align: right;\n white-space: nowrap;\n padding: 2px;\n\n p {\n color: ${props => props.color || props.theme.font.colors.secondary};\n transition: color 0.3s;\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n justify-content: center;\n }\n\n .content-text {\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 12px;\n }\n\n &:hover {\n color: ${props => props.hover || props.theme.colors.secondary};\n p,\n label {\n color: ${props => props.hover || props.theme.colors.secondary};\n }\n\n .font-icon {\n border-color: ${props => props.iconHover || props.hover || props.theme.colors.secondary};\n color: ${props => props.iconHover || props.hover || props.theme.colors.secondary};\n }\n }\n\n .font-icon {\n border: 1px solid ${props => props.color || props.theme.font.colors.secondary};\n border-radius: 40px;\n padding: 10px 11px 10px 10px;\n font-size: 16px;\n transition: color 0.2s ease-out;\n width: 38px;\n }\n\n .icon-img > img {\n width: 38px;\n height: 38px;\n }\n\n p {\n font-weight: 400;\n font-size: 12px;\n text-transform: none;\n }\n\n .label {\n font-weight: 900;\n font-style: normal;\n text-transform: uppercase;\n line-height: 1.1;\n font-size: 12px;\n }\n }\n`;\n","import styled from 'styled-components';\n\nexport const StyledHeaderModern = styled.header`\n display: flex;\n flex-wrap: wrap;\n box-sizing: border-box;\n background: ${props => props.bgcolor || props.theme.colors.primary};\n color: ${props => props.theme.font.colors.primary};\n align-item: center;\n border-bottom: 1px solid ${props => props.theme.colors.primary};\n * {\n margin-block-end: 0;\n margin-block-start: 0;\n }\n\n .header-logo {\n padding: 10px 0 !important;\n }\n\n @media (min-width: 768px) {\n .desktop i {\n display: none;\n }\n .fa-ban {\n display: none;\n }\n }\n\n @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 1) {\n .desktop i {\n display: none;\n }\n .fa-ban {\n display: none;\n }\n }\n\n @media (max-width: 767px) {\n border-bottom: none;\n\n .desktop {\n border: none !important;\n color: #fff !important;\n }\n\n .btnCancel {\n background: none !important;\n padding: 8px 36px !important;\n }\n }\n\n @media (max-width: 1400px) {\n padding-top: 0.8rem;\n padding-bottom: 0.8rem;\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n padding: 0px !important;\n padding-top: 0.5rem !important;\n\n .w50 {\n width: 50%;\n }\n }\n\n &.row-p {\n @media (max-width: ${props => props.theme.screens.md}) {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n }\n\n .mobileMenu {\n position: absolute;\n top: 0;\n padding: 10px;\n height: 100%;\n display: flex;\n left: 0;\n justify-content: center;\n align-items: center;\n opacity: 0.5;\n font-size: 25px;\n color: ${props => props.mobileMenuColor || props.theme.font.colors.secondary};\n\n @media (min-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n\n .header-item-container {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n\n .header-item {\n max-width: 100%;\n }\n }\n\n .header-logo {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n justify-content: center;\n img {\n width: 100px;\n }\n }\n }\n\n .header-slogan {\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n }\n\n .header-associates-btn {\n margin-left: 50px;\n }\n\n .btnCancel {\n background: #ff6363;\n border-radius: 8px;\n color: #fff;\n padding: 8px 13px;\n }\n\n .btnCancel label {\n color: #fff;\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n .header-item-container {\n background-color: ${props => props.theme.colors.mobileHeader};\n margin: 0;\n\n .header-item {\n margin-right: 0;\n\n .icon {\n border: none;\n font-size: 1rem;\n color: ${props => props.theme.colors.mobileHeaderIcons || 'white'} !important;\n &:hover {\n color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n }\n }\n }\n\n .header-logo {\n margin-bottom: 10px;\n }\n }\n`;\n\nexport const StyledHeaderSlogan = styled.div`\n float: right;\n\n .label {\n color: ${props => props.labelColor || props.theme.colors.buttonPrimaryColor};\n font-size: ${props => props.labelFontSize || '23px'};\n font-weight: 700;\n font-style: ${props => props.labelStyle || 'normal'};\n transition: color 0.2s ease-out;\n cursor: pointer;\n\n i {\n display: ${props => props.displayIcon || 'none'};\n margin-left: 10px;\n }\n\n &:hover {\n color: ${props => props.labelColorHover || props.theme.colors.buttonPrimaryBgHover};\n text-decoration: none;\n }\n }\n\n .sub-label {\n font-size: 11.5px;\n font-weight: ${props => props.subLabelWeight || '400'};\n color: ${props => props.subLabelColor || props.theme.font.colors.secondary};\n }\n\n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n`;\n\nexport const StyledHeaderItem = styled.div`\n .content-item {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n color: ${props => props.color || props.theme.font.colors.secondary};\n text-decoration: none;\n cursor: pointer;\n text-align: right;\n white-space: nowrap;\n\n p {\n color: ${props => props.color || props.theme.font.colors.secondary}; \n transition: color 0.3s;\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n justify-content: center;\n }\n\n .content-text {\n display: flex;\n justify-content: center;\n align-items: left;\n font-size: 12px;\n text-align:left;\n margin-top:0 !important;\n margin-bottom:0 !important\n }\n\n &:hover {\n color: ${props => props.hover || props.theme.colors.secondary};\n p, label {\n color: ${props => props.hover || props.theme.colors.secondary};\n }\n\n .font-icon {\n border-color: ${props => props.iconHover || props.hover || props.theme.colors.secondary};\n color: ${props => props.iconHover || props.hover || props.theme.colors.secondary};\n }\n }\n\n .font-icon {\n border-radius: 40px;\n padding: 10px 11px 10px 10px;\n font-size: 16px;\n transition: color 0.2s ease-out;\n width: 38px;\n }\n\n .icon-img > img {\n width: 38px;\n height: 38px;\n }\n\n p {\n font-weight: 500;\n font-size: 13px;\n text-transform: none;\n }\n\n .label {\n font-weight: 400;\n font-size: 13px;\n }\n`;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { StyledHeaderItem } from './header.styled';\nimport { HeaderItemProps, HeaderItemDefaultProps } from './header.props';\nimport { tt, tlink } from '../../utils/translationHelper';\nimport { gtag_report_conversion } from '../../utils/googleTagsHelper';\nimport { useTranslation } from 'react-i18next';\nimport withSettingsContext from 'SettingsContext';\nimport { Btn } from 'components';\n\nconst HeaderItem = ({\n content,\n label,\n icon,\n className,\n color,\n hover,\n callback,\n iconHover,\n settings,\n location,\n}) => {\n const { t, i18n } = useTranslation();\n\n let iconItem;\n\n if (icon && icon.includes('fa') && !icon.includes('.')) {\n iconItem = <i className={`font-icon icon ${icon} float-right ml-2`} />;\n } else {\n const faIcon = content.type === 'bphone' ? 'fas fa-phone' : 'fab fa-whatsapp';\n const socialItemFlag = content.type === 'socialLink' ? true : false;\n const faIconFb =\n (content.type === 'socialLink') & (content.name === 'facebook')\n ? 'fab fa-facebook'\n : 'fab fa-instagram';\n\n iconItem = (\n // React.Fragment\n <>\n <div className=\"icon icon-img ml-2 d-none d-md-block\">\n {icon && <img src={icon} alt={icon} />}\n </div>\n {/* if there is a socialItem with name 'facebook' or 'instagram' in header */}\n {socialItemFlag ? (\n <i className={faIconFb + ` font-icon icon float-right ml-2 d-sm-block d-md-none`} />\n ) : (\n <i className={faIcon + ` font-icon icon float-right ml-2 d-sm-block d-md-none`} />\n )}\n </>\n );\n }\n\n const contentText = (\n <div className=\"content-text d-none d-md-block mt-1\">\n <span className=\"label\">{tt(label, t)}</span>\n <br />\n <p>{tt(content.text, t)}</p>\n </div>\n );\n\n let contentType;\n switch (content.type) {\n case 'link': {\n contentType = (\n <Link\n className=\"content-item\"\n to={tlink(content.path, t, i18n, null, settings.configurations.langConfig)}\n >\n {contentText}\n {iconItem}\n </Link>\n );\n break;\n }\n\n case 'socialLink': {\n contentType = (\n <a\n className=\"content-item\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`${content.path}`}\n >\n {contentText}\n {iconItem}\n </a>\n );\n break;\n }\n\n case 'customHtml': {\n contentType = (\n <a\n className=\"content-item\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`${content.path}`}\n >\n <div\n className={`${className ? className : ''} customContent`}\n dangerouslySetInnerHTML={{ __html: content.text }}\n />\n </a>\n );\n break;\n }\n\n case 'phone': {\n const wpUrl = `https://api.whatsapp.com/send?phone=${content.path}`;\n\n if (content.GTMEventId) {\n contentType = (\n <a\n className=\"content-item\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => gtag_report_conversion(wpUrl, content.GTMEventId)}\n id={`whatsapp-button-${location}`}\n >\n {contentText}\n {iconItem}\n </a>\n );\n } else {\n contentType = (\n <a\n className=\"content-item\"\n id={`whatsapp-button-${location}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={wpUrl}\n >\n {contentText}\n {iconItem}\n </a>\n );\n }\n\n break;\n }\n\n case 'bphone': {\n contentType = (\n <a\n className=\"content-item\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`tel:${content.path}`}\n >\n {contentText}\n {iconItem}\n </a>\n );\n break;\n }\n\n case 'email': {\n contentType = (\n <a className=\"content-item\" href={`mailto:${content.path}`}>\n {contentText}\n {iconItem}\n </a>\n );\n break;\n }\n\n case 'text': {\n contentType = (\n <div className=\"content-item\">\n {contentText}\n {iconItem}\n </div>\n );\n break;\n }\n\n case 'button': {\n contentType = (\n <Btn className=\"header-associates-btn\" text={content.text} link={content.path} />\n );\n break;\n }\n\n default: {\n contentType = (\n <Link\n className=\"content-item\"\n to={tlink(content.path, t, i18n, null, settings.configurations.langConfig)}\n >\n {contentText}\n {iconItem}\n </Link>\n );\n break;\n }\n }\n return (\n <StyledHeaderItem\n className={`${className} header-item`}\n color={color}\n hover={hover}\n onClick={callback}\n iconHover={iconHover}\n >\n {contentType}\n </StyledHeaderItem>\n );\n};\n\nHeaderItem.propTypes = HeaderItemProps;\nHeaderItem.defaultProps = HeaderItemDefaultProps;\nexport default withSettingsContext(HeaderItem);\n","import React from 'react';\nimport { StyledHeaderSlogan } from './header.styled';\nimport { sloganProps, sloganDefaultProps } from './header.props';\nimport { useTranslation } from 'react-i18next';\nimport { tt } from '../../utils/translationHelper';\n\nconst HeaderSlogan = ({\n subLabel,\n subLabelColor,\n subLabelHover,\n subLabelWeight,\n label,\n label2,\n labelColor,\n labelColorHover,\n labelFontSize,\n className,\n labelStyle,\n displayIcon,\n}) => {\n const { t } = useTranslation();\n\n return (\n <StyledHeaderSlogan\n className={`header-slogan ${className}`}\n labelColor={labelColor}\n labelColorHover={labelColorHover}\n labelFontSize={labelFontSize}\n subLabelColor={subLabelColor}\n subLabelHover={subLabelHover}\n subLabelWeight={subLabelWeight}\n labelStyle={labelStyle}\n displayIcon={displayIcon}\n label2={label2}\n >\n {label2 ? (\n <div>\n <a href={`tel:${label2}`} className=\"label\">\n {label2} <i className=\"fa fa-phone ml-1\"></i>\n </a>\n </div>\n ) : (\n ''\n )}\n <a href={`tel:${label}`} className=\"label\">\n {label}\n <i className=\"fa fa-phone\"></i>\n </a>\n <br />\n <p className=\"sub-label\">{tt(subLabel, t)}</p>\n </StyledHeaderSlogan>\n );\n};\n\nHeaderSlogan.propTypes = sloganProps;\nHeaderSlogan.defaultProps = sloganDefaultProps;\n\nexport default HeaderSlogan;\n","import React, { useEffect, useRef } from 'react';\nimport { connect } from 'react-redux';\nimport { props, defaults } from './header.props';\nimport { StyledHeader } from './header.styled';\nimport { StyledHeaderModern } from './header.styled.modern';\nimport HeaderItem from './HeaderItem';\nimport HeaderSlogan from './HeaderSlogan';\nimport Logo from '../logo';\nimport { MODERN_THEME } from 'styled/constants';\nimport useWindowDimensions from 'utils/windowHelper';\n\nconst Header = ({\n items,\n logo,\n mobileLogo,\n slogan,\n associates,\n className,\n comm,\n logoWidth,\n settings,\n bgcolor,\n mobileMenuColor,\n stickyMenu,\n}) => {\n const getTemplateStyledComponent = () => {\n if (settings.theme.template === MODERN_THEME) {\n return StyledHeaderModern;\n }\n return StyledHeader;\n };\n const StyledComponent = getTemplateStyledComponent();\n const { width } = useWindowDimensions();\n const isMobile = width < 768;\n const headerRef = useRef(null);\n const isOpen = comm.isNavBarOpen();\n\n const handleOutsideClick = event => {\n if (isOpen && !isMobile && headerRef.current && !headerRef.current.contains(event.target)) {\n comm.toogleNavBar();\n }\n };\n\n useEffect(() => {\n if (isOpen) {\n document.addEventListener('click', handleOutsideClick);\n } else {\n document.removeEventListener('click', handleOutsideClick);\n }\n\n return () => {\n document.removeEventListener('click', handleOutsideClick);\n };\n }, [isOpen]);\n\n function handleMobileLogo() {\n if (!isMobile) {\n return <Logo src={logo} alt={settings.configurations.title || 'logo'} width={logoWidth} />;\n } else {\n return (\n <Logo\n src={mobileLogo || logo}\n alt={settings.configurations.title || 'logo'}\n width={logoWidth}\n />\n );\n }\n }\n\n return (\n <StyledComponent\n ref={headerRef}\n className={`row ${className} header row-p ${stickyMenu && 'sticky'}`}\n bgcolor={bgcolor}\n mobileMenuColor={mobileMenuColor}\n >\n <div className=\"col-sm-12 col-md-4 p-0 header-logo\">\n <div className=\"mobileMenu\" onClick={comm.toogleNavBar}>\n <i className=\"fas fa-bars\" />\n </div>\n {handleMobileLogo()}\n </div>\n <div className=\"col-xs-12 col-md-8 p-0 header-item-container text-right\">\n {items.map(item => (\n <HeaderItem className=\"w50\" key={item.label} {...item} location=\"header\" />\n ))}\n <HeaderItem\n className=\"w50\"\n key=\"bphone\"\n {...{ content: { type: 'bphone', path: slogan.label }, icon: '' }}\n />\n <HeaderSlogan className=\"\" {...slogan} />\n {associates && <HeaderItem className=\"w50\" key=\"assoc-button\" {...associates} />}\n </div>\n </StyledComponent>\n );\n};\n\nHeader.propTypes = props;\nHeader.defaultProps = defaults;\nHeader.Item = HeaderItem;\nHeader.Slogan = HeaderSlogan;\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps)(Header);\n","import Header from './Header';\nexport default Header;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n bgcolor: PropTypes.string,\n borderColor: PropTypes.string,\n borderSize: PropTypes.string,\n borderStyle: PropTypes.string,\n className: PropTypes.string,\n color: PropTypes.string,\n hover: PropTypes.string,\n height: PropTypes.string,\n padding: PropTypes.string,\n width: PropTypes.string,\n configuration: PropTypes.object,\n companyInfo: PropTypes.object,\n collapsible: PropTypes.bool,\n seeMore: PropTypes.string,\n seeLess: PropTypes.string,\n};\n","import style from 'styled-components';\n\nexport const StyledBottomFooter = style.div`\n background-color: #2C2C2C;\n\n\n p{\n font-size: 11px !important;\n color: #888888 !important;\n }\n\n a{\n color: red;\n font-weight: 700;\n\n &:hover{\n text-decoration: none;\n }\n }\n`;\n\nexport const StyledFooter = style.footer`\n background: ${props => props.bgcolor || props.theme.colors.primary};\n box-sizing: border-box;\n border-top-width: ${props => props.borderSize || '1px'};\n border-top-style: ${props => props.borderStyle || 'solid'};\n color: ${props => props.color || props.theme.font.colors.secondary};\n display: flex;\n flex-wrap: wrap;\n height: ${props => props.height || 'auto'};\n padding: ${props => props.padding || '5%'};\n margin-left: -15px;\n margin-right: -15px;\n\n @media print {\n display: none;\n }\n\n .linkItem {\n color: ${props => props.color || props.theme.font.colors.secondary} !important;\n }\n\n .linkItem:hover{\n color: ${props => props.hover || 'inhearit'}!important ;\n }\n\n .companyInfo {\n width: 25%;\n @media (max-width: ${props => props.theme.screens.md}) {\n width: 100%;\n padding: 0 15px;\n }\n @media (max-width: ${props => props.theme.screens.lg}) and (min-width: ${props =>\n props.theme.screens.md}) {\n flex: 0 0 35%;\n max-width: 35%;\n }\n\n }\n\n .companyInfo h3{\n color: ${({ companyInfoTitleColor }) => companyInfoTitleColor || 'inherit'};\n }\n\n .companyInfo p{\n color: ${({ companyInfoTextColor }) => companyInfoTextColor || 'inherit'};\n }\n\n .footerSocial {\n padding: 0px;\n margin-top: 1rem;\n \n .socialItem {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 40px;\n background-color: ${props => props.theme.colors.bg};\n\n p {\n color: ${({ socialColor }) => socialColor || 'inherit'};\n margin: 0;\n \n svg path {\n fill: ${({ socialColor }) => `${socialColor} !important` || 'inherit'};\n }\n }\n\n &:hover {\n color: ${props => props.theme.font.colors.secondary};\n background-color: ${props => props.theme.colors.secondary};\n }\n }\n }\n\n .footerLists {\n width: 75%;\n display: flex;\n justify-content: space-around;\n\n @media print {\n display: none;\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n margin-top: 30px;\n }\n @media (max-width: ${props => props.theme.screens.lg}) and (min-width: ${props =>\n props.theme.screens.md}) {\n width: 65%;\n }\n\n .footerLinkList {\n padding: 0 15px;\n margin-bottom: 1rem;\n }\n\n .footerColumn {\n flex-direction: column;\n width: 25%;\n\n h3{\n color: ${props => props.color || props.theme.font.colors.secondary} !important\n }\n\n @media (max-width: ${props => props.theme.screens.lg}) and (min-width: ${props =>\n props.theme.screens.md}) {\n width: 50%;\n &.lg-hide {\n display: none;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n &.md-hide {\n display: none;\n }\n\n width: 100%;\n flex-direction: row;\n }\n }\n }\n\n`;\n","import React from 'react';\nimport { props } from './Footer.props';\nimport { StyledFooter } from './Footer.styled';\nimport { CompanyInfo, LinkList, SocialList } from '../';\nimport { withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { tt } from 'utils/translationHelper';\n\nclass Footer extends React.Component {\n static propTypes = props;\n\n render() {\n const {\n settings: {\n configurations: { sitemap },\n },\n settings: {\n configurations: { socialNetworks },\n },\n showSocialsOnRight,\n collapsible,\n seeLess,\n seeMore,\n t,\n } = this.props;\n\n const compInfo = { ...this.props.companyInfo, showSocialsOnRight };\n compInfo.socialNetworks = socialNetworks;\n\n return (\n <>\n <StyledFooter\n ref={this.element}\n borderSize=\"3px\"\n borderStyle=\"solid\"\n className=\"pb-5 pt-5\"\n height={this.props.height}\n padding={this.props.padding}\n width=\"100%\"\n bgcolor={this.props.bgcolor}\n color={this.props.color}\n hover={this.props.hover}\n companyInfoTitleColor={this.props.companyInfo.titleColor}\n companyInfoTextColor={this.props.companyInfo.textColor}\n socialColor={this.props.socialColor}\n >\n {compInfo && <CompanyInfo {...compInfo} />}\n\n <div className=\"footerColumn footerLists\">\n {this.props.customSitemap ? (\n <LinkList\n {...this.props.customSitemap}\n className={`footerColumn footerLinkList md-hide lg-hide col ${\n this.props.customSitemap.className ? this.props.customSitemap.className : ''\n }`}\n />\n ) : (\n sitemap && (\n <LinkList\n {...sitemap}\n className={`footerColumn footerLinkList md-hide lg-hide col ${\n sitemap.className ? sitemap.className : ''\n }`}\n />\n )\n )}\n {this.props.access && (\n <LinkList\n {...this.props.access}\n className={`footerColumn footerLinkList md-hide lg-hide col ${\n this.props.access.className ? this.props.access.className : ''\n }`}\n />\n )}\n <div className=\"footerColumn md-hide\">\n {this.props.doubts && (\n <LinkList\n {...this.props.doubts}\n className={`footerLinkList col ${\n this.props.doubts.className ? this.props.doubts.className : ''\n }`}\n />\n )}\n {this.props.contact && (\n <LinkList\n {...this.props.contact}\n className={`footerLinkList col ${\n this.props.contact.className ? this.props.contact.className : ''\n }`}\n />\n )}\n </div>\n <div className=\"footerColumn md-hide\">\n {this.props.safeSite && (\n <LinkList\n {...this.props.safeSite}\n className={`footerLinkList col ${\n this.props.safeSite.className ? this.props.safeSite.className : ''\n }`}\n collapsible={collapsible}\n seeLess={tt(seeLess, t)}\n seeMore={tt(seeMore, t)}\n type=\"components\"\n />\n )}\n {showSocialsOnRight && (\n <SocialList links={socialNetworks} className=\"footerSocial\" location=\"footer\" />\n )}\n </div>\n </div>\n </StyledFooter>\n </>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\n\nconst FooterComp = withTranslation()(Footer);\n\nexport default connect(mapStateToProps, null)(FooterComp);\n","import Footer from './Footer';\nexport default Footer;\n","import style from 'styled-components';\n\nexport const StyledBottomFooter = style.div`\n background-color: #2C2C2C;\n position: absolute;\n clear: both;\n right: 0;\n left: 0;\n bottom: 0;\n padding-left: 2%;\n padding-right: 2%;\n \n p{ \n font-size: 11px !important;\n color: #888888 !important;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n text-align: center;\n }\n }\n a{\n color: #ffa300 !important;\n font-weight: 700;\n\n &:hover{\n text-decoration: none;\n }\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledBottomFooterModern = style.div`\nbackground-color: #2C2C2C;\nposition: absolute;\nclear: both;\nright: 0;\nleft: 0;\nbottom: 0;\npadding: ${props => props.padding || '0 6%'};\n\np{ \n font-size: 11px !important;\n color: #888888 !important;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n text-align: center;\n }\n}\na{\n color: #ffa300 !important;\n font-weight: 500;\n\n &:hover{\n text-decoration: none;\n }\n}\n`;\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { MODERN_THEME } from 'styled/constants';\nimport { StyledBottomFooter } from './RentlyFooter.styled';\nimport { StyledBottomFooterModern } from './RentlyFooter.styled.modern';\n\nclass RentlyFooter extends React.Component {\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledBottomFooterModern;\n }\n return StyledBottomFooter;\n }\n\n render() {\n const {\n t,\n settings: {\n configurations: { hideRentlyFooter },\n },\n } = this.props;\n const StyledComponent = this.getTemplateStyledComponent();\n\n if (hideRentlyFooter) return null;\n\n return (\n <StyledComponent className=\"\">\n <p className=\"pt-2 pb-2 mb-0\">\n {this.props.companyName || (\n <a href=\"https://www.rentlysoft.com\" target=\"_blank\" rel=\"noopener noreferrer\">\n Powered by Rently\n </a>\n )}{' '}\n © {new Date().getFullYear()} | {t('AllRightsReserved')}\n </p>\n </StyledComponent>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps, null)(withTranslation()(RentlyFooter));\n","import PropTypes from 'prop-types';\n\nexport const props = {\n links: PropTypes.array,\n certificates: PropTypes.array,\n title: PropTypes.string,\n className: PropTypes.string,\n type: PropTypes.string,\n collapsible: PropTypes.bool,\n};\n","import styled from 'styled-components';\n\nexport const StyledLinkList = styled.ul`\n display: flex;\n flex-wrap: wrap;\n box-sizing: border-box;\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n justify-content: space-between;\n\n .listItem {\n width: 100%;\n\n .linkItem {\n color: ${props => props.color || props.theme.font.colors.secondary};\n font-weight: 400;\n font-size: 13px;\n text-transform: none;\n transition: color 200ms;\n font-family: 'Montserrat', Segoe, Arial, sans-serif;\n\n &:hover {\n color: ${props => props.hoverColor || props.theme.colors.secondary};\n text-decoration: none;\n }\n }\n }\n\n button.footer-button-collapsible.btn.btn-link {\n text-decoration: none;\n margin-bottom: 0.5rem;\n color: ${props => props.color || props.theme.font.colors.secondary};\n width: 100%;\n font-size: 0.8rem;\n &:hover {\n border: 1px solid ${props => props.hoverColor || props.theme.colors.secondary};\n color: ${props => props.hoverColor || props.theme.colors.secondary};\n }\n }\n\n .imageItem {\n img {\n height: ${props => props.imgHeight || '30px'};\n }\n }\n`;\n","import LinkList from './LinkList';\nexport default LinkList;\n","import React, { useState, useEffect, useRef } from 'react';\nimport { props } from './LinkList.props';\nimport { StyledLinkList } from './LinkList.styled';\nimport { TranslatedLink, Title, CompositeComponent } from 'components/';\nimport { useTranslation } from 'react-i18next';\nimport { tt } from '../../utils/translationHelper';\nimport { Collapse, Button } from 'react-bootstrap';\n\nconst LinkList = ({\n links = [],\n title,\n className,\n type,\n certificates,\n sections,\n collapsible,\n seeLess,\n seeMore\n}) => {\n const { t } = useTranslation();\n const [expanded, setExpanded] = useState(true);\n const isFirstRender = useRef(true);\n\n useEffect(() => {\n if (collapsible) {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n window.scroll(0, 99999999);\n }\n }, [expanded, collapsible]) \n\n const getListItems = () =>\n links.map((item, index) => (\n <li className=\"listItem\" key={index}>\n <TranslatedLink {...item} />\n </li>\n ));\n\n const getImageList = () =>\n certificates.map((path, index) => (\n <li className=\"imageItem\" key={index}>\n <img src={tt(path, t)} alt={`path: ${path}`} />\n </li>\n ));\n\n const getComponentList = () => {\n const comps = { sections: sections };\n const branchOffices = comps.sections.slice(0, 1);\n const logos = comps.sections.slice(1);\n\n const getCollapsibleItems = () => {\n return (\n <>\n <Button\n variant=\"link\"\n type=\"button\"\n onClick={e => {\n e.stopPropagation();\n setExpanded(!expanded);\n }}\n aria-controls=\"footer-button-collapsible-collapse\"\n aria-expanded={expanded}\n className={`footer-button-collapsible ${expanded && seeLess ? 'see-less' : ''}`}\n >\n {expanded ? seeMore : seeLess}\n </Button>\n\n <CompositeComponent\n sections={branchOffices} \n withWrapper={(section, comp, cProps, i) => (\n <Collapse in={!expanded}>\n <li key={i}>{comp}</li>\n </Collapse>\n )}\n />\n <CompositeComponent\n sections={logos} \n withWrapper={(section, comp, cProps, i) => <li key={i}>{comp}</li>}\n />\n </>\n );\n };\n\n const getNormalItems = () => {\n return (\n <CompositeComponent\n {...comps}\n withWrapper={(section, comp, cProps, i) => {\n return <li key={i}>{comp}</li>;\n }}\n />\n );\n };\n\n return <>{collapsible ? getCollapsibleItems() : getNormalItems()}</>;\n };\n\n const getList = () => {\n if (type === 'images') return getImageList();\n\n if (type === 'components') return getComponentList();\n\n return getListItems();\n };\n\n return (\n <div className={className}>\n <Title type=\"h3\" text={title} weight=\"700\" fontSize={14} noMedia className=\"mb-10\" />\n <StyledLinkList>{getList()}</StyledLinkList>\n </div>\n );\n};\n\nLinkList.propTypes = props;\n\nexport default LinkList;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n show: PropTypes.bool,\n color: PropTypes.string,\n size: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n className: PropTypes.string,\n iconClass: PropTypes.string,\n};\n\nexport const defaults = {\n fontAwesomeClass: 'fa fa-cog',\n};\n","import styled from 'styled-components';\n\nexport const StyledLoadingContainer = styled.section`\n display: flex;\n flex-basis: 100%;\n height: 100%;\n justify-content: center;\n align-items: center;\n .loading {\n width: ${props => props.width || '50px'};\n height: ${props => props.height || null};\n z-index: 99999;\n\n .fa-cog {\n font-size: ${props => props.size || '50px'};\n color: ${props => props.color || props.theme.colors.primary};\n }\n\n .rotating {\n -webkit-animation: rotating 2s linear infinite;\n -moz-animation: rotating 2s linear infinite;\n -ms-animation: rotating 2s linear infinite;\n -o-animation: rotating 2s linear infinite;\n animation: rotating 2s linear infinite;\n }\n\n @-webkit-keyframes rotating {\n from {\n -webkit-transform: rotate(0deg);\n -o-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n -o-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n @keyframes rotating {\n from {\n -ms-transform: rotate(0deg);\n -moz-transform: rotate(0deg);\n -webkit-transform: rotate(0deg);\n -o-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n to {\n -ms-transform: rotate(360deg);\n -moz-transform: rotate(360deg);\n -webkit-transform: rotate(360deg);\n -o-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n }\n`;\n","import React from 'react';\nimport { props, defaults } from './Loading.props';\nimport { StyledLoadingContainer } from './Loading.styled';\n\nconst LoadingComponent = ({ show, color, className, fontAwesomeClass, size }) => {\n if (!show) return null;\n return (\n <StyledLoadingContainer size={size} color={color} className={className}>\n <div className=\"loading\">\n <i className={`rotating ${fontAwesomeClass} fa-3x`} />{' '}\n </div>\n </StyledLoadingContainer>\n );\n};\n\nLoadingComponent.propTypes = props;\nLoadingComponent.defaultProps = defaults;\n\nexport default LoadingComponent;\n","import React from 'react';\nimport { props } from './PageLoading.props';\n\nconst style = {\n backgroundColor: 'white',\n overflow: 'hidden',\n height: '100vh',\n width: '100%',\n margin: 0,\n padding: 0,\n textAlign: 'center',\n paddingTop: '10%',\n};\n\nconst imgStyle = {\n margin: 'auto',\n width: '100px',\n};\n\nconst h1Style = {\n textAlign: 'center',\n fontFamily: 'Segoe, Helvetica, Arial, Sans-serif',\n fontWeight: '300',\n color: '#000',\n fontSize: '20px',\n};\n\nconst PageLoadingComponent = ({ show, message }) => {\n if (!show) return null;\n\n return (\n <section style={style}>\n <img\n style={imgStyle}\n src=\"https://rently.azureedge.net/rently/Web/loading-car.gif\"\n alt={message}\n ></img>\n {message ? <h1 style={h1Style}>{message}</h1> : null}\n </section>\n );\n};\n\nPageLoadingComponent.propTypes = props;\n\nexport default PageLoadingComponent;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n show: PropTypes.bool,\n};\n","import styled from 'styled-components';\n\nconst commonTitleStyles = `\n padding: 0;\n box-sizing: border-box\n text-transform: none;\n`;\n\nconst getFontSize = (fontSize, defaultSize) =>\n `font-size: ${(fontSize && `${fontSize}px`) || defaultSize} !important;`;\n\nconst getTitleMediaQuerys = theme => `\n @media (max-width: ${theme.screens.md}) {\n ${getFontSize(null, '21px')}\n }\n\n @media (min-width: ${theme.screens.md}) and (max-width: ${theme.screens.lg}){\n ${props => getFontSize(props.fontSize, '18px')}\n }\n\n @media (min-width: ${theme.screens.lg}) and (max-width: ${theme.screens.xl}){\n ${props => getFontSize(props.fontSize, '25px')}\n }\n\n @media (min-width: ${theme.screens.xl}) and (max-width: ${theme.screens.xxl}){\n ${props => getFontSize(props.fontSize, '25px')}\n }\n`;\n\nexport const StyledTitle = styled.div`\n color: ${props => props.color || props.theme.font.colors.primary};\n\n h1 {\n margin-top: 20px;\n }\n\n h2 {\n }\n\n h3 {\n margin-bottom: 10px !important;\n }\n\n h4 {\n }\n\n h5 {\n }\n\n h6 {\n }\n\n p {\n font-weight: 800!important;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n ${commonTitleStyles}\n\n ${props => props.bold && `font-weight: bold;`}\n\n ${props => props.italic && `font-style: normal;`}\n\n ${props => props.weight && `font-weight: ${props.weight};`}\n\n ${props => getFontSize(props.fontSize, '30px')}\n \n ${props => !props.noMedia && getTitleMediaQuerys(props.theme)}\n\n ${props => props.lineHeight}\n\n ${props => props.margin && `margin: ${props.margin}`}\n }\n`;\n","import React from 'react';\nimport { props } from './Title.props';\nimport { StyledTitle } from './Title.styled';\nimport { tt } from '../../utils/translationHelper';\nimport { useTranslation } from 'react-i18next';\n\nconst headerTypes = {\n h1: (text, attr) => <h1 {...attr}>{text}</h1>,\n h2: (text, attr) => <h2 {...attr}>{text}</h2>,\n h3: text => <h3>{text}</h3>,\n h4: text => <h4>{text}</h4>,\n h5: text => <h5>{text}</h5>,\n h6: text => <h6>{text}</h6>,\n p: text => <p>{text}</p>,\n};\n\nconst Title = ({\n type = 'h1',\n text,\n bold = true,\n italic = true,\n className,\n color,\n weight,\n fontSize,\n margin,\n lineHeight,\n noMedia,\n paramsObj,\n showTooltip = false,\n forceTranslate = false,\n}) => {\n const { t } = useTranslation();\n const attr = {};\n\n if (showTooltip) {\n attr.title = tt(text, t);\n }\n const translatedText = tt(text, t, forceTranslate, paramsObj);\n if (!translatedText) return null;\n return (\n <StyledTitle\n bold={bold}\n italic={italic}\n className={className}\n color={color}\n weight={weight}\n fontSize={fontSize}\n lineHeight={lineHeight}\n noMedia={noMedia}\n margin={margin}\n >\n {headerTypes[type](translatedText, attr)}\n </StyledTitle>\n );\n};\n\nTitle.propTypes = props;\n\nexport default Title;\n","import Title from './Title';\nexport default Title;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n loadingMessage: PropTypes.string,\n loadingGif: PropTypes.string,\n background: PropTypes.string,\n};\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport TranslatedComponent from 'components/TranslatedComponent';\nimport Title from 'components/Title/index';\nimport { Loading } from '../index';\nimport { props } from './CustomLoading.props';\n\nclass CustomLoadingComponent extends TranslatedComponent {\n render() {\n const { loadingMessage, loadingGif, background, className } = this.props;\n\n if (loadingGif || loadingMessage) {\n return (\n <div className=\"row\" align=\"center\" style={{ backgroundColor: background }}>\n {loadingGif && (\n <div className=\"col-md-12 mb-5\">\n <img\n className={className}\n width=\"250\"\n height=\"250\"\n src={this.tt(loadingGif, true)}\n alt={this.tt('loading', true)}\n />\n </div>\n )}\n {loadingMessage && (\n <div className=\"col-md-12 mb-5 pb-5\">\n <Title\n type=\"h2\"\n forceTranslate\n text={loadingMessage}\n weight=\"900\"\n fontSize={30}\n className={`${loadingMessage != null ? '' : 'd-none'}`}\n />\n </div>\n )}\n </div>\n );\n } else {\n return <Loading></Loading>;\n }\n }\n}\n\nCustomLoadingComponent.propTypes = props;\n\nexport default withTranslation()(CustomLoadingComponent);\n","import LoadingComponent from './SectionLoading/Loading';\nimport PageLoadingComponent from './PageLoading/PageLoading';\nimport CustomLoadingComponent from './CustomLoading/CustomLoading';\n\nexport const Loading = LoadingComponent;\nexport const PageLoading = PageLoadingComponent;\nexport const CustomLoading = CustomLoadingComponent;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n wrapperClass: PropTypes.string,\n inputClass: PropTypes.string,\n color: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n fontSize: PropTypes.string,\n error: PropTypes.string,\n label: PropTypes.string,\n checked: PropTypes.bool.isRequired,\n text: PropTypes.any.isRequired,\n disable: PropTypes.bool,\n};\n\nexport const defaultProps = {\n checked: false,\n text: 'default text',\n disable: false,\n};\n","import style from 'styled-components';\nimport { INPUT_BORDER_COLOR, THIRD } from 'styled/constants';\n\nexport const StyledInput = style.div`\n .input-wrapper{\n display: flex;\n width: 100%;\n height: ${props => props.height || '45px'}\n border-radius: 0;\n justify-content: flex-start;\n align-items: center;\n font-weight: 500;\n color: ${props => props.color || props.theme.font.colors.primary};\n pointer-events: ${props => (props.disabled ? 'none' : 'auto')};\n \n label{\n font-size: ${props => props.fontSize || '13px'};\n position: relative;\n padding:0;\n margin:0;\n padding-left: 35px;\n cursor: ${props => (props.disabled ? 'arrow' : 'pointer')};\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n \n input{\n position: absolute;\n opacity: 0;\n cursor: ${props => (props.disabled ? 'arrow' : 'pointer')};\n height: 0;\n width: 0;\n }\n \n .check-mark {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: #eee;\n :after {\n content: \"\";\n position: absolute;\n display: none;\n }\n }\n \n .disabled {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: ${INPUT_BORDER_COLOR};\n :after {\n content: \"\";\n position: absolute;\n display: none;\n }\n }\n }\n label:hover input ~ .check-mark{\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n label input:checked ~ .check-mark{\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n label input:checked ~ .check-mark:after{\n display: block;\n }\n label .check-mark:after{\n left: 10px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid ${THIRD};\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n .error{\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic\n }\n .label{\n font-weight: bold;\n margin-bottom: 10px;\n }\n\n &.special-checkbox .input-wrapper label{\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 13px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n @media only screen and (max-width: 400px){\n &.special-checkbox .input-wrapper label{font-size: 11px !important;}\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.xl}) and (max-width: ${props =>\n props.theme.screens.xxl}){\n &.special-checkbox .input-wrapper label{font-size: 13px;}\n }\n\n`;\n","import style from 'styled-components';\nimport { INPUT_BORDER_COLOR, THIRD } from 'styled/constants';\n\nexport const StyledInputModern = style.div`\n .input-wrapper{\n display: flex;\n width: 100%;\n height: ${props => props.height || '45px'}\n border-radius: 0;\n justify-content: flex-start;\n align-items: center;\n font-weight: 500;\n color: ${props => props.color || props.theme.font.colors.primary};\n pointer-events: ${props => (props.disabled ? 'none' : 'auto')};\n border:none !important;\n\n label{\n font-size: ${props => props.fontSize || '13px'};\n position: relative;\n padding:0;\n margin:0;\n padding-left: 35px;\n cursor: ${props => (props.disabled ? 'arrow' : 'pointer')};\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n \n input{\n position: absolute;\n opacity: 0;\n cursor: ${props => (props.disabled ? 'arrow' : 'pointer')};\n height: 0;\n width: 0;\n }\n \n .check-mark {\n position: absolute;\n top: 0;\n left: 0;\n height: 20px;\n width: 20px;\n border-radius:20px;\n background-color: #ccc;\n border:1x\n :after {\n content: \"\";\n display: none;\n position:relative;\n left:7px\n }\n }\n \n .disabled {\n position: absolute;\n top: 0;\n left: 0;\n height: 25px;\n width: 25px;\n background-color: ${INPUT_BORDER_COLOR};\n :after {\n content: \"\";\n position: absolute;\n display: none;\n }\n }\n }\n label:hover input ~ .check-mark{\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n label input:checked ~ .check-mark{\n background-color: ${props => props.theme.colors.buttonPrimaryBg};\n }\n label input:checked ~ .check-mark:after{\n display: block;\n }\n label .check-mark:after{\n left: 10px;\n top: 5px;\n width: 5px;\n height: 10px;\n border: solid ${THIRD};\n border-width: 0 3px 3px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n .error{\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic\n }\n .label{\n font-weight: bold;\n margin-bottom: 10px;\n }\n\n &.special-checkbox .input-wrapper label{\n display: block;\n position: relative;\n padding-left: 35px;\n margin-bottom: 16px;\n cursor: pointer;\n font-size: 13px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n @media only screen and (max-width: 400px){\n &.special-checkbox .input-wrapper label{font-size: 11px !important;}\n }\n\n @media only screen and (min-width: ${props => props.theme.screens.xl}) and (max-width: ${props =>\n props.theme.screens.xxl}){\n &.special-checkbox .input-wrapper label{font-size: 13px;}\n }\n\n`;\n","import React from 'react';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\nimport { props, defaultProps } from './CheckboxInput.props';\nimport { StyledInput } from './CheckboxInput.styled';\nimport { StyledInputModern } from './CheckboxInput.styled.modern';\n\nclass CheckboxInput extends React.Component {\n static propTypes = props;\n static defaultProps = defaultProps;\n state = { stateChecked: this.props.checked || false };\n\n changeState = () => {\n const { onChange } = this.props;\n const status = !this.state.stateChecked;\n this.setState({ stateChecked: status });\n return onChange(status);\n };\n\n componentWillReceiveProps(prevProps, prevState) {\n this.setState({ ...prevState, stateChecked: prevProps.checked });\n }\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledInputModern;\n }\n return StyledInput;\n }\n\n render() {\n const {\n inputClass,\n className,\n wrapperId,\n color,\n fontSize,\n error,\n label,\n text,\n disable,\n } = this.props;\n\n const { stateChecked } = this.state;\n\n const StyledComponent = this.getTemplateStyledComponent();\n\n return (\n <StyledComponent\n color={color}\n fontSize={fontSize}\n id={wrapperId}\n className={className}\n error={error}\n disabled={disable}\n >\n {label && <div className=\"label\">{label}</div>}\n <div className=\"input-wrapper\">\n <label>\n <input\n checked={stateChecked}\n className={`${inputClass || ''} checkbox`}\n type=\"checkbox\"\n onChange={this.changeState}\n />\n <span className={`${disable ? 'disabled' : 'check-mark'}`} />\n {text}\n </label>\n </div>\n {error && <div className=\"error\">{error}</div>}\n </StyledComponent>\n );\n }\n}\nexport default withSettingsContext(CheckboxInput);\n","import CheckboxInput from './CheckboxInput';\nexport default CheckboxInput;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n className: PropTypes.string,\n color: PropTypes.string,\n onDateChange: PropTypes.func.isRequired,\n onFocusChange: PropTypes.func.isRequired,\n borderColor: PropTypes.string,\n iconColor: PropTypes.string,\n icon: PropTypes.string,\n error: PropTypes.string,\n label: PropTypes.string,\n id: PropTypes.string.isRequired,\n date: PropTypes.shape({}),\n datePickerOptions: PropTypes.shape({}),\n};\n","import style from 'styled-components';\nimport { INPUT_BORDER_COLOR } from 'styled/constants';\n\nexport const StyledInput = style.div`\n .input-wrapper{\n border-width: ${props => props.borderWidth || '1px'};\n border-style: solid;\n border-color: ${props =>\n props.error ? props.theme.colors.alert : props.borderColor || INPUT_BORDER_COLOR};\n display: flex;\n width: 100%;\n border-radius: 0;\n justify-content: center;\n align-items: center;\n font-weight: 500;\n font-size: 1em;\n color: ${props => props.color || props.theme.font.colors.secondary};\n .CalendarDay__selected{\n background-color: ${props => props.color || props.theme.colors.buttonPrimaryBg};\n border-color: ${props => props.color || props.theme.colors.buttonPrimaryBg};\n }\n &.small-input-padding{\n height: 40px;\n }\n .DateInput_input__focused {\n border-bottom-color: ${props => props.color || props.theme.colors.buttonPrimaryBg};\n }\n span {\n display: flex;\n width: auto;\n height: 100%;\n color: ${props => props.iconColor || props.theme.colors.buttonPrimaryBg};\n justify-content: center;\n align-items: center;\n padding-top: 0;\n padding-bottom: 0;\n padding-left: 10px;\n padding-right: 5px;\n font-size: ${props => props.fontSize || '1.2em'}\n }\n .date-wrapper {\n padding-left: 5px;\n width: 100%;\n height: 100%;\n border: none;\n &:focus {\n outline: none;\n box-shadow: none;\n }\n }\n }\n .error{\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic\n }\n .label{\n font-weight: bold;\n margin-bottom: 5px;\n }\n`;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n date: PropTypes.object,\n height: PropTypes.string,\n id: PropTypes.string.isRequired,\n numberOfMonths: PropTypes.number,\n onDateChange: PropTypes.func.isRequired,\n onFocusChange: PropTypes.func.isRequired,\n showDefaultInputIcon: PropTypes.bool,\n settings: PropTypes.shape({}),\n};\n\nexport const defaultProps = {\n numberOfMonths: 1,\n verticalHeight: 540,\n showDefaultInputIcon: false,\n noBorder: false,\n block: false,\n settings: {},\n};\n","import React, { Component } from 'react';\nimport 'react-dates/initialize';\nimport 'react-dates/lib/css/_datepicker.css';\nimport { props, defaultProps } from './DatePicker.props';\nimport { SingleDatePicker } from 'react-dates';\nimport moment from 'moment';\n\nclass DatePicker extends Component {\n constructor(props) {\n super(props);\n this.state = {\n date: this.props.date || null,\n focused: false,\n };\n }\n\n handleDateChange(date) {\n const { onDateChange } = this.props;\n onDateChange(date);\n this.setState({ date });\n }\n\n handleFocusChange(focused) {\n const { onFocusChange } = this.props;\n onFocusChange(focused);\n this.setState({ focused });\n }\n\n returnYears = () => {\n let years = [];\n\n const currentYear = moment().year();\n\n for (let i = currentYear - 100; i <= currentYear + 30; i++) {\n years.push(<option value={i}>{i}</option>);\n }\n return years;\n };\n\n renderMonthElement = ({ month, onYearSelect }) => {\n return (\n <div className=\"date-picker-month\">\n <strong>{month.format('MMMM')}</strong>\n <select value={month.year()} onChange={e => onYearSelect(month, e.target.value)}>\n {this.returnYears()}\n </select>\n </div>\n );\n };\n\n render() {\n const {\n id,\n placeholder,\n small,\n height,\n numberOfMonths,\n showDefaultInputIcon,\n block,\n noBorder,\n verticalHeight,\n settings,\n } = this.props;\n return (\n <SingleDatePicker\n placeholder={placeholder}\n date={this.state.date}\n focused={this.state.focused}\n id={id}\n inputIconPosition=\"after\"\n numberOfMonths={numberOfMonths}\n isOutsideRange={() => false}\n displayFormat=\"DD/MM/YYYY\"\n onDateChange={date => this.handleDateChange(date)}\n onFocusChange={({ focused }) => this.handleFocusChange(focused)}\n showDefaultInputIcon={showDefaultInputIcon}\n block={block}\n small={small}\n noBorder={noBorder}\n verticalHeight={height || verticalHeight}\n renderMonthElement={this.renderMonthElement}\n {...settings}\n />\n );\n }\n}\n\nDatePicker.propTypes = props;\nDatePicker.defaultProps = defaultProps;\nexport default DatePicker;\n","import DateInput from './DateInput';\nexport default DateInput;\n","import React, { Component } from 'react';\nimport { props } from './DateInput.props';\nimport { StyledInput } from './DateInput.styled';\nimport DatePicker from '../date-picker/DatePicker';\n\nclass DateInput extends Component {\n static propTypes = props;\n render() {\n const {\n wrapperId,\n wrapperClass,\n color,\n onDateChange,\n onFocusChange,\n borderColor,\n iconColor,\n icon,\n error,\n label,\n placeholder,\n id,\n date,\n small,\n datePickerOptions,\n } = this.props;\n return (\n <StyledInput\n color={color}\n id={wrapperId}\n className={wrapperClass}\n borderColor={borderColor}\n iconColor={iconColor}\n error={error}\n >\n {label && <div className=\"label\">{label}</div>}\n <div className={small ? 'input-wrapper small-input-padding' : 'input-wrapper'}>\n {icon && <span className={icon} />}\n <div className={'date-wrapper'}>\n <DatePicker\n placeholder={placeholder}\n id={id}\n noBorder\n block\n onDateChange={onDateChange}\n onFocusChange={onFocusChange}\n date={date}\n settings={datePickerOptions}\n small={small}\n />\n </div>\n </div>\n {error && <div className=\"error\">{error}</div>}\n </StyledInput>\n );\n }\n}\nexport default DateInput;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n className: PropTypes.string,\n color: PropTypes.string,\n onDatesChange: PropTypes.func.isRequired,\n onFocusChange: PropTypes.func.isRequired,\n borderColor: PropTypes.string,\n iconColor: PropTypes.string,\n icon: PropTypes.string,\n error: PropTypes.string,\n label: PropTypes.string,\n datePickerOptions: PropTypes.shape({}),\n focusedInput: PropTypes.string,\n startDateId: PropTypes.string,\n endDateId: PropTypes.string,\n isDayBlocked: PropTypes.func,\n};\n\nexport const defaultProps = {\n datePickerOptions: {},\n focusedInput: 'startDate',\n isDayBlocked: null,\n};\n","import style from 'styled-components';\nimport { INPUT_BORDER_COLOR, THIRD } from 'styled/constants';\n\nexport const StyledInput = style.div`\n .input-wrapper{\n border-width: ${props => props.borderWidth || '1px'};\n border-style: solid;\n border-color: ${props =>\n props.error ? props.theme.colors.alert : props.borderColor || INPUT_BORDER_COLOR};\n display: flex;\n width: 100%;\n border-radius: 0;\n justify-content: center;\n align-items: center;\n font-weight: 500;\n font-size: 1em;\n color: ${props => props.color || props.theme.font.colors.secondary};\n background-color: ${props => props.backgroundColor || 'white'};\n .CalendarDay__selected{\n background-color: ${props => props.color || props.theme.colors.buttonPrimaryBg};\n border-color: ${props => props.color || props.theme.colors.buttonPrimaryBg};\n color: ${THIRD};\n }\n .CalendarDay__hovered_span, .CalendarDay__hovered_span:hover{\n background-color ${props => props.color || props.theme.colors.buttonPrimaryBgHover};\n border-color ${props => props.color || props.theme.colors.buttonPrimaryBg};\n color: ${THIRD};\n }\n .CalendarDay__selected_span.CalendarDay__selected_start, .CalendarDay__selected_span.CalendarDay__selected_end {\n background-color ${props => props.color || props.theme.colors.buttonPrimaryBg};\n border-color ${props => props.color || props.theme.colors.buttonPrimaryBg};\n color ${THIRD};\n }\n .CalendarDay__selected_span {\n background-color ${props => props.color || props.theme.colors.buttonPrimaryBgHover};\n border-color ${props => props.color || props.theme.colors.buttonPrimaryBg};\n color ${THIRD};\n }\n .DateInput_input__focused {\n border-bottom-color: ${props => props.color || props.theme.colors.buttonPrimaryBg};\n }\n span {\n display: flex;\n width: auto;\n height: 100%;\n color: ${props => props.iconColor || props.theme.colors.buttonPrimaryBg};\n justify-content: center;\n align-items: center;\n padding-top: 0;\n padding-bottom: 0;\n padding-left: 10px;\n padding-right: 5px;\n font-size: ${props => props.fontSize || '1.2em'}\n }\n .date-wrapper {\n padding-left: 5px;\n width: 100%;\n height: 100%;\n border: none;\n &:focus {\n outline: none;\n box-shadow: none;\n }\n }\n }\n .error{\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic\n }\n .label{\n font-weight: bold;\n margin-bottom: 5px;\n }\n`;\n","import React, { Component } from 'react';\nimport 'react-dates/initialize';\nimport 'react-dates/lib/css/_datepicker.css';\nimport { props, defaultProps } from './RangeDatePicker.props';\nimport { START_DATE } from 'react-dates/constants';\nimport { DateRangePicker } from 'react-dates';\nimport { connect } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nclass RangeDatePicker extends Component {\n static propTypes = props;\n static defaultProps = defaultProps;\n\n constructor(props) {\n super(props);\n this.state = {\n startDate: props.startDate || null,\n endDate: props.endDate || null,\n focusedInput: props.focusedInput || START_DATE,\n };\n }\n\n static getDerivedStateFromProps(nextProps) {\n return { startDate: nextProps.startDate, endDate: nextProps.endDate };\n }\n\n handleDatesChange = (startDate, endDate) => {\n const { onDatesChange } = this.props;\n onDatesChange(startDate, endDate);\n this.setState({ startDate, endDate });\n };\n\n handleFocusChange = focusedInput => {\n const { onFocusChange } = this.props;\n onFocusChange(focusedInput);\n this.setState({ focusedInput });\n };\n\n handleWeekDays = day => {\n const { i18n } = this.props;\n const lang = i18n.language.toUpperCase();\n\n if (lang === 'ES' || lang === 'ES-AR' || lang === 'ES-CL' || lang === 'ES-MX') {\n day._locale._weekdaysMin = ['DOM', 'LUN', 'MAR', 'MIE', 'JUE', 'VIE', 'SAB'];\n } else if (lang === 'PT') {\n day._locale._weekdaysMin = ['DOM', 'SEG', 'TER', 'QUA', 'QUI', 'SEX', 'SAB'];\n } else if (lang === 'PL') {\n day._locale._weekdaysMin = ['NIED', 'PONIE', 'WTOR', 'ŚRO', 'CZWAR', 'PIĄ', 'SOB'];\n } else if (lang === 'LT') {\n day._locale._weekdaysMin = ['PIR', 'ANT', 'TRE', 'KET', 'PEN', 'ŠEš', 'SEK'];\n } else if (lang === 'AL') {\n day._locale._weekdaysMin = ['DIM', 'HËN', 'MAR', 'MËR', 'ENJ', 'PRE', 'SHT'];\n } else if (lang === 'IT') {\n day._locale._weekdaysMin = ['DOM', 'LUN', 'MAR', 'MER', 'GIO', 'VEN', 'SAB'];\n } else if (lang === 'NL') {\n day._locale._weekdaysMin = ['ZON', 'MA', 'DI', 'WO', 'DO', 'VR', 'ZA'];\n } else if (lang === 'RU') {\n day._locale._weekdaysMin = ['ВС', 'ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ'];\n } else {\n day._locale._weekdaysMin = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];\n }\n return day.format('D');\n };\n\n handleMonthsName = month => {\n const { i18n } = this.props;\n const lang = i18n.language.toUpperCase();\n\n if (lang === 'ES' || lang === 'ES-AR' || lang === 'ES-CL' || lang === 'ES-MX') {\n month._locale._months = [\n 'Enero',\n 'Febrero',\n 'Marzo',\n 'Abril',\n 'Mayo',\n 'Junio',\n 'Julio',\n 'Agosto',\n 'Septiembre',\n 'Octubre',\n 'Noviembre',\n 'Diciembre',\n ];\n } else if (lang === 'PT') {\n month._locale._months = [\n 'Janeiro',\n 'Fevereiro',\n 'Março',\n 'Abril',\n 'Maio',\n 'Junho',\n 'Julho',\n 'Agosto',\n 'Setembro',\n 'Outubro',\n 'Novembro',\n 'Dezembro',\n ];\n } else if (lang === 'PL') {\n month._locale._months = [\n 'Styczeń',\n 'Luty',\n 'Marsz',\n 'Kwiecień',\n 'Móc',\n 'Czerwiec',\n 'Lipiec',\n 'Sierpień',\n 'Wrzesień',\n 'Październik',\n 'Listopad',\n 'Grudzień',\n ];\n } else if (lang === 'LT') {\n month._locale._months = [\n 'Sausis',\n 'Vasaris',\n 'Kovas',\n 'Balandis',\n 'Gegužė',\n 'Birželis',\n 'Liepa',\n 'Rugpjūtis',\n 'Rugsėjis',\n 'Spalis',\n 'Lapkritis',\n 'Gruodis',\n ];\n } else if (lang === 'AL') {\n month._locale._months = [\n 'Janar',\n 'Shkurt',\n 'Mars',\n 'Prill',\n 'Maj',\n 'Qershor',\n 'Korrik',\n 'Gusht',\n 'Shtator',\n 'Tetor',\n 'Nëntor',\n 'Dhjetor',\n ];\n } else if (lang === 'IT') {\n month._locale._months = [\n 'Gennaio',\n 'Febbraio',\n 'Marzo',\n 'Aprile',\n 'Maggio',\n 'Giugno',\n 'Luglio',\n 'Agosto',\n 'Settembre',\n 'Ottobre',\n 'Novembre',\n 'Dicembre',\n ];\n } else if (lang === 'NL') {\n month._locale._months = [\n 'Januari',\n 'Februari',\n 'Maart',\n 'April',\n 'Mei',\n 'Juni',\n 'Juli',\n 'Augustus',\n 'September',\n 'Oktober',\n 'November',\n 'December',\n ];\n } else {\n month._locale._months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n }\n return month.format('MMMM');\n };\n\n render() {\n const {\n startDateId,\n endDateId,\n showDefaultInputIcon,\n inputIconPosition,\n block,\n noBorder,\n settings,\n isDayBlocked,\n isOutsideRange,\n configurations: { dateDisplayFormat },\n t,\n } = this.props;\n\n const dateFormat = dateDisplayFormat || t('dateFormat');\n\n return (\n <DateRangePicker\n startDateId={startDateId}\n startDate={this.state.startDate}\n endDateId={endDateId}\n endDate={this.state.endDate}\n displayFormat={dateFormat}\n renderDayContents={this.handleWeekDays}\n renderMonthText={this.handleMonthsName}\n onDatesChange={({ startDate, endDate }) => this.handleDatesChange(startDate, endDate)}\n focusedInput={this.state.focusedInput}\n onFocusChange={focusedInput => this.handleFocusChange(focusedInput)}\n showDefaultInputIcon={showDefaultInputIcon}\n inputIconPosition={inputIconPosition}\n block={block}\n noBorder={noBorder}\n isDayBlocked={day => {\n isDayBlocked(day, this.state.focusedInput);\n }}\n readOnly\n isOutsideRange={isOutsideRange}\n {...settings}\n />\n );\n }\n}\n\nconst mapStateToProps = ({ global, siteConfiguration }) => ({\n langs: global.listLanguages,\n configurations: siteConfiguration.settings.configurations,\n});\n\nconst RangeDatePickerComp = withTranslation()(RangeDatePicker);\n\nexport default connect(mapStateToProps)(RangeDatePickerComp);\n","import PropTypes from 'prop-types';\nimport momentPropTypes from 'react-moment-proptypes';\nimport { START_DATE, END_DATE } from 'react-dates/constants';\n\nexport const props = {\n startDateId: PropTypes.string.isRequired,\n endDateId: PropTypes.string.isRequired,\n startDate: momentPropTypes.momentObj,\n endDate: momentPropTypes.momentObj,\n focusedInput: PropTypes.oneOf([START_DATE, END_DATE]),\n onDatesChange: PropTypes.func.isRequired,\n onFocusChange: PropTypes.func.isRequired,\n showDefaultInputIcon: PropTypes.bool.isRequired,\n block: PropTypes.bool.isRequired,\n showInputs: PropTypes.bool,\n noBorder: PropTypes.bool.isRequired,\n inputIconPosition: PropTypes.string,\n settings: PropTypes.shape({}),\n};\n\nexport const defaultProps = {\n block: false,\n noBorder: false,\n showDefaultInputIcon: false,\n showInputs: true,\n};\n","import RangeDateInput from './RangeDateInput';\nexport default RangeDateInput;\n","import React, { Component } from 'react';\nimport { props } from './RangeDateInput.props';\nimport { StyledInput } from './RangeDateInput.styled';\nimport RangeDatePicker from '../range-date-picker/RangeDatePicker';\n\nclass RangeDateInput extends Component {\n static propTypes = props;\n render() {\n const {\n wrapperClass,\n color,\n onDatesChange,\n onFocusChange,\n borderColor,\n iconColor,\n icon,\n error,\n label,\n datePickerOptions,\n focusedInput,\n startDateId,\n endDateId,\n startDate,\n endDate,\n isDayBlocked,\n isOutsideRange,\n } = this.props;\n return (\n <StyledInput\n color={color}\n className={wrapperClass}\n borderColor={borderColor}\n iconColor={iconColor}\n error={error}\n >\n {label && (\n <label htmlFor=\"drop-up-date-start\" className=\"label\">\n {label}\n </label>\n )}\n <div className=\"input-wrapper\">\n {icon && <span className={icon} />}\n <div className=\"date-wrapper\">\n <RangeDatePicker\n startDateId={startDateId || `${Math.random()}`}\n startDate={startDate}\n endDate={endDate}\n endDateId={endDateId || `${Math.random()}`}\n noBorder\n block\n onDatesChange={onDatesChange}\n onFocusChange={onFocusChange}\n settings={datePickerOptions}\n focusedInput={focusedInput}\n isDayBlocked={isDayBlocked}\n isOutsideRange={isOutsideRange}\n />\n </div>\n </div>\n {error && <div className=\"error\">{error}</div>}\n </StyledInput>\n );\n }\n}\nexport default RangeDateInput;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n className: PropTypes.string,\n color: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n borderColor: PropTypes.string,\n fontSize: PropTypes.string,\n placeholder: PropTypes.string,\n iconColor: PropTypes.string,\n icon: PropTypes.string,\n error: PropTypes.string,\n label: PropTypes.string,\n mask: PropTypes.string,\n};\n","import style from 'styled-components';\nimport { INPUT_BORDER_COLOR } from 'styled/constants';\n\nexport const StyledInput = style.div`\n .input-wrapper{\n border-width: ${props => props.borderWidth || '1px'};\n border-style: solid;\n border-color: ${props =>\n props.error ? props.theme.colors.alert : props.borderColor || INPUT_BORDER_COLOR};\n display: flex;\n width: 100%;\n border-radius: 0;\n justify-content: center;\n align-items: center;\n font-weight: ${props => props.fontWeight || 400};\n font-size: ${props => props.fontSize || '1em'};\n color: ${props => props.color || props.theme.font.colors.secondary};\n span {\n display: flex;\n width: auto;\n height: 100%;\n color: ${props => props.iconColor || props.theme.colors.buttonPrimaryBg};\n justify-content: center;\n align-items: center;\n padding-top: 0;\n padding-bottom: 0;\n padding-left: 10px;\n padding-right: 5px;\n font-size: ${props => props.fontSize || '1.2em'}\n }\n input {\n width: 100%;\n border: none;\n &:focus {\n outline: none;\n box-shadow: none;\n }\n }\n input::-webkit-input-placeholder, select{ \n font-size: 12px;\n color: #6f6f6f;\n }\n \n input::-moz-placeholder { \n font-size: 12px;\n color: #6f6f6f;\n }\n \n input:-ms-input-placeholder { \n font-size: 12px;\n color: #6f6f6f;\n }\n\n }\n .error{\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic;\n margin-bottom: 15px;\n margin-top:-5px;\n }\n .label{\n font-weight: bold;\n margin-bottom: 5px;\n }\n`;\n","import style from 'styled-components';\nimport { INPUT_BORDER_COLOR } from 'styled/constants';\n\nexport const StyledInputModern = style.div`\n .input-wrapper{\n border-width: ${props => props.borderWidth || '2px'};\n border-style: solid;\n border-color: ${props =>\n props.error ? props.theme.colors.alert : props.borderColor || INPUT_BORDER_COLOR};\n display: flex;\n width: 100%;\n border-radius: 0;\n justify-content: center;\n align-items: center;\n font-weight: ${props => props.fontWeight || 400};\n font-size: ${props => props.fontSize || '1em'};\n color: ${props => props.color || props.theme.font.colors.secondary};\n span {\n display: flex;\n width: auto;\n height: 100%;\n color: ${props => props.iconColor || props.theme.colors.buttonPrimaryBg};\n justify-content: center;\n align-items: center;\n padding-top: 0;\n padding-bottom: 0;\n padding-left: 10px;\n padding-right: 5px;\n font-size: ${props => props.fontSize || '1.2em'}\n }\n input {\n width: 100%;\n border: none;\n &:focus {\n outline: none;\n box-shadow: none;\n }\n }\n input::-webkit-input-placeholder, select{ \n font-size: 14px;\n color: #858C99;\n }\n \n input::-moz-placeholder { \n font-size: 12px;\n color: #6f6f6f;\n }\n \n input:-ms-input-placeholder { \n font-size: 12px;\n color: #6f6f6f;\n }\n\n }\n .error{\n font-size:14px;\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n margin-bottom: 15px;\n margin-top:-5px;\n }\n .label{\n font-weight: bold;\n margin-bottom: 5px;\n color:red;\n }\n`;\n","import TextInput from './TextInput';\nexport default TextInput;\n","import React from 'react';\nimport InputMask from 'react-input-mask';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\nimport { props } from './TextInput.props';\nimport { StyledInput } from './TextInput.styled';\nimport { StyledInputModern } from './TextInput.styled.modern';\n\nconst TextInput = ({\n wrapperId,\n wrapperClass,\n inputClass,\n color,\n onChange,\n borderColor,\n fontSize,\n iconColor,\n placeholder,\n icon,\n error,\n label,\n type,\n value,\n options,\n id,\n readOnly,\n legend,\n settings,\n mask,\n disabled,\n}) => {\n const getTemplateStyledComponent = () => {\n if (settings.theme.template === MODERN_THEME) {\n return StyledInputModern;\n }\n return StyledInput;\n };\n\n const StyledComponent = getTemplateStyledComponent();\n\n return (\n <StyledComponent\n color={color}\n fontSize={fontSize}\n id={wrapperId}\n className={wrapperClass}\n borderColor={borderColor}\n iconColor={iconColor}\n error={error}\n >\n {label && <label className=\"label\">{label}</label>}\n <div className=\"input-wrapper mb-2\">\n {icon && <span className={icon} />}\n {mask ? (\n <InputMask\n className={inputClass}\n mask={mask}\n maskChar={null}\n value={value}\n onChange={e => onChange(e.target.value)}\n placeholder={placeholder}\n id={id}\n readOnly={readOnly || false}\n {...options}\n />\n ) : (\n <input\n disabled={disabled}\n className={inputClass}\n type={type || 'text'}\n value={value}\n onChange={e => onChange(e.target.value)}\n placeholder={placeholder}\n id={id}\n readOnly={readOnly || false}\n {...options}\n />\n )}\n </div>\n {legend && <small className=\"form-text text-muted pl-1 pb-1\">{legend}</small>}\n {error && <div className=\"error\">{error}</div>}\n </StyledComponent>\n );\n};\n\nTextInput.propTypes = props;\nexport default withSettingsContext(TextInput);\n","import PropTypes from 'prop-types';\n\nexport const props = {\n className: PropTypes.string,\n color: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n borderColor: PropTypes.string,\n fontSize: PropTypes.string,\n placeholder: PropTypes.string,\n iconColor: PropTypes.string,\n icon: PropTypes.string,\n error: PropTypes.string,\n label: PropTypes.string,\n rows: PropTypes.number,\n cols: PropTypes.number,\n};\n\nexport const defaultProps = {\n cols: 4,\n rows: 4,\n};\n","import style from 'styled-components';\nimport { INPUT_BORDER_COLOR } from 'styled/constants';\n\nexport const StyledInput = style.div`\n .input-wrapper{\n border-width: ${props => props.borderWidth || '1px'};\n border-style: solid;\n border-color: ${props =>\n props.error ? props.theme.colors.alert : props.borderColor || INPUT_BORDER_COLOR};\n display: flex;\n width: 100%;\n height: ${props => props.height || '100px'};\n min-height: 50px;\n border-radius: 0;\n justify-content: center;\n align-items: center;\n font-weight: ${props => props.fontWeight || 500};\n font-size: ${props => props.fontSize || '1em'};\n padding-top:5px;\n color: ${props => props.color || props.theme.font.colors.secondary};\n span {\n display: flex;\n width: auto;\n height: 100%;\n margin-top: 5px;\n color: ${props => props.iconColor || props.theme.colors.buttonPrimaryBg};\n justify-content: center;\n align-items: flex-start;\n padding-left: 10px;\n padding-right: 5px;\n font-size: ${props => props.fontSize || '1.2em'}\n }\n textarea {\n padding-left: 5px;\n width: 100%;\n height: 100%;\n border: none;\n &:focus {\n outline: none;\n box-shadow: none;\n }\n }\n }\n .error{\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic\n }\n .label{\n font-weight: bold;\n margin-bottom: 5px;\n }\n`;\n","import TextAreaInput from './TextAreaInput';\nexport default TextAreaInput;\n","import React from 'react';\nimport { props } from './TextAreaInput.props';\nimport { StyledInput } from './TextAreaInput.styled';\n\nconst TextAreaInput = ({\n wrapperId,\n wrapperClass,\n inputClass,\n color,\n onChange,\n borderColor,\n fontSize,\n iconColor,\n placeholder,\n icon,\n error,\n cols,\n rows,\n label,\n value,\n}) => (\n <StyledInput\n color={color}\n fontSize={fontSize}\n id={wrapperId}\n className={wrapperClass}\n borderColor={borderColor}\n iconColor={iconColor}\n error={error}\n >\n {label && <div className=\"label\">{label}</div>}\n <div className=\"input-wrapper\">\n {icon && <span className={icon} />}\n <textarea\n className={inputClass}\n value={value || ''}\n onChange={e => onChange(e.target.value)}\n placeholder={placeholder}\n rows={rows}\n cols={cols}\n />\n </div>\n {error && <div className=\"error\">{error}</div>}\n </StyledInput>\n);\n\nTextAreaInput.propTypes = props;\nexport default TextAreaInput;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n className: PropTypes.string,\n color: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n borderColor: PropTypes.string,\n fontSize: PropTypes.string,\n placeholder: PropTypes.string,\n iconColor: PropTypes.string,\n icon: PropTypes.string,\n error: PropTypes.string,\n label: PropTypes.string,\n};\n","import style from 'styled-components';\nimport { INPUT_BORDER_COLOR } from 'styled/constants';\n\nexport const StyledInput = style.div`\n .input-wrapper{\n border-width: ${props => props.borderWidth || '1px'};\n border-style: solid;\n border-color: ${props =>\n props.error ? props.theme.colors.alert : props.borderColor || INPUT_BORDER_COLOR};\n display: flex;\n width: 100%;\n height: ${props => props.height || '45px'}\n border-radius: 0;\n justify-content: center;\n align-items: center;\n font-weight: ${props => props.fontWeight || 500};\n font-size: ${props => props.fontSize || '1em'};\n color: ${props => props.color || props.theme.font.colors.secondary};\n span {\n display: flex;\n width: auto;\n height: 100%;\n color: ${props => props.iconColor || props.theme.colors.buttonPrimaryBg};\n justify-content: center;\n align-items: center;\n padding-top: 0;\n padding-bottom: 0;\n padding-left: 10px;\n padding-right: 5px;\n font-size: ${props => props.fontSize || '1.2em'}\n }\n input {\n padding-left: 5px;\n width: 100%;\n height: 100%;\n border: none;\n &:focus {\n outline: none;\n box-shadow: none;\n }\n }\n }\n .error{\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic\n }\n .label{\n font-weight: bold;\n margin-bottom: 5px;\n }\n`;\n","import NumberInput from './NumberInput';\nexport default NumberInput;\n","import React from 'react';\nimport { props } from './NumberInput.props';\nimport { StyledInput } from './NumberInput.styled';\n\nconst NumberInput = ({\n wrapperClass,\n inputClass,\n color,\n onChange,\n borderColor,\n fontSize,\n iconColor,\n placeholder,\n icon,\n error,\n label,\n}) => (\n <StyledInput\n color={color}\n fontSize={fontSize}\n className={wrapperClass}\n borderColor={borderColor}\n iconColor={iconColor}\n error={error}\n >\n {label && <div className=\"label\">{label}</div>}\n <div className=\"input-wrapper\">\n {icon && <span className={icon} />}\n <input\n className={inputClass}\n type=\"number\"\n onChange={e => onChange(e.target.value)}\n placeholder={placeholder}\n />\n </div>\n {error && <div className=\"error\">{error}</div>}\n </StyledInput>\n);\n\nNumberInput.propTypes = props;\nexport default NumberInput;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n className: PropTypes.string,\n color: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n borderColor: PropTypes.string,\n fontSize: PropTypes.string,\n placeholder: PropTypes.string.isRequired,\n iconColor: PropTypes.string,\n icon: PropTypes.string,\n error: PropTypes.string,\n selected: PropTypes.string,\n label: PropTypes.string,\n disabled: PropTypes.bool,\n options: PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n title: PropTypes.string,\n options: PropTypes.arrayOf(PropTypes.string),\n }),\n ]),\n ),\n};\n\nexport const defaultProps = {\n options: [],\n disabled: false,\n placeholder: 'Select',\n};\n","import style from 'styled-components';\nimport arrow from '../assets/arrow.png';\nimport { INPUT_BORDER_COLOR } from 'styled/constants';\n\nexport const StyledInput = style.div`\n .input-wrapper {\n border-width: ${props => props.borderWidth || '1px'};\n border-style: solid;\n border-color: ${props =>\n props.error ? props.theme.colors.alert : props.borderColor || INPUT_BORDER_COLOR};\n display: flex;\n width: 100%;\n border-radius: 0;\n justify-content: center;\n align-items: center;\n font-weight: ${props => props.fontWeight || 400};\n font-size: ${props => props.fontSize || '1em'};\n color: ${props => props.color || props.theme.font.colors.secondary};\n span {\n display: flex;\n width: auto;\n height: 100%;\n color: ${props =>\n props.disabled ? INPUT_BORDER_COLOR : props.iconColor || props.theme.font.colors.primary};\n justify-content: center;\n align-items: center;\n padding-top: 0;\n padding-bottom: 0;\n padding-left: 10px;\n padding-right: 5px;\n font-size: ${props => props.fontSize || '1.2em'}\n }\n select {\n background: url(${arrow}) no-repeat 97% 50%;\n padding-left: 5px;\n width: 100%;\n border: none;\n margin: 3px;\n &:focus {\n outline: none;\n box-shadow: none;\n }\n -webkit-appearance: none;\n -moz-appearance: none;\n }\n }\n .error {\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic;\n }\n .label {\n font-size: 13px;\n font-weight: 600;\n margin-bottom: 5px;\n }\n`;\n","import style from 'styled-components';\nimport arrow from '../assets/arrow.png';\nimport { INPUT_BORDER_COLOR } from 'styled/constants';\n\nexport const StyledInputModern = style.div`\n .input-wrapper{\n border-width: ${props => props.borderWidth || '1px'};\n border-style: solid;\n border-color: ${props =>\n props.error ? props.theme.colors.alert : props.borderColor || INPUT_BORDER_COLOR};\n display: flex;\n width: 100%;\n height: ${props => props.height || '45px'}\n border-radius: 0;\n justify-content: center;\n align-items: center;\n font-weight: ${props => props.fontWeight || 500};\n font-size: ${props => props.fontSize || '1em'};\n color: ${props => props.color || props.theme.font.colors.secondary};\n background-color: ${props => props.backgroundColor || 'white'};\n\n span {\n display: flex;\n width: auto;\n height: 100%;\n color: ${props =>\n props.disabled ? INPUT_BORDER_COLOR : props.iconColor || props.theme.font.colors.primary};\n justify-content: center;\n align-items: center;\n padding-top: 0;\n padding-bottom: 0;\n padding-left: 10px;\n padding-right: 5px;\n font-size: ${props => props.fontSize || '1.2em'}\n }\n select {\n background: url(${arrow}) no-repeat 97% 50%;\n width: 100%;\n height: 100%;\n border: none;\n font-size:14px;\n font-weight:400;\n &:focus {\n outline: none;\n box-shadow: none;\n }\n -webkit-appearance: none;\n -moz-appearance: none;\n }\n }\n\n .input-wrapper:hover{\n border:1.3px solid black\n }\n\n\n .error{\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic\n }\n .label{\n font-size: 13px;\n font-weight: 600;\n margin-bottom: 5px\n }\n`;\n","import React from 'react';\nimport moment from 'moment';\nimport { withTranslation } from 'react-i18next';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\nimport { props, defaultProps } from './SelectInput.props';\nimport { StyledInput } from './SelectInput.styled';\nimport { StyledInputModern } from './SelectInput.styled.modern';\n\nconst createOption = (option, key, selectedValue) => {\n if (option.value === selectedValue) {\n return (\n <option value={option.value} key={key} selected>\n {option.text}\n </option>\n );\n } else {\n return (\n <option value={option.value} key={key}>\n {option.text}\n </option>\n );\n }\n};\n\nconst SelectInput = ({\n wrapperId,\n wrapperClass,\n inputClass,\n color,\n onChange,\n borderColor,\n fontSize,\n iconColor,\n placeholder,\n icon,\n error,\n options,\n label,\n selected,\n disabled,\n readOnly,\n name,\n defaultOption,\n settings,\n props,\n t,\n}) => {\n const getTemplateStyledComponent = () => {\n if (settings.theme.template === MODERN_THEME) {\n return StyledInputModern;\n }\n return StyledInput;\n };\n\n const StyledComponent = getTemplateStyledComponent();\n\n return (\n <StyledComponent\n color={color}\n fontSize={fontSize}\n id={wrapperId}\n className={wrapperClass}\n borderColor={borderColor}\n iconColor={iconColor}\n error={error}\n options={options}\n disabled={disabled || readOnly}\n >\n {label && (\n <label htmlFor={name} className=\"label\">\n {label}\n </label>\n )}\n <div className=\"input-wrapper mb-2\">\n {icon && <span className={icon} />}\n <select\n className={inputClass}\n onChange={e => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled || readOnly}\n value={selected || 0}\n id={name}\n name={name}\n {...props}\n >\n <option value={null}>{defaultOption ? defaultOption : t('select')}</option>\n {options.map((option, key) => {\n if (option.options) {\n return (\n <optgroup label={option.title} value={option.title} key={key}>\n {option.options.map(opt => {\n return (\n <option value={opt} key={opt}>\n {opt}\n </option>\n );\n })}\n </optgroup>\n );\n }\n if (option.text && option.value) {\n return createOption(option, key, selected);\n }\n return (\n <option value={option} key={key}>\n {option}\n </option>\n );\n })}\n </select>\n </div>\n {error && <div className=\"error\">{error}</div>}\n </StyledComponent>\n );\n};\n\nSelectInput.propTypes = props;\nSelectInput.defaultProps = defaultProps;\nexport default withSettingsContext(withTranslation()(SelectInput));\n","import SelectInput from './SelectInput';\nexport default SelectInput;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n logoUrl: PropTypes.string,\n title: PropTypes.string,\n address: PropTypes.string,\n hours: PropTypes.array,\n socialNetworks: PropTypes.array,\n color: PropTypes.string,\n logoHeight: PropTypes.string,\n};\n","import style from 'styled-components';\n\nexport const StyledCompanyInfo = style.div`\n color: ${props => props.theme.font.colors.secondary} !important;\n\n .companyInfoTitle {\n margin-top: 20px;\n margin-bottom: .5rem;\n color: ${props => props.color || props.theme.font.colors.secondary};\n }\n\n p, .adress {\n color: ${props => props.color || props.theme.font.colors.secondary};\n margin-block-end: 0;\n margin-block-start: 0;\n line-height: 20px;\n font-size: 12px;\n font-weight: 200;\n }\n`;\n","import CompanyInfo from './CompanyInfo';\nexport default CompanyInfo;\n","import React from 'react';\nimport { props } from './CompanyInfo.props';\nimport { StyledCompanyInfo } from './CompanyInfo.styled';\nimport { Logo, Title, SocialList, TranslatedLink } from '../';\nimport { useTranslation } from 'react-i18next';\nimport { tt } from '../../utils/translationHelper';\nimport ReactMarkdownn from 'react-markdown';\n\nconst CompanyInfo = ({\n logoUrl,\n logoWidth,\n logoHeight,\n title,\n address,\n customText,\n hours = [],\n socialNetworks = [],\n addressPath,\n color,\n showSocialsOnRight,\n}) => {\n const { t } = useTranslation();\n\n return (\n <StyledCompanyInfo className=\"companyInfo col-md-3\" color={color}>\n <Logo alt=\"Company Logo\" src={logoUrl} width={logoWidth} height={logoHeight} />\n {title && (\n <Title\n text={title}\n type=\"h3\"\n fontSize={14}\n noMedia\n className=\"companyInfoTitle\"\n bold={false}\n italic={false}\n weight=\"400\"\n />\n )}\n {address &&\n (addressPath ? (\n <TranslatedLink className=\"adress\" name={address} path={addressPath} />\n ) : (\n <p>{tt(address, t)}</p>\n ))}\n {hours.map((hour, index) => (\n <p key={index}>{tt(hour, t)}</p>\n ))}\n {customText && <ReactMarkdownn className=\"footerCustomText\" source={tt(customText, t)} />}\n\n {socialNetworks && !showSocialsOnRight && (\n <SocialList className=\"footerSocial\" links={socialNetworks} location=\"footer\" />\n )}\n </StyledCompanyInfo>\n );\n};\n\nCompanyInfo.propTypes = props;\n\nexport default CompanyInfo;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n langs: PropTypes.array,\n handleOnChange: PropTypes.func,\n classNames: PropTypes.string,\n bgColor: PropTypes.string,\n};\n\nexport const defaultProps = {\n langs: [],\n handleOnChange: () => {},\n};\n","import styled from 'styled-components';\n\nexport const StyledLangDropdown = styled.div`\n color: ${props => props.theme.font.colors.primary};\n background: ${({ bgColor }) => bgColor};\n transition: background-color 200ms ease-in-out;\n cursor: pointer;\n padding: 0.5rem 1rem;\n text-transform: uppercase;\n width: auto;\n height: 100%;\n display: inline-block;\n position: relative;\n font-size: 12px;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n padding: 0;\n }\n\n @media (min-width: ${props => props.theme.screens.md}) {\n &:hover,\n &.active {\n background-color: ${props => props.bgColor || props.theme.colors.secondary};\n }\n\n &:hover span.currentLang {\n color: ${props => props.theme.font.colors.secondary};\n }\n }\n\n .currentLang {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n\n &:hover {\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n justify-content: flex-start;\n }\n\n &::after {\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: '';\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n }\n\n .fas.fa-comment {\n display: none;\n color: ${props => props.theme.font.colors.primary};\n margin-right: 10px;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n display: initial;\n }\n }\n\n .shortLang {\n white-space: nowrap;\n @media (max-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n\n .baseLang {\n @media (min-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n }\n\n .dropdownOptions {\n display: none;\n font-size: 12px;\n position: absolute;\n margin-top: 16px;\n z-index: 99999;\n left: 0;\n min-width: 5rem;\n padding: 0;\n flex-wrap: wrap;\n background: ${props => props.theme.colors.bg};\n overflow: hidden;\n border: 1px solid #f2f2f2;\n box-shadow: 0px 3px 8px #00000036;\n\n &.open {\n display: flex;\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n border-radius: 0.25rem;\n }\n\n .dropdownItem {\n padding: 5px 10px;\n cursor: pointer;\n width: 100%;\n\n .fas.fa-comment {\n color: ${props => props.theme.font.colors.primary};\n margin-right: 10px;\n display: none;\n\n @media (max-width: ${props => props.theme.screens.md}) {\n display: initial;\n }\n }\n\n &.active {\n background-color: ${props => props.hoverBkg || props.theme.colors.secondary};\n color: ${props => props.hoverColor || props.theme.font.colors.secondary};\n }\n\n @media (min-width: ${props => props.theme.screens.md}) {\n &:hover {\n background-color: ${props => props.hoverBkg || props.theme.colors.secondary};\n color: ${props => props.hoverColor || props.theme.font.colors.secondary};\n }\n }\n\n .shortLang {\n @media (max-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n\n .baseLang {\n @media (min-width: ${props => props.theme.screens.md}) {\n display: none;\n }\n }\n }\n }\n`;\n","import React, { Component } from 'react';\nimport { props, defaultProps } from './langDropdown.props';\nimport { StyledLangDropdown } from './langDropdown.styled';\nimport { withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { getLanguagePath } from 'utils/translationHelper';\n\nclass LangDropdown extends Component {\n static propTypes = props;\n static defaultProps = defaultProps;\n\n state = {\n currentLang: '',\n dropOpen: false,\n };\n\n componentWillMount = () => {\n const { i18n, langs } = this.props;\n\n if (langs.length > 1) {\n this.setState({\n currentLang: i18n.language,\n });\n }\n };\n\n toggleDropdown = () =>\n this.setState({\n dropOpen: !this.state.dropOpen,\n });\n\n changeLanguague = lang => {\n const { handleOnChange } = this.props;\n if (!this.checkLang(lang)) {\n this.setState({\n currentLang: lang,\n });\n handleOnChange(lang);\n }\n this.toggleDropdown();\n };\n\n checkLang = lang => this.state.currentLang === lang;\n\n getLanguageText = lang => {\n const { langConfig } = this.props;\n\n if (langConfig && langConfig[lang]) {\n return langConfig[lang].text || lang;\n }\n return lang;\n };\n\n render() {\n const { langs, classNames, langConfig, bgColor, hoverBkg, hoverColor } = this.props;\n return (\n langs.length > 1 && (\n <StyledLangDropdown\n className={`${classNames}`}\n bgColor={bgColor}\n hoverBkg={hoverBkg}\n hoverColor={hoverColor}\n onClick={() => this.toggleDropdown()}\n >\n <span className=\"currentLang\">\n <i className=\"fas fa-comment\" />\n <span className=\"shortLang\">{getLanguagePath(langConfig, this.state.currentLang)}</span>\n <span className=\"baseLang\">{getLanguagePath(langConfig, this.state.currentLang)}</span>\n </span>\n <div className={`dropdownOptions ${this.state.dropOpen && 'open'}`}>\n {langs.map(lang => {\n if (this.state.currentLang === lang) return null;\n\n return (\n <span\n key={`index_${lang}`}\n className={`${this.checkLang(lang) ? `active` : ''} dropdownItem`}\n onClick={() => this.changeLanguague(lang)}\n >\n <i className=\"fas fa-comment\" />\n <span className=\"shortLang\">{this.getLanguageText(lang)}</span>\n <span className=\"baseLang\">{this.getLanguageText(lang)}</span>\n </span>\n );\n })}\n </div>\n </StyledLangDropdown>\n )\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration, searchCars }) => ({\n langConfig: siteConfiguration.settings.configurations.langConfig,\n});\n\nexport default connect(mapStateToProps)(withTranslation()(LangDropdown));\n","import PropTypes from 'prop-types';\n\nexport const props = {\n link: PropTypes.string,\n text: PropTypes.string,\n isActive: PropTypes.bool,\n};\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { props } from './BreadcrumbItem.props';\nimport { TranslatedComponent } from 'components/';\nimport { withTranslation } from 'react-i18next';\n\nclass BreadcrumbItem extends TranslatedComponent {\n static propTypes = props;\n\n render() {\n return (\n <li\n className={\n 'breadcrumb-item ' + (this.props.isActive && !this.props.disabled ? 'active' : '')\n }\n >\n {this.props.link && !this.props.disabled ? (\n <Link to={this.props.link}>{this.tt(this.props.text).toLowerCase()}</Link>\n ) : (\n this.tt(this.props.text).toLowerCase()\n )}\n </li>\n );\n }\n}\n\nexport default withTranslation()(BreadcrumbItem);\n","import PropTypes from 'prop-types';\n\nexport const props = {\n background: PropTypes.string,\n items: PropTypes.array,\n showHome: PropTypes.bool,\n};\n","import style from 'styled-components';\n\nexport const StyledBreadcrumb = style.section`\n\tbackground: ${props => (props.background ? props.background : `none`)};\n padding-top: 10px;\n width: 100%;\n \n\n @media only screen and (max-width: ${props => props.theme.screens.lg}){\n display: none;\n }\n\n .breadcrumb {\n background: ${props => (props.background ? props.background : `none`)};\n margin-bottom: 1rem;\n }\n\n .breadcrumb li, .breadcrumb li a {\n color: #969696;\n font-size: 13px;\n text-transform: capitalize;\n }\n\n .breadcrumb li a:hover{\n text-decoration:none;\n }\n \n .breadcrumb li:hover a, .breadcrumb .active a{\n color: #000;\n font-size: 13px;\n font-weight: 600;\n }\n`;\n","import React from 'react';\nimport BreadcrumbItem from './BreadcrumbItem';\nimport { props } from './Breadcrumb.props';\nimport { StyledBreadcrumb } from './Breadcrumb.styled';\nimport { withRouter } from 'react-router-dom';\nimport { withTranslation } from 'react-i18next';\nimport { tlink } from 'utils/translationHelper';\nimport withSettingsContext from 'SettingsContext';\n\nclass Breadcrumb extends React.Component {\n static propTypes = props;\n\n getLocation() {\n const { i18n } = this.props;\n\n return this.props.location.pathname\n .replace('/', '')\n .replace(`${i18n.language}/`, '')\n .replace(/\\w+/g, function(w) {\n return w[0].toUpperCase() + w.slice(1).toLowerCase();\n });\n }\n\n render() {\n const { showHome, items, background, className, t, i18n, settings } = this.props;\n\n return (\n <StyledBreadcrumb background={background} className={(className || '') + ' col-md-12 pl-0'}>\n <div>\n <ol className=\"breadcrumb\">\n {showHome && (\n <BreadcrumbItem\n link={tlink('/', t, i18n, null, settings.configurations.langConfig)}\n text={'Home'}\n />\n )}\n {items && items.length > 0 ? (\n items.map((item, i) => (\n <BreadcrumbItem\n key={i}\n link={item.link || '#'}\n text={item.text}\n isActive={!item.link || item.link === this.getLocation()}\n disabled={item.disabled}\n />\n ))\n ) : (\n <BreadcrumbItem link={'#'} text={this.getLocation()} isActive />\n )}\n </ol>\n </div>\n </StyledBreadcrumb>\n );\n }\n}\n\nexport default withSettingsContext(withRouter(withTranslation()(Breadcrumb)));\n","import BreadCrumb from './Breadcrumb';\nexport default BreadCrumb;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n title: PropTypes.string.isRequired,\n subTitle: PropTypes.string,\n};\n","import style from 'styled-components';\n\nexport const StyledPageTitle = style.section`\n @media only screen and (max-width: ${props => props.theme.screens.md}){\n h1 {\n display: none;\n }\n }\n`;\n","import PageTitle from './PageTitle';\nexport default PageTitle;\n","import React from 'react';\nimport { props } from './PageTitle.props';\nimport { Title } from 'components/';\nimport { StyledPageTitle } from './PageTitle.styled';\n\nclass PageTitle extends React.Component {\n static propTypes = props;\n\n render() {\n const {\n title,\n subTitle,\n titleType,\n subtitleType,\n subTitleColor,\n titleColor,\n subTitleSize,\n titleSize,\n } = this.props;\n return (\n <StyledPageTitle\n className={`page-title col-lg-6 offset-lg-3 text-center mb-4 claim ${this.props.className}`}\n >\n <Title\n type={titleType ? titleType : 'h2'}\n text={title}\n weight=\"900\"\n fontSize={titleSize || 30}\n color={titleColor}\n />\n <Title\n type={subtitleType ? subtitleType : 'h1'}\n text={subTitle}\n weight=\"500\"\n fontSize={subTitleSize || 16}\n italic={false}\n color={subTitleColor}\n />\n </StyledPageTitle>\n );\n }\n}\n\nexport default PageTitle;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport style from 'styled-components';\nimport { CompositeComponent } from 'components/';\n\nconst StyledParallaxSection = style.section`\n min-height: 300px; \n margin-left:-4%; \n margin-right:-4%;\n display:block;\n \n background: ${props => (props.background ? `url(${props.background}) no-repeat` : `black`)}; \n \n @media (max-width:${props => props.theme.screens.sm}){\n margin-left:-6%; \n margin-right:-6%;\n }\n\n @media (min-width: ${props => props.theme.screens.xxxl}){\n margin-left:-8%; \n margin-right:-8%;\n padding-left: 0px !important;\n padding-right: 0px !important;\n }\n\n`;\n\nexport default class ParallaxSection extends CompositeComponent {\n static propTypes = {\n image: PropTypes.string,\n };\n\n render() {\n const { image } = this.props;\n\n return (\n <StyledParallaxSection className=\"parallax row row-p\" background={image}>\n {this.renderChilds()}\n </StyledParallaxSection>\n );\n }\n}\n","import ParallaxSection from './ParallaxSection';\nexport default ParallaxSection;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { CompositeComponent } from 'components/';\nimport { Column } from '..';\nimport style from 'styled-components';\n\nconst StyledRow = style.div`\n flex: 1;\n background: ${props => props.background || props.theme.colors.bb}\n`;\n\nexport default class ColumnsSectionComponent extends CompositeComponent {\n static propTypes = {\n sections: PropTypes.array,\n lg: PropTypes.number,\n md: PropTypes.number,\n sm: PropTypes.number,\n order: PropTypes.number,\n mobileOrder: PropTypes.number,\n className: PropTypes.string,\n noWrapper: PropTypes.bool,\n };\n\n withWrapper(config, column, myProps, key) {\n if (config.component !== 'Column') {\n const c = {\n sm: myProps.sm || config.sm,\n md: myProps.md || config.md,\n lg: myProps.lg || config.lg,\n order: config.order || undefined,\n mobileOrder: config.mobileOrder || undefined,\n className: config.className || '',\n };\n\n return (\n <Column {...c} key={key}>\n {column}\n </Column>\n );\n }\n\n return column;\n }\n\n render() {\n const { className, noWrapper } = this.props;\n\n return (\n <StyledRow className={`row ${className || ''}`} background={this.props.background}>\n {this.renderChilds(noWrapper ? null : this.withWrapper, {\n ...this.props,\n })}\n </StyledRow>\n );\n }\n}\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { withTranslation } from 'react-i18next';\nimport { tt } from '../../../utils/translationHelper';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\nimport 'react-lazy-load-image-component/src/effects/blur.css';\n\nclass ImageComponent extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n alt: PropTypes.string,\n src: PropTypes.string,\n };\n\n render() {\n const { src, alt, t, className, height, width } = this.props;\n\n return (\n <LazyLoadImage\n src={tt(src, t)}\n alt={t(alt)}\n threshold={100}\n effect=\"blur\"\n height={height}\n width={width}\n wrapperClassName={className}\n />\n );\n }\n}\n\nexport default withTranslation()(ImageComponent);\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport style from 'styled-components';\n\nexport const StyledSeparator = style.div`\n width:100%;\n\n hr{\n width:100%;\n color: ${props => (props.color ? props.color : props.theme.colors.separator)}\n }\n`;\n\nexport default class SeparatorComponent extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n color: PropTypes.string,\n };\n\n render() {\n return (\n <StyledSeparator color={this.props.color} className={`row ${this.props.className}`}>\n <hr />\n </StyledSeparator>\n );\n }\n}\n","import React from 'react';\nimport CompositeComponent from 'components/CompositeComponent/CompositeComponent';\nimport { PropTypes } from 'prop-types';\n\nexport default class ColumnComponent extends CompositeComponent {\n static propTypes = {\n lg: PropTypes.number,\n md: PropTypes.number,\n sm: PropTypes.number,\n className: PropTypes.string,\n order: PropTypes.number,\n mobileOrder: PropTypes.number,\n };\n\n getColStyle(col, style) {\n return col ? `${style}${col}` : '';\n }\n\n render() {\n const { lg, md, sm, className, order, mobileOrder } = this.props;\n\n const isMobile = window.matchMedia('(max-width: 768px)').matches;\n const orderStyle = order !== undefined ? { order: Number(order) } : {};\n const orderMobileStyle = mobileOrder !== undefined ? { order: Number(mobileOrder) } : {};\n\n return (\n <div\n style={isMobile ? orderMobileStyle : orderStyle}\n className={`${className || ''} ${this.getColStyle(sm, 'col-sm-')} ${this.getColStyle(\n md,\n 'col-md-',\n )} ${this.getColStyle(lg, 'col-lg-')}`}\n >\n {this.renderChilds()}\n {this.props.children}\n </div>\n );\n }\n}\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport style from 'styled-components';\n\nconst StyledI = style.i`\n color: ${props => props.color || props.theme.font.primary};\n`;\n\nexport default class IconComponent extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n title: PropTypes.string,\n };\n\n render() {\n return (\n <StyledI className={this.props.className} title={this.props.title} color={this.props.color} />\n );\n }\n}\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { withTranslation } from 'react-i18next';\n\nclass CustomHtmlComponent extends React.Component {\n static propTypes = {\n customContent: PropTypes.string,\n className: PropTypes.string,\n withoutTranslation: PropTypes.bool,\n };\n\n render() {\n const { t, className, customContent, withoutTranslation } = this.props;\n\n return (\n <div\n className={`${className ? className : ''} customContent`}\n dangerouslySetInnerHTML={{ __html: withoutTranslation ? customContent : t(customContent) }}\n />\n );\n }\n}\n\nexport default withTranslation()(CustomHtmlComponent);\n","import ColumnsSectionComponent from './Columns/ColumnsSection';\nimport ImageComponent from './Image/Image';\nimport ParagraphComponent from './Paragraph/Paragraph';\nimport SeparatorComponent from './Separator/SeparatorComponent';\nimport ColumnComponent from './Columns/ColumnComponent';\nimport IconComponent from './Icon/Icon';\nimport ScriptComponent from './ScriptComponent/ScriptComponent';\nimport CustomHtmlComponent from './CustomHTML/CustomHTML';\n\nexport const ColumnsSection = ColumnsSectionComponent;\nexport const Image = ImageComponent;\nexport const Paragraph = ParagraphComponent;\nexport const Separator = SeparatorComponent;\nexport const Column = ColumnComponent;\nexport const Icon = IconComponent;\nexport const ScriptTagComponent = ScriptComponent;\nexport const CustomHtml = CustomHtmlComponent;\n","import style from 'styled-components';\n\nexport const StyledCustomerCarrousel = style.div`\n width:100%;\n\n h4{\n text-transform: uppercase;\n font-size: 20px;\n font-weight: 600;\n }\n\n .customer-image{\n height: fit-content;\n text-align: center;\n height: 100px;\n width: 150px;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n margin: 15px;\n }\n\n .slick-track{\n margin: auto auto;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledCustomerCarrouselModern = style.div`\n width:100%;\n\n h4{\n font-size: 20px;\n font-weight: 600;\n }\n\n .customer-image{\n height: fit-content;\n text-align: center;\n height: 100px;\n width: 150px;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n margin: 15px;\n }\n\n .slick-track{\n margin: auto auto;\n }\n`;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport Slider from 'react-slick';\nimport { StyledCustomerCarrousel } from './CustomerCarrousel.styled';\nimport { StyledCustomerCarrouselModern } from './CustomerCarrousel.styled.modern';\nimport { Title } from 'components/';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\n\nconst sliderSettings = {\n dots: false,\n infinite: false,\n slidesToScroll: 1,\n slidesToShow: 6,\n autoplay: true,\n responsive: [\n {\n breakpoint: 1000,\n settings: {\n slidesToShow: 4,\n },\n },\n {\n breakpoint: 600,\n settings: {\n slidesToShow: 2,\n },\n },\n ],\n};\n\nclass CustomerCarrousel extends React.Component {\n static propTypes = {\n title: PropTypes.string,\n items: PropTypes.array,\n className: PropTypes.string,\n settings: PropTypes.object,\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledCustomerCarrouselModern;\n }\n return StyledCustomerCarrousel;\n }\n\n render() {\n const { title, items, className } = this.props;\n\n const settings = { ...sliderSettings, ...this.props.settings };\n\n const StyledComponent = this.getTemplateStyledComponent();\n\n return (\n <StyledComponent className={`row-p text-center ${className}`}>\n <Title text={title} type=\"h4\" />\n <Slider {...settings}>\n {items.map((item, i) => (\n <div key={i}>\n <div\n className=\"customer-image\"\n style={{ backgroundImage: 'url(' + item.image + ')' }}\n ></div>\n </div>\n ))}\n </Slider>\n </StyledComponent>\n );\n }\n}\n\nexport default withSettingsContext(CustomerCarrousel);\n","import CustomerCarrousel from './CustomerCarrousel';\nexport default CustomerCarrousel;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { withTranslation } from 'react-i18next';\nimport TranslatedLink from 'components/TranslatedLink';\n\nclass ContactList extends React.Component {\n static propTypes = {\n items: PropTypes.array,\n className: PropTypes.string,\n horizontal: PropTypes.bool,\n };\n\n render() {\n const { items, t, className, horizontal } = this.props;\n\n return (\n <ul\n className={`list-unstyled contact-list ${className} ${horizontal &&\n 'nav nav-pills d-inline-flex text-center'}`}\n style={{ justifyContent: 'center' }}\n >\n {items &&\n items.map((item, i) => (\n <li className={`${horizontal && 'nav-item text-center mr-3'}`} key={i}>\n {item.url && item.url.length > 0 ? (\n <TranslatedLink path={item.url}>\n <i className={`${item.icon}`} /> {t(item.text)}\n </TranslatedLink>\n ) : (\n <span className={`${item.className || ''}`}>\n <i className={`${item.icon}`} /> {t(item.text)}\n </span>\n )}\n </li>\n ))}\n </ul>\n );\n }\n}\nexport default withTranslation()(ContactList);\n","import ContactList from './ContactList';\nexport default ContactList;\n","import style from 'styled-components';\n\nexport const StyledCancelModal = style.div`\n`;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n t: PropTypes.func,\n};\n","import React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport { StyledCancelModal } from './CancelModal.styled';\nimport Btn from '../Btn/Btn';\nimport { props } from './CancelModal.props';\nimport { withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport ReCAPTCHA from 'react-google-recaptcha';\nimport { cancelBooking } from 'services/api';\n\nclass CancelModal extends React.Component {\n static propTypes = props;\n\n onChange(value) {}\n\n async onCancelBooking() {\n try {\n await cancelBooking('');\n } catch {}\n }\n\n render() {\n const { t, i18n } = this.props;\n\n return (\n <StyledCancelModal>\n <Modal {...this.props} size=\"lg\" aria-labelledby=\"contained-modal-title-vcenter\" centered>\n <Modal.Header closeButton>\n <Modal.Title id=\"contained-modal-title-vcenter\">{t('cancelbooking')}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <h4>Centered Modal</h4>\n <input type=\"text\" />\n <input type=\"text\" />\n <ReCAPTCHA sitekey=\"Your client site key\" onChange={this.onChange} hl={i18n.language} />\n </Modal.Body>\n <Modal.Footer>\n <Btn onClick={this.props.onHide} text={t('cancel')} />\n </Modal.Footer>\n </Modal>\n </StyledCancelModal>\n );\n }\n}\n\nconst mapStateToProps = ({ global, router }) => ({\n listCategories: global.listCategories,\n router: router,\n});\n\nconst CancelModalComp = withTranslation()(CancelModal);\n\nexport default connect(mapStateToProps, null)(CancelModalComp);\n","import CancelModal from './CancelModal';\nexport default CancelModal;\n","import style from 'styled-components';\n\nexport const StyledContactForm = style.form`\n .recaptcha {\n div {\n margin-top: 10px;\n }\n }\n\n textarea{\n resize: none;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledContactFormModern = style.form`\nbackground-color: #FFF;\npadding:30px;\nborder-radius:12px;\nfont-size:16px;\n\n@media (max-width: 767px){\npadding:0\n }\n\n.form-control {\n font-size: 15px;\n}\n\n.contact-form_input::placeholder {\n color: #2E2D35;\n font-size: 15px;\n}\n\n.form-control::placeholder {\n color: #2E2D35;\n font-size: 15px;\n}\n\n .recaptcha {\n div {\n margin-top: 10px;\n }\n }\n\n .recaptcha {\n width:50px; \n margin-top: 1.5rem;\n }\n\n textArea{\n resize: none;\n font-size: 15px;\n }\n \n\n .input-wrapper {\n border:none;\n border-bottom:1px solid #2E2D35;\n margin:5px 0;\n }\n .input-wrapper:hover{\n border-bottom:1px solid ${props => props.theme.colors.primary};\n }\n\n .input-wrapper textarea {\n padding-left: 10px;\n }\n\n .btnContact{\n padding:15px 40px;\n }\n`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withRouter } from 'react-router';\nimport { withTheme } from 'styled-components';\nimport { withTranslation } from 'react-i18next';\nimport ReCAPTCHA from 'react-google-recaptcha';\nimport * as yup from 'yup';\nimport { Btn, TextInput, TextAreaInput, Icon, SelectInput, RangeDateInput } from 'components/';\nimport { sendContact, listStates } from 'services/api';\nimport { StyledContactForm } from './ContactForm.styled';\nimport { StyledContactFormModern } from './ContactForm.styled.modern';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\n\nclass ContactForm extends React.Component {\n static propTypes = {\n formType: PropTypes.string,\n askForAgency: PropTypes.bool,\n askForState: PropTypes.bool,\n askForGuestAmount: PropTypes.bool,\n askForRangeDate: PropTypes.bool,\n theme: PropTypes.object,\n };\n\n constructor(props) {\n super(props);\n\n const { t } = props;\n this.handleContact = this.handleContact.bind(this);\n this.recaptchaVerify = this.recaptchaVerify.bind(this);\n this.state = {\n userInfo: {\n tcAccept: false,\n needAgencyName: false,\n needStateName: false,\n needGuestAmount: false,\n needRangeDate: false,\n },\n ReCAPTCHAError: false,\n loading: false,\n isVerified: false,\n step: 0,\n captcha: null,\n ReCAPTCHAErrorMessage: null,\n formErrors: {\n fullname: null,\n mail: null,\n leaveamessage: null,\n phone: null,\n agency: null,\n province: null,\n guestAmount: null,\n },\n listProvinces: [],\n rangeDatePicker: {\n orientation:\n window.screen.width < parseFloat(props.theme.screens.md.replace('px', ''))\n ? 'vertical'\n : 'horizontal',\n withFullScreenPortal:\n window.screen.width < parseFloat(props.theme.screens.md.replace('px', '')),\n focus: null,\n },\n pickUp: {\n date: null,\n moment: null,\n },\n dropOff: {\n date: null,\n moment: null,\n },\n };\n\n this.userInfoFormSchema = yup.object().shape({\n fullname: yup.string().required(t('inputIsRequired', { field: t('enterFullName') })),\n mail: yup\n .string()\n .email()\n .required(t('inputIsRequired', { field: t('enterEmail') })),\n leaveamessage: yup.string().required(t('inputIsRequired', { field: t('enterMessage') })),\n phone: yup\n .string()\n .matches(\n /^((\\\\+[1-9]{1,4}[ \\\\-]*)|(\\\\([0-9]{2,3}\\\\)[ \\\\-]*)|([0-9]{2,4})[ \\\\-]*)*?[0-9]{3,4}?[ \\\\-]*[0-9]{3,4}?$/,\n t('invalidPhone'),\n ),\n agency: yup.string().test('isAgencyRequired?', t('agencyNameRequired'), function(agencyName) {\n if (!this.parent.needAgencyName) return true;\n return agencyName && agencyName.length > 0;\n }),\n province: yup\n .string()\n .test('isProvinceRequired?', t('stateNameIsRequired'), function(stateName) {\n if (!this.parent.needStateName) return true;\n return stateName && stateName.length > 0;\n }),\n guestAmount: yup.number().test('needGuestAmount?', t('invalidNumber'), function(guestAmount) {\n if (!this.parent.needGuestAmount) return true;\n return guestAmount > 0;\n }),\n });\n\n this.formRef = React.createRef(null);\n this.ReCAPTCHARef = React.createRef();\n }\n\n async componentDidMount() {\n const { askForAgency, askForState, askForGuestAmount, askForRangeDate } = this.props;\n const { listProvinces } = this.state;\n\n this.setState(prevState => ({\n ...prevState,\n userInfo: {\n ...prevState.userInfo,\n needAgencyName: askForAgency,\n needStateName: askForState,\n needGuestAmount: askForGuestAmount,\n needRangeDate: askForRangeDate,\n },\n }));\n\n if (askForState && listProvinces.length === 0) {\n const response = await listStates();\n if (response.status === 200) this.setState({ listProvinces: response.data });\n }\n }\n\n recaptchaVerify(res) {\n this.setState({ isVerified: true, captcha: res });\n }\n\n onFullNameChange = fullname => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, fullname },\n formErrors: { ...prevState.formErrors, fullname: null },\n }));\n };\n\n onAgencyNameChange = agency => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, agency },\n formErrors: { ...prevState.formErrors, agency: null },\n }));\n };\n\n onProvinceChange = province => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, province },\n formErrors: { ...prevState.formErrors, province: null },\n }));\n };\n\n onMailChange = mail => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, mail },\n formErrors: { ...prevState.formErrors, mail: null },\n }));\n };\n\n onTelephoneChange = phone => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, phone },\n formErrors: { ...prevState.formErrors, phone: null },\n }));\n };\n\n onMessageChange = leaveamessage => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, leaveamessage },\n formErrors: { ...prevState.formErrors, leaveamessage: null },\n }));\n };\n\n onGuestAmountChange = guestAmount => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, guestAmount },\n formErrors: { ...prevState.formErrors, guestAmount: null },\n }));\n };\n\n handleDateFocus = focus => {\n this.setState(prevState => ({\n ...prevState,\n rangeDatePicker: { ...prevState.rangeDatePicker, focus },\n }));\n };\n\n handleDateSelect = (startDate, endDate) => {\n if (!startDate) return false;\n const pickUpDate = startDate.format('DD-MM-YYYY');\n let dropOffDate = '';\n if (endDate) dropOffDate = endDate.format('DD-MM-YYYY');\n\n this.setState(prevState => ({\n ...prevState,\n pickUp: {\n ...prevState.pickUp,\n date: pickUpDate,\n moment: startDate,\n },\n dropOff: {\n ...prevState.dropOff,\n date: dropOffDate,\n moment: endDate || prevState.dropOff.moment,\n },\n }));\n };\n\n isDayBlocked = () => {\n return false;\n };\n\n handleContact = event => {\n event.preventDefault();\n const { formType } = this.props;\n const userInfo = this.state.userInfo;\n\n this.userInfoFormSchema\n .validate(userInfo, { abortEarly: false })\n .then(valid => {\n if (valid && this.state.isVerified) {\n const parsedContact = {\n fullName: this.state.userInfo.fullname,\n telephone: this.state.userInfo.phone,\n email: this.state.userInfo.mail,\n agency: this.state.userInfo.agency,\n state: this.state.userInfo.province,\n guestAmount: this.state.userInfo.guestAmount,\n fromDate: this.state.pickUp.moment ? this.state.pickUp.moment.format('DD-MM-YYYY') : '',\n toDate: this.state.dropOff.moment ? this.state.dropOff.moment.format('DD-MM-YYYY') : '',\n message: this.state.userInfo.leaveamessage,\n reCAPTCHA: this.state.captcha,\n formType: formType || 'Contact',\n };\n this.setState({ loading: true });\n sendContact(parsedContact)\n .then(res => {\n this.setState({ step: 1 });\n })\n .catch(error => {\n if (\n error.response == null ||\n error.response.data == null ||\n error.response.data.code !== 100\n ) {\n this.setState({ step: 2 });\n } else {\n this.setState({\n loading: false,\n ReCAPTCHAErrorMessage: error.response.data.message,\n ReCAPTCHAError: true,\n });\n this.ReCAPTCHARef.current.reset();\n }\n });\n }\n })\n .catch(err => {\n const formErrors = err.inner.reduce((prevErrors, currentError) => {\n return { ...prevErrors, [currentError.path]: currentError.message };\n }, {});\n window.scrollTo(0, this.formRef.current.offsetTop);\n this.setState(prevState => ({ ...prevState, formErrors }));\n });\n\n return;\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledContactFormModern;\n }\n return StyledContactForm;\n }\n\n contactForm() {\n const {\n t,\n className,\n leaveamessage,\n i18n,\n askForAgency,\n askForState,\n askForGuestAmount,\n askForRangeDate,\n } = this.props;\n const {\n rangeDatePicker: { orientation, focus, withFullScreenPortal },\n } = this.state;\n\n const StyledComponent = this.getTemplateStyledComponent();\n\n return (\n <StyledComponent className={`${className || ''}`} leaveamessage={leaveamessage}>\n <div ref={this.formRef}>\n <TextInput\n inputClass=\"contact-form_input form-control\"\n className=\"form-control mb-3\"\n type=\"text\"\n placeholder={t('fullname')}\n error={this.state.formErrors.fullname}\n onChange={this.onFullNameChange}\n options={{ autoComplete: 'name' }}\n />\n {askForAgency && (\n <TextInput\n inputClass=\"contact-form_input form-control\"\n className=\"form-control mb-3\"\n type=\"text\"\n placeholder={t('agencyName')}\n error={this.state.formErrors.agency}\n onChange={this.onAgencyNameChange}\n options={{ autoComplete: 'agencyname' }}\n />\n )}\n <div className=\"row\">\n <div className=\"col\">\n <TextInput\n inputClass=\"contact-form_input form-control\"\n type=\"mail\"\n className=\"form-control\"\n error={this.state.formErrors.mail}\n placeholder={t('mail')}\n onChange={this.onMailChange}\n options={{ autoComplete: 'email' }}\n />\n </div>\n <div className=\"col\">\n <TextInput\n inputClass=\"contact-form_input form-control\"\n type=\"text\"\n className=\"form-control\"\n error={this.state.formErrors.phone}\n placeholder={t('phone')}\n onChange={this.onTelephoneChange}\n options={{ autoComplete: 'tel' }}\n />\n </div>\n </div>\n {askForState && (\n <SelectInput\n inputClass=\"form-control\"\n name=\"province\"\n selected={this.state.userInfo.province || ''}\n options={this.state.listProvinces.map(prov => prov.name)}\n onChange={this.onProvinceChange}\n error={this.state.formErrors.province}\n />\n )}\n {askForGuestAmount && (\n <TextInput\n inputClass=\"contact-form_input form-control number\"\n className=\"form-control mb-3\"\n type=\"number\"\n placeholder={t('guestAmount')}\n error={this.state.formErrors.guestAmount}\n onChange={this.onGuestAmountChange}\n options={{ pattern: '[0-9]*', inputMode: 'numeric' }}\n />\n )}\n {askForRangeDate && (\n <div className=\"row mb-3\">\n {' '}\n <div className=\"col\">\n <RangeDateInput\n onDatesChange={this.handleDateSelect}\n onFocusChange={this.handleDateFocus}\n startDateId=\"drop-up-date-start\"\n startDate={this.state.pickUp.moment}\n endDate={this.state.dropOff.moment}\n icon=\"far fa-calendar-alt\"\n iconColor=\"#000\"\n isDayBlocked={this.isDayBlocked}\n datePickerOptions={{\n minimumNights: 1,\n focusedInput: focus,\n orientation: orientation,\n withFullScreenPortal: withFullScreenPortal,\n customArrowIcon: <span className=\"fas fa-arrow-right p-0 mr-2\" />,\n startDatePlaceholderText: t('deliveryDate'),\n endDatePlaceholderText: t('return'),\n hideKeyboardShortcutsPanel: true,\n }}\n />\n </div>\n </div>\n )}\n\n <TextAreaInput\n inputClass=\"form-control\"\n className=\"form-control mb-4\"\n rows={5}\n placeholder={leaveamessage || t('leaveamessage')}\n onChange={this.onMessageChange}\n error={this.state.formErrors.leaveamessage}\n value={this.state.userInfo.leaveamessage}\n />\n <ReCAPTCHA\n // TODO: take this from site configuration\n sitekey=\"6LePeSUTAAAAANnXGXzC52BIeAMN8f7MHhFX86oO\"\n onChange={this.recaptchaVerify}\n className=\"recaptcha\"\n ref={this.ReCAPTCHARef}\n hl={i18n.language}\n />\n {this.state.ReCAPTCHAError && (\n <p style={{ color: '#FF0000' }}>{this.state.ReCAPTCHAErrorMessage}</p>\n )}\n <Btn\n className=\"btnContact\"\n onClick={this.handleContact}\n disabled={!this.state.isVerified || this.state.loading}\n text={this.state.loading ? t('sending') : t('send')}\n />\n </div>\n </StyledComponent>\n );\n }\n\n errorMessage() {\n const { t } = this.props;\n return (\n <div className=\"col-md-8 offset-md-2 text-center\">\n <Icon className=\"fas fa-times-circle display-3 mb-5 text-danger\"></Icon>\n <h4>{t('contactFormFail')}</h4>\n </div>\n );\n }\n\n successMessage() {\n const { t } = this.props;\n return (\n <div className=\"col-md-8 offset-md-2 text-center\">\n <Icon className=\"fas fa-check-circle display-3 mb-5 text-success\"></Icon>\n <h4>{t('contactFormSucces')}</h4>\n </div>\n );\n }\n\n render() {\n const { t } = this.props;\n\n if (this.state.step === 0) {\n return this.contactForm();\n } else if (this.state.step === 1) {\n const thanksUrl = this.props.history.location.pathname + '/' + t('graciasUrl');\n window.history.pushState('', '', thanksUrl);\n\n return this.successMessage();\n } else {\n const errorUrl = this.props.history.location.pathname + '/error';\n window.history.pushState('', '', errorUrl);\n return this.errorMessage();\n }\n }\n}\n\nexport default withRouter(withSettingsContext(withTheme(withTranslation()(ContactForm))));\n","import ContactForm from './ContactForm';\nexport default ContactForm;\n","import style from 'styled-components';\n\nexport const StyledQuoteForm = style.form`\npadding-right: 20% !important;\npadding-left: 20% !important;\nmargin-bottom: 20px;\n\n.recaptcha {\n div {\n margin-top: 10px;\n }\n}\n\n.terms-conditions {\n font-size: 0.8em;\n padding: 5px;\n}\n`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Btn, TextInput, Icon } from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport ReCAPTCHA from 'react-google-recaptcha';\nimport * as yup from 'yup';\nimport { sendCompanyContact } from 'services/api';\nimport { StyledQuoteForm } from './QuoteForm.styled';\nimport { withRouter } from 'react-router';\nimport { CheckboxInput } from '/components';\n\nclass QuoteForm extends React.Component {\n static propTypes = {\n items: PropTypes.array,\n };\n\n constructor(props) {\n super(props);\n\n const { t, items } = props;\n this.submit = this.submit.bind(this);\n this.recaptchaVerify = this.recaptchaVerify.bind(this);\n this.state = {\n companyInfo: {\n formType: 'CompanyContact',\n },\n ReCAPTCHAError: false,\n loading: false,\n isVerified: false,\n step: 0,\n captcha: null,\n ReCAPTCHAErrorMessage: null,\n formErrors: {\n companyName: null,\n companyId: null,\n country: null,\n businessAddress: null,\n fullname: null,\n email: null,\n phone: null,\n termsConditions: null,\n },\n };\n\n this.companyInfoFormSchema = yup.object().shape({\n companyName: yup.string().required(t('inputIsRequired', { field: t('companyName') })),\n companyId: yup\n .number()\n .required(\n t('inputIsRequired', { field: t('companyId', { companyIdType: items.companyIdType }) }),\n ),\n country: yup.string().required(t('inputIsRequired', { field: t('country') })),\n businessAddress: yup.string().required(t('inputIsRequired', { field: t('businessAddress') })),\n fullname: yup.string().required(t('inputIsRequired', { field: t('enterFullName') })),\n email: yup\n .string()\n .email()\n .required(t('inputIsRequired', { field: t('enterEmail') })),\n phone: yup\n .string()\n .matches(\n /^((\\\\+[1-9]{1,4}[ \\\\-]*)|(\\\\([0-9]{2,3}\\\\)[ \\\\-]*)|([0-9]{2,4})[ \\\\-]*)*?[0-9]{3,4}?[ \\\\-]*[0-9]{3,4}?$/,\n t('invalidPhone'),\n ),\n termsConditions: yup\n .boolean()\n .required(t('mustAcceptTermAndConditions'))\n .oneOf([true], t('mustAcceptTermAndConditions')),\n });\n\n this.formRef = React.createRef(null);\n this.ReCAPTCHARef = React.createRef();\n }\n\n recaptchaVerify(res) {\n this.setState({ isVerified: true, captcha: res });\n }\n\n onFullNameChange = fullname => {\n this.setState(prevState => ({\n ...prevState,\n companyInfo: { ...prevState.companyInfo, fullname },\n formErrors: { ...prevState.formErrors, fullname: null },\n }));\n };\n\n onCompanyNameChange = companyName => {\n this.setState(prevState => ({\n ...prevState,\n companyInfo: { ...prevState.companyInfo, companyName },\n formErrors: { ...prevState.formErrors, companyName: null },\n }));\n };\n\n onCompanyIdChange = companyId => {\n this.setState(prevState => ({\n ...prevState,\n companyInfo: { ...prevState.companyInfo, companyId },\n formErrors: { ...prevState.formErrors, companyId: null },\n }));\n };\n\n onCountryChange = country => {\n this.setState(prevState => ({\n ...prevState,\n companyInfo: { ...prevState.companyInfo, country },\n formErrors: { ...prevState.formErrors, country: null },\n }));\n };\n\n onBusinessAddressChange = businessAddress => {\n this.setState(prevState => ({\n ...prevState,\n companyInfo: { ...prevState.companyInfo, businessAddress },\n formErrors: { ...prevState.formErrors, businessAddress: null },\n }));\n };\n\n onMailChange = email => {\n this.setState(prevState => ({\n ...prevState,\n companyInfo: { ...prevState.companyInfo, email },\n formErrors: { ...prevState.formErrors, email: null },\n }));\n };\n\n onTelephoneChange = phone => {\n this.setState(prevState => ({\n ...prevState,\n companyInfo: { ...prevState.companyInfo, phone },\n formErrors: { ...prevState.formErrors, phone: null },\n }));\n };\n\n onTermsConditionsChange = termsConditions => {\n this.setState(prevState => ({\n ...prevState,\n companyInfo: { ...prevState.companyInfo, termsConditions },\n formErrors: { ...prevState.formErrors, termsConditions: null },\n }));\n };\n\n submit = event => {\n event.preventDefault();\n const companyInfo = this.state.companyInfo;\n\n this.companyInfoFormSchema\n .validate(companyInfo, { abortEarly: false })\n .then(valid => {\n if (valid && this.state.isVerified) {\n let parsedContact = this.state.companyInfo;\n parsedContact.reCAPTCHA = this.state.captcha;\n\n this.setState({ loading: true });\n sendCompanyContact(parsedContact)\n .then(res => {\n this.setState({ step: 1 });\n })\n .catch(error => {\n if (\n error.response == null ||\n error.response.data == null ||\n error.response.data.code !== 100\n ) {\n this.setState({ step: 2 });\n } else {\n this.setState({\n loading: false,\n ReCAPTCHAErrorMessage: error.response.data.message,\n ReCAPTCHAError: true,\n });\n this.ReCAPTCHARef.current.reset();\n }\n });\n }\n })\n .catch(err => {\n const formErrors = err.inner.reduce((prevErrors, currentError) => {\n return { ...prevErrors, [currentError.path]: currentError.message };\n }, {});\n window.scrollTo(0, this.formRef.current.offsetTop);\n this.setState(prevState => ({ ...prevState, formErrors }));\n });\n\n return;\n };\n\n QuoteForm() {\n const { t, className, i18n, items } = this.props;\n if (!items) return null;\n\n return (\n <StyledQuoteForm className={`${className || ''}`}>\n <div ref={this.formRef}>\n <TextInput\n inputClass=\"form-control\"\n className=\"form-control mb-3\"\n type=\"text\"\n placeholder={t('companyName')}\n error={this.state.formErrors.companyName}\n onChange={this.onCompanyNameChange}\n options={{ autoComplete: t('companyName') }}\n />\n <div className=\"row mb-3\">\n <div className=\"col\">\n <TextInput\n inputClass=\"form-control\"\n type=\"text\"\n className=\"form-control\"\n error={this.state.formErrors.companyId}\n placeholder={t('companyId', { companyIdType: items.companyIdType })}\n onChange={this.onCompanyIdChange}\n options={{ autoComplete: t('companyId', { companyIdType: items.companyIdType }) }}\n />\n </div>\n <div className=\"col\">\n <TextInput\n inputClass=\"form-control\"\n type=\"text\"\n className=\"form-control\"\n error={this.state.formErrors.country}\n placeholder={t('country')}\n onChange={this.onCountryChange}\n options={{ autoComplete: t('country') }}\n />\n </div>\n </div>\n <TextInput\n inputClass=\"form-control\"\n type=\"text\"\n className=\"form-control\"\n error={this.state.formErrors.businessAddress}\n placeholder={t('businessAddress')}\n onChange={this.onBusinessAddressChange}\n options={{ autoComplete: t('businessAddress') }}\n />\n <TextInput\n inputClass=\"form-control\"\n className=\"form-control mb-3\"\n type=\"text\"\n placeholder={t('fullname')}\n error={this.state.formErrors.fullname}\n onChange={this.onFullNameChange}\n options={{ autoComplete: t('fullname') }}\n />\n <div className=\"row mb-3\">\n <div className=\"col\">\n <TextInput\n inputClass=\"form-control\"\n type=\"mail\"\n className=\"form-control\"\n error={this.state.formErrors.email}\n placeholder={t('mail')}\n onChange={this.onMailChange}\n options={{ autoComplete: t('mail') }}\n />\n </div>\n <br />\n <div className=\"col\">\n <TextInput\n inputClass=\"form-control\"\n type=\"text\"\n className=\"form-control\"\n error={this.state.formErrors.phone}\n placeholder={t('phone')}\n onChange={this.onTelephoneChange}\n options={{ autoComplete: t('phone') }}\n />\n </div>\n </div>\n <div className=\"form-group conditions\">\n <CheckboxInput\n error={this.state.formErrors.termsConditions}\n onChange={this.onTermsConditionsChange}\n checked={this.state.companyInfo.termsConditions}\n text={<span>{t('acceptTermConditions')}</span>}\n />\n <div className=\"terms-conditions\">{items.termsConditionsText}</div>\n </div>\n <ReCAPTCHA\n // TODO: take this from site configuration\n sitekey=\"6LePeSUTAAAAANnXGXzC52BIeAMN8f7MHhFX86oO\"\n onChange={this.recaptchaVerify}\n className=\"recaptcha\"\n ref={this.ReCAPTCHARef}\n hl={i18n.language}\n />\n {this.state.ReCAPTCHAError && (\n <p style={{ color: '#FF0000' }}>{this.state.ReCAPTCHAErrorMessage}</p>\n )}\n <Btn\n onClick={this.submit}\n disabled={!this.state.isVerified || this.state.loading}\n text={this.state.loading ? t('sending') : t('send')}\n />\n </div>\n </StyledQuoteForm>\n );\n }\n\n errorMessage() {\n const { t } = this.props;\n return (\n <div className=\"col-md-8 offset-md-2 text-center\">\n <Icon className=\"fas fa-times-circle display-3 mb-5 text-danger\"></Icon>\n <h4>{t('contactFormFail')}</h4>\n </div>\n );\n }\n\n successMessage() {\n const { t } = this.props;\n return (\n <div className=\"col-md-8 offset-md-2 text-center\">\n <Icon className=\"fas fa-check-circle display-3 mb-5 text-success\"></Icon>\n <h4>{t('contactFormSucces')}</h4>\n </div>\n );\n }\n\n render() {\n const { t } = this.props;\n\n if (this.state.step === 0) {\n return this.QuoteForm();\n } else if (this.state.step === 1) {\n const thanksUrl = this.props.history.location.pathname + '/' + t('graciasUrl');\n window.history.pushState('', '', thanksUrl);\n\n return this.successMessage();\n } else {\n const errorUrl = this.props.history.location.pathname + '/error';\n window.history.pushState('', '', errorUrl);\n return this.errorMessage();\n }\n }\n}\n\nexport default withRouter(withTranslation()(QuoteForm));\n","import QuoteForm from './QuoteForm';\nexport default QuoteForm;\n","import React from 'react';\nimport { Btn, TextInput } from 'components/';\nimport { withTranslation } from 'react-i18next';\nimport { PropTypes } from 'prop-types';\nimport ReCAPTCHA from 'react-google-recaptcha';\nimport queryString from 'query-string';\nimport * as yup from 'yup';\nimport { cancelReservation } from 'services/api';\nimport { history } from '../../store';\nimport { tt, tlink } from 'utils/translationHelper';\nimport { withRouter } from 'react-router-dom';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\n\nclass CancelForm extends React.Component {\n constructor(props) {\n super(props);\n\n const { t } = props;\n this.handleCancel = this.handleCancel.bind(this);\n this.recaptchaVerify = this.recaptchaVerify.bind(this);\n this.state = {\n userInfo: {\n tcAccept: false,\n },\n ReCAPTCHAError: false,\n loading: false,\n isVerified: false,\n captcha: null,\n ReCAPTCHAErrorMessage: null,\n formErrors: {\n lastName: null,\n reservationNumber: null,\n },\n };\n\n this.userInfoFormSchema = yup.object().shape({\n lastName: yup.string().required(t('inputIsRequired', { field: t('lastname') })),\n reservationNumber: yup\n .number()\n .required(t('inputIsRequired', { field: t('enterReservationNumber') })),\n });\n\n this.formRef = React.createRef(null);\n this.ReCAPTCHARef = React.createRef();\n }\n\n static propTypes = {\n t: PropTypes.func,\n className: PropTypes.string,\n };\n\n componentDidMount() {\n const { location } = this.props;\n const parseQs = queryString.parse(location.search);\n if (parseQs.lastName && parseQs.reservationNumber) {\n this.setState({\n userInfo: {\n lastName: parseQs.lastName,\n reservationNumber: parseQs.reservationNumber,\n isVerified: false,\n },\n });\n }\n }\n\n onLastNameChange = lastName => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, lastName },\n formErrors: { ...prevState.formErrors, lastName: null },\n }));\n };\n\n onReservationNumberChange = reservationNumber => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, reservationNumber },\n formErrors: { ...prevState.formErrors, reservationNumber: null },\n }));\n };\n\n handleCancel = event => {\n event.preventDefault();\n const { t, i18n, settings } = this.props;\n const userInfo = this.state.userInfo;\n\n this.userInfoFormSchema\n .validate(userInfo, { abortEarly: false })\n .then(valid => {\n if (valid && this.state.isVerified) {\n const parsedCancel = {\n BookingId: this.state.userInfo.reservationNumber,\n Lastname: this.state.userInfo.lastName,\n Captcha: this.state.captcha,\n };\n this.setState({ loading: true });\n cancelReservation(parsedCancel)\n .then(res => {\n history.push(\n `${tlink(\n '__Routes.cancelSuccess',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n )}`,\n );\n })\n .catch(error => {\n if (\n error.response == null ||\n error.response.data == null ||\n error.response.data.code !== 100\n ) {\n let errorMessage =\n error.response && error.response.data\n ? error.response.data.message\n : tt('__PageCancelarReserva.genericError', t);\n history.push(\n `${tlink(\n '__Routes.cancelFailed',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n )}`,\n { error: errorMessage },\n );\n } else {\n this.setState({\n loading: false,\n ReCAPTCHAErrorMessage: error.response.data.message,\n ReCAPTCHAError: true,\n });\n this.ReCAPTCHARef.current.reset();\n }\n });\n }\n })\n .catch(err => {\n const formErrors = err.inner.reduce((prevErrors, currentError) => {\n return { ...prevErrors, [currentError.path]: currentError.message };\n }, {});\n window.scrollTo(0, this.formRef.current.offsetTop);\n this.setState(prevState => ({ ...prevState, formErrors }));\n });\n\n return;\n };\n\n recaptchaVerify(res) {\n this.setState({ isVerified: true, captcha: res });\n }\n\n getBtnStyles() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return 'pl-5 pr-5 pt-3 pb-3';\n }\n return '';\n }\n\n render() {\n const { t, className, i18n } = this.props;\n\n const btnStyles = this.getBtnStyles();\n\n return (\n <form className={`${className || ''}`}>\n <div className=\"row mb-3\" ref={this.formRef}>\n <TextInput\n inputClass=\"form-control\"\n wrapperClass=\"col-md-12\"\n placeholder={t('lastname')}\n error={this.state.formErrors.lastName}\n onChange={this.onLastNameChange}\n value={this.state.userInfo.lastName}\n />\n <TextInput\n inputClass=\"form-control\"\n wrapperClass=\"col-md-12\"\n placeholder={t('bookingnumber')}\n error={this.state.formErrors.reservationNumber}\n onChange={this.onReservationNumberChange}\n type=\"number\"\n value={this.state.userInfo.reservationNumber}\n />\n </div>\n <ReCAPTCHA\n // TODO: take this from site configuration\n sitekey=\"6LePeSUTAAAAANnXGXzC52BIeAMN8f7MHhFX86oO\"\n onChange={this.recaptchaVerify}\n className=\"recaptcha\"\n ref={this.ReCAPTCHARef}\n hl={i18n.language}\n />\n {this.state.ReCAPTCHAError && (\n <p style={{ color: '#FF0000' }}>{this.state.ReCAPTCHAErrorMessage}</p>\n )}\n <Btn\n className={btnStyles}\n onClick={this.handleCancel}\n disabled={!this.state.isVerified || this.state.loading}\n text={this.state.loading ? t('sending') : t('send')}\n />\n </form>\n );\n }\n}\n\nexport default withSettingsContext(withTranslation()(withRouter(CancelForm)));\n","import CancelForm from './CancelForm';\nexport default CancelForm;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n page: PropTypes.shape({}),\n settings: PropTypes.shape({ title: PropTypes.string }),\n};\n","import style from 'styled-components';\n\nexport const StyledPageWithTitle = style.section`\n flex: 1;\n @media (max-width: ${props => props.theme.screens.md}){\n h2{\n text-align:left;\n font-size: 16px !important;\n }\n }\n\n h2{\n font-size: 22px;\n margin-top: 15px;\n }\n \n h1{\n font-size: 16px;\n margin-top: 0;\n @media only screen and (min-width: ${props =>\n props.theme.screens.xl}) and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 16px !important;\n }\n\n }\n`;\n\nexport const StyledPageWithTitleModern = style.section`\n flex: 1;\n background:#FFF;\n h2{\n font-size: 34px !important;\n margin-top: 15px;\n color:${props => props.theme.colors.primary};\n font-weight:400\n }\n\n @media (max-width: 767px){\n h2{\n text-align:left;\n font-size: 25px !important;\n }\n }\n \n h1{\n font-size: 16px;\n margin-top: 0;\n @media only screen and (min-width: ${props =>\n props.theme.screens.xl}) and (max-width: ${props => props.theme.screens.xxl}){\n font-size: 16px !important;\n }\n\n }\n`;\n\nexport const StyledBanner = style.section`\n background-image: url(${props => props.bannerImage});\n background-size: cover;\n background-position: center;\n height: ${props => props.height || '200px'};\n`;\n\nexport const StyledMap = style.section`\n position: relative;\n \n .gradient {\n width: 100%;\n height: 80px;\n position: absolute;\n z-index: 2;\n background: linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%);\n bottom: 0;\n }\n .map-container {\n height: ${props => props.mapContainerHeight || '350px'};\n width: 100%;\n position: relative;\n overflow: hidden;\n }\n`;\n","import styled from 'styled-components';\n\nexport const StyledPage = styled.section`\n min-height: 400px;\n background-color: ${props => props.theme.colors.bg};\n\n &.searchPage {\n display: flex;\n background-color: ${props => props.theme.colors.searchBg};\n\n @media only screen and (max-width: ${props => props.theme.screens.md}) {\n flex-direction: column;\n justify-content: center;\n padding: 0;\n margin: 0;\n }\n }\n\n a {\n transition: all 0.2s;\n }\n`;\n\nexport const StyledH2 = styled.h2`\n background-color: red;\n`;\n\nexport const StyledDiv = styled.div`\n header {\n .header-item {\n padding: 0;\n }\n\n .header-slogan {\n white-space: nowrap;\n }\n }\n`;\n","import React from 'react';\nimport { props } from './PageWithTitle.props';\nimport {\n StyledPageWithTitle,\n StyledPageWithTitleModern,\n StyledBanner,\n StyledMap,\n} from './PageWithTitle.styled';\nimport { BasePage, PageTitle, Breadcrumb, CompositeComponent } from 'components/';\nimport { StyledPage } from 'styled/page';\nimport { withTranslation } from 'react-i18next';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\n\nclass PageWithTitle extends CompositeComponent {\n static propTypes = props;\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledPageWithTitleModern;\n }\n return StyledPageWithTitle;\n }\n\n render() {\n const {\n height,\n bannerImage,\n breadCrumItems,\n title,\n titleType,\n subTitle,\n subtitleType,\n showBreadcrumb,\n showBanner,\n showMap,\n mapUrl,\n mapHeight,\n mapContainerHeight,\n hideGradient,\n subTitleColor,\n titleColor,\n subTitleSize,\n titleSize,\n } = this.props;\n\n const StyledComponent = this.getTemplateStyledComponent();\n\n return (\n <>\n {showBanner && <StyledBanner className=\"row\" height={height} bannerImage={bannerImage} />}\n {showMap && (\n <StyledMap className=\"row\" mapContainerHeight={mapContainerHeight}>\n {hideGradient ? '' : <div className=\"gradient\"></div>}\n <div className=\"map-container\">\n <iframe\n title=\"street cars map\"\n src={mapUrl}\n height={mapHeight || '410'}\n frameBorder=\"0\"\n style={{\n border: '0',\n width: '100%',\n position: 'relative',\n top: '-55px',\n }}\n allowFullScreen\n />\n </div>\n </StyledMap>\n )}\n <StyledComponent className=\"row row-p page\">\n {showBreadcrumb && <Breadcrumb showHome items={breadCrumItems} />}\n <PageTitle\n title={this.tt(title)}\n titleType={titleType}\n subTitle={this.tt(subTitle)}\n subTitleType={subtitleType}\n className=\"mb-4 mt-2\"\n subTitleColor={subTitleColor}\n titleColor={titleColor}\n subTitleSize={subTitleSize}\n titleSize={titleSize}\n />\n <StyledPage className=\"container-fluid\">\n <BasePage {...this.props} />\n </StyledPage>\n </StyledComponent>\n </>\n );\n }\n}\n\nexport default withTranslation()(withSettingsContext(PageWithTitle));\n","import PageWithTitle from './PageWithTitle';\nexport default PageWithTitle;\n","import React from 'react';\nimport { CompositeComponent } from 'components/';\nimport { Route } from 'react-router-dom';\nimport { Helmet } from 'react-helmet';\n\nclass BaseLayoutComponent extends CompositeComponent {\n renderLayout() {\n const pageSection = 'PageSection';\n const { sections, comm, headers } = this.props;\n\n var sectionsRendered =\n sections &&\n sections.map((section, i) => {\n if (section.type === pageSection) {\n return this.props.children;\n }\n\n return this.renderComponent({ ...section, ...headers, ...{ comm: comm } }, i);\n });\n\n return sectionsRendered;\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n //never re-render for state\n return false;\n }\n\n render() {\n return (\n <>\n <Helmet>{this.renderHeaders()}</Helmet>\n {this.renderLayout()}\n </>\n );\n }\n}\n\nconst BaseLayout = ({ component: Component, ...rest }) => {\n return (\n <Route\n {...rest}\n render={matchProps => (\n <BaseLayoutComponent {...rest}>\n <Component {...matchProps} />\n </BaseLayoutComponent>\n )}\n />\n );\n};\n\nexport default BaseLayout;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport style from 'styled-components';\n\nconst StyledAfipLogo = style.a`\n img{\n width: ${props => props.width || 'auto'};\n height: ${props => props.height || 'auto'};\n }\n`;\n\nexport default class AfipLogo extends React.Component {\n static propTypes = {\n url: PropTypes.string,\n };\n\n render() {\n return (\n <StyledAfipLogo {...this.props} href={this.props.url} target=\"_F960AFIPInfo\">\n <img src=\"https://rently.azureedge.net/street/Web/afip.jpg\" alt=\"AFIP\" />\n </StyledAfipLogo>\n );\n }\n}\n","import AfipLogo from './AfipLogo';\nexport default AfipLogo;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport style from 'styled-components';\n\nconst StyledGoDaddyLogo = style.span`\n img{\n width: ${props => props.width || 'auto'};\n height: ${props => props.height || 'auto'};\n }\n`;\n\nexport default class GoDaddyLogo extends React.Component {\n static propTypes = {\n url: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n };\n\n componentDidMount() {\n const script = document.createElement('script');\n\n script.src = this.props.url;\n script.async = true;\n\n document.getElementById('siteseal').appendChild(script);\n }\n\n shouldComponentUpdate() {\n return false;\n }\n\n render() {\n return <StyledGoDaddyLogo id=\"siteseal\" width={this.props.width} height={this.props.height} />;\n }\n}\n","import GoDaddyLogo from './GoDaddyLogo';\nexport default GoDaddyLogo;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport style from 'styled-components';\n\nconst StyledMcAfeeLogo = style.span`\n div{\n width: ${props => props.width || 'auto'};\n height: ${props => props.height || 'auto'};\n }\n\n .mfesecure-ts-image{\n\n }\n`;\n\nexport default class McAfeeLogo extends React.Component {\n static propTypes = {\n url: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n };\n\n componentDidMount() {\n const script = document.createElement('script');\n\n script.src = this.props.url;\n script.async = true;\n\n document.getElementById('macAfee-siteseal').appendChild(script);\n }\n\n render() {\n return (\n <StyledMcAfeeLogo id=\"macAfee-siteseal\" width={this.props.width} height={this.props.height} />\n );\n }\n}\n","import McAfee from './McAfee';\nexport default McAfee;\n","import PropTypes from 'prop-types';\n\nconst placeShape = PropTypes.shape({\n address: PropTypes.string,\n category: PropTypes.string,\n id: PropTypes.number,\n name: PropTypes.string,\n price: PropTypes.number,\n rentlyEndpointName: PropTypes.string,\n});\n\nexport const props = {\n data: PropTypes.arrayOf(placeShape),\n placeholder: PropTypes.string,\n placeSelected: PropTypes.oneOfType([placeShape, PropTypes.string]),\n placeChangeHandler: PropTypes.func.isRequired,\n showCity: PropTypes.bool,\n};\n\nexport const defaultProps = {\n options: [],\n disabled: false,\n placeholder: 'Select',\n showCity: false,\n showIATA: false,\n};\n","import style from 'styled-components';\n\nexport const StyledMarker = style.i`\n color: ${props => props.theme.colors.buttonPrimaryBg}\n`;\n","import React, { useContext } from 'react';\nimport Select, { components } from 'react-select';\nimport { props } from './SearchBoxPlace.props';\nimport { StyledMarker } from './SearchBoxPlace.styled';\nimport { ThemeContext } from 'styled-components';\nimport _ from 'lodash';\nimport { AirportNames, BusNames, OfficeNames, PointNames, PortNames } from 'utils/constants';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\n\nconst Option = props => {\n const { data } = props;\n\n const icons = category => {\n if (category) {\n if (AirportNames.some(i => i === category)) {\n return 'fa-plane';\n }\n if (OfficeNames.some(i => i === category)) {\n return 'fa-building';\n }\n if (PortNames.some(i => i === category)) {\n return 'fa-ship';\n }\n if (PointNames.some(i => i === category)) {\n return 'fa-map-marker-alt';\n }\n if (BusNames.some(i => i === category)) {\n return 'fa-bus';\n }\n }\n return 'fa-building';\n };\n\n const category = data.category.toLowerCase();\n const airport = AirportNames.some(i => i === category);\n\n const IATA = data.branchOfficeIATACode && data.showIATA ? ` (${data.branchOfficeIATACode})` : '';\n\n const name = airport ? `${data.name}${IATA}` : data.name;\n\n return (\n <components.Option {...props}>\n <i className={'fas mr-2 ' + icons(category)} />\n {name}\n {data.showCity && (\n <span\n style={{\n display: 'block',\n fontSize: '0.9em',\n marginLeft: '20px',\n textTransform: 'capitalize',\n }}\n >\n {data.city.toLowerCase()} - {data.country}\n </span>\n )}\n </components.Option>\n );\n};\n\nconst ValueContainer = ({ children, ...props }) => (\n <components.ValueContainer {...props}>\n <StyledMarker className=\"fas fa-map-marker-alt\" />\n {children}\n </components.ValueContainer>\n);\n\nconst SearchBoxPlace = props => {\n const items = [];\n if (props.data != null) {\n props.data.forEach(element => {\n const item = { ...element };\n item.value = `${item.rentlyEndpointName}${item.id}`;\n item.label = props.showCity ? `${item.name} - ${item.city}` : item.name;\n item.showCity = props.showCity;\n item.showIATA = props.showIATA;\n items.push(item);\n });\n }\n\n const themeContext = useContext(ThemeContext);\n const sortedItems = props.useBackendSort ? items : _.sortBy(items, i => `${i.country}-${i.name}`);\n\n const filterOptions = ({ data }, input) => {\n const { branchOfficeIATACode, name, city, country } = data;\n if (input) {\n const keywords = input.toLowerCase();\n const branchName = name ? name.toLowerCase() : '';\n const IATA = branchOfficeIATACode ? branchOfficeIATACode.toLowerCase() : '';\n const citysearch = city ? city.toLowerCase() : '';\n const countrysearch = country ? country.toLowerCase() : '';\n\n return `${branchName}-${IATA}-${citysearch}-${countrysearch}`.includes(keywords);\n }\n return true;\n };\n\n const defaultStyles = {\n control: (base, state) => ({\n ...base,\n borderRadius: 0,\n border: 'solid 1px #e7e7e7',\n height: '48px',\n // This line disable the blue border\n boxShadow: state.isFocused ? null : null,\n '&:hover': {\n border: state.isFocused,\n },\n }),\n input: base => ({\n ...base,\n marginLeft: '10px',\n }),\n placeholder: base => ({\n ...base,\n marginLeft: '20px',\n }),\n singleValue: base => ({\n ...base,\n marginLeft: '20px',\n }),\n };\n\n const modernStyles = {\n control: (base, state) => ({\n ...base,\n borderRadius: 10,\n border: 'solid 1px #D8DCE2',\n height: '48px',\n position: 'relative',\n bottom: '3px',\n boxShadow: '-1px 1px 5px 0px rgba(0,0,0,0.37)',\n // This line disable the blue border\n boxShadow: state.isFocused ? null : null,\n '&:hover': {\n border: state.isFocused,\n },\n }),\n menu: base => ({\n ...base,\n zIndex: 1000,\n }),\n input: base => ({\n ...base,\n marginLeft: '10px',\n }),\n placeholder: base => ({\n ...base,\n marginLeft: '20px',\n }),\n singleValue: base => ({\n ...base,\n marginLeft: '20px',\n }),\n };\n\n const styles = props.settings.theme.template === MODERN_THEME ? modernStyles : defaultStyles;\n\n return (\n <Select\n name={props.name}\n inputId={props.name}\n isClearable\n placeholder={props.placeholder}\n value={props.placeSelected}\n options={sortedItems}\n components={{\n Option,\n ValueContainer,\n }}\n onChange={selectedOption => props.placeChangeHandler(selectedOption)}\n filterOption={filterOptions}\n styles={styles}\n theme={th => ({\n ...th,\n colors: {\n ...th.colors,\n primary: 'lightgray',\n primary25: themeContext.colors.buttonPrimaryBg,\n },\n zIndex: '9999',\n })}\n />\n );\n};\n\nSearchBoxPlace.propTypes = props;\nexport default withSettingsContext(SearchBoxPlace);\n","import SearchBoxPlace from './SearchBoxPlace';\nexport default SearchBoxPlace;\n","import moment from 'moment';\n\nconst DEFAULT_GAP = 0;\nconst DEFAULT_GAP_FOR_BOOKING_TIME = 15;\nconst AFTER_HOURS_MAX_MINUTES = 2147483647;\n\nexport const getSchedule = (schedules, branchOfficeId) => {\n if (!branchOfficeId) return null;\n const schedulesForBranch = schedules.find(s => s.id === branchOfficeId);\n return schedulesForBranch || null;\n};\n\nexport const calculateStartDate = (\n globalSchedules,\n holidays,\n pickUpBranchOfficeId,\n tentativeDay = null,\n checkTimes = true,\n) => {\n tentativeDay = tentativeDay || moment();\n const branchSchedules = getSchedule(globalSchedules, pickUpBranchOfficeId);\n if (!branchSchedules) return tentativeDay;\n\n if (!isDayAvailable(tentativeDay, branchSchedules, holidays, 'start', checkTimes)) {\n tentativeDay = calculateStartDate(\n globalSchedules,\n holidays,\n pickUpBranchOfficeId,\n tentativeDay.clone().add(1, 'day'),\n false,\n );\n }\n\n return tentativeDay;\n};\n\nexport const isDayAvailable = (tentativeDay, scheduleConf, holidays, type, checkTimes = true) => {\n if (!scheduleConf) return false;\n const gap = scheduleConf.gap || DEFAULT_GAP;\n const branchSchedule = scheduleConf.schedule;\n\n const blockedByHoliday = isBlockedByHoliday(\n tentativeDay,\n branchSchedule,\n holidays,\n scheduleConf.id,\n );\n if (blockedByHoliday) return false;\n\n const blockedByClosedDay = isBlockedByCloseDay(tentativeDay, branchSchedule);\n if (blockedByClosedDay) return false;\n\n const daySchedules = getScheduleForDay(tentativeDay, scheduleConf, holidays);\n if (!daySchedules.length > 0) return false;\n\n if (checkTimes) {\n const utcOffsetDiff = getTimeZoneDiff(tentativeDay.format('Z'), scheduleConf.timezoneUTCOffset);\n const timeAvailable = isTimeAvailable(\n tentativeDay,\n daySchedules,\n utcOffsetDiff + gap,\n type,\n scheduleConf,\n );\n if (!timeAvailable) return false;\n }\n\n return true;\n};\n\nconst isBlockedByHoliday = (day, schedules, holidays, branchOfficeId) => {\n const holiday = holidays.find(h => h.date === day.format('YYYY-MM-DD'));\n if (!holiday) return false;\n\n const holidayAppliesToBranch = holiday.ids.length === 0 || holiday.ids.includes(branchOfficeId);\n\n // check if branch defined schedule for holidays (workable holiday)\n if (holidayAppliesToBranch) {\n return schedules['holiday'].length !== 0 ? false : true;\n }\n\n return false;\n};\n\nconst isBlockedByCloseDay = (day, scheduleConf) => {\n const { closedDays } = scheduleConf;\n if (!closedDays) return false;\n\n return closedDays.map(d => moment(d)).some(cd => cd.isSame(day, 'day'));\n};\n\nconst getScheduleForDay = (date, schedulesConf, holidays) => {\n const schedules = schedulesConf.schedule;\n const scheduledDates = schedules.scheduleDates;\n\n if (scheduledDates) {\n const specificScheduleForDay = scheduledDates.find(sch => moment(sch.date).isSame(date, 'day'));\n if (specificScheduleForDay) return specificScheduleForDay.range;\n }\n\n const branchOfficeId = schedulesConf.id;\n const holiday = holidays.find(\n h => h.date === date.format('YYYY-MM-DD') && h.ids.includes(branchOfficeId),\n );\n if (holiday) return schedules['holiday'];\n\n return schedules[date.format('dddd').toLowerCase()];\n};\n\nconst isTimeAvailable = (day, daySchedules, originalGap, type, scheduleConf) => {\n if (daySchedules.length === 0) return false;\n let limitHour;\n let hoursToAdd = originalGap;\n const sameDay = isSameDay(day);\n const afterHoursConf = scheduleConf.allowAfterHours ? scheduleConf.afterHoursMaxMinutes / 60 : 0;\n\n switch (type) {\n case 'start':\n if (afterHoursConf !== 0 && !sameDay) hoursToAdd = Number(afterHoursConf) * -1;\n const modifiedDay = sameDay ? day.clone().add(hoursToAdd, 'h') : day;\n // if date was changed after adding the hoursToAdd, day is not available.\n if (modifiedDay.isAfter(day, 'day')) return false;\n limitHour = Number(modifiedDay.format('HHmm'));\n break;\n case 'end':\n // while end date is not today we want to check using morning hours. the first one found in the schedule.\n const firstOpenedFrom = daySchedules[0]['openedFrom'].split(':')[0];\n limitHour = isSameDay(day) ? day.format('HHmm') : firstOpenedFrom;\n break;\n }\n\n const lastOpenedTo = getLastOpenedForDay(daySchedules, scheduleConf.afterHoursMaxMinutes);\n return limitHour > Number(lastOpenedTo) ? false : true;\n};\n\nconst getLastOpenedForDay = (daySchedules, afterHoursConf) => {\n let originalOpenedTo = daySchedules[daySchedules.length - 1]['openedTo']\n .slice(0, -3)\n .replace(':', '');\n if (!afterHoursConf) return originalOpenedTo;\n\n const openedToHour = originalOpenedTo.slice(0, -2);\n const openedToMinutes = originalOpenedTo.slice(2);\n\n const dummyDate = moment()\n .hour(Number(openedToHour))\n .minute(Number(openedToMinutes));\n const dummyDateModified = dummyDate.clone().add(afterHoursConf, 'm');\n\n if (dummyDateModified.isAfter(dummyDate, 'day')) return '2359';\n return dummyDateModified.format('HHmm');\n};\n\nconst isSameDay = day => {\n return moment().isSame(day, 'day');\n};\n\n// En la primer entrada, con el startDate y daysInBetween (min-stay) define el 1er endDate posible\n// si la fecha no está disponible: debe ir sumando de a 1 dia y ver si está disponible\nexport const calculateEndDate = (\n startDate,\n daysInBetween,\n globalSchedules,\n holidays,\n branchOfficeId,\n tentativeEndDate = null,\n) => {\n if (!startDate) return null;\n if (!tentativeEndDate) tentativeEndDate = startDate.clone().add(daysInBetween, 'd');\n\n const branchSchedules = getSchedule(globalSchedules, branchOfficeId);\n if (!branchSchedules) return tentativeEndDate;\n\n if (!isDayAvailable(tentativeEndDate, branchSchedules, holidays, 'end')) {\n tentativeEndDate = calculateEndDate(\n startDate,\n daysInBetween,\n globalSchedules,\n holidays,\n branchOfficeId,\n tentativeEndDate.clone().add(1, 'day'),\n );\n }\n\n return tentativeEndDate;\n};\n\nexport const _calculatePickDropHours = ({\n pickUpDate,\n dropOffDate,\n pickUpBranchOfficeId,\n dropOffBranchOfficeId,\n schedules,\n holidays,\n} = {}) => {\n let pickUpHours = [];\n let dropOffHours = [];\n\n if (pickUpDate && dropOffDate) {\n const pickUpSchedules = getSchedule(schedules, pickUpBranchOfficeId);\n const dropOffSchedules = getSchedule(schedules, dropOffBranchOfficeId);\n\n const pickUpSchedulesConfigured = areSchedulesConfigured(pickUpSchedules);\n const dropOffSchedulesConfigured = areSchedulesConfigured(dropOffSchedules);\n\n if (pickUpSchedulesConfigured) {\n const pickUpRanges = getScheduleForDay(pickUpDate, pickUpSchedules, holidays);\n const pickUpIsToday = moment(pickUpDate).isSame(moment(), 'day');\n const afterHoursConfig = pickUpSchedules.allowAfterHours\n ? pickUpSchedules.afterHoursMaxMinutes\n : null;\n const beforeHoursConfig = pickUpSchedules.allowAfterHours\n ? pickUpSchedules.beforeHoursMaxMinutes\n : null;\n const hoursGap = pickUpSchedules.gap || DEFAULT_GAP;\n const minutesBetween = pickUpSchedules\n ? pickUpSchedules.gapForBookingTime\n : DEFAULT_GAP_FOR_BOOKING_TIME;\n\n pickUpHours = pickUpRanges\n .map(timeRange =>\n getHoursFromDay(\n 'pickup',\n calculatePickUpTime(\n pickUpIsToday,\n timeRange.openedFrom,\n pickUpSchedules.timezoneUTCOffset,\n minutesBetween,\n hoursGap,\n ),\n timeRange.openedTo,\n minutesBetween,\n afterHoursConfig,\n beforeHoursConfig,\n pickUpIsToday,\n ),\n )\n .flat();\n }\n\n if (dropOffSchedulesConfigured) {\n const dropOffRanges = getScheduleForDay(dropOffDate, dropOffSchedules, holidays);\n const afterHoursConfig = dropOffSchedules.allowAfterHours\n ? dropOffSchedules.afterHoursMaxMinutes\n : null;\n const beforeHoursConfig = dropOffSchedules.allowAfterHours\n ? dropOffSchedules.beforeHoursMaxMinutes\n : null;\n\n dropOffHours = dropOffRanges\n .map(timeRange =>\n getHoursFromDay(\n 'dropoff',\n timeRange.openedFrom,\n timeRange.openedTo,\n dropOffSchedules ? dropOffSchedules.gapForBookingTime : DEFAULT_GAP_FOR_BOOKING_TIME,\n afterHoursConfig,\n beforeHoursConfig,\n ),\n )\n .flat();\n }\n }\n\n // removal of possible duplicates\n pickUpHours = [...new Set(pickUpHours)];\n dropOffHours = [...new Set(dropOffHours)];\n\n return { pickUpHours, dropOffHours };\n};\n\nconst areSchedulesConfigured = scheduleConf => {\n if (!scheduleConf) return false;\n const schedules = scheduleConf.schedule;\n\n for (const day in schedules) {\n if (schedules[day].length > 0) return true;\n }\n\n return false;\n};\n\nconst calculatePickUpTime = (\n pickUpIsToday,\n openedFrom,\n branchUtcOffset,\n minutesBetween,\n hoursFromNow,\n) => {\n if (!pickUpIsToday) return openedFrom;\n\n const utcOffsetDiff = getTimeZoneDiff(moment().format('Z'), branchUtcOffset);\n\n if (pickUpIsToday) {\n const tentativeHour = moment().add(utcOffsetDiff + hoursFromNow, 'h');\n const minOpenFrom = openedFrom.split(':')[0];\n const minsDiff = minutesBetween - (tentativeHour.minute() % minutesBetween);\n const tentativeFrom = moment(tentativeHour)\n .add(minsDiff, 'minutes')\n .format('HH:mm');\n\n return tentativeHour.format('HH') >= Number(minOpenFrom) ? tentativeFrom : openedFrom;\n }\n\n const dummyDate = moment()\n .hour(Number(openedFrom.split(':')[0]))\n .minute(Number(openedFrom.split(':')[1]));\n const modifiedTime = dummyDate.clone();\n\n const time = modifiedTime.isBefore(dummyDate, 'd')\n ? dummyDate\n .clone()\n .hour(0)\n .minute(0)\n : modifiedTime;\n\n const minsDiff =\n time.minute() % minutesBetween === 0 ? 0 : minutesBetween - (time.minute() % minutesBetween);\n\n return moment(time)\n .add(minsDiff, 'minutes')\n .format('HH:mm');\n};\n\nconst getTimeZoneDiff = (localOffset, branchOffset) => {\n const local = `${localOffset.split(':')[0]}.${localOffset.split(':')[1]}`;\n const branch = `${branchOffset.split(':')[0]}.${branchOffset.split(':')[1]}`;\n const result = Number(branch) - Number(local);\n\n if (Number.isInteger(result)) return result;\n\n // used to deal with timezones like 09:30, 09:45.\n const splitResult = result\n .toFixed(2)\n .toString()\n .split('.');\n const decimalToMin = splitResult[1] / 60;\n\n return Number(splitResult[0] + '.' + decimalToMin.toString().split('.')[1]);\n};\n\nconst getHoursFromDay = (\n type,\n hourlyFrom,\n hourlyTo,\n gap,\n afterHoursMaxMinutes,\n beforeHoursMaxMinutes,\n pickUpIsToday,\n) => {\n const hourFrom = moment()\n .hour(hourlyFrom.split(':')[0])\n .minute(hourlyFrom.split(':')[1]);\n const hourTo = moment()\n .hour(hourlyTo.split(':')[0])\n .minute(hourlyTo.split(':')[1]);\n\n let finalFrom, finalTo, modifiedFrom, modifiedTo;\n\n if (beforeHoursMaxMinutes && !pickUpIsToday) {\n modifiedFrom = hourFrom.clone().add(beforeHoursMaxMinutes * -1, 'm');\n } else if (afterHoursMaxMinutes) {\n modifiedFrom =\n type === 'dropoff' ? hourFrom.clone().add(afterHoursMaxMinutes * -1, 'm') : hourFrom.clone();\n }\n\n if (afterHoursMaxMinutes) {\n modifiedTo = hourTo.clone().add(afterHoursMaxMinutes, 'm');\n }\n\n if (modifiedFrom) {\n finalFrom = modifiedFrom.isBefore(hourFrom, 'd')\n ? hourFrom\n .clone()\n .hour(0)\n .minute(0)\n : modifiedFrom;\n }\n\n if (modifiedTo) {\n finalTo = modifiedTo.isAfter(hourTo, 'd')\n ? hourTo\n .clone()\n .hour(23)\n .minute(45)\n : modifiedTo;\n }\n\n if (afterHoursMaxMinutes === AFTER_HOURS_MAX_MINUTES) {\n finalFrom = moment()\n .hour(0)\n .minute(0);\n finalTo = moment()\n .hour(23)\n .minute(45);\n }\n\n if (!modifiedFrom && !modifiedTo) {\n finalFrom = hourFrom;\n finalTo = hourTo;\n }\n\n const hours = [];\n hours.push(\n `${String(finalFrom.hour()).padStart(2, '0')}:${String(finalFrom.minutes()).padStart(2, '0')}`,\n );\n\n while (stillHasAvailableTime(finalFrom, finalTo)) {\n finalFrom.add(gap, 'm');\n if (finalFrom.isAfter(finalTo, 'day')) continue;\n hours.push(\n `${String(finalFrom.hour()).padStart(2, '0')}:${String(finalFrom.minutes()).padStart(\n 2,\n '0',\n )}`,\n );\n }\n\n hours.push(\n `${String(finalTo.hour()).padStart(2, '0')}:${String(finalTo.minutes()).padStart(2, '0')}`,\n );\n return hours.sort();\n};\n\nconst stillHasAvailableTime = (from, to) => {\n return from.isBefore(to, 'time');\n};\n\nexport const parseHourToMoment = (hour, moment) => {\n if (!hour) return moment;\n const [newHour, newMin] = hour.split(':');\n return moment.set({\n hour: parseFloat(newHour),\n minute: parseFloat(newMin),\n second: 0,\n });\n};\n","import style from 'styled-components';\n\nexport const StyledSearchForm = style.form`\n\tbackground-color: ${props =>\n props.transparent ? props.theme.colors.transparent : props.theme.colors.third};\n box-shadow: 3px 3px 5px rgba(0,0,0,0.3);\n\tfont-size: 0.93em;\n min-height: auto;\n font-size: 13px;\n\n .diff-drop-place {\n color: ${props => props.theme.colors.buttonPrimaryBgHover};\n cursor: pointer;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n }\n\n .input-wrapper {\n height: 48px;\n }\n\n .fa-arrow-right {\n color: #e5e5e5 !important;\n font-size: 12px !important;\n }\n\n .range-date-picker {\n .DateInput{\n width: 40%;\n }\n \n .DateInput_input {\n font-size: 14px;\n padding-right: 0;\n }\n }\n\n .label{\n font-size: 13px;\n font-weight: 600;\n }\n\n .hour-select {\n white-space: nowrap;\n .input-wrapper {\n height: 48px;\n }\n }\n\n p{\n font-size: 13px !important;\n font-weight: 600 !important;\n margin-bottom: 5px !important;\n }\n\n .checkboxes {\n display: flex;\n align-items: flex-end;\n }\n .checkboxes > div:first-child {\n\t\tpadding-right: 10px;\n\t\tmargin-right: 10px;\n }\n\n .submit-btn {\n width: 100%;\n white-space: nowrap;\n }\n\n .label-container {\n display: block;\n position: relative;\n padding-left: 27px;\n margin-bottom: 12px;\n cursor: pointer;\n font-size: 13px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n .form-check-input {\n //position: absolute;\n opacity: 0;\n cursor: pointer;\n }\n\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 20px;\n width: 20px;\n background-color: #eee;\n border-radius: 50%;\n &:after {\n content: \"\";\n position: absolute;\n display: none;\n top: 5px;\n left: 5px;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: white;\n }\n }\n &:hover input ~ .checkmark {\n background-color: #ccc;\n }\n input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n input:checked ~ .checkmark:after {\n display: block;\n }\n }\n\n .special-checkbox .input-wrapper label { \n margin-bottom: 0;\n margin-top: 10px;\n }\n\n .filtro-km {\n display: flex;\n align-items: center;\n }\n\n .driver-age { \n display: flex;\n align-items: center;\n\n .special-checkbox {\n display: flex; \n align-items: center; \n\n & > div {\n margin-right: 10px;\n }\n\n i {\n font-size: 1rem;\n position: relative;\n top: 4px;\n color: ${({ theme }) => theme.colors.secondary};\n }\n } \n \n .special-label {\n label {\n margin-right: 2px;\n }\n \n i {\n font-size: 1rem;\n position: relative;\n color: ${({ theme }) => theme.colors.secondary};\n }\n }\n }\n \n .driver-age-input { \n input {\n padding: 0 12px;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n .row > div {\n margin-bottom: 20px;\n }\n .row {\n margin-bottom: 0;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.xs}) {\n font-size: 13px; \n .checkboxes {\n flex-direction: column;\n align-items: baseline;\n div {\n margin-bottom: 10px;\n }\n }\n .label{\n font-size: 12px;\n }\n .pickup-place-picker, .return-place-picker, .filtro-km, .submit-block, .submit-block .col-md-12{\n margin-bottom: 0 !important;\n }\n .diff-drop-place{\n font-size: 13px;\n }\n .hour-select {\n width: 50%;\n display: inline-block;\n margin-bottom: 0 !important;\n }\n .hour-select-from {\n padding-right: .5rem!important;\n }\n .hour-select-to {\n padding-left: .5rem!important;\n }\n }\n`;\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { Tooltip } from '@material-ui/core';\nimport moment from 'moment';\nimport Btn from 'components/Btn';\nimport CheckboxInput from 'components/CheckBoxInput';\nimport RangeDateInput from 'components/RangeDateInput';\nimport SearchBoxPlace from 'components/SearchBoxPlace';\nimport SelectInput from 'components/SelectInput';\nimport TextInput from 'components/TextInput';\nimport withSettingsContext from 'SettingsContext';\nimport { StyledSearchForm } from './index.styled';\nimport { withTheme } from 'styled-components';\nimport { tt } from 'utils/translationHelper';\nclass DefaultSearchForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isMobile: false,\n loading: false,\n };\n this.handleResize = this.handleResize.bind(this);\n }\n\n handleResize() {\n const isMobile = window.innerWidth <= 600;\n this.setState({ isMobile });\n }\n\n componentDidMount() {\n window.addEventListener('resize', this.handleResize);\n this.handleResize();\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.handleResize);\n }\n\n handleSubmit = () => {\n this.setState({ loading: true });\n this.props.submitSearch();\n };\n\n render() {\n const {\n searchText,\n className,\n featureFlags,\n promotionCodeText,\n transparent,\n checkoutText,\n showCity,\n showIATA,\n showDifferentDropPlace,\n orientation,\n focus,\n withFullScreenPortal,\n pickUp,\n dropOff,\n promotionCode,\n showInvalidPromotionMessage,\n kmFilter,\n minStayLength,\n t,\n theme,\n pickUpSelect,\n toggleDropInput,\n dropOffSelect,\n filteredDropPlaces,\n handleDateSelect,\n handleDateFocus,\n isDayBlocked,\n pickUpHourSelection,\n dropOffHourSelection,\n onPromotionCodeChange,\n handleKmFilter,\n disableSubmit,\n driverMinAge,\n driverMaxAge,\n driverAge,\n driverAgeWarning,\n invalidDriverAge,\n handleDriverAgeChange,\n resultsPage,\n isHome,\n commercialAgreements,\n onCommercialAgreementChange,\n commercialAgreementCode,\n isCompany,\n useDriverAgeWithoutCaution,\n driverAgeAllowedMin,\n driverAgeAllowedMax,\n useBackendSort,\n customText,\n pickUpPlaces,\n distanceUnit,\n isOutsideRange,\n } = this.props;\n\n return (\n <StyledSearchForm\n onSubmit={e => e.preventDefault(false)}\n className={'pt-4 pb-4 pl-4 pr-4 ' + (className || '')}\n transparent={transparent}\n >\n <div className=\"row mt-2\">\n <div className=\"col-md-12 pickup-place-picker\">\n <label htmlFor=\"selectFromPlace\" className=\"label\">\n {t('deliveryPlace')}\n </label>\n <SearchBoxPlace\n name=\"selectFromPlace\"\n data={pickUpPlaces}\n placeChangeHandler={pickUpSelect}\n placeSelected={pickUp.place}\n placeholder={t('selectPickUpPlace')}\n showCity={showCity || false}\n showIATA={showIATA || false}\n useBackendSort={useBackendSort}\n />\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-12 return-place-picker\">\n {pickUp && pickUp.place && pickUp.place.value && (\n <span className=\"diff-drop-place\" onClick={toggleDropInput}>\n {t('differentreturnplace')}\n </span>\n )}\n {showDifferentDropPlace && (\n <>\n <label htmlFor=\"selectToPlace\" className=\"label\">\n {t('LugarDeDevolucion')}\n </label>\n <div className=\"col-md-12 p-0 mb-4\">\n <SearchBoxPlace\n name=\"selectToPlace\"\n className=\"search-box-place\"\n data={filteredDropPlaces()}\n placeChangeHandler={dropOffSelect}\n placeSelected={dropOff.place}\n placeholder={t('SeleccionarLugarDeDevolucion')}\n showCity={showCity || false}\n showIATA={showIATA || false}\n useBackendSort={useBackendSort}\n />\n </div>\n </>\n )}\n </div>\n </div>\n\n <div className=\"d-flex row mt-1\">\n <div className=\"col-xs-12 col-md-6 range-date-picker\">\n <RangeDateInput\n label={t('deliveryReturnDate')}\n onDatesChange={handleDateSelect}\n onFocusChange={handleDateFocus}\n startDateId=\"drop-up-date-start\"\n startDate={pickUp.moment}\n endDate={dropOff.moment}\n icon=\"far fa-calendar-alt\"\n iconColor={theme.colors.buttonPrimaryBgHover}\n isDayBlocked={isDayBlocked}\n datePickerOptions={{\n minimumNights: minStayLength,\n focusedInput: focus,\n orientation: this.state.isMobile ? 'vertical' : orientation,\n withFullScreenPortal: this.state.isMobile ? true : withFullScreenPortal,\n customArrowIcon: <span className=\"fas fa-arrow-right p-0 mr-2\" />,\n startDatePlaceholderText: t('deliveryDate'),\n endDatePlaceholderText: t('returnDate'),\n hideKeyboardShortcutsPanel: true,\n }}\n isOutsideRange={isOutsideRange}\n />\n </div>\n\n <div className=\"col-md-3 col-sm-6 col-xs-6 hour-select hour-select-from\">\n <SelectInput\n onChange={pickUpHourSelection}\n label={t('deliveryTime')}\n icon=\"far fa-clock\"\n selected={pickUp.hour}\n iconColor={theme.colors.buttonPrimaryBgHover}\n options={pickUp.hours}\n name=\"pickupTime\"\n />\n </div>\n <div className=\"col-md-3 col-sm-6 col-xs-6 hour-select hour-select-to\">\n <SelectInput\n name=\"returnTime\"\n onChange={dropOffHourSelection}\n label={t('returnTime')}\n icon=\"far fa-clock\"\n selected={dropOff.hour}\n iconColor={theme.colors.buttonPrimaryBgHover}\n options={dropOff.hours}\n />\n {dropOff.checkoutTime && (\n <div\n style={{\n whiteSpace: 'break-spaces',\n fontSize: '9px',\n color: '#ff0000',\n }}\n >\n {t(checkoutText) || t('checkoutMsg')} ({dropOff.checkoutTime})\n </div>\n )}\n </div>\n </div>\n\n <div className=\"row\">\n {featureFlags.showPromotionCode & !isCompany ? (\n <div className={`col-md-${resultsPage ? 6 : 4} mb-2 mt-1`}>\n <TextInput\n className=\"promotion-code-input\"\n label={t('CodigoDePromocion')}\n icon=\"fas fa-star\"\n iconColor={theme.colors.buttonPrimaryBgHover}\n placeholder={t(promotionCodeText) || t('EscribiTuCodigo')}\n onChange={onPromotionCodeChange}\n disabled={isCompany ? true : false}\n value={promotionCode || ''}\n error={showInvalidPromotionMessage ? t('CodigoDePromocionInvalido') : ''}\n />\n </div>\n ) : (\n <div className={`col-md-${resultsPage ? 6 : 4} mb-2 mt-1`}></div>\n )}\n {!isHome && isCompany && commercialAgreements && commercialAgreements.length > 0 && (\n <div className=\"col-12\">\n <SelectInput\n name=\"commercial-agreement-code\"\n onChange={onCommercialAgreementChange}\n label={t('commercialAgreement')}\n icon=\"fas fa-file-contract\"\n selected={commercialAgreementCode}\n iconColor={theme.colors.buttonPrimaryBgHover}\n options={commercialAgreements}\n />\n </div>\n )}\n {featureFlags && featureFlags.kilometerFilters && (\n <div className={`col-md-${resultsPage ? 6 : 4} mb-2 mt-1 filtro-km`}>\n <CheckboxInput\n className=\"special-checkbox\"\n text={\n t(customText) ||\n t(distanceUnit === 'Kilometers' ? 'KmIlimitados' : 'MillasIlimitados')\n }\n checked={kmFilter.selected === true}\n onChange={e => handleKmFilter(e)}\n />\n </div>\n )}\n {featureFlags && featureFlags.showDriverAge && (\n <>\n <div className={`col-md-${resultsPage ? 6 : 4} mb-2 mt-1 driver-age`}>\n {!useDriverAgeWithoutCaution ? (\n <div className=\"special-label\">\n <label htmlFor=\"driverAgeWithoutCautionLabel\" className=\"label\">\n {t('driverAgeBetween', {\n min: driverAgeAllowedMin,\n max: driverAgeAllowedMax,\n })}\n </label>\n <Tooltip\n placement=\"\"\n title={t('driverAgeAllowedBetween', {\n min: driverAgeAllowedMin,\n max: driverAgeAllowedMax,\n })}\n className=\"\"\n >\n <i className=\"fas fa-info-circle\"></i>\n </Tooltip>\n </div>\n ) : (\n <div className=\"special-checkbox\">\n <CheckboxInput\n text={t('driverAgeBetween', {\n min: driverMinAge,\n max: driverMaxAge,\n })}\n checked={driverAge.betweenMinAndMax}\n onChange={e => handleDriverAgeChange(e)}\n />\n <Tooltip\n placement=\"top\"\n title={\n tt(driverAgeWarning, t) ||\n t('driverAgeWarning', {\n min: driverMinAge,\n max: driverMaxAge,\n })\n }\n >\n <i className=\"fas fa-info-circle\"></i>\n </Tooltip>\n </div>\n )}\n </div>\n {!driverAge.betweenMinAndMax && (\n <div className={`col-md-${resultsPage ? 6 : 4} mb-2 mt-1`}>\n <div className=\"driver-age-input\">\n <TextInput\n label={t('driverAge')}\n onChange={value => handleDriverAgeChange(false, value)}\n value={driverAge.age || ''}\n type=\"number\"\n error={driverAge.age && invalidDriverAge ? t('driverAgeError') : ''}\n />\n </div>\n </div>\n )}\n </>\n )}\n </div>\n\n <div className=\"row mt-4 mb-3 submit-block\">\n <div className=\"col-md-12\">\n <Btn\n className=\"submit-btn search-form_button\"\n text={tt(searchText) || t('search')}\n onClick={() => this.handleSubmit()}\n disabled={disableSubmit() || this.state.loading}\n />\n </div>\n </div>\n </StyledSearchForm>\n );\n }\n}\n\nexport default withSettingsContext(withTheme(withTranslation()(DefaultSearchForm)));\n","import style from 'styled-components';\n\nexport const StyledSearchForm = style.form`\n\tbackground-color: ${props =>\n props.transparent ? props.theme.colors.transparent : props.theme.colors.bg};\n box-shadow: -2px 10px 12px 1px rgba(46,45,53,0.05);\n\tfont-size: 0.93em;\n min-height: auto;\n font-size: 13px;\n border-radius:12px;\n\n .no-gutters>[class*=col-] {\n padding-right: 5px;\n padding-left: 0;\n}\n\n .diff-drop-place {\n color: #2E2D35;\n cursor: pointer;\n display: block; \n margin-bottom: -10px;\n font-size:14px;\n }\n\n\n .diff-drop-place:hover {\n color:${props => props.subItemHover || props.theme.colors.secondary};\n }\n\n .DateRangePicker_picker {\n z-index: 10000;\n }\n \n .DateRangePickerInput{\n background-color:transparent;\n }\n\n .input-wrapper {\n height: 48px;\n background: transparent;\n border: 1px solid #D8DCE2;\n border-radius:8px\n }\n\n .fa-arrow-right {\n color: #e5e5e5 !important;\n font-size: 12px !important;\n }\n\n .range-date-picker {\n .DateInput{\n width: 40%;\n }\n \n .DateInput_input {\n font-size: 14px;\n padding-right: 0;\n font-weight:400;\n }\n }\n\n .label{\n font-size: 13px;\n font-weight: 500;\n position:relative;\n top:18px;\n left:7px;\n background-color:#FFF;\n padding:5px;\n z-index:1\n color: #656970;\n }\n\n .hour-select {\n white-space: nowrap;\n .input-wrapper {\n height: 48px;\n margin-bottom: 0.5rem !important;\n }\n }\n\n p{\n font-size: 13px !important;\n font-weight: 600 !important;\n margin-bottom: 5px !important;\n }\n\n .checkboxes {\n display: flex;\n align-items: flex-end;\n }\n .checkboxes > div:first-child {\n\t\tpadding-right: 10px;\n\t\tmargin-right: 10px;\n }\n\n .submit-btn-row { \n justify-content: center;\n \n } \n\n .submit-btn {\n width: 100%;\n white-space: nowrap;\n padding: 15px 15px;\n border-radius: 8px;\n margin-top:35px;\n }\n\n .label-container {\n display: block;\n position: relative;\n padding-left: 27px;\n margin-bottom: 12px;\n cursor: pointer;\n font-size: 13px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n .form-check-input {\n //position: absolute;\n opacity: 0;\n cursor: pointer;\n }\n\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 20px;\n width: 20px;\n background-color: #eee;\n border-radius: 50%;\n &:after {\n content: \"\";\n position: absolute;\n display: none;\n top: 5px;\n left: 5px;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: white;\n }\n }\n &:hover input ~ .checkmark {\n background-color: #ccc;\n }\n input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n input:checked ~ .checkmark:after {\n display: block;\n }\n }\n\n .driver-age { \n .special-checkbox {\n display: flex; \n align-items: center;\n margin-top: -7px;\n\n & > div {\n margin-right: 10px;\n }\n\n i {\n font-size: 1rem;\n position: relative;\n top: -2px;\n color: ${({ theme }) => theme.colors.secondary};\n }\n }\n \n .driver-age-input { \n margin-top: -30px;\n margin-bottom: 20px;\n\n input {\n padding: 0 12px;\n }\n }\n\n .special-label {\n label {\n top: 0px;\n margin-right: 10px;\n font-size: 13px;\n font-weight: 600;\n }\n \n i {\n font-size: 1rem;\n position: relative;\n color: ${({ theme }) => theme.colors.secondary};\n }\n }\n }\n\n @media (max-width: 992px) { \n .submit-btn { \n position: relative; \n margin-bottom: 2rem;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.lg}) {\n .return-place-picker {\n margin-top: 10px;\n margin-bottom: 20px;\n } \n }\n\n @media (max-width: ${props => props.theme.screens.md}) { \n .row > div {\n margin-bottom: 0;\n }\n .row {\n margin-bottom: 0;\n } \n }\n\n @media (max-width: ${props => props.theme.screens.xs}) {\n font-size: 13px; \n .checkboxes {\n flex-direction: column;\n align-items: baseline;\n div {\n margin-bottom: 10px;\n }\n }\n .input-wrapper{\n margin-bottom:0 !important\n }\n\n .label{\n font-size: 12px;\n font-weigth: 500;\n }\n .pickup-place-picker, .filtro-km, .submit-block, .submit-block .col-md-12{\n margin-bottom: 0 !important;\n }\n\n .diff-drop-place{\n font-size: 13px;\n margin-bottom:0;\n }\n .hour-select {\n width: 50%;\n display: inline-block;\n margin-bottom: 0 !important;\n }\n .hour-select-from {\n padding-right: .5rem!important;\n }\n .hour-select-to {\n padding-left: .5rem!important;\n } \n\n \n .submit-btn {\n margin-top:0;\n }\n\n }\n\n @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 1) {\n .input-wrapper{\n margin-bottom:0 !important\n } \n }\n`;\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { Tooltip } from '@material-ui/core';\n\nimport Btn from 'components/Btn';\nimport CheckboxInput from 'components/CheckBoxInput';\nimport RangeDateInput from 'components/RangeDateInput';\nimport SearchBoxPlace from 'components/SearchBoxPlace';\nimport SelectInput from 'components/SelectInput';\nimport TextInput from 'components/TextInput';\nimport withSettingsContext from 'SettingsContext';\nimport { StyledSearchForm } from './index.styled';\nimport { withTheme } from 'styled-components';\nimport { tt } from 'utils/translationHelper';\nimport { Col, Row } from 'react-bootstrap';\nimport moment from 'moment';\nclass ModernSearchForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isMobile: false,\n loading: false,\n };\n this.handleResize = this.handleResize.bind(this);\n }\n\n handleResize() {\n const isMobile = window.innerWidth <= 600;\n this.setState({ isMobile });\n }\n\n componentDidMount() {\n window.addEventListener('resize', this.handleResize);\n this.handleResize();\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.handleResize);\n }\n\n handleSubmit = () => {\n this.setState({ loading: true });\n this.props.submitSearch();\n };\n\n render() {\n const {\n searchText,\n className,\n featureFlags,\n promotionCodeText,\n transparent,\n checkoutText,\n showCity,\n showIATA,\n showDifferentDropPlace,\n orientation,\n focus,\n withFullScreenPortal,\n pickUp,\n dropOff,\n promotionCode,\n showInvalidPromotionMessage,\n kmFilter,\n t,\n theme,\n pickUpSelect,\n toggleDropInput,\n dropOffSelect,\n filteredDropPlaces,\n handleDateSelect,\n handleDateFocus,\n isDayBlocked,\n pickUpHourSelection,\n dropOffHourSelection,\n onPromotionCodeChange,\n handleKmFilter,\n disableSubmit,\n driverMinAge,\n driverMaxAge,\n invalidDriverAge,\n handleDriverAgeChange,\n driverAge,\n driverAgeWarning,\n isCompany,\n useDriverAgeWithoutCaution,\n driverAgeAllowedMin,\n driverAgeAllowedMax,\n useBackendSort,\n customText,\n pickUpPlaces,\n distanceUnit,\n isOutsideRange,\n minStayLength,\n } = this.props;\n\n const kmCheckbox = (\n <div className=\"filtro-km\">\n <CheckboxInput\n className=\"special-checkbox\"\n text={\n t(customText) || t(distanceUnit === 'Kilometers' ? 'KmIlimitados' : 'MillasIlimitados')\n }\n checked={kmFilter.selected === true}\n onChange={e => handleKmFilter(e)}\n />\n </div>\n );\n\n return (\n <StyledSearchForm\n onSubmit={e => e.preventDefault(false)}\n className={'pl-4 pr-4 ' + (className || '')}\n transparent={transparent}\n >\n <Row className=\"row no-gutters\">\n <div className={`col-lg-${featureFlags.showPromotionCode ? 3 : 4} pickup-place-picker`}>\n <label htmlFor=\"selectFromPlace\" className=\"label\">\n {t('deliveryPlace')}\n </label>\n\n <SearchBoxPlace\n name=\"selectFromPlace\"\n data={pickUpPlaces}\n placeChangeHandler={pickUpSelect}\n placeSelected={pickUp.place || ''}\n placeholder={t('selectPickUpPlace')}\n showCity={showCity || false}\n showIATA={showIATA || false}\n useBackendSort={useBackendSort}\n />\n\n <div className=\"return-place-picker\">\n {pickUp && pickUp.place && pickUp.place.value && (\n <span className=\"diff-drop-place\" onClick={toggleDropInput}>\n {t('differentreturnplace')}\n </span>\n )}\n {showDifferentDropPlace && (\n <>\n <label htmlFor=\"selectToPlace\" className=\"label\">\n {t('LugarDeDevolucion')}\n </label>\n <div className=\"mb-4\">\n <SearchBoxPlace\n name=\"selectToPlace\"\n className=\"search-box-place\"\n data={filteredDropPlaces()}\n placeChangeHandler={dropOffSelect}\n placeSelected={dropOff.place}\n placeholder={t('SeleccionarLugarDeDevolucion')}\n showCity={showCity || false}\n showIATA={showIATA || false}\n useBackendSort={useBackendSort}\n />\n </div>\n </>\n )}\n </div>\n </div>\n <div className=\"col-xs-4 col-lg-3 range-date-picker\">\n <RangeDateInput\n label={t('deliveryReturnDate')}\n onDatesChange={handleDateSelect}\n onFocusChange={handleDateFocus}\n startDateId=\"drop-up-date-start\"\n startDate={pickUp.moment}\n endDate={dropOff.moment}\n icon=\"far fa-calendar\"\n iconColor={theme.colors.buttonPrimaryBgHover}\n isDayBlocked={isDayBlocked}\n datePickerOptions={{\n minimumNights: minStayLength,\n focusedInput: focus,\n orientation: this.state.isMobile ? 'vertical' : orientation,\n withFullScreenPortal: this.state.isMobile ? true : withFullScreenPortal,\n customArrowIcon: <span className=\"fas fa-arrow-right p-0 mr-2\" />,\n startDatePlaceholderText: t('deliveryDate'),\n endDatePlaceholderText: t('returnDate'),\n hideKeyboardShortcutsPanel: true,\n }}\n isOutsideRange={isOutsideRange}\n />\n </div>\n <Col lg={featureFlags.showPromotionCode ? 5 : 4}>\n <Row className=\"no-gutters\">\n <Col lg={featureFlags.showPromotionCode & !isCompany ? 5 : 12}>\n <Row className=\"no-gutters\">\n <div className=\"col-lg-6 col-sm-6 col-xs-6 hour-select hour-select-from\">\n <SelectInput\n onChange={pickUpHourSelection}\n label={t('delivery')}\n icon=\"far fa-clock\"\n selected={pickUp.hour}\n iconColor={theme.colors.buttonPrimaryBgHover}\n options={pickUp.hours}\n name=\"pickupTime\"\n />\n </div>\n <div className=\"col-lg-6 col-sm-6 col-xs-6 hour-select hour-select-to\">\n <SelectInput\n name=\"returnTime\"\n onChange={dropOffHourSelection}\n label={t('return')}\n icon=\"far fa-clock\"\n selected={dropOff.hour}\n iconColor={theme.colors.buttonPrimaryBgHover}\n options={dropOff.hours}\n />\n {dropOff.checkoutTime && (\n <div\n style={{\n whiteSpace: 'break-spaces',\n fontSize: '9px',\n color: '#ff0000',\n }}\n >\n {t(checkoutText) || t('checkoutMsg')} ({dropOff.checkoutTime})\n </div>\n )}\n </div>\n </Row>\n </Col>\n {featureFlags.showPromotionCode & !isCompany ? (\n <div className=\"col-lg-7\">\n <TextInput\n className=\"promotion-code-input\"\n label={t('CodigoDePromocion')}\n icon=\"fas fa-star\"\n iconColor={theme.colors.buttonPrimaryBgHover}\n placeholder={t(promotionCodeText) || t('EscribiTuCodigo')}\n onChange={onPromotionCodeChange}\n disabled={isCompany ? true : false}\n value={promotionCode || ''}\n error={showInvalidPromotionMessage ? t('CodigoDePromocionInvalido') : ''}\n />\n </div>\n ) : (\n <div className=\"col-lg-0\"></div>\n )}\n </Row>\n <Row className=\"no-gutters\">\n <Col lg={featureFlags.showPromotionCode ? 5 : 6}>\n {featureFlags && featureFlags.kilometerFilters && kmCheckbox}\n </Col>\n <Col lg={featureFlags.showPromotionCode ? 7 : 6}>\n {featureFlags && featureFlags.showDriverAge && (\n <div className=\"driver-age\">\n {!useDriverAgeWithoutCaution ? (\n <div className=\"special-label\">\n <label htmlFor=\"driverAgeWithoutCautionLabel\" className=\"label\">\n {t('driverAgeBetween', {\n min: driverAgeAllowedMin,\n max: driverAgeAllowedMax,\n })}\n </label>\n <Tooltip\n placement=\"\"\n title={t('driverAgeAllowedBetween', {\n min: driverAgeAllowedMin,\n max: driverAgeAllowedMax,\n })}\n className=\"\"\n >\n <i className=\"fas fa-info-circle\"></i>\n </Tooltip>\n </div>\n ) : (\n <>\n <div className=\"special-checkbox\">\n <CheckboxInput\n text={t('driverAgeBetween', {\n min: driverMinAge,\n max: driverMaxAge,\n })}\n checked={driverAge.betweenMinAndMax}\n onChange={e => handleDriverAgeChange(e)}\n />\n <Tooltip\n placement=\"top\"\n title={\n tt(driverAgeWarning, t) ||\n t('driverAgeWarning', {\n min: driverMinAge,\n max: driverMaxAge,\n })\n }\n >\n <i className=\"fas fa-info-circle\"></i>\n </Tooltip>\n </div>\n {!driverAge.betweenMinAndMax && (\n <div className=\"driver-age-input\">\n <TextInput\n label={t('driverAge')}\n onChange={value => handleDriverAgeChange(false, value)}\n value={driverAge.age || ''}\n type=\"number\"\n error={driverAge.age && invalidDriverAge ? t('driverAgeError') : ''}\n />\n </div>\n )}\n </>\n )}\n </div>\n )}\n </Col>\n </Row>\n </Col>\n\n <Col lg={1} className=\"submit-btn-row\">\n <Btn\n className=\"submit-btn search-form_button\"\n text={tt(searchText) || t('search')}\n onClick={() => this.handleSubmit()}\n disabled={disableSubmit() || this.state.loading}\n />\n </Col>\n </Row>\n </StyledSearchForm>\n );\n }\n}\n\nexport default withSettingsContext(withTheme(withTranslation()(ModernSearchForm)));\n","import style from 'styled-components';\n\nexport const StyledSearchForm = style.form`\n background-color: ${props =>\n props.transparent ? props.theme.colors.transparent : props.theme.colors.bg};\n box-shadow: -2px 10px 12px 1px rgba(46, 45, 53, 0.05);\n font-size: 0.93em;\n min-height: auto;\n font-size: 13px;\n border-radius: 12px;\n padding: 24px; \n\n .no-right-padding {\n padding-right: 0 !important;\n }\n \n .no-gutters > [class*='col-'] {\n padding-right: 5px;\n padding-left: 0;\n }\n\n .diff-drop-place {\n color: #2e2d35;\n cursor: pointer;\n display: block;\n font-size: 14px;\n }\n\n .diff-drop-place:hover {\n color: ${props => props.subItemHover || props.theme.colors.secondary};\n }\n\n .DateRangePicker_picker {\n z-index: 10000;\n }\n\n .DateRangePickerInput {\n background-color: transparent;\n }\n\n .input-wrapper {\n height: 48px;\n background: transparent;\n border: 1px solid #d8dce2;\n border-radius: 8px;\n }\n\n .fa-arrow-right {\n color: #e5e5e5 !important;\n font-size: 12px !important;\n }\n\n .range-date-picker {\n .DateInput {\n width: 40%;\n }\n\n .DateInput_input {\n font-size: 14px;\n padding-right: 0;\n font-weight: 400;\n }\n }\n\n .label {\n font-size: 13px;\n font-weight: 500;\n position: relative;\n top: 18px;\n left: 7px;\n background-color: #fff;\n padding: 5px;\n z-index: 1;\n color: #656970;\n }\n\n .category-select select {\n padding-left: 12px;\n }\n\n .hour-select {\n white-space: nowrap;\n .input-wrapper {\n height: 48px;\n margin-bottom: 0.5rem !important;\n }\n }\n\n p {\n font-size: 13px !important;\n font-weight: 600 !important;\n margin-bottom: 5px !important;\n }\n\n .checkboxes {\n display: flex;\n align-items: flex-end;\n }\n .checkboxes > div:first-child {\n padding-right: 10px;\n margin-right: 10px;\n }\n\n .submit-btn-row {\n justify-content: center;\n }\n\n .submit-btn {\n width: 100%;\n white-space: nowrap;\n padding: 15px 15px;\n border-radius: 8px;\n margin-top: 35px;\n }\n\n .label-container {\n display: block;\n position: relative;\n padding-left: 27px;\n margin-bottom: 12px;\n cursor: pointer;\n font-size: 13px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n .form-check-input {\n //position: absolute;\n opacity: 0;\n cursor: pointer;\n }\n\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 20px;\n width: 20px;\n background-color: #eee;\n border-radius: 50%;\n &:after {\n content: '';\n position: absolute;\n display: none;\n top: 5px;\n left: 5px;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: white;\n }\n }\n &:hover input ~ .checkmark {\n background-color: #ccc;\n }\n input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n input:checked ~ .checkmark:after {\n display: block;\n }\n }\n\n .driver-age {\n .special-checkbox {\n display: flex;\n align-items: center;\n margin-top: -7px;\n\n & > div {\n margin-right: 10px;\n }\n\n i {\n font-size: 1rem;\n position: relative;\n top: -2px;\n color: ${({ theme }) => theme.colors.secondary};\n }\n }\n\n .driver-age-input {\n margin-top: -30px;\n margin-bottom: 20px;\n\n input {\n padding: 0 12px;\n }\n }\n\n .special-label {\n label {\n top: 0px;\n margin-right: 10px;\n font-size: 13px;\n font-weight: 600;\n }\n\n i {\n font-size: 1rem;\n position: relative;\n color: ${({ theme }) => theme.colors.secondary};\n }\n }\n }\n\n .error {\n color: red;\n }\n @media (max-width: 992px) {\n .submit-btn {\n position: relative;\n margin-bottom: 2rem;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.lg}) {\n .return-place-picker {\n margin-top: 10px;\n margin-bottom: 20px;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n .row > div {\n margin-bottom: 0;\n }\n .curstomer-info-row div {\n margin-top: 5px;\n }\n .row {\n margin-bottom: 0;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.xs}) {\n font-size: 13px;\n .checkboxes {\n flex-direction: column;\n align-items: baseline;\n div {\n margin-bottom: 10px;\n }\n }\n .input-wrapper {\n margin-bottom: 0 !important;\n }\n\n .label {\n font-size: 12px;\n font-weight: 500;\n }\n .pickup-place-picker,\n .filtro-km,\n .submit-block,\n .submit-block .col-md-12 {\n margin-bottom: 0 !important;\n }\n\n .diff-drop-place {\n font-size: 13px;\n margin-bottom: 0;\n }\n .hour-select {\n width: 50%;\n display: inline-block;\n margin-bottom: 0 !important;\n }\n .hour-select-from {\n padding-right: 0.5rem !important;\n }\n .hour-select-to {\n padding-left: 0.5rem !important;\n }\n\n .submit-btn {\n margin-top: 0;\n }\n }\n\n @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 1) {\n .input-wrapper {\n margin-bottom: 0 !important;\n }\n }\n\n`;\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { Tooltip } from '@material-ui/core';\n\nimport Btn from 'components/Btn';\nimport CheckboxInput from 'components/CheckBoxInput';\nimport RangeDateInput from 'components/RangeDateInput';\nimport SearchBoxPlace from 'components/SearchBoxPlace';\nimport SelectInput from 'components/SelectInput';\nimport TextInput from 'components/TextInput';\nimport withSettingsContext from 'SettingsContext';\nimport { StyledSearchForm } from './index.styled';\nimport { withTheme } from 'styled-components';\nimport { tt } from 'utils/translationHelper';\nimport { Col, Row } from 'react-bootstrap';\nimport moment from 'moment';\nimport * as yup from 'yup';\n\nclass LuxurySearchForm extends React.Component {\n constructor(props) {\n const { t } = props;\n super(props);\n this.state = {\n isMobile: false,\n loading: false,\n userInfo: {\n firstName: '',\n lastName: '',\n email: '',\n phone: '',\n category: '',\n },\n formErrors: {\n firstName: '',\n lastName: '',\n email: '',\n phone: '',\n category: '',\n },\n popUpErrorShow: false,\n };\n this.handleResize = this.handleResize.bind(this);\n\n this.userInfoFormSchema = yup.object().shape({\n firstName: yup.string().required(t('inputIsRequired', { field: t('name') })),\n lastName: yup.string().required(t('inputIsRequired', { field: t('lastname') })),\n email: yup\n .string()\n .email(t('validEmail'))\n .required(t('inputIsRequired', { field: t('mail') })),\n phone: yup.string().when('hidePhoneField', {\n is: hidePhoneField => !hidePhoneField,\n then: yup.string().required(t('inputIsRequired', { field: t('phone') })),\n otherwise: yup.string(),\n }),\n category: yup.string().required(t('inputIsRequired', { field: t('category') })),\n });\n }\n\n handleResize() {\n const isMobile = window.innerWidth <= 600;\n this.setState({ isMobile });\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.handleResize);\n }\n\n handleSubmit = async () => {\n let popUpErrorShow = this.state.popUpErrorShow;\n\n this.userInfoFormSchema\n .validate(this.state.userInfo, { abortEarly: false })\n .then(async valid => {\n if (valid) {\n this.props.submitSearch({\n ...this.state.userInfo,\n //...{ id: window.crypto.randomUUID() },\n });\n }\n })\n .catch(err => {\n const formErrors = err.inner\n ? err.inner.reduce((prevErrors, currentError) => {\n return {\n ...prevErrors,\n [currentError.path]: currentError.message,\n };\n }, {})\n : {};\n popUpErrorShow = true;\n this.setState(prevState => ({\n ...prevState,\n formErrors,\n popUpErrorShow,\n }));\n });\n };\n\n onUserFirstNameChange = firstName => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, firstName },\n formErrors: { ...prevState.formErrors, firstName: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserLastNameChange = lastName => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, lastName },\n formErrors: { ...prevState.formErrors, lastName: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserMailChange = email => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, email },\n formErrors: { ...prevState.formErrors, email: '' },\n popUpErrorShow: false,\n }));\n };\n\n onUserPhoneChange = phone => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, phone },\n formErrors: { ...prevState.formErrors, phone: '' },\n popUpErrorShow: false,\n }));\n };\n\n onCategoryIdChange = category => {\n this.setState(prevState => ({\n ...prevState,\n userInfo: { ...prevState.userInfo, category },\n formErrors: { ...prevState.formErrors, category: '' },\n popUpErrorShow: false,\n }));\n };\n\n render() {\n const {\n searchText,\n className,\n categories,\n featureFlags,\n promotionCodeText,\n transparent,\n checkoutText,\n showCity,\n showIATA,\n showDifferentDropPlace,\n orientation,\n focus,\n withFullScreenPortal,\n pickUp,\n dropOff,\n promotionCode,\n showInvalidPromotionMessage,\n kmFilter,\n minStayLength,\n t,\n theme,\n pickUpSelect,\n toggleDropInput,\n dropOffSelect,\n filteredDropPlaces,\n handleDateSelect,\n handleDateFocus,\n isDayBlocked,\n pickUpHourSelection,\n dropOffHourSelection,\n onPromotionCodeChange,\n handleKmFilter,\n disableSubmit,\n driverMinAge,\n driverMaxAge,\n invalidDriverAge,\n handleDriverAgeChange,\n driverAge,\n driverAgeWarning,\n isCompany,\n useDriverAgeWithoutCaution,\n driverAgeAllowedMin,\n driverAgeAllowedMax,\n useBackendSort,\n customText,\n pickUpPlaces,\n distanceUnit,\n isOutsideRange,\n loading,\n errorMessage,\n } = this.props;\n\n const { userInfo } = this.state;\n\n const kmCheckbox = (\n <div className=\"filtro-km\">\n <CheckboxInput\n className=\"special-checkbox\"\n text={\n t(customText) || t(distanceUnit === 'Kilometers' ? 'KmIlimitados' : 'MillasIlimitados')\n }\n checked={kmFilter.selected === true}\n onChange={e => handleKmFilter(e)}\n />\n </div>\n );\n\n const showPromotionCode = featureFlags.showPromotionCode\n ? featureFlags.showPromotionCode\n : false;\n\n const categoriesOptions =\n categories?.map(cat => ({ value: cat.id.toString(), text: cat.name })) || [];\n\n return (\n <StyledSearchForm\n onSubmit={e => e.preventDefault(false)}\n className={'pl-4 pr-4 ' + (className || '')}\n transparent={transparent}\n >\n {errorMessage && <p className=\"error\">{errorMessage}</p>}\n <Row>\n <Col>\n <Row noGutters className=\"curstomer-info-row\">\n <Col xs={6} lg={3}>\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('name')}\n error={this.state.formErrors.firstName}\n value={userInfo.firstName}\n onChange={this.onUserFirstNameChange}\n options={{ autoComplete: 'given-name' }}\n wrapperId=\"first_name-input\"\n />\n </Col>\n <Col xs={6} lg={3}>\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('lastname')}\n error={this.state.formErrors.lastName}\n value={userInfo.lastName}\n onChange={this.onUserLastNameChange}\n options={{ autoComplete: 'family-name' }}\n wrapperId=\"last_name-input\"\n />\n </Col>\n <Col xs={6} lg={2}>\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('mail')}\n error={this.state.formErrors.email}\n value={userInfo.email}\n onChange={this.onUserMailChange}\n options={{ autoComplete: 'email' }}\n wrapperId=\"mail-input\"\n />\n </Col>\n <Col xs={6} lg={2}>\n <TextInput\n inputClass=\"form-control\"\n placeholder={t('phone')}\n error={this.state.formErrors.phone}\n value={userInfo.phone}\n onChange={this.onUserPhoneChange}\n options={{ autoComplete: 'tel' }}\n wrapperId=\"phone-input\"\n />\n </Col>\n <Col xs={12} lg={2}>\n <SelectInput\n className=\"form-control\"\n wrapperClass=\"category-select\"\n wrapperId=\"category-input\"\n selected={userInfo.category}\n onChange={this.onCategoryIdChange}\n options={categoriesOptions}\n error={this.state.formErrors.category}\n />\n </Col>\n </Row>\n <Row noGutters>\n <Col lg={showPromotionCode ? 3 : 4} className=\"pickup-place-picker\">\n <label htmlFor=\"selectFromPlace\" className=\"label\">\n {t('deliveryPlace')}\n </label>\n <SearchBoxPlace\n name=\"selectFromPlace\"\n data={pickUpPlaces}\n placeChangeHandler={pickUpSelect}\n placeSelected={pickUp.place || ''}\n placeholder={t('selectPickUpPlace')}\n showCity={showCity || false}\n showIATA={showIATA || false}\n useBackendSort={useBackendSort}\n />\n\n <div className=\"return-place-picker\">\n {pickUp && pickUp.place && pickUp.place.value && (\n <div className=\"diff-drop-place\" onClick={toggleDropInput}>\n {t('differentreturnplace')}\n </div>\n )}\n {showDifferentDropPlace && (\n <>\n <label htmlFor=\"selectToPlace\" className=\"label\">\n {t('LugarDeDevolucion')}\n </label>\n <div className=\"mb-4\">\n <SearchBoxPlace\n name=\"selectToPlace\"\n className=\"search-box-place\"\n data={filteredDropPlaces()}\n placeChangeHandler={dropOffSelect}\n placeSelected={dropOff.place}\n placeholder={t('SeleccionarLugarDeDevolucion')}\n showCity={showCity || false}\n showIATA={showIATA || false}\n useBackendSort={useBackendSort}\n />\n </div>\n </>\n )}\n </div>\n </Col>\n <Col xs={12} lg={4} className=\"range-date-picker\">\n <RangeDateInput\n label={t('deliveryReturnDate')}\n onDatesChange={handleDateSelect}\n onFocusChange={handleDateFocus}\n startDateId=\"drop-up-date-start\"\n startDate={pickUp.moment}\n endDate={dropOff.moment}\n icon=\"far fa-calendar\"\n iconColor={theme.colors.buttonPrimaryBgHover}\n isDayBlocked={isDayBlocked}\n datePickerOptions={{\n minimumNights: minStayLength,\n focusedInput: focus,\n orientation: this.state.isMobile ? 'vertical' : orientation,\n withFullScreenPortal: this.state.isMobile ? true : withFullScreenPortal,\n customArrowIcon: <span className=\"fas fa-arrow-right p-0 mr-2\" />,\n startDatePlaceholderText: t('deliveryDate'),\n endDatePlaceholderText: t('returnDate'),\n hideKeyboardShortcutsPanel: true,\n }}\n isOutsideRange={isOutsideRange}\n />\n </Col>\n <Col lg={showPromotionCode ? 5 : 4}>\n <Row noGutters>\n <Col lg={showPromotionCode & !isCompany ? 5 : 12} className=\"no-right-padding\">\n <Row noGutters>\n <Col xs={6} className=\"hour-select hour-select-from\">\n <SelectInput\n onChange={pickUpHourSelection}\n label={t('delivery')}\n icon=\"far fa-clock\"\n selected={pickUp.hour}\n iconColor={theme.colors.buttonPrimaryBgHover}\n options={pickUp.hours}\n name=\"pickupTime\"\n />\n </Col>\n <Col\n xs={6}\n className={`hour-select hour-select-to ${\n !showPromotionCode ? 'no-right-padding' : ''\n }`}\n >\n <SelectInput\n name=\"returnTime\"\n onChange={dropOffHourSelection}\n label={t('return')}\n icon=\"far fa-clock\"\n selected={dropOff.hour}\n iconColor={theme.colors.buttonPrimaryBgHover}\n options={dropOff.hours}\n />\n {dropOff.checkoutTime && (\n <div\n style={{\n whiteSpace: 'break-spaces',\n fontSize: '9px',\n color: '#ff0000',\n }}\n >\n {t(checkoutText) || t('checkoutMsg')} ({dropOff.checkoutTime})\n </div>\n )}\n </Col>\n </Row>\n </Col>\n {showPromotionCode & !isCompany ? (\n <div className=\"col-lg-7 no-right-padding\">\n <TextInput\n className=\"promotion-code-input\"\n label={t('CodigoDePromocion')}\n icon=\"fas fa-star\"\n iconColor={theme.colors.buttonPrimaryBgHover}\n placeholder={t(promotionCodeText) || t('EscribiTuCodigo')}\n onChange={onPromotionCodeChange}\n disabled={isCompany ? true : false}\n value={promotionCode || ''}\n error={showInvalidPromotionMessage ? t('CodigoDePromocionInvalido') : ''}\n />\n </div>\n ) : (\n <div className=\"col-lg-0\"></div>\n )}\n </Row>\n <Row noGutters>\n <Col lg={showPromotionCode ? 5 : 6}>\n {featureFlags && featureFlags.kilometerFilters && kmCheckbox}\n </Col>\n <Col lg={showPromotionCode ? 7 : 6}>\n {featureFlags && featureFlags.showDriverAge && (\n <div className=\"driver-age\">\n {!useDriverAgeWithoutCaution ? (\n <div className=\"special-label\">\n <label htmlFor=\"driverAgeWithoutCautionLabel\" className=\"label\">\n {t('driverAgeBetween', {\n min: driverAgeAllowedMin,\n max: driverAgeAllowedMax,\n })}\n </label>\n <Tooltip\n placement=\"\"\n title={t('driverAgeAllowedBetween', {\n min: driverAgeAllowedMin,\n max: driverAgeAllowedMax,\n })}\n className=\"\"\n >\n <i className=\"fas fa-info-circle\"></i>\n </Tooltip>\n </div>\n ) : (\n <>\n <div className=\"special-checkbox\">\n <CheckboxInput\n text={t('driverAgeBetween', {\n min: driverMinAge,\n max: driverMaxAge,\n })}\n checked={driverAge.betweenMinAndMax}\n onChange={e => handleDriverAgeChange(e)}\n />\n <Tooltip\n placement=\"top\"\n title={\n tt(driverAgeWarning, t) ||\n t('driverAgeWarning', {\n min: driverMinAge,\n max: driverMaxAge,\n })\n }\n >\n <i className=\"fas fa-info-circle\"></i>\n </Tooltip>\n </div>\n {!driverAge.betweenMinAndMax && (\n <div className=\"driver-age-input\">\n <TextInput\n label={t('driverAge')}\n onChange={value => handleDriverAgeChange(false, value)}\n value={driverAge.age || ''}\n type=\"number\"\n error={\n driverAge.age && invalidDriverAge ? t('driverAgeError') : ''\n }\n />\n </div>\n )}\n </>\n )}\n </div>\n )}\n </Col>\n </Row>\n </Col>\n </Row>\n </Col>\n <Col lg={2} className=\"submit-btn-row\">\n <Btn\n className=\"submit-btn search-form_button\"\n text={loading ? t('searching') : tt(searchText) || t('search')}\n onClick={() => this.handleSubmit()}\n disabled={disableSubmit() || this.state.loading}\n />\n </Col>\n </Row>\n </StyledSearchForm>\n );\n }\n}\n\nexport default withSettingsContext(withTheme(withTranslation()(LuxurySearchForm)));\n","/* eslint-disable no-unused-expressions */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { withTranslation } from 'react-i18next';\nimport { withTheme } from 'styled-components';\nimport queryString from 'query-string';\nimport moment from 'moment';\nimport { isEmpty } from 'lodash';\nimport TranslatedComponent from 'components/TranslatedComponent';\nimport { tlink } from 'utils/translationHelper';\nimport { getValidPromotionCode } from './../../services/api';\nimport { setWebCurrencyAction } from 'actions';\nimport {\n getSchedule,\n calculateStartDate,\n calculateEndDate,\n isDayAvailable,\n _calculatePickDropHours,\n parseHourToMoment,\n} from 'utils/branchOfficeHelper';\nimport DefaultSearchForm from './Vertical';\nimport ModernSearchForm from './Horizontal';\nimport LuxurySearchForm from './Luxury';\nimport { connect } from 'react-redux';\nimport { isCompanyUser } from 'utils/dataHelper';\n\nconst DEFAULT_MINIMUM_STAY = 2; // nights\n\nconst transformPlaceToSelectOption = (place, t) => ({\n t,\n ...place,\n label: place ? place.name : t('selectPickUpPlace'),\n value: place ? place.id : '',\n});\n\nconst getFilteredPlaces = (places, configurations, schedules) => {\n let placesList = places ? [...places] : [];\n\n if (configurations.filteredBranchOffices) {\n const { includedBranchIds, excludedBranchIds } = configurations.filteredBranchOffices;\n\n if (includedBranchIds && includedBranchIds.length > 0) {\n placesList = placesList.filter(place => includedBranchIds.includes(place.branchOfficeId));\n }\n if (excludedBranchIds && excludedBranchIds.length > 0) {\n placesList = placesList.filter(place => !excludedBranchIds.includes(place.branchOfficeId));\n }\n }\n\n if (configurations.filteredPlaces) {\n const { includedPlaceIds, excludedPlaceIds } = configurations.filteredPlaces;\n\n if (includedPlaceIds && includedPlaceIds.length > 0) {\n placesList = placesList.filter(place => includedPlaceIds.includes(place.id));\n }\n if (excludedPlaceIds && excludedPlaceIds.length > 0) {\n placesList = placesList.filter(place => !excludedPlaceIds.includes(place.id));\n }\n }\n\n if (!schedules) return [];\n\n return placesList.filter(place => {\n let scheduleConf = getSchedule(schedules, place.branchOfficeId);\n const scheduleIsEmpty = scheduleConf\n ? Object.values(scheduleConf.schedule).every(isEmpty)\n : true;\n\n return !scheduleIsEmpty;\n });\n};\n\nconst getFilteredPickUpPlaces = (places, t) => {\n // Remove places that allows only return\n return places.filter(place => place?.availableOperationOptions !== 'ReturnOnly');\n};\n\nconst getFilteredDropOffPlaces = (places, t) => {\n // Remove places that allows only pick up\n return places.filter(place => place?.availableOperationOptions !== 'DeliveryOnly');\n};\n\nconst isADropOffPlace = (place, t) => place?.availableOperationOptions !== 'DeliveryOnly';\n\nclass SearchForm extends TranslatedComponent {\n static propTypes = {\n setSearchCarParams: PropTypes.func.isRequired,\n fetchBookeableCars: PropTypes.func.isRequired,\n history: PropTypes.shape({}).isRequired,\n t: PropTypes.func.isRequired,\n theme: PropTypes.object,\n searchText: PropTypes.string,\n i18n: PropTypes.object,\n categories: PropTypes.array,\n className: PropTypes.string,\n showCity: PropTypes.bool,\n };\n\n constructor(props) {\n super(props);\n\n const {\n router,\n t,\n i18n,\n searchCars,\n featureFlags,\n settings,\n profile,\n bookingsConfiguration,\n } = props;\n const searchQueryStrings = queryString.parse(router.location.search);\n const {\n dateFrom,\n hourFrom,\n dateTo,\n hourTo,\n ilimitedKm,\n categories,\n promotionCode,\n customPromotionId,\n commercialAgreementCode,\n agencyGuid,\n } = searchQueryStrings;\n\n this.submitSearch = this.submitSearch.bind(this);\n this.submitLuxurySearch = this.submitLuxurySearch.bind(this);\n this.isOutsideRange = this.isOutsideRange.bind(this);\n this.dropOffSelect = this.dropOffSelect.bind(this);\n this.pickUpSelect = this.pickUpSelect.bind(this);\n this.toggleDropInput = this.toggleDropInput.bind(this);\n this.handleDateSelect = this.handleDateSelect.bind(this);\n this.handleDateFocus = this.handleDateFocus.bind(this);\n this.isDayBlocked = this.isDayBlocked.bind(this);\n this.pickUpHourSelection = this.pickUpHourSelection.bind(this);\n this.dropOffHourSelection = this.dropOffHourSelection.bind(this);\n this.onPromotionCodeChange = this.onPromotionCodeChange.bind(this);\n this.handleKmFilter = this.handleKmFilter.bind(this);\n this.disableSubmit = this.disableSubmit.bind(this);\n this.filteredDropPlaces = this.filteredDropPlaces.bind(this);\n this.handleDriverAgeChange = this.handleDriverAgeChange.bind(this);\n this.onCommercialAgreementChange = this.onCommercialAgreementChange.bind(this);\n\n this.state = {\n loading: false,\n isSelectingStartDate: true,\n errorMessage: '',\n isHome:\n tlink('__Routes.search', t, i18n, null, settings.configurations.langConfig) !==\n router.location.pathname,\n searchQueryStrings,\n rangeDatePicker: {\n orientation:\n window.screen.width < parseFloat(props.theme.screens.md.replace('px', ''))\n ? 'vertical'\n : 'horizontal',\n withFullScreenPortal:\n window.screen.width < parseFloat(props.theme.screens.md.replace('px', '')),\n focus: null,\n },\n pickUp: {\n date: dateFrom || searchCars.params.dateFrom || null,\n hour: hourFrom || searchCars.params.hourFrom,\n place: null,\n moment: dateFrom\n ? this.parseDate(dateFrom)\n : searchCars.params.dateFrom\n ? this.parseDate(searchCars.params.dateFrom)\n : null,\n },\n dropOff: {\n date: dateTo || searchCars.params.dateTo || null,\n hour: hourTo || searchCars.params.hourTo,\n place: null,\n moment: dateTo\n ? this.parseDate(dateTo)\n : searchCars.params.dateTo\n ? this.parseDate(searchCars.params.dateTo)\n : null,\n checkoutTime: null,\n },\n maximumStay:\n dateFrom || searchCars.params.dateTo\n ? this.getMaximumStay(moment(dateFrom || searchCars.params.dateTo))\n : null,\n minStayLength:\n settings?.configurations.minBookingLength ??\n bookingsConfiguration?.minDays ??\n DEFAULT_MINIMUM_STAY,\n showDifferentDropPlace: false,\n kmFilter: {\n selected:\n ilimitedKm && ilimitedKm.length > 0\n ? ilimitedKm === 'true'\n : featureFlags.activeIlimitedKm || searchCars.params.ilimitedKm || false,\n },\n categories: categories ? categories : searchCars.params.categories || [],\n showInvalidPromotionMessage: false,\n promotionCode: promotionCode || null,\n customPromotionId: customPromotionId || null,\n driverAge: {\n age: searchCars.params.driverAge || null,\n betweenMinAndMax: true,\n },\n commercialAgreementCode:\n commercialAgreementCode ||\n profile?.commercialAgreementCode ||\n profile?.commercialAgreements?.[0] ||\n null,\n agencyGuid: agencyGuid || null,\n };\n }\n\n async componentDidMount() {\n const {\n i18n,\n t,\n history,\n fetchBookeableCars,\n fetchPlaces,\n fetchHolidays,\n fetchSchedules,\n fetchCategories,\n formOrientation,\n settings: { featureFlags, configurations },\n profile,\n listCurrencies,\n setWebCurrencyAction,\n } = this.props;\n const { searchQueryStrings: params, kmFilter, agencyGuid } = this.state;\n\n await fetchPlaces(i18n.language);\n await fetchHolidays();\n await fetchSchedules();\n if (formOrientation === 'luxury') await fetchCategories(i18n.language);\n\n const globalId = profile ? profile.globalId : agencyGuid ?? null;\n\n if (!this.state.isHome) {\n if (params != null && Object.keys(params).length > 0) {\n if (\n !params.dateFrom ||\n !params.hourFrom ||\n !params.pickUpId ||\n !params.pickUpEndpoint ||\n !params.dateTo ||\n !params.hourTo ||\n !params.dropOffId ||\n !params.dropOffEndpoint\n ) {\n const paramsOrDefault = {\n ...params,\n dateFrom: params.dateFrom || this.state.pickUp.date,\n hourFrom: params.hourFrom || this.state.pickUp.hour,\n pickUpId: params.pickUpId || this.state.pickUp.place.id,\n pickUpEndpoint: params.pickUpEndpoint || this.state.pickUp.place.rentlyEndpointName,\n dateTo: params.dateTo || this.state.dropOff.date,\n hourTo: params.hourTo || this.state.dropOff.hour,\n dropOffId: params.dropOffId || this.state.dropOff.place.id,\n dropOffEndpoint: params.dropOffEndpoint || this.state.dropOff.place.rentlyEndpointName,\n };\n\n const paramsString = queryString.stringify(paramsOrDefault);\n\n const link = `${tlink(\n '__Routes.search',\n t,\n i18n,\n null,\n configurations.langConfig,\n )}?${paramsString}`;\n return history.push(link);\n }\n\n //querystring has info\n let ilimitedKm = kmFilter.selected;\n const showFinalPrice = featureFlags.showFinalPrice ? featureFlags.showFinalPrice : false;\n params['onlyFullAvailability'] = featureFlags.onlyFullAvailability\n ? featureFlags.onlyFullAvailability\n : false;\n\n await fetchBookeableCars(\n params,\n i18n.language,\n ilimitedKm,\n showFinalPrice,\n globalId,\n listCurrencies,\n setWebCurrencyAction,\n featureFlags.isNewApi,\n );\n } else {\n this.submitSearch();\n }\n }\n }\n\n static getDerivedStateFromProps(props, state) {\n if (!props.places || !props.schedules || !props.holidays) return null;\n\n if (state.pickUp.place === null && props.places && props.places.length) {\n const {\n searchQueryStrings: {\n pickUpId,\n pickUpEndpoint,\n dropOffId,\n dropOffEndpoint,\n categories,\n customPromotionId,\n },\n kmFilter,\n commercialAgreementCode,\n agencyGuid,\n } = state;\n\n const {\n t,\n searchCars,\n profile,\n schedules,\n settings: { configurations },\n } = props;\n const { minStayLength } = state;\n\n const places = getFilteredPlaces(props.places, configurations, schedules);\n const pickUpPlaces = getFilteredPickUpPlaces(places, t);\n const dropOffPlaces = getFilteredDropOffPlaces(places, t);\n let selectedPlace = pickUpId || props.placeId || searchCars.params.pickUpId || null;\n let selectedEndpoint =\n pickUpEndpoint || props.pickUpEndpoint || searchCars.params.pickUpEndpoint || null;\n\n let selectedDropPlace = props.placeId || dropOffId || searchCars.params.dropOffId || null;\n // pickUpEndpoint is not a typo. prop is receive through landing and we want same drop place by default\n let selectedDropEndpoint =\n props.pickUpEndpoint || dropOffEndpoint || searchCars.params.dropOffEndpoint || null;\n\n const disableDefaultBranchOffice = props?.settings?.featureFlags?.disableDefaultBranchOffice;\n\n const defaultPickUpPlaceValue =\n !state.isHome || !disableDefaultBranchOffice ? pickUpPlaces[0] : null;\n\n const pickUpPlace = selectedPlace\n ? pickUpPlaces.find(\n p => p.id === Number(selectedPlace) && p.rentlyEndpointName === selectedEndpoint,\n ) || defaultPickUpPlaceValue\n : defaultPickUpPlaceValue;\n\n const defaultDropOffPlaceValue = isADropOffPlace(pickUpPlace, t)\n ? pickUpPlace\n : !disableDefaultBranchOffice\n ? dropOffPlaces[0]\n : null;\n\n const dropOffPlace = selectedDropPlace\n ? places.find(\n p =>\n p.id === Number(selectedDropPlace) && p.rentlyEndpointName === selectedDropEndpoint,\n ) || defaultDropOffPlaceValue\n : defaultDropOffPlaceValue;\n\n const pickUpPlaceOption = transformPlaceToSelectOption(pickUpPlace, t);\n const dropOffPlaceOption = transformPlaceToSelectOption(dropOffPlace, t);\n\n const defaultDateFrom =\n state.pickUp.moment ||\n calculateStartDate(\n props.schedules,\n props.holidays,\n (pickUpPlace || pickUpPlaces[0]).branchOfficeId,\n state.pickUp.moment,\n );\n const defaultDateTo =\n state.dropOff.moment ||\n calculateEndDate(\n defaultDateFrom,\n minStayLength,\n props.schedules,\n props.holidays,\n (pickUpPlace || dropOffPlaces[0]).branchOfficeId,\n );\n\n const { dropOffHours, pickUpHours } = _calculatePickDropHours({\n pickUpDate: defaultDateFrom,\n dropOffDate: defaultDateTo,\n pickUpBranchOfficeId: pickUpPlace ? pickUpPlace.branchOfficeId : null,\n dropOffBranchOfficeId: dropOffPlace ? dropOffPlace.branchOfficeId : null,\n schedules: props.schedules,\n holidays: props.holidays,\n });\n\n const scheduleConf = getSchedule(\n props.schedules,\n (dropOffPlace || dropOffPlaces[0]).branchOfficeId,\n );\n const checkoutTime =\n scheduleConf != null &&\n scheduleConf.changeOfDayWithFixedSchedule == true &&\n scheduleConf.checkOutTime != null\n ? scheduleConf.checkOutTime.substring(0, 5)\n : null;\n\n const defaultKmFilter = kmFilter.selected;\n\n const filteredCategories = categories ? categories : props.categories || [];\n const cat = Array.isArray(filteredCategories)\n ? filteredCategories.map(x => parseInt(x))\n : !isNaN(parseInt(filteredCategories))\n ? [parseInt(filteredCategories)]\n : [];\n\n const params = {\n dateFrom: defaultDateFrom.format('DD-MM-YYYY'),\n hourFrom: state.pickUp.hour,\n pickUpId: pickUpPlace?.id || null,\n pickUpEndpoint: pickUpPlace?.rentlyEndpointName || null,\n dateTo: defaultDateTo.format('DD-MM-YYYY'),\n hourTo: state.dropOff.hour,\n dropOffId: dropOffPlace?.id || null,\n dropOffEndpoint: dropOffPlace?.rentlyEndpointName || null,\n categories: cat || [],\n ilimitedKm: defaultKmFilter,\n customPromotionId: customPromotionId || searchCars.params.customPromotionId,\n driverAge: state.driverAge.age || null,\n commercialAgreementCode:\n commercialAgreementCode ||\n profile?.commercialAgreementCode ||\n profile?.commercialAgreements?.[0] ||\n null,\n agencyGuid: agencyGuid || null,\n };\n props.setSearchCarParams(params);\n const defaultDropOffHr =\n checkoutTime ||\n state.dropOff.hour ||\n (dropOffHours.includes(pickUpHours[0]) ? pickUpHours[0] : dropOffHours[0]);\n\n const defaultPickUpHr = state.pickUp.hour || pickUpHours[0];\n\n return {\n ...state,\n pickUp: {\n ...state.pickUp,\n place: pickUpPlaceOption,\n hours: pickUpHours,\n hour: state.pickUp.hour || pickUpHours[0],\n date: defaultDateFrom.format('DD-MM-YYYY'),\n moment: parseHourToMoment(defaultPickUpHr, defaultDateFrom),\n },\n dropOff: {\n ...state.dropOff,\n place: dropOffPlaceOption,\n hours: dropOffHours,\n hour: defaultDropOffHr,\n date: defaultDateTo.format('DD-MM-YYYY'),\n moment: parseHourToMoment(defaultDropOffHr, defaultDateTo),\n checkoutTime: checkoutTime,\n },\n showDifferentDropPlace:\n pickUpPlaceOption.id !== dropOffPlaceOption.id ||\n pickUpPlaceOption.rentlyEndpointName !== dropOffPlaceOption.rentlyEndpointName,\n kmFilter: {\n selected: defaultKmFilter,\n },\n driverAge: {\n age: state.driverAge.age || null,\n betweenMinAndMax: !state.driverAge.age,\n },\n };\n }\n\n return null;\n }\n\n onCommercialAgreementChange = code => {\n this.setState(prevState => ({\n ...prevState,\n commercialAgreementCode: code,\n }));\n };\n\n handleDriverAgeChange = (betweenMinAndMax, age = null) => {\n this.setState(() => ({\n ...this.state,\n driverAge: { age, betweenMinAndMax },\n }));\n };\n\n getDropOffPlaceAvailable = (rentlyEndpointName, tentativePlace) => {\n const allowForDeliveryPlaces = this.filteredDropPlaces();\n const filteredPlaces = allowForDeliveryPlaces.filter(\n p => p.rentlyEndpointName === rentlyEndpointName,\n );\n\n const placeIsPresent = filteredPlaces.find(p => p.id === tentativePlace.id);\n return placeIsPresent ? tentativePlace : transformPlaceToSelectOption(filteredPlaces[0]);\n };\n\n pickUpSelect = selectedOption => {\n if (!selectedOption) return;\n const { schedules, holidays, t } = this.props;\n const { showDifferentDropPlace, dropOff, minStayLength } = this.state;\n\n const allowForDeliveryPlaces = this.filteredDropPlaces();\n\n const dropOffBranchOffice =\n showDifferentDropPlace && dropOff.place\n ? dropOff.place\n : isADropOffPlace(selectedOption, t)\n ? selectedOption\n : allowForDeliveryPlaces[0];\n\n const branchOfficeIdForEnd = dropOffBranchOffice?.branchOfficeId;\n\n const newStartDate = calculateStartDate(\n schedules,\n holidays,\n selectedOption.branchOfficeId,\n this.state.pickUp.moment,\n );\n const newEndDate = calculateEndDate(\n newStartDate,\n minStayLength,\n schedules,\n holidays,\n branchOfficeIdForEnd,\n this.state.dropOff.moment,\n );\n\n const { pickUpHours } = this.calculatePickDropHours({\n pickUpDate: newStartDate,\n pickUpBranchOfficeId: selectedOption.branchOfficeId || this.props.places[0].branchOfficeId,\n });\n\n const { dropOffHours } = showDifferentDropPlace\n ? this.calculatePickDropHours({\n dropOffBranchOfficeId: dropOff.place.branchOfficeId,\n dropOffDate: newEndDate,\n })\n : this.calculatePickDropHours({\n dropOffBranchOfficeId: selectedOption.branchOfficeId,\n dropOffDate: newEndDate,\n });\n\n const scheduleConf = getSchedule(schedules, branchOfficeIdForEnd);\n const checkoutTime =\n scheduleConf != null &&\n scheduleConf.changeOfDayWithFixedSchedule == true &&\n scheduleConf.checkOutTime != null\n ? scheduleConf.checkOutTime.substring(0, 5)\n : null;\n\n this.setState(prevState => {\n const pickUp = {\n ...prevState.pickUp,\n place: selectedOption,\n hours: pickUpHours || pickUpHours[0],\n date: newStartDate,\n moment: newStartDate,\n };\n\n const dropOff = {\n ...prevState.dropOff,\n place: showDifferentDropPlace\n ? this.getDropOffPlaceAvailable(\n dropOffBranchOffice.rentlyEndpointName,\n prevState.dropOff.place,\n )\n : dropOffBranchOffice,\n date: newEndDate,\n moment: newEndDate,\n hours: dropOffHours,\n checkoutTime: checkoutTime,\n hour: checkoutTime != null ? checkoutTime : prevState.dropOff.hour,\n };\n\n return {\n ...prevState,\n pickUp,\n dropOff,\n };\n });\n };\n\n // when dropOff place was removed. we set it equal to pickup place.\n dropOffSelect = selectedOption => {\n if (this.state.pickUp.place === null) {\n this.setState({\n pickUp: { ...this.state.pickUp, place: selectedOption },\n });\n }\n const { pickUp, minStayLength } = this.state;\n const { schedules, holidays } = this.props;\n const place = selectedOption || pickUp.place || {};\n\n const newEndDate = calculateEndDate(\n pickUp.moment,\n minStayLength,\n schedules,\n holidays,\n place.branchOfficeId,\n this.state.dropOff.moment,\n );\n const { dropOffHours } = this.calculatePickDropHours({\n dropOffBranchOfficeId: place.branchOfficeId,\n dropOffDate: newEndDate,\n });\n\n this.setState(prevState => ({\n ...prevState,\n dropOff: {\n ...prevState.dropOff,\n place: place,\n hours: dropOffHours,\n date: newEndDate,\n moment: newEndDate,\n },\n }));\n };\n\n toggleDropInput = () => {\n this.setState(prevState => ({\n ...prevState,\n showDifferentDropPlace: !this.state.showDifferentDropPlace,\n }));\n };\n\n handleDateSelect = (startDate, endDate) => {\n if (!startDate) return false;\n const pickUpDate = startDate.format('DD-MM-YYYY');\n let dropOffDate = '';\n let cleanEndDate = endDate ? endDate.clone() : null;\n const maxDate = this.getMaximumStay(startDate);\n\n if (cleanEndDate) {\n if (endDate.isAfter(maxDate)) {\n dropOffDate = maxDate.format('DD-MM-YYYY');\n cleanEndDate = maxDate;\n } else {\n dropOffDate = endDate.format('DD-MM-YYYY');\n }\n }\n const { pickUpHours, dropOffHours } = this.calculatePickDropHours({\n pickUpDate: startDate,\n dropOffDate: cleanEndDate,\n });\n this.setState(prevState => {\n const { dropOff, pickUp } = prevState;\n\n const prevDropOffMaxDay =\n dropOff.moment && dropOff.moment.isAfter(maxDate) ? maxDate : dropOff.moment;\n\n return {\n ...prevState,\n pickUp: {\n ...pickUp,\n date: pickUpDate,\n moment: startDate,\n hours: pickUpHours,\n hour: pickUpHours.find(v => v === pickUp.hour) || pickUpHours[0],\n },\n dropOff: {\n ...dropOff,\n date: dropOffDate,\n moment: cleanEndDate || prevDropOffMaxDay,\n hours: dropOffHours,\n hour: dropOffHours.find(v => v === dropOff.hour) || dropOffHours[0],\n },\n maximumStay: maxDate,\n };\n });\n };\n\n calculatePickDropHours = ({\n pickUpDate,\n dropOffDate,\n pickUpBranchOfficeId,\n dropOffBranchOfficeId,\n } = {}) => {\n const { schedules, holidays } = this.props;\n const {\n dropOff: { moment: oldDropOffDate, place: oldDropOffBranchOffice },\n pickUp: { moment: oldPickUpDate, place: oldPickUpBranchOffice },\n } = this.state;\n\n return _calculatePickDropHours({\n pickUpDate: pickUpDate || oldPickUpDate,\n dropOffDate: dropOffDate || oldDropOffDate,\n pickUpBranchOfficeId:\n pickUpBranchOfficeId || (oldPickUpBranchOffice && oldPickUpBranchOffice.branchOfficeId),\n dropOffBranchOfficeId:\n dropOffBranchOfficeId || (oldDropOffBranchOffice && oldDropOffBranchOffice.branchOfficeId),\n schedules,\n holidays,\n });\n };\n\n handleDateFocus = focus => {\n this.setState(prevState => ({\n ...prevState,\n rangeDatePicker: { ...prevState.rangeDatePicker, focus },\n }));\n };\n\n handleKmFilter = value => {\n const selected = (this.state.kmFilter.selected = value);\n\n this.setState(prevState => ({\n kmFilter: { ...prevState.kmFilter, selected },\n }));\n };\n\n pickUpHourSelection = hour => {\n const { pickUp, dropOff } = this.state;\n const newDropOffHour = dropOff.hours && dropOff.hours.includes(hour) ? hour : dropOff.hours[0];\n\n this.setState(prevState => ({\n ...prevState,\n pickUp: {\n ...prevState.pickUp,\n hour,\n moment: parseHourToMoment(hour, pickUp.moment),\n },\n dropOff: {\n ...prevState.dropOff,\n hour: newDropOffHour,\n moment: parseHourToMoment(newDropOffHour, dropOff.moment),\n },\n }));\n };\n\n dropOffHourSelection = hour => {\n const { dropOff } = this.state;\n\n this.setState(prevState => ({\n ...prevState,\n dropOff: {\n ...prevState.dropOff,\n hour,\n moment: parseHourToMoment(hour, dropOff.moment),\n },\n }));\n };\n\n onPromotionCodeChange = value => {\n this.setState(prevState => ({\n ...prevState,\n promotionCode: value,\n showInvalidPromotionMessage: false,\n }));\n };\n\n isInvalidDriverAge = () => {\n const { driverAge } = this.state;\n const { bookingsConfiguration, featureFlags } = this.props;\n\n const driverAgeAllowedMin =\n bookingsConfiguration && bookingsConfiguration.driverAgeAllowedMin\n ? bookingsConfiguration.driverAgeAllowedMin\n : 0;\n\n const driverAgeAllowedMax =\n bookingsConfiguration && bookingsConfiguration.driverAgeAllowedMax\n ? bookingsConfiguration.driverAgeAllowedMax\n : 120;\n\n return (\n featureFlags.showDriverAge &&\n !driverAge.betweenMinAndMax &&\n (!driverAge.age || driverAge.age < driverAgeAllowedMin || driverAge.age > driverAgeAllowedMax)\n );\n };\n\n disableSubmit = () => {\n const { pickUp, dropOff, minStayLength, loading } = this.state;\n\n const invalidDriverAge = this.isInvalidDriverAge();\n const isLessThanMinLength = () => {\n if (pickUp.moment && dropOff.moment) {\n if (minStayLength > 0) {\n return dropOff.moment.diff(pickUp.moment, 'days') < minStayLength;\n }\n return dropOff.moment.diff(pickUp.moment, 'minutes') <= 0;\n }\n };\n\n return (\n !(pickUp.place && pickUp.date && pickUp.hour && dropOff.date && dropOff.hour) ||\n isLessThanMinLength() ||\n invalidDriverAge ||\n loading\n );\n };\n\n isOutsideRange = day => {\n const {\n pickUp,\n rangeDatePicker: { focus },\n } = this.state;\n\n if (focus === 'startDate') return false;\n\n const maxStay = this.getMaximumStay(pickUp.moment);\n const today = moment().startOf('day');\n const isBeforeToday = day.isBefore(today);\n const isAfterMaximumStay = maxStay && day.isAfter(maxStay);\n return isBeforeToday || isAfterMaximumStay;\n };\n\n isDayBlocked = (day, focusedInput) => {\n const {\n holidays,\n schedules,\n settings: { configurations },\n } = this.props;\n const { pickUp, dropOff } = this.state;\n const placeId = focusedInput === 'startDate' ? pickUp.place.id : dropOff.place.id;\n\n const dateType = focusedInput === 'startDate' ? 'start' : 'end';\n\n const places = getFilteredPlaces(this.props.places, configurations, schedules);\n\n const selectedPlace = places.find(p => p.id === placeId) || places[0];\n let scheduleConf = getSchedule(schedules, selectedPlace.branchOfficeId);\n\n return !isDayAvailable(day, scheduleConf, holidays, dateType, false);\n };\n\n isDayBlockedByHoliday = (day, holidays, branchOfficeId, scheduledDays) => {\n const holiday = holidays.find(h => h.date === day.format('YYYY-MM-DD'));\n if (!holiday) return false;\n\n if (holiday.ids.length === 0 || holiday.ids.includes(branchOfficeId)) {\n return scheduledDays ? scheduledDays['holiday'].length === 0 : true;\n } else {\n return false;\n }\n };\n\n getMaximumStay = pickUpDay => {\n const { configurations, bookingsConfiguration } = this.props;\n const maxStay = configurations?.maxBookingLength || bookingsConfiguration?.maxDays;\n\n if (maxStay && pickUpDay) {\n let maximumStay = moment(pickUpDay);\n return maximumStay.add(maxStay, 'd');\n }\n return null;\n };\n\n async submitLuxurySearch(userInfo) {\n const { i18n, listCategories, book } = this.props;\n const {\n pickUp,\n dropOff,\n kmFilter,\n promotionCode,\n commercialAgreementCode,\n agencyGuid,\n } = this.state;\n\n this.setState({ loading: true, errorMessage: '' });\n\n const principalModel =\n userInfo.category !== 'all'\n ? listCategories.find(c => c.id === parseFloat(userInfo.category)).principalModelId\n : listCategories[0].principalModelId;\n\n const booking = {\n car: {\n model: { id: principalModel },\n },\n ilimitedKm: kmFilter.selected,\n additionals: [],\n promotion: null,\n fromDate: pickUp.moment.format('MM-DD-YYYY HH:mm'),\n toDate: dropOff.moment.format('MM-DD-YYYY HH:mm'),\n };\n\n const bookingParams = {\n pickUpEndpoint: pickUp.place.rentlyEndpointName,\n pickUpId: pickUp.place.id,\n dropOffEndpoint: dropOff.place.rentlyEndpointName,\n dropOffId: dropOff.place.id,\n promotionCode: promotionCode || null,\n onlinePayment: false,\n // TODO: Modificar este texto en base a lo necesario en backend\n extra: userInfo.category !== 'all' ? userInfo.notes : 'ALL CATEGORIES',\n commercialAgreementCode: commercialAgreementCode || null,\n agencyGuid: agencyGuid || null,\n };\n\n book(booking, userInfo, bookingParams, true, i18n.language);\n this.submitSearch();\n }\n\n async submitSearch() {\n const {\n setSearchCarParams,\n history,\n t,\n i18n,\n categories,\n onSubmit,\n settings,\n isWidget,\n submitOnNewTab,\n submitToExternalUrl,\n } = this.props;\n\n const {\n pickUp,\n dropOff,\n kmFilter,\n promotionCode,\n driverAge,\n commercialAgreementCode,\n agencyGuid,\n } = this.state;\n const { featureFlags } = settings;\n\n let customPromotionId = null;\n if (promotionCode) {\n customPromotionId = (\n await getValidPromotionCode(\n pickUp.place.rentlyEndpointName,\n encodeURIComponent(promotionCode),\n )\n ).data;\n if (customPromotionId === -1) {\n this.setState({ showInvalidPromotionMessage: true });\n return;\n }\n }\n\n let promos = [];\n if (\n settings?.paymentConfiguration?.promotions?.[pickUp.place.rentlyEndpointName]?.onlinePromotion\n )\n promos.push(\n settings.paymentConfiguration.promotions[pickUp.place.rentlyEndpointName].onlinePromotion,\n );\n if (\n settings?.paymentConfiguration?.promotions?.[pickUp.place.rentlyEndpointName]\n ?.counterPromotion\n )\n promos.push(\n settings.paymentConfiguration.promotions[pickUp.place.rentlyEndpointName].counterPromotion,\n );\n\n const params = {\n dateFrom: pickUp.moment.format('DD-MM-YYYY'),\n hourFrom: pickUp.hour,\n pickUpId: pickUp.place.id,\n pickUpEndpoint: pickUp.place.rentlyEndpointName,\n dateTo: dropOff.moment.format('DD-MM-YYYY'),\n hourTo: dropOff.hour,\n dropOffId: dropOff.place.id,\n dropOffEndpoint: dropOff.place.rentlyEndpointName,\n categories: categories || [],\n ilimitedKm: kmFilter.selected,\n onlyFullAvailability: featureFlags.onlyFullAvailability\n ? featureFlags.onlyFullAvailability\n : false,\n promotionCode: promotionCode || null,\n promotions: promotionCode ? [...promos, customPromotionId] : promos,\n customPromotionId: customPromotionId || null,\n driverAge: driverAge.age ? parseFloat(driverAge.age) : null,\n commercialAgreementCode: commercialAgreementCode || null,\n agencyGuid: agencyGuid || null,\n };\n\n if (!this.disableSubmit) return false;\n\n setSearchCarParams(params);\n if (onSubmit) onSubmit();\n\n // TODO: paramtrize this route (getting it from configuration)\n const paramsString = queryString.stringify(params);\n window.postMessage({ event: 'search', payload: paramsString }, '*');\n\n if (isWidget === true) {\n const urlSite = submitToExternalUrl ? submitToExternalUrl : window.location.origin;\n const route = `${tlink(\n '__Routes.search',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n )}?${paramsString}`;\n const finalUrl = submitToExternalUrl ? `${urlSite}?${paramsString}` : urlSite + route;\n\n if (submitOnNewTab === true) {\n window.open(finalUrl, '_blank');\n return;\n }\n\n window.parent.location = finalUrl;\n return;\n }\n\n const link = `${tlink(\n '__Routes.search',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n )}?${paramsString}`;\n return history.push(link);\n }\n\n filteredDropPlaces = () => {\n const { pickUp } = this.state;\n const {\n settings: { configurations },\n schedules,\n } = this.props;\n\n const places = getFilteredPlaces(this.props.places, configurations, schedules);\n\n if (!pickUp.place) return places;\n\n return this.getAvailableDropOffPlaces(pickUp, places);\n };\n\n getAvailableDropOffPlaces = (pickUp, places) => {\n const { t } = this.props;\n if (!places || !pickUp.place) return [];\n\n if (!pickUp.place.availableReturnPlaces || pickUp.place.availableReturnPlaces.length === 0) {\n return [pickUp.place];\n }\n\n let possiblePlaces = [];\n possiblePlaces.push(pickUp.place);\n\n pickUp.place.availableReturnPlaces.forEach(placeId => {\n const place = places.find(p => p.id === placeId);\n if (place && !possiblePlaces.some(i => i.id === place.id)) {\n possiblePlaces.push(place);\n }\n });\n // Remove only delivery places\n possiblePlaces = getFilteredDropOffPlaces(possiblePlaces, t);\n\n return possiblePlaces;\n };\n\n parseDate = stringDate => moment(stringDate, 'DD-MM-YYYY');\n\n render() {\n const {\n searchText,\n className,\n featureFlags,\n configurations,\n promotionCodeText,\n transparent,\n checkoutText,\n showCity,\n showIATA,\n formOrientation,\n bookingsConfiguration,\n resultsPage,\n profile,\n schedules,\n places,\n settings,\n useBackendSort,\n customText,\n t,\n } = this.props;\n\n const {\n showDifferentDropPlace,\n rangeDatePicker: { orientation, focus, withFullScreenPortal },\n pickUp,\n dropOff,\n promotionCode,\n showInvalidPromotionMessage,\n kmFilter,\n driverAge,\n isHome,\n commercialAgreementCode,\n minStayLength,\n loading,\n errorMessage,\n } = this.state;\n\n const driverMinAge =\n bookingsConfiguration && bookingsConfiguration.driverAgeWithoutCautionMin\n ? bookingsConfiguration.driverAgeWithoutCautionMin\n : 20;\n const driverMaxAge =\n bookingsConfiguration && bookingsConfiguration.driverAgeWithoutCautionMax\n ? bookingsConfiguration.driverAgeWithoutCautionMax\n : 65;\n\n const invalidDriverAge = this.isInvalidDriverAge();\n\n const useDriverAgeWithoutCaution =\n bookingsConfiguration && bookingsConfiguration.useDriverAgeWithoutCaution\n ? bookingsConfiguration.useDriverAgeWithoutCaution\n : false;\n const driverAgeAllowedMin =\n bookingsConfiguration && bookingsConfiguration.driverAgeAllowedMin\n ? bookingsConfiguration.driverAgeAllowedMin\n : 20;\n const driverAgeAllowedMax =\n bookingsConfiguration && bookingsConfiguration.driverAgeAllowedMax\n ? bookingsConfiguration.driverAgeAllowedMax\n : 65;\n\n const filteredPlaces = getFilteredPlaces(places, settings.configurations, schedules);\n\n const searchFormProps = {\n searchText,\n className,\n featureFlags,\n configurations,\n promotionCodeText,\n transparent,\n checkoutText,\n showCity,\n showIATA,\n showDifferentDropPlace,\n orientation,\n focus,\n withFullScreenPortal,\n pickUp,\n dropOff,\n promotionCode,\n showInvalidPromotionMessage,\n kmFilter,\n invalidDriverAge,\n driverMinAge,\n driverMaxAge,\n driverAge,\n driverAgeWarning: configurations.driverAgeWarning,\n resultsPage,\n commercialAgreements: profile && profile.commercialAgreements,\n isHome,\n commercialAgreementCode,\n isCompany: isCompanyUser(profile),\n useDriverAgeWithoutCaution,\n driverAgeAllowedMin,\n driverAgeAllowedMax,\n useBackendSort,\n customText,\n pickUpPlaces: getFilteredPickUpPlaces(filteredPlaces, t),\n minStayLength,\n loading,\n errorMessage,\n };\n\n if (formOrientation === 'horizontal') {\n return (\n <ModernSearchForm\n {...searchFormProps}\n dropOffSelect={this.dropOffSelect}\n pickUpSelect={this.pickUpSelect}\n toggleDropInput={this.toggleDropInput}\n handleDateSelect={this.handleDateSelect}\n handleDateFocus={this.handleDateFocus}\n isDayBlocked={this.isDayBlocked}\n pickUpHourSelection={this.pickUpHourSelection}\n dropOffHourSelection={this.dropOffHourSelection}\n onPromotionCodeChange={this.onPromotionCodeChange}\n handleKmFilter={this.handleKmFilter}\n submitSearch={this.submitSearch}\n disableSubmit={this.disableSubmit}\n filteredDropPlaces={this.filteredDropPlaces}\n handleDriverAgeChange={this.handleDriverAgeChange}\n onCommercialAgreementChange={this.onCommercialAgreementChange}\n customText={customText}\n distanceUnit={bookingsConfiguration?.distanceUnit}\n isOutsideRange={this.isOutsideRange}\n />\n );\n }\n\n if (formOrientation === 'luxury') {\n return (\n <LuxurySearchForm\n {...searchFormProps}\n categories={this.props.listCategories}\n dropOffSelect={this.dropOffSelect}\n pickUpSelect={this.pickUpSelect}\n toggleDropInput={this.toggleDropInput}\n handleDateSelect={this.handleDateSelect}\n handleDateFocus={this.handleDateFocus}\n isDayBlocked={this.isDayBlocked}\n pickUpHourSelection={this.pickUpHourSelection}\n dropOffHourSelection={this.dropOffHourSelection}\n onPromotionCodeChange={this.onPromotionCodeChange}\n handleKmFilter={this.handleKmFilter}\n submitSearch={this.submitLuxurySearch}\n disableSubmit={this.disableSubmit}\n filteredDropPlaces={this.filteredDropPlaces}\n handleDriverAgeChange={this.handleDriverAgeChange}\n onCommercialAgreementChange={this.onCommercialAgreementChange}\n customText={customText}\n distanceUnit={bookingsConfiguration?.distanceUnit}\n isOutsideRange={this.isOutsideRange}\n />\n );\n }\n\n return (\n <DefaultSearchForm\n {...searchFormProps}\n dropOffSelect={this.dropOffSelect}\n pickUpSelect={this.pickUpSelect}\n toggleDropInput={this.toggleDropInput}\n handleDateSelect={this.handleDateSelect}\n handleDateFocus={this.handleDateFocus}\n isDayBlocked={this.isDayBlocked}\n pickUpHourSelection={this.pickUpHourSelection}\n dropOffHourSelection={this.dropOffHourSelection}\n onPromotionCodeChange={this.onPromotionCodeChange}\n handleKmFilter={this.handleKmFilter}\n submitSearch={this.submitSearch}\n disableSubmit={this.disableSubmit}\n filteredDropPlaces={this.filteredDropPlaces}\n handleDriverAgeChange={this.handleDriverAgeChange}\n onCommercialAgreementChange={this.onCommercialAgreementChange}\n customText={customText}\n distanceUnit={bookingsConfiguration?.distanceUnit}\n isOutsideRange={this.isOutsideRange}\n />\n );\n }\n}\n\nconst mapStateToProps = ({ user, siteConfiguration, bookings, global }) => ({\n profile: user.profile,\n settings: siteConfiguration.settings,\n bookingsConfiguration: bookings.configuration,\n listCurrencies: global.listCurrencies,\n});\n\nexport default connect(mapStateToProps, { setWebCurrencyAction })(\n withTheme(withTranslation()(SearchForm)),\n);\n","import SearchForm from './SearchForm';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { book } from '../../actions/bookings.actions';\nimport {\n setSearchCarParams,\n fetchBookeableCars,\n fetchPlaces,\n fetchLanguages,\n fetchSchedules,\n fetchHolidays,\n fetchCategories,\n} from 'actions/';\n\nconst mapStateToProps = ({ router, global, siteConfiguration, searchCars, user }) => ({\n router,\n profile: user.profile,\n places: global.listPlaces,\n listCategories: global.listCategories,\n featureFlags: siteConfiguration.settings.featureFlags,\n configurations: siteConfiguration.settings.configurations,\n holidays: global.listHolidays,\n schedules: global.listSchedules,\n params: searchCars.params,\n searchCars,\n});\n\nexport default withRouter(\n connect(mapStateToProps, {\n book,\n setSearchCarParams,\n fetchBookeableCars,\n fetchPlaces,\n fetchLanguages,\n fetchSchedules,\n fetchHolidays,\n fetchCategories,\n })(SearchForm),\n);\n","import style from 'styled-components';\n\nexport const StyledSearchFormWhatsApp = style.form`\n\tbackground-color: ${props =>\n props.transparent ? props.theme.colors.transparent : props.theme.colors.third};\n box-shadow: 3px 3px 5px rgba(0,0,0,0.3);\n\tfont-size: 0.93em;\n min-height: auto;\n font-size: 13px;\n\n .diff-drop-place {\n color: ${props => props.theme.colors.buttonPrimaryBgHover};\n cursor: pointer;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n }\n\n .input-wrapper {\n height: 48px;\n }\n\n .fa-arrow-right {\n color: #e5e5e5 !important;\n font-size: 12px !important;\n }\n\n .range-date-picker {\n .DateInput{\n width: 40%;\n }\n\n .DateInput_input {\n font-size: 14px;\n padding-right: 0;\n }\n }\n\n .label{\n font-size: 13px;\n font-weight: 600;\n }\n\n .hour-select {\n white-space: nowrap;\n .input-wrapper {\n height: 48px;\n }\n }\n\n p{\n font-size: 13px !important;\n font-weight: 600 !important;\n margin-bottom: 5px !important;\n }\n\n .checkboxes {\n display: flex;\n align-items: flex-end;\n }\n .checkboxes > div:first-child {\n\t\tpadding-right: 10px;\n\t\tmargin-right: 10px;\n }\n\n .submit-btn {\n width: 100%;\n white-space: nowrap;\n }\n\n .label-container {\n display: block;\n position: relative;\n padding-left: 27px;\n margin-bottom: 12px;\n cursor: pointer;\n font-size: 13px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n .form-check-input {\n //position: absolute;\n opacity: 0;\n cursor: pointer;\n }\n\n .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 20px;\n width: 20px;\n background-color: #eee;\n border-radius: 50%;\n &:after {\n content: \"\";\n position: absolute;\n display: none;\n top: 5px;\n left: 5px;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: white;\n }\n }\n &:hover input ~ .checkmark {\n background-color: #ccc;\n }\n input:checked ~ .checkmark {\n background-color: ${props => props.theme.colors.buttonPrimaryBgHover};\n }\n input:checked ~ .checkmark:after {\n display: block;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n .row > div {\n margin-bottom: 20px;\n }\n .row {\n margin-bottom: 0;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.xs}) {\n font-size: 13px;\n .checkboxes {\n flex-direction: column;\n align-items: baseline;\n div {\n margin-bottom: 10px;\n }\n }\n .label{\n font-size: 12px;\n }\n .pickup-place-picker, .return-place-picker, .filtro-km, .submit-block, .submit-block .col-md-12{\n margin-bottom: 0 !important;\n }\n .diff-drop-place{\n font-size: 13px;\n }\n .hour-select {\n width: 50%;\n display: inline-block;\n margin-bottom: 0 !important;\n }\n .hour-select-from {\n padding-right: .5rem!important;\n }\n .hour-select-to {\n padding-left: .5rem!important;\n }\n }\n`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withTranslation } from 'react-i18next';\nimport { StyledSearchFormWhatsApp } from './SearchFormWhatsApp.styled';\nimport {\n SelectInput,\n TextInput,\n Btn,\n RangeDateInput,\n SearchBoxPlace,\n CheckboxInput,\n} from 'components/';\nimport { withTheme } from 'styled-components';\nimport queryString from 'query-string';\nimport moment from 'moment';\nimport TranslatedComponent from 'components/TranslatedComponent';\nimport { tlink } from 'utils/translationHelper';\n\nimport { getValidPromotionCode } from '../../services/api';\n\nimport {\n getSchedule,\n calculateStartDate,\n calculateEndDate,\n isDayAvailable,\n _calculatePickDropHours,\n} from 'utils/branchOfficeHelper';\nimport { connect } from 'react-redux';\n\nconst DEFAULT_MINIMUM_STAY = 2; // nights\n\nconst transformPlaceToSelectOption = place => ({\n ...place,\n label: place && place.name,\n value: place && place.id,\n});\n\nclass SearchFormWhatsApp extends TranslatedComponent {\n static propTypes = {\n setSearchCarParams: PropTypes.func.isRequired,\n fetchBookeableCars: PropTypes.func.isRequired,\n history: PropTypes.shape({}).isRequired,\n t: PropTypes.func.isRequired,\n theme: PropTypes.object,\n searchText: PropTypes.string,\n i18n: PropTypes.object,\n categories: PropTypes.array,\n className: PropTypes.string,\n showCity: PropTypes.bool,\n phone: PropTypes.string.isRequired,\n useBackendSort: PropTypes.bool,\n };\n\n constructor(props) {\n super(props);\n\n const { router, t, i18n, searchCars, featureFlags, settings, phone } = props;\n const searchQueryStrings = queryString.parse(router.location.search);\n const {\n dateFrom,\n hourFrom,\n dateTo,\n hourTo,\n ilimitedKm,\n categories,\n promotionCode,\n customPromotionId,\n } = searchQueryStrings;\n\n this.state = {\n isHome:\n tlink('__Routes.search', t, i18n, null, settings.configurations.langConfig) !==\n router.location.pathname,\n searchQueryStrings,\n rangeDatePicker: {\n orientation:\n window.screen.width < parseFloat(props.theme.screens.md.replace('px', ''))\n ? 'vertical'\n : 'horizontal',\n withFullScreenPortal:\n window.screen.width < parseFloat(props.theme.screens.md.replace('px', '')),\n focus: null,\n },\n pickUp: {\n date: dateFrom || searchCars.params.dateFrom || null,\n hour: hourFrom || searchCars.params.hourFrom,\n place: null,\n moment: dateFrom\n ? this.parseDate(dateFrom)\n : searchCars.params.dateFrom\n ? this.parseDate(searchCars.params.dateFrom)\n : null,\n },\n dropOff: {\n date: dateTo || searchCars.params.dateTo || null,\n hour: hourTo || searchCars.params.hourTo,\n place: null,\n moment: dateTo\n ? this.parseDate(dateTo)\n : searchCars.params.dateTo\n ? this.parseDate(searchCars.params.dateTo)\n : null,\n },\n showDifferentDropPlace: false,\n kmFilter: {\n selected:\n ilimitedKm && ilimitedKm.length > 0\n ? ilimitedKm === 'true'\n : featureFlags.activeIlimitedKm || searchCars.params.ilimitedKm || false,\n },\n categories: categories ? categories : searchCars.params.categories || [],\n showInvalidPromotionMessage: false,\n promotionCode: promotionCode || null,\n customPromotionId: customPromotionId || null,\n phone,\n };\n }\n\n async componentDidMount() {\n const {\n i18n,\n fetchBookeableCars,\n fetchPlaces,\n fetchHolidays,\n fetchSchedules,\n settings: { featureFlags },\n profile,\n } = this.props;\n\n const { searchQueryStrings: params, kmFilter } = this.state;\n\n await fetchPlaces(i18n.language);\n await fetchHolidays();\n await fetchSchedules();\n\n const globalId = profile ? profile.globalId : null;\n\n if (!this.state.isHome) {\n if (params != null && Object.keys(params).length > 0) {\n //querystring has info\n let ilimitedKm = kmFilter.selected;\n const showFinalPrice = featureFlags.showFinalPrice ? featureFlags.showFinalPrice : false;\n params['onlyFullAvailability'] = featureFlags.onlyFullAvailability\n ? featureFlags.onlyFullAvailability\n : false;\n await fetchBookeableCars(params, i18n.language, ilimitedKm, showFinalPrice, globalId);\n } else {\n this.submitSearch();\n }\n }\n }\n\n static getDerivedStateFromProps(props, state) {\n if (!props.places || !props.schedules || !props.holidays) return null;\n if (state.pickUp.place === null && props.places && props.places.length) {\n const {\n searchQueryStrings: {\n pickUpId,\n pickUpEndpoint,\n dropOffId,\n dropOffEndpoint,\n categories,\n customPromotionId,\n },\n kmFilter,\n } = state;\n\n const { searchCars } = props;\n\n let selectedPlace = pickUpId || props.placeId || searchCars.params.pickUpId;\n let selectedEndpoint =\n pickUpEndpoint || props.pickUpEndpoint || searchCars.params.pickUpEndpoint;\n\n let selectedDropPlace = props.placeId || dropOffId || searchCars.params.dropOffId;\n // pickUpEndpoint is not a typo. prop is receive through landing and we want same drop place by default\n let selectedDropEndpoint =\n props.pickUpEndpoint || dropOffEndpoint || searchCars.params.dropOffEndpoint;\n\n const pickUpPlace = selectedPlace\n ? props.places.find(\n p => p.id === Number(selectedPlace) && p.rentlyEndpointName === selectedEndpoint,\n ) || props.places[0]\n : props.places[0];\n const dropOffPlace = selectedDropPlace\n ? props.places.find(\n p =>\n p.id === Number(selectedDropPlace) && p.rentlyEndpointName === selectedDropEndpoint,\n ) || props.places[0]\n : pickUpPlace;\n\n const pickUpPlaceOption = transformPlaceToSelectOption(pickUpPlace);\n const dropOffPlaceOption = transformPlaceToSelectOption(dropOffPlace);\n const minStayLength =\n props.configurations.minBookingLength === undefined\n ? DEFAULT_MINIMUM_STAY\n : props.configurations.minBookingLength;\n\n const defaultDateFrom =\n state.pickUp.moment ||\n calculateStartDate(\n props.schedules,\n props.holidays,\n pickUpPlace.branchOfficeId,\n state.pickUp.moment,\n );\n const defaultDateTo =\n state.dropOff.moment ||\n calculateEndDate(\n defaultDateFrom,\n minStayLength,\n props.schedules,\n props.holidays,\n pickUpPlace.branchOfficeId,\n );\n\n const { dropOffHours, pickUpHours } = _calculatePickDropHours({\n pickUpDate: defaultDateFrom,\n dropOffDate: defaultDateTo,\n pickUpBranchOfficeId: pickUpPlace.branchOfficeId,\n dropOffBranchOfficeId: dropOffPlace.branchOfficeId,\n schedules: props.schedules,\n holidays: props.holidays,\n });\n\n const defaultKmFilter = kmFilter.selected;\n\n const filteredCategories = categories ? categories : props.categories || [];\n const cat = Array.isArray(filteredCategories)\n ? filteredCategories.map(x => parseInt(x))\n : !isNaN(parseInt(filteredCategories))\n ? [parseInt(filteredCategories)]\n : [];\n\n const params = {\n dateFrom: defaultDateFrom.format('DD-MM-YYYY'),\n hourFrom: state.pickUp.hour,\n pickUpId: pickUpPlace.id,\n pickUpEndpoint: pickUpPlace.rentlyEndpointName,\n dateTo: defaultDateTo.format('DD-MM-YYYY'),\n hourTo: state.dropOff.hour,\n dropOffId: dropOffPlace.id,\n dropOffEndpoint: dropOffPlace.rentlyEndpointName,\n categories: cat || [],\n ilimitedKm: defaultKmFilter,\n customPromotionId: customPromotionId || searchCars.params.customPromotionId,\n };\n\n props.setSearchCarParams(params);\n\n return {\n ...state,\n pickUp: {\n ...state.pickUp,\n place: pickUpPlaceOption,\n hours: pickUpHours,\n hour: state.pickUp.hour || pickUpHours[0],\n date: defaultDateFrom,\n moment: defaultDateFrom,\n },\n dropOff: {\n ...state.dropOff,\n place: dropOffPlaceOption,\n hours: dropOffHours,\n hour:\n state.dropOff.hour ||\n (dropOffHours.includes(pickUpHours[0]) ? pickUpHours[0] : dropOffHours[0]),\n date: defaultDateTo,\n moment: defaultDateTo,\n },\n showDifferentDropPlace:\n pickUpPlaceOption.id !== dropOffPlaceOption.id ||\n pickUpPlaceOption.rentlyEndpointName !== dropOffPlaceOption.rentlyEndpointName,\n kmFilter: {\n selected: defaultKmFilter,\n },\n };\n } else if (state.pickUp.place === null) return null;\n return null;\n }\n\n getDropOffPlaceAvailable = (rentlyEndpointName, tentativePlace) => {\n const { places } = this.props;\n const filteredPlaces = places.filter(p => p.rentlyEndpointName === rentlyEndpointName);\n\n const placeIsPresent = filteredPlaces.find(p => p.id === tentativePlace.id);\n return placeIsPresent ? tentativePlace : transformPlaceToSelectOption(filteredPlaces[0]);\n };\n\n pickUpSelect = selectedOption => {\n if (!selectedOption) return;\n\n const { schedules, holidays, configurations } = this.props;\n const { showDifferentDropPlace, dropOff } = this.state;\n\n const minStayLength =\n configurations.minBookingLength === undefined\n ? DEFAULT_MINIMUM_STAY\n : configurations.minBookingLength;\n const branchOfficeIdForEnd = showDifferentDropPlace\n ? dropOff.place.branchOfficeId\n : selectedOption.branchOfficeId;\n\n const newStartDate = calculateStartDate(\n schedules,\n holidays,\n selectedOption.branchOfficeId,\n this.state.pickUp.moment,\n );\n const newEndDate = calculateEndDate(\n newStartDate,\n minStayLength,\n schedules,\n holidays,\n branchOfficeIdForEnd,\n );\n\n const { pickUpHours } = this.calculatePickDropHours({\n pickUpDate: newStartDate,\n pickUpBranchOfficeId: selectedOption.branchOfficeId,\n });\n\n const { dropOffHours } = showDifferentDropPlace\n ? this.calculatePickDropHours({\n dropOffBranchOfficeId: dropOff.place.branchOfficeId,\n dropOffDate: newEndDate,\n })\n : this.calculatePickDropHours({\n dropOffBranchOfficeId: selectedOption.branchOfficeId,\n dropOffDate: newEndDate,\n });\n\n this.setState(prevState => {\n const pickUp = {\n ...prevState.pickUp,\n place: selectedOption,\n hours: pickUpHours,\n date: newStartDate,\n moment: newStartDate,\n };\n\n const dropOff = {\n ...prevState.dropOff,\n place: showDifferentDropPlace\n ? this.getDropOffPlaceAvailable(\n selectedOption.rentlyEndpointName,\n prevState.dropOff.place,\n )\n : selectedOption,\n date: newEndDate,\n moment: newEndDate,\n hours: dropOffHours,\n };\n\n return { ...prevState, pickUp, dropOff };\n });\n };\n\n // when dropOff place was removed. we set it equal to pickup place.\n dropOffSelect = selectedOption => {\n const { pickUp } = this.state;\n const { configurations, schedules, holidays } = this.props;\n const place = selectedOption || pickUp.place;\n const minStayLength =\n configurations.minBookingLength === undefined\n ? DEFAULT_MINIMUM_STAY\n : configurations.minBookingLength;\n\n const newEndDate = calculateEndDate(\n pickUp.moment,\n minStayLength,\n schedules,\n holidays,\n place.branchOfficeId,\n );\n const { dropOffHours } = this.calculatePickDropHours({\n dropOffBranchOfficeId: place.branchOfficeId,\n dropOffDate: newEndDate,\n });\n\n this.setState(prevState => ({\n ...prevState,\n dropOff: {\n ...prevState.dropOff,\n place: place,\n hours: dropOffHours,\n date: newEndDate,\n moment: newEndDate,\n },\n }));\n };\n\n toggleDropInput = () => {\n this.setState(prevState => ({\n ...prevState,\n showDifferentDropPlace: !this.state.showDifferentDropPlace,\n }));\n };\n\n handleDateSelect = (startDate, endDate) => {\n if (!startDate) return false;\n const pickUpDate = startDate.format('DD-MM-YYYY');\n let dropOffDate = '';\n if (endDate) dropOffDate = endDate.format('DD-MM-YYYY');\n const { pickUpHours, dropOffHours } = this.calculatePickDropHours({\n pickUpDate: startDate,\n dropOffDate: endDate,\n });\n this.setState(prevState => ({\n ...prevState,\n pickUp: {\n ...prevState.pickUp,\n date: pickUpDate,\n moment: startDate,\n hours: pickUpHours,\n hour: pickUpHours.find(v => v === prevState.pickUp.hour) || pickUpHours[0],\n },\n dropOff: {\n ...prevState.dropOff,\n date: dropOffDate,\n moment: endDate || prevState.dropOff.moment,\n hours: dropOffHours,\n hour: dropOffHours.find(v => v === prevState.dropOff.hour) || dropOffHours[0],\n },\n }));\n };\n\n calculatePickDropHours = ({\n pickUpDate,\n dropOffDate,\n pickUpBranchOfficeId,\n dropOffBranchOfficeId,\n } = {}) => {\n const { schedules, holidays } = this.props;\n const {\n dropOff: {\n moment: oldDropOffDate,\n place: { branchOfficeId: oldDropOffBranchOfficeId },\n },\n pickUp: {\n moment: oldPickUpDate,\n place: { branchOfficeId: oldPickUpBranchOfficeId },\n },\n } = this.state;\n\n return _calculatePickDropHours({\n pickUpDate: pickUpDate || oldPickUpDate,\n dropOffDate: dropOffDate || oldDropOffDate,\n pickUpBranchOfficeId: pickUpBranchOfficeId || oldPickUpBranchOfficeId,\n dropOffBranchOfficeId: dropOffBranchOfficeId || oldDropOffBranchOfficeId,\n schedules,\n holidays,\n });\n };\n\n handleDateFocus = focus => {\n this.setState(prevState => ({\n ...prevState,\n rangeDatePicker: { ...prevState.rangeDatePicker, focus },\n }));\n };\n\n handleKmFilter = value => {\n const selected = (this.state.kmFilter.selected = value);\n\n this.setState(prevState => ({\n kmFilter: { ...prevState.kmFilter, selected },\n }));\n };\n\n pickUpHourSelection = hour => {\n const { dropOff } = this.state;\n const dropOffHour = dropOff.hours && dropOff.hours.includes(hour) ? hour : dropOff.hours[0];\n\n this.setState(prevState => ({\n ...prevState,\n pickUp: { ...prevState.pickUp, hour },\n dropOff: { ...prevState.dropOff, hour: dropOffHour },\n }));\n };\n\n dropOffHourSelection = hour => {\n this.setState(prevState => ({\n ...prevState,\n dropOff: { ...prevState.dropOff, hour },\n }));\n };\n\n onPromotionCodeChange = value => {\n this.setState(prevState => ({\n ...prevState,\n promotionCode: value,\n showInvalidPromotionMessage: false,\n }));\n };\n\n disableSubmit = () => {\n const { pickUp, dropOff } = this.state;\n return !(pickUp.place && pickUp.date && pickUp.hour && dropOff.date && dropOff.hour);\n };\n\n isDayBlocked = (day, focusedInput) => {\n const { holidays, schedules, places } = this.props;\n const { pickUp, dropOff } = this.state;\n const placeId = focusedInput === 'startDate' ? pickUp.place.id : dropOff.place.id;\n const dateType = focusedInput === 'startDate' ? 'start' : 'end';\n\n const selectedPlace = places.find(p => p.id === placeId);\n const branchOfficeId = selectedPlace.branchOfficeId;\n const scheduleConf = getSchedule(schedules, branchOfficeId);\n\n return !isDayAvailable(day, scheduleConf, holidays, dateType, false);\n };\n\n isDayBlockedByHoliday = (day, holidays, branchOfficeId, scheduledDays) => {\n const holiday = holidays.find(h => h.date === day.format('YYYY-MM-DD'));\n if (!holiday) return false;\n\n if (holiday.ids.length === 0 || holiday.ids.includes(branchOfficeId)) {\n return scheduledDays ? scheduledDays['holiday'].length === 0 : true;\n } else {\n return false;\n }\n };\n\n async submitSearch() {\n const { categories, settings, t } = this.props;\n\n const { pickUp, dropOff, kmFilter, promotionCode, phone } = this.state;\n const { featureFlags } = settings;\n\n let customPromotionId = null;\n if (promotionCode) {\n customPromotionId = (\n await getValidPromotionCode(\n pickUp.place.rentlyEndpointName,\n encodeURIComponent(promotionCode),\n )\n ).data;\n\n if (customPromotionId === -1) {\n this.setState({ showInvalidPromotionMessage: true });\n return;\n }\n }\n\n let promos = [];\n if (\n settings.paymentConfiguration &&\n settings.paymentConfiguration.promotions &&\n settings.paymentConfiguration.promotions[pickUp.place.rentlyEndpointName] &&\n settings.paymentConfiguration.promotions[pickUp.place.rentlyEndpointName].onlinePromotion\n )\n promos.push(\n settings.paymentConfiguration.promotions[pickUp.place.rentlyEndpointName].onlinePromotion,\n );\n if (\n settings.paymentConfiguration &&\n settings.paymentConfiguration.promotions &&\n settings.paymentConfiguration.promotions[pickUp.place.rentlyEndpointName] &&\n settings.paymentConfiguration.promotions[pickUp.place.rentlyEndpointName].counterPromotion\n )\n promos.push(\n settings.paymentConfiguration.promotions[pickUp.place.rentlyEndpointName].counterPromotion,\n );\n\n const params = {\n dateFrom: pickUp.moment.format('DD-MM-YYYY'),\n hourFrom: pickUp.hour,\n pickUpId: pickUp.place.id,\n pickUpEndpoint: pickUp.place.rentlyEndpointName,\n dateTo: dropOff.moment.format('DD-MM-YYYY'),\n hourTo: dropOff.hour,\n dropOffId: dropOff.place.id,\n dropOffEndpoint: dropOff.place.rentlyEndpointName,\n categories: categories || [],\n ilimitedKm: kmFilter.selected,\n onlyFullAvailability: featureFlags.onlyFullAvailability\n ? featureFlags.onlyFullAvailability\n : false,\n promotionCode: promotionCode || null,\n promotions: promotionCode ? [customPromotionId] : promos,\n customPromotionId: customPromotionId || null,\n };\n\n if (!this.disableSubmit) return false;\n let text = `${t('Quote')}\\n`;\n text += `${t('deliveryPlace')}: ${pickUp.place.name}\\n`;\n text += `${t('LugarDeDevolucion')}: ${dropOff.place.name}\\n`;\n text += `${t('deliveryDate')}: ${pickUp.moment.format('DD-MM-YYYY')}\\n`;\n text += `${t('deliveryTime')}: ${pickUp.hour}\\n`;\n text += `${t('returnDate')}: ${dropOff.moment.format('DD-MM-YYYY')}\\n`;\n text += `${t('returnTime')}: ${dropOff.hour}\\n`;\n text += `${t('KmIlimitados')}: ${kmFilter.selected ? 'Y' : 'N'} \\n`;\n\n const wpUrl = `https://api.whatsapp.com/send?phone=${phone}&text=${encodeURI(text)}`;\n\n window.open(wpUrl, '_blank');\n }\n\n filteredDropPlaces = () => {\n const { pickUp } = this.state;\n const { places } = this.props;\n if (!pickUp.place) return places;\n\n const availablePlaces = this.getAvailableDropOffPlaces(pickUp);\n return availablePlaces.filter(p => p.rentlyEndpointName === pickUp.place.rentlyEndpointName);\n };\n\n getAvailableDropOffPlaces = pickUp => {\n const { places } = this.props;\n if (!places || !pickUp.place) return [];\n\n if (!pickUp.place.availableReturnPlaces || pickUp.place.availableReturnPlaces.length === 0)\n return [pickUp.place];\n\n let possiblePlaces = [];\n possiblePlaces.push(pickUp.place);\n\n pickUp.place.availableReturnPlaces.forEach(placeId => {\n const place = places.find(p => p.id === placeId);\n if (place) possiblePlaces.push(place);\n });\n\n return possiblePlaces;\n };\n\n parseDate = stringDate => moment(stringDate, 'DD-MM-YYYY');\n\n render() {\n const {\n places,\n t,\n searchText,\n className,\n featureFlags,\n configurations,\n promotionCodeText,\n transparent,\n useBackendSort,\n } = this.props;\n const {\n showDifferentDropPlace,\n rangeDatePicker: { orientation, focus, withFullScreenPortal },\n } = this.state;\n\n return (\n <StyledSearchFormWhatsApp\n onSubmit={e => e.preventDefault(false)}\n className={'pt-4 pb-4 pl-4 pr-4 ' + (className || '')}\n transparent={transparent}\n >\n <div className=\"row mt-2\">\n <div className=\"col-md-12 pickup-place-picker\">\n <label htmlFor=\"selectFromPlace\" className=\"label\">\n {t('deliveryPlace')}\n </label>\n <SearchBoxPlace\n name=\"selectFromPlace\"\n data={places}\n placeChangeHandler={this.pickUpSelect}\n placeSelected={this.state.pickUp.place}\n placeholder={t('selectPickUpPlace')}\n showCity={this.props.showCity || false}\n useBackendSort={useBackendSort}\n />\n </div>\n </div>\n <div className=\"row\">\n <div className=\"col-md-12 return-place-picker\">\n <span className=\"diff-drop-place\" onClick={this.toggleDropInput}>\n {t('differentreturnplace')}\n </span>\n {showDifferentDropPlace && (\n <>\n <label htmlFor=\"selectToPlace\" className=\"label\">\n {t('LugarDeDevolucion')}\n </label>\n <div className=\"col-md-12 p-0 mb-4\">\n <SearchBoxPlace\n name=\"selectToPlace\"\n className=\"search-box-place\"\n data={this.filteredDropPlaces()}\n placeChangeHandler={this.dropOffSelect}\n placeSelected={this.state.dropOff.place}\n placeholder={t('SeleccionarLugarDeDevolucion')}\n />\n </div>\n </>\n )}\n </div>\n </div>\n <div className=\"d-flex row mt-1\">\n <div className=\"col-xs-12 col-md-6 range-date-picker\">\n <RangeDateInput\n label={t('deliveryReturnDate')}\n onDatesChange={this.handleDateSelect}\n onFocusChange={this.handleDateFocus}\n startDateId=\"drop-up-date-start\"\n startDate={this.state.pickUp.moment}\n endDate={this.state.dropOff.moment}\n icon=\"far fa-calendar-alt\"\n iconColor={this.props.theme.colors.buttonPrimaryBgHover}\n isDayBlocked={this.isDayBlocked}\n datePickerOptions={{\n minimumNights:\n configurations.minBookingLength === undefined\n ? DEFAULT_MINIMUM_STAY\n : configurations.minBookingLength,\n focusedInput: focus,\n orientation: orientation,\n withFullScreenPortal: withFullScreenPortal,\n customArrowIcon: <span className=\"fas fa-arrow-right p-0 mr-2\" />,\n startDatePlaceholderText: t('deliveryDate'),\n endDatePlaceholderText: t('returnDate'),\n hideKeyboardShortcutsPanel: true,\n }}\n />\n </div>\n <div className=\"col-md-3 col-sm-6 col-xs-6 hour-select hour-select-from\">\n <SelectInput\n onChange={this.pickUpHourSelection}\n label={t('deliveryTime')}\n icon=\"far fa-clock\"\n selected={this.state.pickUp.hour}\n iconColor={this.props.theme.colors.buttonPrimaryBgHover}\n options={this.state.pickUp.hours}\n name=\"pickupTime\"\n />\n </div>\n <div className=\"col-md-3 col-sm-6 col-xs-6 hour-select hour-select-to\">\n <SelectInput\n name=\"returnTime\"\n onChange={this.dropOffHourSelection}\n label={t('returnTime')}\n icon=\"far fa-clock\"\n selected={this.state.dropOff.hour}\n iconColor={this.props.theme.colors.buttonPrimaryBgHover}\n options={this.state.dropOff.hours}\n />\n </div>\n </div>\n <div className=\"row\">\n {featureFlags.showPromotionCode && (\n <div className=\"col-md-6\">\n <TextInput\n className=\"promotion-code-input\"\n label={t('CodigoDePromocion')}\n icon=\"fas fa-star\"\n iconColor={this.props.theme.colors.buttonPrimaryBgHover}\n placeholder={t(promotionCodeText) || t('EscribiTuCodigo')}\n onChange={this.onPromotionCodeChange}\n value={this.state.promotionCode}\n error={\n this.state.showInvalidPromotionMessage ? t('CodigoDePromocionInvalido') : false\n }\n />\n </div>\n )}\n {featureFlags && featureFlags.kilometerFilters && (\n <div className=\"col-md-6 mb-4 mt-3 filtro-km\">\n <CheckboxInput\n className=\"special-checkbox\"\n text={t('KmIlimitados')}\n checked={this.state.kmFilter.selected === true}\n onChange={e => this.handleKmFilter(e)}\n />\n </div>\n )}\n </div>\n <div className=\"row mt-4 mb-3 submit-block\">\n <div className=\"col-md-12\">\n <Btn\n className=\"submit-btn\"\n text={this.tt(searchText) || t('search')}\n onClick={() => this.submitSearch()}\n disabled={this.disableSubmit()}\n />\n </div>\n </div>\n </StyledSearchFormWhatsApp>\n );\n }\n}\n\nconst mapStateToProps = ({ user, siteConfiguration }) => ({\n profile: user.profile,\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps)(withTheme(withTranslation()(SearchFormWhatsApp)));\n","import SearchFormWhatsApp from './SearchFormWhatsApp';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport {\n setSearchCarParams,\n fetchBookeableCars,\n fetchPlaces,\n fetchLanguages,\n fetchSchedules,\n fetchHolidays,\n} from 'actions/';\n\nconst mapStateToProps = ({ router, global, siteConfiguration, searchCars }) => ({\n router,\n places: global.listPlaces,\n featureFlags: siteConfiguration.settings.featureFlags,\n configurations: siteConfiguration.settings.configurations,\n holidays: global.listHolidays,\n schedules: global.listSchedules,\n params: searchCars.params,\n searchCars,\n});\n\nexport default withRouter(\n connect(mapStateToProps, {\n setSearchCarParams,\n fetchBookeableCars,\n fetchPlaces,\n fetchLanguages,\n fetchSchedules,\n fetchHolidays,\n })(SearchFormWhatsApp),\n);\n","import style from 'styled-components';\n\nexport const StyledCategoriesFilter = style.div`\n\n @media (max-width: ${props => props.theme.screens.xs}) {\n }\n\n background-color: ${props => props.theme.colors.bg};\n box-shadow: 3px 3px 6px #00000016;\n\n p{\n font-weight: bold !important;\n font-size: 14px !important;\n }\n\n label{\n text-transform: capitalize;\n }\n\n .special-checkbox{\n display: inline-block;\n margin-bottom: 5px;\n width: 100%;\n }\n \n`;\n","import style from 'styled-components';\n\nexport const StyledCategoriesFilterModern = style.div`\n\n @media (max-width: ${props => props.theme.screens.xs}) {\n }\n\n background-color: ${props => props.theme.colors.bg};\n box-shadow: 3px 3px 6px #00000016;\n\n p{\n font-weight: bold !important;\n font-size: 18px !important;\n }\n\n label{\n text-transform: capitalize;\n }\n\n .special-checkbox{\n display: inline-block;\n margin-bottom: 5px;\n width: 100%;\n }\n \n`;\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { StyledCategoriesFilter } from './CategoriesFilter.styled';\nimport { StyledCategoriesFilterModern } from './CategoriesFilter.styled.modern';\nimport { CheckboxInput } from '/components';\nimport { PropTypes } from 'prop-types';\nimport { getAllCategoryIdsInCollection } from '../../utils/categoryGroupHelper';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\n\nclass CategoriesFilter extends React.Component {\n state = {\n loading: true,\n workWithCategoryGroups: false,\n };\n\n static propTypes = {\n listCategories: PropTypes.array,\n t: PropTypes.func,\n onCategoriesChanged: PropTypes.func,\n };\n\n handleCategoryChange = entity => {\n const {\n onCategoriesChanged,\n listCategories,\n params,\n setSearchCarParams,\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n\n const filterEntities = this.state.workWithCategoryGroups ? categoryGroups : listCategories;\n let categories = params.categories;\n const entityIdentifier = this.getEntityUniqueId(entity);\n\n if (this.state.workWithCategoryGroups) {\n const categoriesInGroup = entity.categories.flatMap(c => c.ids);\n categoriesInGroup.forEach(categoryId => {\n if (!categories.includes(categoryId)) {\n categories.push(categoryId);\n } else {\n const index = categories.indexOf(categoryId);\n if (index !== -1) categories.splice(index, 1);\n }\n });\n\n // check if all categories are included If so, we empty the filters.\n const allCategoriesInGroup = getAllCategoryIdsInCollection(categoryGroups);\n if (categories.length === allCategoriesInGroup.length) {\n categories = [];\n }\n }\n\n if (!this.state.workWithCategoryGroups) {\n const exists = categories.find(category => entityIdentifier === category);\n if (!exists) categories.push(entityIdentifier);\n else {\n const index = categories.indexOf(entityIdentifier);\n if (index !== -1) categories.splice(index, 1);\n }\n\n if (categories.length === filterEntities.length) categories = [];\n }\n\n this.setState(prevState => ({ ...prevState }));\n let newParams = { ...params, ...{ categories: categories } };\n setSearchCarParams(newParams);\n\n if (onCategoriesChanged) onCategoriesChanged(categories);\n };\n\n handleAllCategoriesChange = value => {\n if (value) {\n const { onCategoriesChanged, params, setSearchCarParams } = this.props;\n\n this.setState(prevState => ({\n ...prevState,\n }));\n\n let newParams = { ...params, ...{ categories: [] } };\n\n setSearchCarParams(newParams);\n\n if (onCategoriesChanged) onCategoriesChanged([]);\n }\n };\n\n async componentDidMount() {\n const {\n fetchCategories,\n i18n,\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n\n await fetchCategories(i18n.language);\n\n this.setState(prevState => ({\n ...prevState,\n loading: false,\n workWithCategoryGroups: categoryGroups && categoryGroups.length > 0,\n }));\n }\n\n getEntityUniqueId = entity => {\n return this.state.workWithCategoryGroups ? entity.name : entity.id;\n };\n\n isItemSelected = entity => {\n const {\n categories,\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n\n if (categoryGroups) {\n const categoriesInGroup = entity.categories.flatMap(c => c.ids);\n return categoriesInGroup.every(c => categories.includes(c));\n }\n\n return categories.indexOf(this.getEntityUniqueId(entity)) !== -1;\n };\n\n isAllChecked = () => {\n const {\n listCategories,\n categories,\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n if (!categories || categories.length === 0) return true;\n\n let categoriesToCheck = [];\n if (this.state.workWithCategoryGroups) {\n categoriesToCheck = getAllCategoryIdsInCollection(categoryGroups);\n } else {\n categoriesToCheck = listCategories;\n }\n\n return categoriesToCheck.length === categories.length;\n };\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledCategoriesFilterModern;\n }\n return StyledCategoriesFilter;\n }\n\n render() {\n if (this.state.loading) return null;\n\n const {\n listCategories,\n t,\n settings: {\n configurations: { categoryGroups },\n },\n } = this.props;\n const filterEntities = this.state.workWithCategoryGroups ? categoryGroups : listCategories;\n\n let i = Math.floor(filterEntities.length / 2);\n if (i === 0) i = filterEntities.length;\n\n const StyledSection = this.getTemplateStyledComponent();\n\n return (\n <StyledSection className=\"row search-category w-100 mt-3 pt-4 pb-4 pl-4 pr-4\">\n <div className=\"col-md-12\">\n <p>{t('categorias')}</p>\n </div>\n <div className=\"col-md-6\">\n <CheckboxInput\n className=\"special-checkbox\"\n text={t('all')}\n checked={this.isAllChecked()}\n onChange={this.handleAllCategoriesChange}\n />\n {filterEntities.slice(0, i).map((entity, index) => (\n <CheckboxInput\n className=\"special-checkbox\"\n key={index}\n text={entity.name.toLowerCase()}\n checked={this.isItemSelected(entity)}\n onChange={() => this.handleCategoryChange(entity)}\n />\n ))}\n </div>\n <div className=\"col-md-6\">\n {filterEntities.slice(i, filterEntities.length).map((entity, index) => (\n <CheckboxInput\n className=\"special-checkbox\"\n key={index}\n text={entity.name.toLowerCase()}\n checked={this.isItemSelected(entity)}\n onChange={() => this.handleCategoryChange(entity)}\n />\n ))}\n </div>\n </StyledSection>\n );\n }\n}\n\nexport default withSettingsContext(withTranslation()(CategoriesFilter));\n","import { connect } from 'react-redux';\nimport CategoriesFilter from './CategoriesFilter';\nimport { fetchCategories, setSearchCarParams } from 'actions';\n\nconst mapStateToProps = ({ global, searchCars, siteConfiguration }) => ({\n listCategories: global.listCategories,\n categories: searchCars.params.categories,\n params: searchCars.params,\n settings: siteConfiguration.settings,\n});\n\nexport default connect(mapStateToProps, {\n fetchCategories,\n setSearchCarParams,\n})(CategoriesFilter);\n","import styled from 'styled-components';\n\nexport const StyledSearchMap = styled.div`\n background-color: ${props => props.theme.colors.bg};\n box-shadow: 3px 3px 6px #00000016;\n\n p {\n font-weight: bold !important;\n font-size: 14px !important;\n }\n\n #mapPlaces {\n width: 100%;\n height: 200px;\n }\n`;\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { PropTypes } from 'prop-types';\nimport { StyledSearchMap } from './SearchMap.styled';\n\nclass SearchMap extends React.Component {\n propTypes = {\n t: PropTypes.func,\n };\n\n render() {\n const { t } = this.props;\n\n return (\n <StyledSearchMap className=\"row map w-100 mt-3 pt-4 pb-4 pl-4 pr-4\">\n <div className=\"col-md-12\">\n <p>{t('mapa')}</p>\n <div id=\"mapPlaces\" />\n </div>\n </StyledSearchMap>\n );\n }\n}\n\nexport default withTranslation()(SearchMap);\n","import { connect } from 'react-redux';\nimport SearchMap from './SearchMap';\n\nconst mapStateToProps = ({ global, searchCars }) => ({\n listPlaces: global.listPlaces,\n params: searchCars.params,\n});\n\nexport default connect(mapStateToProps, null)(SearchMap);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n fill: \"current\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M14.0909 2.08347C14.0909 3.23413 13.1581 4.16693 12.0075 4.16693C10.8568 4.16693 9.924 3.23413 9.924 2.08347C9.924 0.9328 10.8568 0 12.0075 0C13.1581 0 14.0909 0.9328 14.0909 2.08347ZM9.59387 4.72217H14.4211C15.8539 4.72217 17.0147 5.88323 17.0144 7.31577V13.8462C17.0144 14.3296 16.6227 14.7216 16.1389 14.7216C15.6557 14.7216 15.264 14.3296 15.264 13.8462V7.40563C15.264 7.23843 15.128 7.1027 14.9603 7.1027C14.7931 7.1027 14.6576 7.23843 14.6576 7.40563V14.3747V21.8664C14.6576 22.4926 14.1499 23 13.5237 23C12.8976 23 12.3904 22.4926 12.3904 21.8664V14.3611C12.3904 14.1494 12.2189 13.9776 12.0072 13.9776C11.7957 13.9776 11.6243 14.1494 11.6243 14.3611V21.8664C11.6243 22.4926 11.1171 23 10.4907 23C9.8648 23 9.35733 22.4926 9.35733 21.8664L9.35707 14.3747V7.40563C9.35707 7.23843 9.22187 7.1027 9.05413 7.1027C8.8864 7.1027 8.7512 7.23843 8.7512 7.40563V13.8464C8.7512 14.3299 8.35893 14.7219 7.87573 14.7219C7.39227 14.7219 7 14.3299 7 13.8464V7.31603C7 5.88323 8.16107 4.72217 9.59387 4.72217Z\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/person.4f2fde9d.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M15.5981 4.27842V6.05549H17.0599V20.8685H6.91567V6.05549H8.39941V4.27842C8.39941 3.57199 8.97384 3 9.67783 3H14.3197C15.0262 3 15.5981 3.57443 15.5981 4.27842ZM9.68027 3.97776C9.51405 3.97776 9.37961 4.1122 9.37961 4.27842V6.05549H14.6228V4.27842C14.6228 4.1122 14.4884 3.97776 14.3222 3.97776H9.68027ZM5.94525 6.04583V20.8686H3.51797C2.67954 20.8686 2 20.1866 2 19.3506V7.5638C2 6.72537 2.68198 6.04583 3.51797 6.04583H5.94525ZM22 7.5638V19.3506C22 20.1891 21.318 20.8686 20.482 20.8686H18.0548V6.04339H20.482C21.3205 6.04339 22 6.72537 22 7.5638Z\",\n fill: \"current\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/luggage-lg.8fcb3df3.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M22 7.6V11.8667H2V7.6C2 7.06667 2.2 6.63333 2.63333 6.26667C2.96666 5.96667 3.36666 5.83333 3.8 5.83333H7.7V4.13334C7.7 3.83334 7.8 3.5 8.03334 3.3C8.23334 3.1 8.5 3 8.76666 3H15.1C15.4 3 15.7333 3.09999 15.9333 3.33333C16.1333 3.53333 16.2333 3.8 16.2333 4.06667V5.86666H20.1667C20.6667 5.86666 21.0667 6.03333 21.4333 6.4C21.8 6.7 22 7.13333 22 7.6ZM22 12.9667V18.3333C22 18.8333 21.8333 19.2333 21.4667 19.6C21.1333 19.9333 20.7 20.1333 20.2 20.1333H3.8C3.3 20.1333 2.9 19.9667 2.53334 19.6C2.2 19.2667 2 18.8333 2 18.3333V12.9667H9.5V14.7667C9.5 14.9667 9.56667 15.1333 9.7 15.2667C9.83334 15.4 10 15.4667 10.2 15.4667H13.7667C13.9667 15.4667 14.1333 15.4 14.2667 15.2667C14.4 15.1333 14.4667 14.9667 14.4667 14.7667V12.9667H22ZM9.13333 5.83333H14.8333V5.33333C14.8333 4.83333 14.4333 4.4 13.9 4.4H10.0333C9.53334 4.4 9.1 4.79999 9.1 5.33333L9.13333 5.83333ZM13.4333 12.9667V14.4H10.5667V12.9667H13.4333Z\",\n fill: \"current\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/luggage-xs.2a5b5986.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8 4H16C18.2091 4 20 5.79086 20 8V16C20 18.2091 18.2091 20 16 20H8C5.79086 20 4 18.2091 4 16V8C4 5.79086 5.79086 4 8 4ZM2 8C2 4.68629 4.68629 2 8 2H16C19.3137 2 22 4.68629 22 8V16C22 19.3137 19.3137 22 16 22H8C4.68629 22 2 19.3137 2 16V8ZM16.2857 7C15.8571 7 15.5714 7.28571 15.5714 7.71429V10.2857C15.5714 10.838 15.1237 11.2857 14.5714 11.2857H12.7143V7.71429C12.7143 7.28571 12.4286 7 12 7C11.5714 7 11.2857 7.28571 11.2857 7.71429V11.2857H8.42857V7.71429C8.42857 7.28571 8.14286 7 7.71429 7C7.28571 7 7 7.28571 7 7.71429V16.2857C7 16.7143 7.28571 17 7.71429 17C8.14286 17 8.42857 16.7143 8.42857 16.2857V12.7143H11.2857V16.2857C11.2857 16.7143 11.5714 17 12 17C12.4286 17 12.7143 16.7143 12.7143 16.2857V12.7143H14.8C16.015 12.7143 17 11.7295 17 10.5145V7.71429C17 7.28571 16.7143 7 16.2857 7ZM17 16.3332C17 16.7014 16.7015 16.9999 16.3333 16.9999C15.9651 16.9999 15.6667 16.7014 15.6667 16.3332C15.6667 15.965 15.9651 15.6665 16.3333 15.6665C16.7015 15.6665 17 15.965 17 16.3332Z\",\n fill: \"current\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/caja.6129b56a.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M3.10855 16.9998C3.21487 17.1839 3.38989 17.3182 3.59519 17.3733C3.80048 17.4284 4.01926 17.3998 4.20346 17.2937L5.65579 16.4554V18.132C5.65579 18.3447 5.7403 18.5488 5.89073 18.6992C6.04117 18.8496 6.2452 18.9341 6.45792 18.9341C6.67066 18.9341 6.87469 18.8496 7.02512 18.6992C7.17555 18.5488 7.26005 18.3447 7.26005 18.132V15.5289L9.11361 14.459L10.9667 15.5287V17.6687L8.71223 18.97C8.52796 19.0764 8.39349 19.2516 8.3384 19.4571C8.28331 19.6626 8.31212 19.8816 8.41849 20.0659C8.52487 20.2502 8.70008 20.3847 8.90559 20.4397C9.11111 20.4949 9.33009 20.466 9.51436 20.3596L10.9667 19.5214V21.1979C10.9667 21.4106 11.0512 21.6147 11.2016 21.7651C11.3521 21.9155 11.5561 22 11.7688 22C11.9816 22 12.1856 21.9155 12.336 21.7651C12.4865 21.6147 12.571 21.4106 12.571 21.1979V19.5211L14.0233 20.3596C14.1145 20.4123 14.2153 20.4464 14.3197 20.4602C14.4242 20.474 14.5303 20.467 14.6321 20.4397C14.7338 20.4124 14.8292 20.3654 14.9128 20.3012C14.9964 20.2371 15.0665 20.1572 15.1192 20.0659C15.1718 19.9746 15.206 19.8739 15.2198 19.7694C15.2335 19.665 15.2265 19.559 15.1993 19.4571C15.172 19.3554 15.1249 19.2599 15.0608 19.1763C14.9966 19.0928 14.9167 19.0227 14.8254 18.97L12.571 17.669V15.5287L14.4242 14.459L16.2778 15.5289V18.132C16.2778 18.3447 16.3623 18.5488 16.5127 18.6992C16.6631 18.8496 16.8672 18.9341 17.0799 18.9341C17.2926 18.9341 17.4967 18.8496 17.6471 18.6992C17.7975 18.5488 17.882 18.3447 17.882 18.132V16.4554L19.3344 17.2937C19.4255 17.3464 19.5263 17.3806 19.6307 17.3943C19.7352 17.4081 19.8414 17.4011 19.9431 17.3738C20.045 17.3466 20.1402 17.2995 20.2238 17.2354C20.3074 17.1712 20.3775 17.0912 20.4303 17C20.4829 16.9087 20.5171 16.808 20.5309 16.7036C20.5445 16.5991 20.5376 16.493 20.5103 16.3912C20.4831 16.2895 20.4361 16.1941 20.3719 16.1105C20.3077 16.0269 20.2277 15.9568 20.1366 15.9041L18.6846 15.0659L20.1366 14.2278C20.2277 14.1752 20.3077 14.105 20.3719 14.0215C20.4361 13.9379 20.4831 13.8425 20.5103 13.7407C20.5376 13.639 20.5445 13.5328 20.5309 13.4284C20.5171 13.3239 20.4829 13.2232 20.4303 13.132C20.3775 13.0407 20.3074 12.9607 20.2238 12.8966C20.1402 12.8325 20.045 12.7854 19.9431 12.7581C19.8414 12.7309 19.7352 12.7239 19.6307 12.7376C19.5263 12.7514 19.4255 12.7856 19.3344 12.8382L17.0797 14.1398L15.2266 13.0694V10.9303L17.0797 9.86088L19.3344 11.1624C19.4255 11.2151 19.5263 11.2493 19.6307 11.263C19.7352 11.2768 19.8414 11.2698 19.9431 11.2425C20.045 11.2152 20.1402 11.1682 20.2238 11.104C20.3074 11.0399 20.3775 10.9599 20.4303 10.8687C20.4829 10.7774 20.5171 10.6767 20.5309 10.5723C20.5445 10.4678 20.5376 10.3617 20.5103 10.2599C20.4831 10.1581 20.4361 10.0628 20.3719 9.97918C20.3077 9.89559 20.2277 9.82547 20.1366 9.7728L18.6846 8.93474L20.1366 8.09651C20.3207 7.99015 20.4552 7.81493 20.5103 7.60941C20.5654 7.4039 20.5367 7.18492 20.4303 7.00064C20.3239 6.81636 20.1486 6.68189 19.9431 6.62682C19.7376 6.57173 19.5186 6.60054 19.3344 6.7069L17.882 7.54529V5.86803C17.882 5.65529 17.7975 5.45126 17.6471 5.30085C17.4967 5.15042 17.2926 5.0659 17.0799 5.0659C16.8672 5.0659 16.6631 5.15042 16.5127 5.30085C16.3623 5.45126 16.2778 5.65529 16.2778 5.86803V8.47111L14.4242 9.54099L12.5711 8.47127V6.3315L14.8256 5.03013C14.9168 4.97746 14.9968 4.90734 15.0609 4.82376C15.1251 4.74017 15.1722 4.64478 15.1994 4.54303C15.2267 4.44127 15.2337 4.33513 15.2199 4.23068C15.2062 4.12622 15.172 4.02551 15.1193 3.93426C15.0667 3.84301 14.9965 3.76303 14.913 3.6989C14.8294 3.63476 14.734 3.5877 14.6322 3.56042C14.5305 3.53315 14.4243 3.52618 14.3199 3.53993C14.2154 3.55367 14.1147 3.58785 14.0235 3.64052L12.5711 4.47874V2.80213C12.5711 2.58939 12.4866 2.38537 12.3362 2.23494C12.1858 2.08451 11.9817 2 11.769 2C11.5563 2 11.3522 2.08451 11.2018 2.23494C11.0514 2.38537 10.9669 2.58939 10.9669 2.80213V4.4789L9.51452 3.64036C9.33025 3.53399 9.11127 3.50518 8.90575 3.56026C8.70024 3.61535 8.52503 3.74982 8.41865 3.9341C8.31229 4.11838 8.28347 4.33736 8.33856 4.54287C8.39365 4.74839 8.52812 4.92361 8.71239 5.02997L10.9669 6.3315V8.47127L9.11377 9.54099L7.26021 8.47111V5.86803C7.26021 5.65529 7.17571 5.45126 7.02528 5.30085C6.87485 5.15042 6.67082 5.0659 6.45808 5.0659C6.24536 5.0659 6.04133 5.15042 5.89089 5.30085C5.74046 5.45126 5.65595 5.65529 5.65595 5.86803V7.54465L4.20346 6.70626C4.11219 6.65359 4.01145 6.61942 3.90698 6.60567C3.8025 6.59194 3.69635 6.59892 3.59457 6.62621C3.4928 6.65351 3.39739 6.70058 3.31381 6.76474C3.23022 6.82891 3.1601 6.90889 3.10743 7.00016C3.00106 7.18447 2.97226 7.4035 3.02738 7.60904C3.0825 7.8146 3.21701 7.98983 3.40133 8.09619L4.85318 8.93442L3.40133 9.77216C3.21705 9.87853 3.08258 10.0537 3.0275 10.2593C2.97241 10.4648 3.00122 10.6838 3.10759 10.868C3.21396 11.0523 3.38917 11.1868 3.59469 11.2419C3.8002 11.2969 4.01918 11.2681 4.20346 11.1618L6.45824 9.86088L8.31132 10.9309V13.0694L6.45824 14.1394L4.20346 12.8382C4.01918 12.7319 3.8002 12.7031 3.59469 12.7581C3.38917 12.8132 3.21396 12.9477 3.10759 13.132C3.00122 13.3162 2.97241 13.5352 3.0275 13.7407C3.08258 13.9463 3.21705 14.1215 3.40133 14.2278L4.85318 15.0659L3.40133 15.9041C3.31006 15.9568 3.23008 16.0269 3.16595 16.1105C3.10183 16.1941 3.05482 16.2895 3.02763 16.3912C3.00043 16.493 2.99358 16.5992 3.00746 16.7036C3.02135 16.808 3.0557 16.9087 3.10855 16.9998ZM9.91558 10.93L11.769 9.85992L13.6224 10.93V13.0694L11.769 14.1394L9.91558 13.0694V10.93Z\",\n fill: \"current\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/airconditioner.165c3347.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M17.9305 22.5876C17.7438 22.5882 17.5619 22.5278 17.4126 22.4156C17.2633 22.3035 17.1547 22.1456 17.1033 21.9661C17.0519 21.7866 17.0604 21.5952 17.1277 21.421C17.195 21.2468 17.3172 21.0993 17.476 21.0009C18.9483 20.074 20.1615 18.789 21.0024 17.2659C21.8433 15.7428 22.2843 14.0315 22.2843 12.2917C22.2843 10.5519 21.8433 8.84053 21.0024 7.31747C20.1615 5.7944 18.9483 4.50937 17.476 3.58244C17.2838 3.46075 17.1478 3.26769 17.0979 3.04574C17.0481 2.82378 17.0884 2.59111 17.2101 2.39891C17.3318 2.20671 17.5249 2.07072 17.7468 2.02086C17.9688 1.971 18.2014 2.01135 18.3936 2.13304C20.1104 3.21467 21.525 4.71372 22.5054 6.49019C23.4858 8.26667 24 10.2626 24 12.2917C24 14.3207 23.4858 16.3167 22.5054 18.0932C21.525 19.8697 20.1104 21.3687 18.3936 22.4503C18.2556 22.5395 18.0948 22.5871 17.9305 22.5876Z\",\n fill: \"current\"\n});\n\nvar _ref2 =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M6.0609 22.5877C5.90033 22.5882 5.74284 22.5436 5.60636 22.459C3.88963 21.3774 2.47502 19.8783 1.49461 18.1019C0.514211 16.3254 0 14.3294 0 12.3004C0 10.2713 0.514211 8.27536 1.49461 6.49888C2.47502 4.7224 3.88963 3.22336 5.60636 2.14173C5.79783 2.03987 6.02079 2.01434 6.23033 2.07027C6.43988 2.12621 6.62045 2.25946 6.73569 2.44319C6.85093 2.62692 6.89228 2.84749 6.85141 3.06049C6.81055 3.27349 6.6905 3.46309 6.51545 3.59113C5.04316 4.51805 3.82989 5.80309 2.98901 7.32616C2.14813 8.84922 1.70708 10.5606 1.70708 12.3004C1.70708 14.0401 2.14813 15.7515 2.98901 17.2746C3.82989 18.7977 5.04316 20.0827 6.51545 21.0096C6.67021 21.1096 6.78868 21.2567 6.85332 21.4292C6.91796 21.6017 6.92533 21.7905 6.87434 21.9675C6.82334 22.1445 6.7167 22.3004 6.5702 22.4121C6.42369 22.5238 6.24512 22.5854 6.0609 22.5877Z\",\n fill: \"current\"\n});\n\nvar _ref3 =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M11.9957 20.8724C10.2995 20.8724 8.64133 20.3694 7.23096 19.427C5.82059 18.4846 4.72135 17.1452 4.07222 15.5781C3.4231 14.0109 3.25326 12.2865 3.58418 10.6229C3.9151 8.95925 4.73192 7.43109 5.93134 6.23167C7.13075 5.03226 8.65891 4.21544 10.3225 3.88452C11.9862 3.5536 13.7106 3.72344 15.2777 4.37256C16.8448 5.02168 18.1843 6.12093 19.1266 7.5313C20.069 8.94167 20.572 10.5998 20.572 12.296C20.572 14.5706 19.6684 16.752 18.0601 18.3604C16.4517 19.9688 14.2703 20.8724 11.9957 20.8724ZM11.9957 5.43499C10.6387 5.43499 9.3122 5.83739 8.18391 6.59129C7.05562 7.34519 6.17622 8.41674 5.65692 9.67043C5.13762 10.9241 5.00175 12.3037 5.26649 13.6346C5.53122 14.9655 6.18467 16.188 7.14421 17.1475C8.10374 18.1071 9.32627 18.7605 10.6572 19.0253C11.9881 19.29 13.3676 19.1541 14.6213 18.6348C15.875 18.1155 16.9466 17.2361 17.7005 16.1078C18.4544 14.9795 18.8568 13.653 18.8568 12.296C18.8568 10.4764 18.1339 8.73124 16.8472 7.44455C15.5605 6.15785 13.8154 5.43499 11.9957 5.43499Z\",\n fill: \"current\"\n});\n\nvar _ref4 =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M6.0609 22.5877C5.90033 22.5882 5.74284 22.5436 5.60636 22.459C3.88963 21.3774 2.47502 19.8783 1.49461 18.1019C0.514211 16.3254 0 14.3294 0 12.3004C0 10.2713 0.514211 8.27536 1.49461 6.49888C2.47502 4.7224 3.88963 3.22336 5.60636 2.14173C5.79783 2.03987 6.02079 2.01434 6.23033 2.07027C6.43988 2.12621 6.62045 2.25946 6.73569 2.44319C6.85093 2.62692 6.89228 2.84749 6.85141 3.06049C6.81055 3.27349 6.6905 3.46309 6.51545 3.59113C5.04316 4.51805 3.82989 5.80309 2.98901 7.32616C2.14813 8.84922 1.70708 10.5606 1.70708 12.3004C1.70708 14.0401 2.14813 15.7515 2.98901 17.2746C3.82989 18.7977 5.04316 20.0827 6.51545 21.0096C6.67021 21.1096 6.78868 21.2567 6.85332 21.4292C6.91796 21.6017 6.92533 21.7905 6.87434 21.9675C6.82334 22.1445 6.7167 22.3004 6.5702 22.4121C6.42369 22.5238 6.24512 22.5854 6.0609 22.5877Z\",\n fill: \"current\"\n});\n\nvar _ref5 =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M17.9305 22.5876C17.7438 22.5882 17.5619 22.5278 17.4126 22.4156C17.2633 22.3035 17.1547 22.1456 17.1033 21.9661C17.0519 21.7866 17.0604 21.5952 17.1277 21.421C17.195 21.2468 17.3172 21.0993 17.476 21.0009C18.9483 20.074 20.1615 18.789 21.0024 17.2659C21.8433 15.7428 22.2843 14.0315 22.2843 12.2917C22.2843 10.5519 21.8433 8.84053 21.0024 7.31747C20.1615 5.7944 18.9483 4.50937 17.476 3.58244C17.2838 3.46075 17.1478 3.26769 17.0979 3.04574C17.0481 2.82378 17.0884 2.59111 17.2101 2.39891C17.3318 2.20671 17.5249 2.07072 17.7468 2.02086C17.9688 1.971 18.2014 2.01135 18.3936 2.13304C20.1104 3.21467 21.525 4.71372 22.5054 6.49019C23.4858 8.26667 24 10.2626 24 12.2917C24 14.3207 23.4858 16.3167 22.5054 18.0932C21.525 19.8697 20.1104 21.3687 18.3936 22.4503C18.2556 22.5395 18.0948 22.5871 17.9305 22.5876Z\",\n fill: \"current\"\n});\n\nvar _ref6 =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M10.3491 14.4486H9.16553L8.97686 13.591H7.75902L7.56176 14.4486H6.39539L7.70756 9.41431H8.98543L10.3491 14.4486ZM8.75387 12.7333C8.58235 11.9872 8.4537 11.2754 8.36794 10.5978C8.2736 11.2925 8.15353 12.0044 7.99058 12.7333H8.75387Z\",\n fill: \"current\"\n});\n\nvar _ref7 =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M10.9237 9.4143H12.0815C12.599 9.36695 13.1164 9.50694 13.5395 9.80881C13.6839 9.93411 13.7988 10.0898 13.8759 10.2648C13.953 10.4398 13.9904 10.6297 13.9854 10.8208C13.9827 11.0404 13.9207 11.2551 13.806 11.4423C13.6913 11.6295 13.528 11.7822 13.3336 11.8843C13.5615 11.9614 13.7574 12.1117 13.8908 12.3118C14.0242 12.512 14.0877 12.7507 14.0712 12.9906C14.074 13.1835 14.0348 13.3747 13.9563 13.551C13.8778 13.7272 13.7619 13.8843 13.6166 14.0112C13.2812 14.2907 12.8518 14.4318 12.416 14.4057H10.9237V9.4143ZM12.0643 10.3834V11.4383C12.5732 11.4383 12.8276 11.2611 12.8276 10.9066C12.8372 10.8256 12.8257 10.7436 12.7941 10.6684C12.7625 10.5933 12.712 10.5276 12.6475 10.4778C12.4648 10.3956 12.2636 10.3631 12.0643 10.3834V10.3834ZM12.0643 12.3817V13.4709C12.2896 13.4801 12.5137 13.4329 12.7161 13.3337C12.7862 13.2913 12.8433 13.2305 12.8811 13.1579C12.9189 13.0853 12.936 13.0037 12.9305 12.922C12.9305 12.5618 12.6732 12.3817 12.1587 12.3817H12.0643Z\",\n fill: \"current\"\n});\n\nvar _ref8 =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M14.8602 14.3542V13.1535C15.1314 13.3348 15.4442 13.444 15.7693 13.4709C15.8316 13.475 15.8941 13.4665 15.9531 13.4459C16.012 13.4252 16.0662 13.3929 16.1123 13.3508C16.1537 13.3095 16.1859 13.2598 16.2066 13.2051C16.2273 13.1503 16.2361 13.0918 16.2324 13.0335C16.2306 12.9303 16.1944 12.8307 16.1295 12.7504C16.0284 12.6312 15.9132 12.5247 15.7864 12.4331C15.4577 12.1936 15.1683 11.9042 14.9288 11.5755C14.7557 11.323 14.6631 11.024 14.6629 10.7179C14.6531 10.5215 14.6845 10.3253 14.7552 10.1419C14.8258 9.95849 14.9341 9.79192 15.0731 9.65293C15.2121 9.51394 15.3787 9.40562 15.5621 9.33497C15.7456 9.26432 15.9418 9.23289 16.1381 9.24273C16.469 9.24417 16.7961 9.31426 17.0986 9.44856V10.5806C16.8403 10.4173 16.5458 10.3201 16.241 10.2976C16.1207 10.2903 16.0019 10.3268 15.9065 10.4005C15.8664 10.4355 15.8347 10.4792 15.8139 10.5282C15.7931 10.5773 15.7837 10.6304 15.7864 10.6835C15.7864 10.8951 15.9751 11.1324 16.3525 11.3954C16.6108 11.5825 16.8417 11.8048 17.0386 12.0558C17.2685 12.3294 17.3931 12.6761 17.3902 13.0335C17.3955 13.2355 17.3577 13.4364 17.2793 13.6227C17.201 13.809 17.0838 13.9765 16.9357 14.1141C16.6214 14.4042 16.2053 14.5583 15.7779 14.5429C15.4619 14.5473 15.1488 14.4829 14.8602 14.3542V14.3542Z\",\n fill: \"current\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\"\n }, props), _ref, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/abs.aed8311c.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M12 2C6.475 2 2 6.475 2 12C2 17.525 6.475 22 12 22C17.525 22 22 17.525 22 12C22 6.475 17.525 2 12 2ZM6.1 6.1C8.025 4.175 10.75 3.3 13.525 3.8C14.625 4 15.65 4.4 16.575 5.025C17.65 5.75 18.525 6.675 19.15 7.725C19.35 8.075 19.225 8.55 18.85 8.725L18.5 8.875C16.85 9.65 14.95 9.65 13.3 8.925C12.9 8.75 12.45 8.65 12 8.65C11.55 8.65 11.1 8.75 10.7 8.925C9.025 9.65 7.15 9.65 5.5 8.875L5.15 8.725C4.775 8.55 4.625 8.1 4.85 7.75C5.2 7.15 5.625 6.6 6.1 6.1ZM12.075 13.675C11.075 13.725 10.275 12.925 10.325 11.925C10.375 11.075 11.05 10.4 11.9 10.35C12.9 10.3 13.7 11.1 13.65 12.1C13.625 12.925 12.925 13.625 12.075 13.675ZM3.675 12C3.675 11.525 4.1 11.2 4.55 11.325L5.9 11.675C7.275 12.05 8.5 12.85 9.35 13.975C9.375 14 9.375 14.025 9.4 14.05C10.425 15.35 10.925 16.975 10.8 18.625L10.725 19.45C10.7 19.875 10.275 20.175 9.85 20.05C8.45 19.675 7.175 18.95 6.125 17.9C4.525 16.325 3.675 14.225 3.675 12ZM17.9 17.9C16.85 18.95 15.575 19.675 14.175 20.05C13.75 20.15 13.35 19.875 13.3 19.45L13.225 18.625C13.075 16.975 13.6 15.35 14.625 14.05C14.65 14.025 14.65 14 14.675 13.975C15.525 12.85 16.75 12.05 18.125 11.675L19.475 11.325C19.925 11.2 20.35 11.525 20.35 12C20.325 14.225 19.475 16.325 17.9 17.9Z\",\n fill: \"current\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/direction.bd17b081.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.04326 19.5274C6.95552 19.5274 6.95565 16.6569 8.04326 16.6569H15.067C15.8738 16.6569 16.1767 16.0384 16.3637 15.3396L19.1969 5.84616C19.4768 4.80009 21.6633 5.21764 21.38 6.28006L18.5372 17.0251C18.156 18.4738 16.6723 19.5274 15.1021 19.5274H8.04326V19.5274ZM13.1229 13.5559L12.9959 14.0299H8.50249C7.85077 14.0299 7.29242 13.6283 7.06162 13.0589H5.99387C5.3315 13.0589 4.78461 13.5535 4.7023 14.1935L3.03368 21.6645C2.68043 23.024 5.21453 23.5697 5.56722 22.2244L6.90686 16.177C6.92261 16.0467 7.00012 15.9915 7.11931 15.9876H13.5813C14.6248 15.9876 15.5224 15.4562 15.8236 14.4168L17.391 9.00097C17.7235 7.85381 17.0629 6.65412 15.9156 6.32154C14.9188 6.03251 13.6399 6.35866 13.3184 7.48235L12.2649 11.1619C12.2316 11.3155 12.1319 11.3868 11.9759 11.3905H8.50249C7.90317 11.3905 7.4171 11.8765 7.4171 12.4757C7.4171 13.0751 7.9032 13.561 8.50249 13.561L13.1229 13.5559ZM15.9267 1C14.6158 1 13.553 2.063 13.553 3.37392C13.553 4.68498 14.6158 5.74774 15.9267 5.74774C17.2377 5.74774 18.3006 4.68498 18.3006 3.37392C18.3006 2.063 17.2377 1 15.9267 1ZM7.59243 1.29068C5.14976 1.29068 3.16956 3.27085 3.16956 5.71355C3.16956 8.15612 5.14973 10.1364 7.59243 10.1364C10.0351 10.1364 12.0153 8.15612 12.0153 5.71355C12.0153 3.27085 10.0351 1.29068 7.59243 1.29068Z\",\n fill: \"current\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/airbug.848b5d89.svg\";\nexport { SvgComponent as ReactComponent };","import React from 'react';\nimport { TranslatedComponent, Paragraph } from 'components';\nimport { withTranslation } from 'react-i18next';\nimport style from 'styled-components';\n\nimport { ReactComponent as PersonLogo } from './../../../assets/images/cars/details/person.svg';\nimport { ReactComponent as LuggaggeLgLogo } from './../../../assets/images/cars/details/luggage-lg.svg';\nimport { ReactComponent as LuggaggeXsLogo } from './../../../assets/images/cars/details/luggage-xs.svg';\nimport { ReactComponent as GearBoxLogo } from './../../../assets/images/cars/details/caja.svg';\nimport { ReactComponent as AirConditionerLogo } from './../../../assets/images/cars/details/airconditioner.svg';\nimport { ReactComponent as AbsLogo } from './../../../assets/images/cars/details/abs.svg';\nimport { ReactComponent as DirectionLogo } from './../../../assets/images/cars/details/direction.svg';\nimport { ReactComponent as AirbugLogo } from './../../../assets/images/cars/details/airbug.svg';\n\nconst StyledDetail = style.div`\n .logo {\n fill: ${props => props.theme.colors.icons || props.theme.font.primary};\n border: 1px solid ${props => props.theme.font.primary || 'black'};\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 5px;\n width: 100%;\n max-width: 40px;\n height: 100%;\n }\n`;\n\nclass DefaultModelDetail extends TranslatedComponent {\n render() {\n const {\n model,\n t,\n prefixForNumeric,\n sanatizeDetailText,\n HideCarDetailIcons,\n showModelDetail,\n } = this.props;\n\n return showModelDetail ? (\n <StyledDetail className=\"details\">\n {HideCarDetailIcons && HideCarDetailIcons.passengers === true ? null : (\n <div className=\"details-item\">\n <i data-toggle=\"tooltip\" title={`${t('carDetails.passengers')} - ${model.passengers}`}>\n <PersonLogo className=\"logo\" alt={`X${model.passengers}`} />\n </i>\n <Paragraph text={`${prefixForNumeric || ''}${model.passengers}`} nonTranslate />\n </div>\n )}\n\n {HideCarDetailIcons && HideCarDetailIcons.bigLuggage === true ? null : (\n <div className=\"details-item\">\n <i data-toggle=\"tooltip\" title={`${t('carDetails.bigLuggage')} - ${model.bigLuggage}`}>\n <LuggaggeLgLogo className=\"logo\" alt={`X${model.bigLuggage}`} />\n </i>\n <Paragraph text={`${prefixForNumeric || ''}${model.bigLuggage}`} nonTranslate />\n </div>\n )}\n\n {HideCarDetailIcons && HideCarDetailIcons.smallLuggage === true ? null : (\n <div className=\"details-item\">\n <i\n data-toggle=\"tooltip\"\n title={`${t('carDetails.smallLuggage')} - ${model.smallLuggage}`}\n >\n <LuggaggeXsLogo className=\"logo\" alt={`X${model.smallLuggage}`} />\n </i>\n <Paragraph text={`${prefixForNumeric || ''}${model.smallLuggage}`} nonTranslate />\n </div>\n )}\n\n {HideCarDetailIcons && HideCarDetailIcons.gearbox === true\n ? null\n : model.gearbox != null &&\n model.gearbox !== undefined && (\n <div className=\"details-item\">\n <i data-toggle=\"tooltip\" title={`${t('carDetails.gearbox')} - ${model.gearbox}`}>\n <GearBoxLogo className=\"logo\" alt={`X${model.gearbox}`} />\n </i>\n <Paragraph text={sanatizeDetailText(model.gearbox)} nonTranslate />\n </div>\n )}\n\n {HideCarDetailIcons && HideCarDetailIcons.airConditioner === true\n ? null\n : model.airConditioner != null &&\n model.airConditioner !== undefined && (\n <div className=\"details-item\">\n <i\n data-toggle=\"tooltip\"\n title={`${t('carDetails.airConditioner')} - ${model.airConditioner}`}\n >\n <AirConditionerLogo className=\"logo\" alt={`X${model.airConditioner}`} />\n </i>\n <Paragraph text={sanatizeDetailText(model.airConditioner)} nonTranslate />\n </div>\n )}\n {HideCarDetailIcons && HideCarDetailIcons.abs === true ? null : (\n <div className=\"details-item\">\n <i data-toggle=\"tooltip\" title={`${t('carDetails.abs')}`}>\n <AbsLogo className=\"logo\" alt={t('Si')} />\n </i>\n <Paragraph text=\"Si\" />\n </div>\n )}\n\n {HideCarDetailIcons && HideCarDetailIcons.steering === true\n ? null\n : model.steering != null &&\n model.steering !== undefined && (\n <div className=\"details-item\">\n <i data-toggle=\"tooltip\" title={`${t('carDetails.steering')}`}>\n <DirectionLogo className=\"logo\" alt={model.steering} />\n </i>\n <Paragraph text={sanatizeDetailText(model.steering)} nonTranslate />\n </div>\n )}\n\n {HideCarDetailIcons && HideCarDetailIcons.airBag === true ? null : (\n <div className=\"details-item\">\n <>\n <i data-toggle=\"tooltip\" title={`${t('carDetails.airBag')}`}>\n <AirbugLogo className=\"logo\" alt={t('Si')} />\n </i>\n <Paragraph text=\"Si\" />\n </>\n </div>\n )}\n </StyledDetail>\n ) : null;\n }\n}\n\nexport default withTranslation()(DefaultModelDetail);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M12 11.9751C10.9 11.9751 10 11.6251 9.3 10.9251C8.6 10.2251 8.25 9.3251 8.25 8.2251C8.25 7.1251 8.6 6.2251 9.3 5.5251C10 4.8251 10.9 4.4751 12 4.4751C13.1 4.4751 14 4.8251 14.7 5.5251C15.4 6.2251 15.75 7.1251 15.75 8.2251C15.75 9.3251 15.4 10.2251 14.7 10.9251C14 11.6251 13.1 11.9751 12 11.9751ZM4 20.0001V17.6501C4 17.0168 4.15833 16.4751 4.475 16.0251C4.79167 15.5751 5.2 15.2334 5.7 15.0001C6.81667 14.5001 7.8875 14.1251 8.9125 13.8751C9.9375 13.6251 10.9667 13.5001 12 13.5001C13.0333 13.5001 14.0583 13.6293 15.075 13.8876C16.0917 14.1459 17.1583 14.5168 18.275 15.0001C18.7917 15.2334 19.2083 15.5751 19.525 16.0251C19.8417 16.4751 20 17.0168 20 17.6501V20.0001H4ZM5.5 18.5001H18.5V17.6501C18.5 17.3834 18.4208 17.1293 18.2625 16.8876C18.1042 16.6459 17.9083 16.4668 17.675 16.3501C16.6083 15.8334 15.6333 15.4793 14.75 15.2876C13.8667 15.0959 12.95 15.0001 12 15.0001C11.05 15.0001 10.125 15.0959 9.225 15.2876C8.325 15.4793 7.35 15.8334 6.3 16.3501C6.06667 16.4668 5.875 16.6459 5.725 16.8876C5.575 17.1293 5.5 17.3834 5.5 17.6501V18.5001ZM12 10.4751C12.65 10.4751 13.1875 10.2626 13.6125 9.8376C14.0375 9.4126 14.25 8.8751 14.25 8.2251C14.25 7.5751 14.0375 7.0376 13.6125 6.6126C13.1875 6.1876 12.65 5.9751 12 5.9751C11.35 5.9751 10.8125 6.1876 10.3875 6.6126C9.9625 7.0376 9.75 7.5751 9.75 8.2251C9.75 8.8751 9.9625 9.4126 10.3875 9.8376C10.8125 10.2626 11.35 10.4751 12 10.4751Z\",\n fill: \"black\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/person.fe886e8b.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M9 22C8.58333 22 8.22917 21.8542 7.9375 21.5625C7.64583 21.2708 7.5 20.9167 7.5 20.5V20C7.08333 20 6.72917 19.8542 6.4375 19.5625C6.14583 19.2708 6 18.9167 6 18.5V7.5C6 7.08333 6.14583 6.72917 6.4375 6.4375C6.72917 6.14583 7.08333 6 7.5 6H9V2.75C9 2.55 9.075 2.375 9.225 2.225C9.375 2.075 9.55 2 9.75 2H14.25C14.45 2 14.625 2.075 14.775 2.225C14.925 2.375 15 2.55 15 2.75V6H16.5C16.9167 6 17.2708 6.14583 17.5625 6.4375C17.8542 6.72917 18 7.08333 18 7.5V18.5C18 18.9167 17.8542 19.2708 17.5625 19.5625C17.2708 19.8542 16.9167 20 16.5 20V20.5C16.5 20.9167 16.3542 21.2708 16.0625 21.5625C15.7708 21.8542 15.4167 22 15 22C14.5833 22 14.2292 21.8542 13.9375 21.5625C13.6458 21.2708 13.5 20.9167 13.5 20.5V20H10.5V20.5C10.5 20.9167 10.3542 21.2708 10.0625 21.5625C9.77083 21.8542 9.41667 22 9 22ZM10.5 6H13.5V3.5H10.5V6ZM7.5 18.5H16.5V7.5H7.5V18.5Z\",\n fill: \"black\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/luggage-lg.f78d9378.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M8.25 5.775V3.5C8.25 3.1 8.4 2.75 8.7 2.45C9 2.15 9.35 2 9.75 2H14.25C14.65 2 15 2.15 15.3 2.45C15.6 2.75 15.75 3.1 15.75 3.5V5.775H20.5C20.9 5.775 21.25 5.925 21.55 6.225C21.85 6.525 22 6.875 22 7.275V19.5C22 19.9 21.85 20.25 21.55 20.55C21.25 20.85 20.9 21 20.5 21H3.5C3.1 21 2.75 20.85 2.45 20.55C2.15 20.25 2 19.9 2 19.5V7.275C2 6.875 2.15 6.525 2.45 6.225C2.75 5.925 3.1 5.775 3.5 5.775H8.25ZM9.75 5.775H14.25V3.5H9.75V5.775ZM20.5 14.725H14.275V16.225H9.775V14.725H3.5V19.5H20.5V14.725ZM11.275 14.725H12.775V13.225H11.275V14.725ZM3.5 13.225H9.775V11.725H14.275V13.225H20.5V7.275H3.5V13.225Z\",\n fill: \"black\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/luggage-xs.8632c016.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M3 21V16.5H6.85L11.25 12.1V8.375C10.6667 8.175 10.1875 7.8375 9.8125 7.3625C9.4375 6.8875 9.25 6.35 9.25 5.75C9.25 4.98333 9.52083 4.33333 10.0625 3.8C10.6042 3.26667 11.25 3 12 3C12.7667 3 13.4167 3.26667 13.95 3.8C14.4833 4.33333 14.75 4.98333 14.75 5.75C14.75 6.35 14.5625 6.8875 14.1875 7.3625C13.8125 7.8375 13.3333 8.175 12.75 8.375V12.1L17.15 16.5H21V21H16.5V18.1L12 13.6L7.5 18.1V21H3Z\",\n fill: \"black\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/caja.ebb04872.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref =\n/*#__PURE__*/\n\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M10.175 15.8749C10.5583 16.2582 11.1125 16.4374 11.8375 16.4124C12.5625 16.3874 13.0917 16.1166 13.425 15.5999L18.825 7.1249L10.45 12.5999C9.95 12.9332 9.68333 13.4666 9.65 14.1999C9.61667 14.9332 9.79167 15.4916 10.175 15.8749V15.8749ZM11.95 4.0249C12.9 4.0249 13.8917 4.17907 14.925 4.4874C15.9583 4.79574 16.95 5.3249 17.9 6.0749L16.6 6.9999C15.85 6.4999 15.0458 6.12907 14.1875 5.8874C13.3292 5.64574 12.5833 5.5249 11.95 5.5249C9.61667 5.5249 7.625 6.35824 5.975 8.0249C4.325 9.69157 3.5 11.7166 3.5 14.0999C3.5 14.8499 3.60417 15.6082 3.8125 16.3749C4.02083 17.1416 4.31667 17.8499 4.7 18.4999H19.175C19.5417 17.8999 19.8333 17.1999 20.05 16.3999C20.2667 15.5999 20.375 14.8166 20.375 14.0499C20.375 13.3499 20.2708 12.5957 20.0625 11.7874C19.8542 10.9791 19.4833 10.2332 18.95 9.5499L19.925 8.2499C20.5583 9.18324 21.0333 10.1207 21.35 11.0624C21.6667 12.0041 21.8417 12.9499 21.875 13.8999C21.9083 14.8999 21.8083 15.8416 21.575 16.7249C21.3417 17.6082 21 18.4249 20.55 19.1749C20.35 19.5582 20.1375 19.7916 19.9125 19.8749C19.6875 19.9582 19.4083 19.9999 19.075 19.9999H4.8C4.51667 19.9999 4.2375 19.9291 3.9625 19.7874C3.6875 19.6457 3.48333 19.4416 3.35 19.1749C2.91667 18.3749 2.58333 17.5624 2.35 16.7374C2.11667 15.9124 2 15.0332 2 14.0999C2 12.7166 2.2625 11.4124 2.7875 10.1874C3.3125 8.9624 4.025 7.89574 4.925 6.9874C5.825 6.07907 6.87917 5.35824 8.0875 4.8249C9.29583 4.29157 10.5833 4.0249 11.95 4.0249V4.0249Z\",\n fill: \"black\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n return (\n /*#__PURE__*/\n React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\"\n }, props), _ref)\n );\n};\n\nexport default __webpack_public_path__ + \"static/media/speed.8b3e61c6.svg\";\nexport { SvgComponent as ReactComponent };","import React from 'react';\nimport { TranslatedComponent, Paragraph } from 'components';\nimport { PropTypes } from 'prop-types';\nimport style, { css } from 'styled-components';\n\nimport { ReactComponent as PersonLogo } from './../../../assets/modern/images/cars/details/person.svg';\nimport { ReactComponent as LuggaggeLgLogo } from './../../../assets/modern/images/cars/details/luggage-lg.svg';\nimport { ReactComponent as LuggaggeXsLogo } from './../../../assets/modern/images/cars/details/luggage-xs.svg';\nimport { ReactComponent as GearBoxLogo } from './../../../assets/modern/images/cars/details/caja.svg';\nimport { ReactComponent as SpeedLogo } from './../../../assets/modern/images/cars/details/speed.svg';\nimport { withTranslation } from 'react-i18next';\n\nconst StyledDetail = style.div`\n\n .logo {\n fill: ${props => props.theme.colors.icons || props.theme.font.primary};\n padding: 5px;\n border-radius: 7px;\n margin-bottom: 0;\n width: 100%;\n max-width: 35px;\n height: 100%;\n }\n\n ${props =>\n props.fleetSection &&\n css`\n justify-content: center;\n margin-bottom: 5px;\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n flex-wrap: wrap;\n margin-bottom: 1.5rem !important;\n\n .details-item {\n display: flex !important;\n align-items: center;\n justify-content: flex-start;\n min-width: 20% !important;\n max-width: 100% !important;\n width: auto !important;\n\n p {\n font-size: 0.8rem !important;\n line-height: 1;\n }\n }\n `}\n\n`;\n\nclass ModernModelDetail extends TranslatedComponent {\n static propType = {\n model: PropTypes.shape({\n passengers: PropTypes.number,\n bigLuggage: PropTypes.number,\n smallLuggage: PropTypes.number,\n gearbox: PropTypes.string,\n airConditioner: PropTypes.string,\n steering: PropTypes.string,\n }),\n prefixForNumeric: PropTypes.string,\n ilimitedKm: PropTypes.bool,\n maxAllowedDistanceByDay: PropTypes.number,\n fleetSection: PropTypes.bool,\n showModelDetail: PropTypes.bool,\n };\n\n render() {\n const {\n model,\n prefixForNumeric,\n sanatizeDetailText,\n ilimitedKm,\n maxAllowedDistanceByDay,\n HideCarDetailIcons,\n t,\n fleetSection,\n showModelDetail,\n distanceUnit,\n } = this.props;\n\n const kmText =\n ilimitedKm === true\n ? t(distanceUnit == 'Kilometers' ? 'KmIlimitados' : 'MillasIlimitados')\n : t(distanceUnit == 'Kilometers' ? 'KmDiarios' : 'MillasDiarios', {\n km: maxAllowedDistanceByDay,\n });\n\n return showModelDetail ? (\n <StyledDetail className=\"details\" fleetSection={fleetSection}>\n {HideCarDetailIcons && HideCarDetailIcons.passengers === true ? null : (\n <div className=\"details-item\">\n <i data-toggle=\"tooltip\" title={`${t('carDetails.passengers')} - ${model.passengers}`}>\n <PersonLogo className=\"logo\" alt={`X${model.passengers}`} />\n </i>\n <Paragraph\n text={`${prefixForNumeric || ''}${model.passengers} ${t('personas')}`}\n nonTranslate\n />\n </div>\n )}\n {HideCarDetailIcons && HideCarDetailIcons.bigLuggage === true ? null : (\n <div className=\"details-item\">\n <i data-toggle=\"tooltip\" title={`${t('carDetails.bigLuggage')} - ${model.bigLuggage}`}>\n <LuggaggeLgLogo className=\"logo\" alt={`X${model.bigLuggage}`} />\n </i>\n <Paragraph\n text={`${prefixForNumeric || ''}${model.bigLuggage} ${t('ValijasGrandes')}`}\n nonTranslate\n />\n </div>\n )}\n {HideCarDetailIcons && HideCarDetailIcons.smallLuggage === true ? null : (\n <div className=\"details-item\">\n <i\n data-toggle=\"tooltip\"\n title={`${t('carDetails.smallLuggage')} - ${model.smallLuggage}`}\n >\n <LuggaggeXsLogo className=\"logo\" alt={`X${model.smallLuggage}`} />\n </i>\n <Paragraph\n text={`${prefixForNumeric || ''}${model.smallLuggage} ${t('ValijasChicas')}`}\n nonTranslate\n />\n </div>\n )}\n {HideCarDetailIcons && HideCarDetailIcons.gearbox === true ? null : (\n <div className=\"details-item\">\n <i data-toggle=\"tooltip\" title={`${t('carDetails.gearbox')} - ${model.gearbox}`}>\n <GearBoxLogo className=\"logo\" alt={`X${model.gearbox}`} />\n </i>\n <Paragraph text={sanatizeDetailText(model.gearbox)} nonTranslate />\n </div>\n )}\n {HideCarDetailIcons && HideCarDetailIcons.unlimitedKilometers === true ? null : (\n <div className=\"details-item\">\n <i data-toggle=\"tooltip\" title={kmText}>\n <SpeedLogo className=\"logo\" alt={kmText} />\n </i>\n <Paragraph text={kmText} nonTranslate />\n </div>\n )}\n </StyledDetail>\n ) : null;\n }\n}\n\nexport default withTranslation()(ModernModelDetail);\n","import React from 'react';\nimport { TranslatedComponent } from 'components';\nimport { PropTypes } from 'prop-types';\nimport { withTranslation } from 'react-i18next';\nimport withSettingsContext from 'SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\nimport DefaultModelDetail from './Default';\nimport ModernModelDetail from './Modern';\n\nexport class ModelDetail extends TranslatedComponent {\n constructor() {\n super();\n\n this.sanatizeDetailText = this.sanatizeDetailText.bind(this);\n }\n\n static propType = {\n model: PropTypes.shape({\n passengers: PropTypes.number,\n bigLuggage: PropTypes.number,\n smallLuggage: PropTypes.number,\n gearbox: PropTypes.string,\n airConditioner: PropTypes.string,\n steering: PropTypes.string,\n }),\n prefixForNumeric: PropTypes.string,\n showModelDetail: PropTypes.bool,\n };\n\n sanatizeDetailText(text) {\n if (text) return text.length > 3 ? text.substring(0, 3) + '.' : text;\n return '';\n }\n\n render() {\n const {\n model,\n prefixForNumeric,\n settings: { theme, featureFlags },\n maxAllowedDistanceByDay,\n ilimitedKm,\n fleetSection,\n showModelDetail,\n distanceUnit,\n } = this.props;\n\n return theme.template === MODERN_THEME ? (\n <ModernModelDetail\n model={model}\n prefixForNumeric={prefixForNumeric}\n maxAllowedDistanceByDay={maxAllowedDistanceByDay}\n ilimitedKm={ilimitedKm}\n sanatizeDetailText={this.sanatizeDetailText}\n HideCarDetailIcons={featureFlags && featureFlags.HideCarDetailIcons}\n fleetSection={fleetSection}\n showModelDetail={showModelDetail}\n distanceUnit={distanceUnit}\n />\n ) : (\n <DefaultModelDetail\n model={model}\n prefixForNumeric={prefixForNumeric}\n sanatizeDetailText={this.sanatizeDetailText}\n HideCarDetailIcons={featureFlags && featureFlags.HideCarDetailIcons}\n showModelDetail={showModelDetail}\n />\n );\n }\n}\n\nexport default withSettingsContext(withTranslation()(ModelDetail));\n","import ModelDetail from './ModelDetail';\n\nexport default ModelDetail;\n","import React from 'react';\nimport NumberFormat from 'react-number-format';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nconst props = {\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n overwrittenSymbol: PropTypes.string,\n smallDecimals: PropTypes.bool,\n useWebCurrency: PropTypes.bool,\n};\n\nclass NumberDisplay extends React.Component {\n static propTypes = props;\n\n render() {\n const {\n value,\n displayType,\n settings: { currency, featureFlags },\n generalSettings,\n overwrittenSymbol,\n smallDecimals,\n currentCurrency,\n useWebCurrency,\n webCurrency,\n } = this.props;\n\n let cur = {\n thousandSeparator: '.',\n decimalSeparator: ',',\n symbol: (useWebCurrency ? webCurrency?.symbol : currentCurrency?.symbol) || '$',\n isoCode: (useWebCurrency ? webCurrency?.isoCode : currentCurrency?.isoCode) || 'ARS',\n decimalScale: 0,\n };\n\n const numberOfDecimals =\n generalSettings && generalSettings.cashBoxConfiguration\n ? generalSettings.cashBoxConfiguration.numberOfDecimals\n : 0;\n\n const useCurrenciesDropdown = featureFlags && featureFlags.showCurrenciesDropdown;\n\n //if not use Currencies Dropdown and section \"currency\" is configured on json, use it.\n if (currency && !useCurrenciesDropdown) cur = { ...cur, ...currency };\n\n const decimalScaleOverride =\n currency?.generalOverrides?.[currentCurrency?.isoCode]?.decimalScale;\n\n const formattedValue = new Intl.NumberFormat('es-AR', {\n style: 'currency',\n currency: cur?.isoCode || 'ARS',\n minimumFractionDigits: decimalScaleOverride || numberOfDecimals,\n maximumFractionDigits: decimalScaleOverride || numberOfDecimals,\n }).format(value);\n\n const [integerPart, decimalPart] = formattedValue.split(cur.decimalSeparator);\n\n const currencySymbol = overwrittenSymbol || cur.symbol;\n\n const getSmallDecimalsPrice = () => {\n return (\n <>\n <div\n className={`${this.props.className || ''} ${\n value && value.toString().length >= 7 ? 'long-value' : 'short-value'\n }`}\n >\n <NumberFormat\n value={value}\n displayType={displayType || 'text'}\n thousandSeparator={cur.thousandSeparator}\n decimalSeparator={cur.decimalSeparator}\n prefix={currency?.showSymbolAsSuffix ? null : `${currencySymbol} `}\n suffix={currency?.showSymbolAsSuffix ? ` ${currencySymbol}` : null}\n decimalScale={decimalScaleOverride ?? numberOfDecimals ?? cur.decimalScale}\n fixedDecimalScale\n renderText={() => (\n <>\n {integerPart}\n {decimalScaleOverride > 0 && (\n <>\n {decimalPart && cur.decimalSeparator}\n {decimalPart && <sup style={{ fontSize: '60%' }}>{decimalPart}</sup>}\n </>\n )}\n </>\n )}\n />\n </div>\n </>\n );\n };\n\n const getNormalDecimalsPrice = () => {\n return (\n <>\n <NumberFormat\n className={`${this.props.className || ''} ${\n value && value.toString().length >= 7 ? 'long-value' : ''\n }`}\n value={value}\n displayType={displayType || 'text'}\n thousandSeparator={cur.thousandSeparator}\n decimalSeparator={cur.decimalSeparator}\n prefix={currency?.showSymbolAsSuffix ? null : `${currencySymbol} `}\n suffix={currency?.showSymbolAsSuffix ? ` ${currencySymbol}` : null}\n decimalScale={decimalScaleOverride ?? numberOfDecimals ?? cur.decimalScale}\n fixedDecimalScale\n />\n </>\n );\n };\n\n return smallDecimals ? getSmallDecimalsPrice() : getNormalDecimalsPrice();\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration, global, state }) => ({\n settings: siteConfiguration.settings,\n generalSettings: global.generalSettings,\n currentCurrency: global.currentCurrency,\n webCurrency: global.webCurrency,\n});\n\nexport default connect(mapStateToProps, null)(NumberDisplay);\n","import NumberDisplay from './NumberDisplay';\nexport default NumberDisplay;\n","import style from 'styled-components';\n\nexport const StyledPaymentMethod = style.div`\n\n .paymentRow{\n place-items: center;\n }\n\n .price{\n text-align: right;\n }\n\n .name {\n display: flex;\n }\n\n .image {\n margin-left: 20px;\n margin-top: 7px;\n }\n\n .error{\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n font-style: italic;\n margin-bottom: 15px;\n margin-top:-5px;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledPaymentMethodModern = style.div`\n\n .paymentRow{\n place-items: center;\n background: #FFF;\n padding: 5px;\n border-radius: 12px;\n margin: 5px 0;\n }\n\n .paymentRow:hover{\n box-shadow:3px 3px 6px #00000016;\n }\n\n\n .price{\n text-align: right;\n }\n\n .name {\n display: flex;\n }\n\n .name span{\n font-size:16px;\n }\n\n .image {\n margin-left: 20px;\n margin-top: 7px;\n }\n\n .error{\n width: 100%;\n padding-left: 10px;\n color: ${props => props.theme.colors.alert};\n margin-bottom: 15px;\n margin-top:-5px;\n }\n\n @media(max-width:767px){\n .name span{\n font-size:14px;\n }\n .image {\n width: 25%;\n height: 25%;\n }\n }\n`;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nimport queryString from 'query-string';\nimport { CheckboxInput, NumberDisplay, Title } from 'components';\nimport { withRouter } from 'react-router-dom';\nimport { StyledPaymentMethod } from './PaymentMethods.styled';\nimport { StyledPaymentMethodModern } from './PaymentMethods.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { tt } from 'utils/translationHelper';\nimport { handleGetTotalToPay } from 'utils/dataHelper';\nimport { getPriceWithExchangeRate, applyCurrencyExchangeRate } from 'utils/priceHelper';\nimport PartialPayWarning from 'sections/payment/partialPayWarning';\nimport ExchangeMessage from 'components/ExchangeMessage';\n\nclass PaymentMethods extends React.Component {\n state = {\n paymentMethodsList: this.props.paymentMethods,\n selectedMethodId: null,\n qsamount: 0,\n paymentMethodsListFiltered: [],\n };\n\n componentWillMount() {\n const { location } = this.props;\n const parseQs = queryString.parse(location.search);\n\n if (parseQs.amount) {\n let partial = parseFloat(parseQs.amount);\n if (partial != 0) {\n this.setState({ qsamount: partial });\n }\n }\n }\n\n componentDidMount() {\n this.getFilteredAvailablePaymentMethodsByBranchOffice();\n }\n\n onAddingItem = i => event => {\n const { onChange } = this.props;\n this.setState({ selectedMethodId: i });\n //return onChange(!this.state.paymentMethodsList[i].isChecked, this.state.paymentMethodsList[i]);\n return onChange(\n !this.state.paymentMethodsListFiltered[i].isChecked,\n this.state.paymentMethodsListFiltered[i],\n );\n };\n\n getTotalToPay() {\n const {\n bookings,\n settings: { paymentConfiguration },\n infractions,\n } = this.props;\n const { qsamount } = this.state;\n\n if (bookings.confirmation) {\n const useRound = bookings.confirmation.customerBalance % 1 === 0;\n const price = handleGetTotalToPay(\n bookings.confirmation.customerBalance,\n paymentConfiguration,\n qsamount,\n );\n\n return useRound ? Math.round(price) : price;\n } else if (infractions.current) {\n return infractions.current.amount;\n }\n }\n\n getBookTotalToPay() {\n const { booking, settings } = this.props;\n const useRound = booking.price % 1 === 0;\n let toPay = Math.abs(booking.price); // Guarda el valor actual en una variable local\n\n if (booking.isPartial && booking.partialPaymentAmount) {\n settings.paymentConfiguration.percentageToPay = booking.partialPaymentAmount;\n toPay = Math.abs((booking.price / 100) * settings.paymentConfiguration.percentageToPay);\n }\n\n if (booking.isOnline) {\n settings.paymentConfiguration.percentageToPay = null;\n }\n\n if (settings.paymentConfiguration && settings.paymentConfiguration.percentageToPay) {\n toPay = Math.abs((booking.price / 100) * settings.paymentConfiguration.percentageToPay);\n }\n\n return useRound ? Math.round(toPay) : toPay;\n }\n\n getTemplateStyledComponent() {\n if (this.props.settings.theme.template === MODERN_THEME) {\n return StyledPaymentMethodModern;\n }\n return StyledPaymentMethod;\n }\n\n getPaymentTypeIdByComponentName = componentName => {\n switch (componentName) {\n case 'CecabankComponent':\n return 19;\n case 'CredomaticComponent':\n return 12;\n case 'FiservIpgComponent':\n return 18;\n case 'GeniusComponent':\n return 20;\n case 'MPComponent':\n return 3;\n case 'PaypalComponent':\n return 6;\n case 'PoyntComponent':\n return 17;\n case 'PrismaComponent':\n return 15;\n case 'PromericaComponent':\n return 13;\n case 'StripeComponent':\n return 14;\n case 'TransbankComponent':\n return 7;\n }\n return 0;\n };\n\n getFilteredAvailablePaymentMethodsByBranchOffice() {\n let { paymentMethodsList } = this.state;\n const { booking, bookings, infractions, generalSettings } = this.props;\n\n let branchOfficeId = booking\n ? booking.deliveryPlace?.branchOfficeId\n : bookings.confirmation?.deliveryPlace?.branchOfficeId;\n\n if (branchOfficeId == null)\n branchOfficeId = infractions.current?.booking?.deliveryPlace?.branchOfficeId;\n\n if (generalSettings && generalSettings.paymentGatewayConfigs) {\n let paymentMethodsListFiltered = [];\n paymentMethodsList.forEach(p => {\n let paymentTypeId = this.getPaymentTypeIdByComponentName(p.component);\n if (paymentTypeId == 0) {\n paymentMethodsListFiltered.push(p);\n } else {\n let gatewayConfigs = generalSettings.paymentGatewayConfigs.filter(\n x => x.paymentType === paymentTypeId,\n );\n if (gatewayConfigs.length > 0) {\n gatewayConfigs.every(gc => {\n if (\n !gc.branchOfficeIds.length ||\n gc.branchOfficeIds.some(s => s === branchOfficeId)\n ) {\n paymentMethodsListFiltered.push(p);\n return false;\n }\n return true;\n });\n }\n }\n });\n this.setState({ paymentMethodsListFiltered: paymentMethodsListFiltered });\n } else {\n this.setState({ paymentMethodsListFiltered: paymentMethodsList });\n }\n }\n\n render() {\n const {\n t,\n booking,\n error,\n settings,\n paymentTitle,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n chargedMsg,\n chargedMsg2,\n } = this.props;\n\n let price;\n\n if (booking) {\n price = this.getBookTotalToPay();\n } else {\n price = this.getTotalToPay();\n }\n\n const modernTheme = settings.theme.template;\n\n let { paymentMethodsListFiltered } = this.state;\n\n const StyledComponent = this.getTemplateStyledComponent();\n\n const applyExchangeRate = applyCurrencyExchangeRate(currentCurrency, webCurrency);\n\n const showExchangeMsg = applyExchangeRate;\n\n return (\n <StyledComponent>\n <hr className=\"separator mb-5\" />\n <div className=\"container-fluid p-0\">\n <div className=\"row\">\n <div className=\"mb-4\">\n <Title\n type=\"h2\"\n text={paymentTitle ? tt(paymentTitle, t) : t('PaymentMethod')}\n weight=\"700\"\n fontSize={20}\n italic={false}\n />\n </div>\n <PartialPayWarning className=\"mb-5\" />\n </div>\n </div>\n <div className=\"form-group conditions\">\n {paymentMethodsListFiltered?.map((paymentMethod, i) => {\n return (\n <div key={i}>\n <div className=\"row paymentRow\">\n <div className=\"col-md-7 name\">\n <CheckboxInput\n onChange={this.onAddingItem(i)}\n checked={this.state.selectedMethodId === i}\n text={<span>{t(paymentMethod.name)}</span>}\n />\n <img\n className=\"image\"\n width=\"110\"\n height=\"30\"\n src={paymentMethod.img}\n alt={paymentMethod.name}\n />\n </div>\n <div className=\"col-md-5 price\">\n <NumberDisplay\n value={\n applyExchangeRate\n ? getPriceWithExchangeRate(\n price,\n currentCurrency,\n defaultCurrency,\n webCurrency,\n )\n : price\n }\n />\n </div>\n </div>\n {!modernTheme && <hr className=\"separator mb-4\" />}\n </div>\n );\n })}\n {showExchangeMsg && (\n <ExchangeMessage\n defaultCurrency={defaultCurrency}\n currentCurrency={currentCurrency}\n chargedMsg={chargedMsg}\n chargedMsg2={chargedMsg2}\n />\n )}\n {error && <div className=\"error\">{error}</div>}\n </div>\n </StyledComponent>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration, searchCars, bookings, infractions, global }) => ({\n settings: siteConfiguration.settings,\n booking: searchCars.checkout.booking,\n infractions: infractions,\n onlinePayment: searchCars.checkout.onlinePayment,\n bookingParams: searchCars.params,\n bookings: bookings,\n generalSettings: global.generalSettings,\n currentCurrency: global.currentCurrency,\n defaultCurrency: global.defaultCurrency,\n webCurrency: global.webCurrency,\n});\n\nexport default connect(mapStateToProps)(withRouter(withTranslation()(PaymentMethods)));\n","import PaymentMethods from './PaymentMethods';\nexport default PaymentMethods;\n","import style from 'styled-components';\n\nexport const StyledPromotionModal = style.div`\n\t.promotion-modal {\n\t\twidth: 100%;\n\t}\n\t.popup-content {\n\t\twidth: unset !important; \n\t}\n`;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { withTranslation } from 'react-i18next';\nimport { tlink } from 'utils/translationHelper';\n\nimport Popup from 'reactjs-popup';\nimport { CustomHtml } from 'components';\nimport { StyledPromotionModal } from './PromotionModal.styled';\n\nclass PromotionModal extends React.Component {\n constructor(props) {\n super(props);\n this.state = { open: true };\n }\n\n render() {\n const { t, i18n, content, link_to, settings } = this.props;\n\n return (\n <StyledPromotionModal>\n <Popup\n open={this.state.open}\n closeOnDocumentClick\n onClose={() => this.setState({ open: false })}\n >\n <a href={tlink(link_to, t, i18n, null, settings.configurations.langConfig)}>\n <CustomHtml customContent={content} />\n </a>\n </Popup>\n </StyledPromotionModal>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration }) => ({\n settings: siteConfiguration.settings,\n});\nexport default connect(mapStateToProps)(withRouter(withTranslation()(PromotionModal)));\n","import PromotionModal from './PromotionModal';\nexport default PromotionModal;\n","import style from 'styled-components';\n\nexport const StyledOurPeople = style.div`\n\t.flex-centered {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\tmargin-bottom: 50px;\n\t}\n\n\t.person-box {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tbackground-color: rgb(255, 255, 255);\n\t\twidth: 550px !important;\n\t\theight: 400px !important;\n\t\tmargin-bottom: 20px;\n\t\tfont-size: 25px;\n\n\n\t\tbox-shadow: 9px 7px 22px -6px rgba(25,25,25,0.11);\n\t\t-webkit-box-shadow: 9px 7px 22px -6px rgba(25,25,25,0.11);\n\t\t-moz-box-shadow: 9px 7px 22px -6px rgba(25,25,25,0.11);\n\t}\n\n\t.person-description {\n display: flex;\n flex-direction: column;\n\t\talign-items: center;\n\t}\n\n\tp.person-name {\n\t\tfont-weight: bold;\n\t}\n\n\t.person-photo {\n\t\tpadding-bottom: 5px;\n display: flex;\n justify-content: center;\n\t}\n\n\t.person-review {\n\t\tfont-size: 17px;\n\t}\n\n\t.people-slider {\n\t\tdisplay: block;\n\t\tpadding: 20px;\n\t\tmargin-bottom: 20px;\n\t}\n`;\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport Slider from 'react-slick';\n\nimport { TranslatedComponent, Title, Paragraph } from 'components/';\nimport { StyledOurPeople } from './OurPeople.styled';\nimport { startCase } from 'lodash';\n\nconst MAX_STARS_SCORE = 5;\n\nclass OurPeople extends TranslatedComponent {\n getItems = () => {\n const { className, items } = this.props;\n const res = [];\n\n items.forEach((item, index) => {\n res.push(\n <div className=\"person-box\" key={`people-${index}`}>\n <div className=\"person-photo\">\n <img className={className} src={this.tt(item.picture)} alt={this.tt(item.name) || ''} />\n </div>\n <div className=\"person-description\">\n <p className=\"person-name\">{this.tt(item.name)}</p>\n <p>{this.renderStars(item.stars)}</p>\n <Paragraph className=\"person-review\" text={this.tt(item.description)} />\n </div>\n </div>,\n );\n });\n\n return res;\n };\n\n renderStars = amount => {\n const stars = [];\n\n for (let i = 0; i < amount; i++) stars.push(<i class=\"fa fa-star\" aria-hidden=\"true\"></i>);\n\n for (let i = stars.length; i < MAX_STARS_SCORE; i++)\n stars.push(<i class=\"far fa-star\" aria-hidden=\"true\"></i>);\n\n return stars;\n };\n\n render() {\n const { title, subtitle } = this.props;\n\n const settings = {\n dots: true,\n infinite: true,\n speed: 500,\n slidesToShow: 3,\n slidesToScroll: 3,\n };\n\n return (\n <StyledOurPeople className=\"pt-3 pb-2\">\n <div className=\"pt-2 pb-2 flex-centered\">\n <Title type=\"h3\" text={this.tt(title)} />\n <Paragraph className=\"lead\" text={subtitle} />\n </div>\n <div className=\"people-slider text-center\">\n <Slider {...settings} style={{ height: '500px' }}>\n {this.getItems()}\n </Slider>\n </div>\n </StyledOurPeople>\n );\n }\n}\n\nexport default withTranslation()(OurPeople);\n","import OurPeople from './OurPeople';\nexport default OurPeople;\n","import React from 'react';\nimport { TranslatedComponent, Btn } from 'components/';\nimport { withTranslation } from 'react-i18next';\n\nimport style from 'styled-components';\n\nconst StyledRelatedRoutes = style.div`\n .routes .routes-container{\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n }\n .routes-item {\n display: flex;\n flex: 1;\n flex-basis: 25%;\n max-width: 25%;\n align-items: center;\n text-align: center;\n flex-direction: column;\n\n .km{\n font-size: 1.5rem;\n margin-bottom: 0px;\n font-weight: bold;\n color: ${props => props.kmColor || props.theme.colors.secondary}\n }\n .location {\n font-size: 1rem;\n line-height: 1.1;\n }\n }\n @media only screen and (max-width: 800px) {\n .routes-item {\n max-width: 100%;\n .location{\n min-height: 40px;\n }\n }\n }\n`;\n\nclass RelatedRoutes extends TranslatedComponent {\n render() {\n const { relatedRoutes, t, kmColor } = this.props;\n\n return (\n <StyledRelatedRoutes kmColor={kmColor}>\n <div className=\"container routes pt-5 pb-3\">\n <div className=\"row\">\n <div className=\"w-100\">\n <h3 className=\"text-center w-100\">{this.tt(relatedRoutes.title)}</h3>\n <p className=\"text-center w-100 mb-4\">{this.tt(relatedRoutes.subtitle)}</p>\n </div>\n <div className=\"routes-container w-100\">\n {relatedRoutes.routes.map(item => (\n <div className=\"routes-item mb-5 pl-1 pr-1\">\n <p className=\"km\">{item.km}</p>\n <p className=\"location mb-2\">\n {item.customLocation ? this.tt(item.location) : `${t('to')} ${item.location}`}\n </p>\n <Btn\n text={relatedRoutes.btnText || t('seeRoute')}\n link={item.maplink}\n fontSize=\"14px\"\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n </StyledRelatedRoutes>\n );\n }\n}\n\nexport default withTranslation()(RelatedRoutes);\n","import RelatedRoutes from './RelatedRoutes';\nexport default RelatedRoutes;\n","import style from 'styled-components';\n\nexport const StyledRegisterForm = style.div`\n margin-bottom: 1rem;\n\n form {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: 1rem;\n }\n\n .title {\n font-size: 1.1rem;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 1.2rem;\n } \n\n .submit_btn {\n min-width: 160px;\n }\n\n .error-alert { \n max-width: fit-content;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledModernRegisterForm = style.div`\n margin-bottom: 1rem;\n\n form {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: 1rem;\n }\n\n .title {\n font-size: 1.1rem;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 1.2rem;\n } \n \n .submit_btn {\n min-width: 160px;\n }\n\n .input-wrapper, .input-wrapper input.form-control {\n border-radius: 8px !important;\n }\n \n .error-alert { \n max-width: fit-content;\n }\n`;\n","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { Alert, Col, Form, Row } from 'react-bootstrap';\nimport { withTranslation } from 'react-i18next';\nimport { withRouter } from 'react-router-dom';\n\nimport { StyledRegisterForm } from './RegisterForm.styled';\nimport { StyledModernRegisterForm } from './RegisterForm.styled.modern';\nimport { fetchCountries } from '../../actions/global.actions';\nimport { MODERN_THEME } from 'styled/constants';\nimport { TextInput, Card, Btn } from 'components/';\nimport { isValidEmail } from 'utils/dataHelper';\nimport { handleRegister } from 'actions';\nimport { tlink } from 'utils/translationHelper';\n// import { transformCountriesToSelectOptions } from 'utils/dataHelper';\n\nfunction RegisterForm({\n t,\n i18n,\n settings: { theme, myAccountConfiguration, configurations },\n countries,\n isAuthenticated,\n handleRegister,\n history,\n}) {\n const [loading, setLoading] = useState(false);\n const [name, setName] = useState('');\n const [lastname, setLastname] = useState('');\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [repeatPassword, setRepeatPassword] = useState('');\n const [nameBlur, setNameBlur] = useState(false);\n const [lastnameBlur, setLastnameBlur] = useState(false);\n const [emailBlur, setEmailBlur] = useState(false);\n const [passwordBlur, setPasswordBlur] = useState(false);\n const [repeatPasswordBlur, setRepeatPasswordBlur] = useState(false);\n const [error, setError] = useState('');\n\n const getLink = path => {\n return tlink(path, t, i18n, null, configurations.langConfig);\n };\n\n useEffect(() => {\n const getCountries = async () => {\n if (!countries) await fetchCountries(i18n.language);\n };\n\n getCountries();\n }, []);\n\n useEffect(() => {\n if (isAuthenticated) {\n if (myAccountConfiguration?.privateSite) {\n history.replace(history.location?.state?.referrer || getLink('/'));\n } else {\n history.replace(getLink('/my-account'));\n }\n }\n }, [isAuthenticated]);\n\n const StyledComponent =\n theme.template === MODERN_THEME ? StyledModernRegisterForm : StyledRegisterForm;\n\n const register = async e => {\n e.preventDefault();\n setError('');\n try {\n setLoading(true);\n await handleRegister({\n name,\n lastname,\n email,\n password,\n });\n } catch (error) {\n let message;\n if (error.response.data && error.response.data?.code === 99) {\n message = t('registerError');\n } else {\n message = error.response && error.response.data.message;\n }\n setError(message || t('registerError'));\n } finally {\n setLoading(false);\n }\n };\n\n const disableRegister =\n !name ||\n !lastname ||\n !isValidEmail(email) ||\n password.length < 6 ||\n password !== repeatPassword;\n\n return (\n <StyledComponent>\n {error && (\n <Alert variant=\"danger\" onClose={() => setError('')} dismissible className=\"error-alert\">\n {error}\n </Alert>\n )}\n <Card>\n <Form>\n <Row>\n <Col>\n <h2 className=\"title\">{t('myAccount.registerForFree')}</h2>\n </Col>\n </Row>\n <Row className=\"mb-3\">\n <Col md={6}>\n <TextInput\n inputClass=\"form-control\"\n className=\"form-control\"\n placeholder={t('name')}\n value={name}\n onChange={setName}\n options={{ onBlur: () => setNameBlur(true) }}\n error={nameBlur && !name && t('emptyField')}\n />\n </Col>\n <Col md={6}>\n <TextInput\n inputClass=\"form-control\"\n type=\"mail\"\n className=\"form-control\"\n placeholder={t('lastname')}\n value={lastname}\n onChange={setLastname}\n options={{ onBlur: () => setLastnameBlur(true) }}\n error={lastnameBlur && !lastname && t('emptyField')}\n />\n </Col>\n </Row>\n {/* \n // Uncomment to add Country and Passport fields\n <Row className=\"mb-3\">\n <Col md={6}>\n <div className=\"form-group\">\n <SelectInput\n inputClass=\"form-control form-control-select\"\n onChange={() => {}}\n selected={''}\n options={transformCountriesToSelectOptions(countries) || []}\n defaultOption={t('country')}\n />\n </div>\n </Col>\n <Col md={6}>\n <TextInput\n inputClass=\"form-control\"\n className=\"form-control\"\n placeholder={t('myAccount.passport')}\n onChange={() => {}}\n />\n </Col>\n </Row> */}\n <Row className=\"mb-3\">\n <Col md={12}>\n <TextInput\n inputClass=\"form-control\"\n type=\"mail\"\n className=\"form-control\"\n placeholder={t('myAccount.email')}\n value={email}\n onChange={setEmail}\n options={{ onBlur: () => setEmailBlur(true) }}\n error={emailBlur && !isValidEmail(email) && t('validEmail')}\n />\n </Col>\n </Row>\n <Row className=\"mb-3\">\n <Col md={12}>\n <TextInput\n inputClass=\"form-control\"\n type=\"password\"\n className=\"form-control\"\n placeholder={t('myAccount.password')}\n value={password}\n onChange={setPassword}\n options={{ onBlur: () => setPasswordBlur(true) }}\n error={passwordBlur && password.length < 6 && t('passwordError')}\n />\n </Col>\n </Row>\n <Row className=\"mb-3\">\n <Col md={12}>\n <TextInput\n inputClass=\"form-control\"\n type=\"password\"\n className=\"form-control\"\n placeholder={t('myAccount.repeatPassword')}\n value={repeatPassword}\n onChange={setRepeatPassword}\n options={{ onBlur: () => setRepeatPasswordBlur(true) }}\n error={\n repeatPasswordBlur &&\n (!repeatPassword || password !== repeatPassword) &&\n t('passwordMatch')\n }\n />\n </Col>\n </Row>\n <Row>\n <Col>\n <Btn\n className=\"m-auto submit_btn\"\n text={t('myAccount.register')}\n disabled={disableRegister || loading}\n loading={loading}\n iconColor=\"white\"\n iconSize=\"1.2rem\"\n onClick={register}\n />\n </Col>\n </Row>\n </Form>\n </Card>\n </StyledComponent>\n );\n}\n\nconst mapStateToProps = ({ siteConfiguration, global, user }) => ({\n settings: siteConfiguration.settings,\n countries: global.listCountries,\n isAuthenticated: user.isAuthenticated,\n});\n\nexport default connect(mapStateToProps, {\n fetchCountries,\n handleRegister,\n})(withRouter(withTranslation()(RegisterForm)));\n","import RegisterForm from './RegisterForm';\nexport default RegisterForm;\n","import style from 'styled-components';\n\nexport const StyledRegisterCompanyForm = style.div`\n margin-bottom: 1rem;\n\n form {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: 1rem;\n }\n\n .title {\n font-size: 1.1rem;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 1.2rem;\n } \n\n .subtitle {\n font-size: 14px;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 1.2rem;\n }\n\n .submit_btn {\n min-width: 160px;\n }\n\n .error-alert { \n max-width: fit-content;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledModernRegisterCompanyForm = style.div`\n margin-bottom: 1rem;\n\n form {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: 1rem;\n }\n\n .title {\n font-size: 1.1rem;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 1.2rem;\n } \n\n .subtitle {\n font-size: 14px;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 1.2rem;\n }\n \n .submit_btn {\n min-width: 160px;\n }\n\n .input-wrapper, .input-wrapper input.form-control {\n border-radius: 8px !important;\n }\n \n .error-alert { \n max-width: fit-content;\n }\n`;\n","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { Alert, Col, Form, Row } from 'react-bootstrap';\nimport { withTranslation } from 'react-i18next';\nimport { StyledRegisterCompanyForm } from './RegisterCompanyForm.styled';\nimport { StyledModernRegisterCompanyForm } from './RegisterCompanyForm.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { TextInput, Card, Btn, Logo } from 'components/';\nimport { handleRegisterCompany } from 'actions';\nimport { history } from 'store';\n\nfunction RegisterCompanyForm({\n t,\n i18n,\n settings: { theme, myAccountConfiguration },\n isAuthenticated,\n handleRegisterCompany,\n}) {\n const [loading, setLoading] = useState(false);\n const [password, setPassword] = useState('');\n const [repeatPassword, setRepeatPassword] = useState('');\n const [passwordBlur, setPasswordBlur] = useState(false);\n const [repeatPasswordBlur, setRepeatPasswordBlur] = useState(false);\n const [error, setError] = useState('');\n const logo = myAccountConfiguration && myAccountConfiguration.logo;\n\n const queryParams = new URLSearchParams(window.location.search);\n const globalId = queryParams ? queryParams.get('guid') : '';\n\n const StyledComponent =\n theme.template === MODERN_THEME ? StyledModernRegisterCompanyForm : StyledRegisterCompanyForm;\n\n useEffect(() => {\n if (isAuthenticated) history.replace('/my-account');\n }, [isAuthenticated]);\n\n const register = async e => {\n e.preventDefault();\n setError('');\n try {\n setLoading(true);\n await handleRegisterCompany({\n globalId,\n password,\n });\n } catch (error) {\n if (!error.success) {\n setError(t(error.data));\n } else {\n const message = error.response && error.response.data.message;\n setError(message || t('registerError'));\n }\n } finally {\n setLoading(false);\n }\n };\n\n const disableRegister = password.length < 6 || password !== repeatPassword;\n\n return (\n <StyledComponent>\n {error && (\n <Alert variant=\"danger\" onClose={() => setError('')} dismissible className=\"error-alert\">\n {error}\n </Alert>\n )}\n <Card>\n <Form>\n {logo && <Logo className=\"ml-auto mr-auto mb-4\" src={logo} />}\n <Row>\n <Col>\n <h2 className=\"title\">{t('myAccount.companyRegistration')}</h2>\n </Col>\n <Col lg={12} className=\"right-col subtitle\">\n <span className=\"\">{t('myAccount.companyRegistrationValidated')}</span>\n </Col>\n </Row>\n <Row className=\"mb-3\">\n <Col md={12}>\n <TextInput\n inputClass=\"form-control\"\n type=\"password\"\n className=\"form-control\"\n placeholder={t('myAccount.password')}\n value={password}\n onChange={setPassword}\n options={{ onBlur: () => setPasswordBlur(true) }}\n error={passwordBlur && password.length < 6 && t('passwordError')}\n />\n </Col>\n </Row>\n <Row className=\"mb-3\">\n <Col md={12}>\n <TextInput\n inputClass=\"form-control\"\n type=\"password\"\n className=\"form-control\"\n placeholder={t('myAccount.repeatPassword')}\n value={repeatPassword}\n onChange={setRepeatPassword}\n options={{ onBlur: () => setRepeatPasswordBlur(true) }}\n error={\n repeatPasswordBlur &&\n (!repeatPassword || password !== repeatPassword) &&\n t('passwordMatch')\n }\n />\n </Col>\n </Row>\n <Row>\n <Col>\n <Btn\n className=\"m-auto submit_btn\"\n text={t('myAccount.register')}\n disabled={disableRegister || loading}\n loading={loading}\n iconColor=\"white\"\n iconSize=\"1.2rem\"\n onClick={register}\n />\n </Col>\n </Row>\n </Form>\n </Card>\n </StyledComponent>\n );\n}\n\nconst mapStateToProps = ({ siteConfiguration, global, user }) => ({\n settings: siteConfiguration.settings,\n isAuthenticated: user.isAuthenticated,\n});\n\nexport default connect(mapStateToProps, {\n handleRegisterCompany,\n})(withTranslation()(RegisterCompanyForm));\n","import RegisterCompanyForm from './RegisterCompanyForm';\nexport default RegisterCompanyForm;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n modal: PropTypes.bool,\n loginCallBack: PropTypes.func,\n};\n","import style from 'styled-components';\n\nexport const StyledLoginForm = style.div`\n margin-bottom: 1rem;\n\n form {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: 1rem;\n }\n\n .forgotPassword {\n background: transparent;\n border: none;\n text-align: center;\n font-size: 0.9rem;\n color: #858C99;\n width: 100%;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n transition: all 0.3s;\n\n &:hover { \n color: ${({ theme }) => theme.colors.buttonPrimaryBg || theme.font.colors.primary};\n }\n } \n\n .social-btn {\n background: transparent;\n border: none;\n text-align: center;\n font-size: 0.9rem;\n color: #858C99;\n width: 100%;\n margin-top: 1.5rem;\n margin-bottom: 0.5rem;\n transition: all 0.3s;\n\n &:hover { \n color: ${({ theme }) => theme.colors.buttonPrimaryBg || theme.font.colors.primary};\n }\n\n i {\n margin-right: 10px;\n color: ${({ theme }) => theme.colors.buttonPrimaryBg || theme.font.colors.primary};\n }\n }\n\n .error-alert { \n max-width: fit-content;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledModernLoginForm = style.div`\n margin-bottom: 1rem;\n\n form {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: 1rem;\n }\n\n .forgotPassword {\n background: transparent;\n border: none;\n text-align: center;\n font-size: 0.9rem;\n color: #858C99;\n width: 100%;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n transition: all 0.3s;\n\n &:hover { \n color: ${({ theme }) => theme.colors.buttonPrimaryBg || theme.font.colors.primary};\n }\n }\n\n .social-btn {\n background: transparent;\n border: none;\n text-align: center;\n font-size: 0.9rem;\n color: #858C99;\n width: 100%;\n margin-top: 1.5rem;\n margin-bottom: 0.5rem;\n transition: all 0.3s;\n\n &:hover { \n color: ${({ theme }) => theme.colors.buttonPrimaryBg || theme.font.colors.primary};\n }\n \n i {\n margin-right: 10px;\n color: ${({ theme }) => theme.colors.buttonPrimaryBg || theme.font.colors.primary};\n }\n }\n\n .input-wrapper, .input-wrapper input.form-control {\n border-radius: 8px !important;\n }\n\n .error-alert { \n max-width: fit-content;\n }\n`;\n","import React, { useEffect, useState } from 'react';\nimport { Alert, Form } from 'react-bootstrap';\nimport { withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { props } from './LoginForm.props';\nimport { StyledLoginForm } from './LoginForm.styled';\nimport { StyledModernLoginForm } from './LoginForm.styled.modern';\n\nimport { Card, TextInput, Btn, CheckboxInput, Logo } from 'components/';\nimport { MODERN_THEME } from 'styled/constants';\nimport { handleLogIn, handleLoginWithMicrosoft, handleGetMicrosoftLoginUrl } from 'actions';\nimport { isValidEmail } from 'utils/dataHelper';\nimport { tlink } from 'utils/translationHelper';\n\nfunction LoginForm({\n t,\n settings: { myAccountConfiguration, theme, configurations },\n isAuthenticated,\n modal,\n handleLogIn,\n handleLoginWithMicrosoft,\n loginCallBack,\n profile,\n history,\n i18n,\n}) {\n const [loading, setLoading] = useState(false);\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [remember, setRemember] = useState(false);\n const [error, setError] = useState('');\n const logo = myAccountConfiguration && myAccountConfiguration.logo;\n const hideLoginForm =\n myAccountConfiguration && myAccountConfiguration.hideLoginForm != undefined\n ? myAccountConfiguration.hideLoginForm\n : false;\n const hasMsLogin =\n myAccountConfiguration && myAccountConfiguration.hasMsLogin != undefined\n ? myAccountConfiguration.hasMsLogin\n : false;\n const queryParams = new URLSearchParams(window.location.search);\n const code = queryParams ? queryParams.get('code') : '';\n const state = queryParams ? queryParams.get('state') : '';\n const error_code = queryParams ? queryParams.get('error') : '';\n const error_description = queryParams ? queryParams.get('error_description') : '';\n\n const StyledComponent = theme.template === MODERN_THEME ? StyledModernLoginForm : StyledLoginForm;\n\n const getLink = path => {\n return tlink(path, t, i18n, null, configurations.langConfig);\n };\n\n useEffect(() => {\n // If it's modal, user is in checkout flow\n if (isAuthenticated && !modal) {\n if (myAccountConfiguration?.privateSite) {\n return history.replace(history.location?.state?.referrer || '/');\n }\n if (!profile.documentId) {\n return history.replace(getLink('/my-account'));\n }\n return history.replace(getLink('/my-account/bookings'));\n }\n }, [isAuthenticated, modal]);\n\n useEffect(() => {\n const handleMicrosoft = async () => {\n try {\n setError('');\n setLoading(true);\n await handleLoginWithMicrosoft(code, state);\n loginCallBack && loginCallBack();\n } catch (error) {\n const message = error.response && error.response.data.message;\n setError(message || t('registerError'));\n } finally {\n setLoading(false);\n }\n };\n\n if (code && state.startsWith('microsoft')) {\n handleMicrosoft(code, state);\n } else if (error_code && error_description) {\n const errorMessage =\n 'Error Code: ' + error_code + ' / Error Description: ' + error_description;\n setError(errorMessage);\n }\n }, [code, state]);\n\n const logIn = async e => {\n e.preventDefault();\n setError('');\n setLoading(true);\n const { error } = await handleLogIn(email, password, remember);\n if (error) {\n setError(t('loginError'));\n setLoading(false);\n return;\n }\n loginCallBack && loginCallBack();\n setLoading(false);\n };\n\n const loginWithMicrosoft = async () => {\n window.location.href = await handleGetMicrosoftLoginUrl();\n };\n\n const disableLogin = !isValidEmail(email) || password.length < 6;\n\n const form = (\n <>\n {!hideLoginForm && (\n <>\n <Form>\n {logo && <Logo className=\"ml-auto mr-auto mb-4\" src={logo} />}\n <TextInput\n inputClass=\"form-control\"\n type=\"mail\"\n className=\"form-control\"\n placeholder={t('myAccount.email')}\n value={email}\n onChange={setEmail}\n />\n <TextInput\n inputClass=\"form-control\"\n type=\"password\"\n className=\"form-control\"\n placeholder={t('myAccount.password')}\n value={password}\n onChange={setPassword}\n />\n <CheckboxInput\n className=\"mb-3\"\n text={t('myAccount.rememberMe')}\n checked={remember}\n onChange={setRemember}\n />\n <Btn\n text={t('myAccount.logIn')}\n onClick={logIn}\n disabled={disableLogin || loading}\n loading={loading}\n iconColor=\"white\"\n iconSize=\"1.2rem\"\n />\n </Form>\n <button\n className=\"forgotPassword\"\n onClick={() => history.push(getLink('/forgot-password'))}\n >\n {t('myAccount.forgotPassword')}\n </button>\n </>\n )}\n\n {hasMsLogin && (\n <button className=\"social-btn\" onClick={loginWithMicrosoft}>\n <i className=\"fab fa-microsoft\"></i>\n {t('myAccount.loginWithMicrosoft')}\n </button>\n )}\n </>\n );\n\n return (\n <StyledComponent>\n {error && (\n <Alert variant=\"danger\" onClose={() => setError('')} dismissible className=\"error-alert\">\n {error}\n </Alert>\n )}\n {modal ? <div>{form}</div> : <Card>{form}</Card>}\n </StyledComponent>\n );\n}\n\nLoginForm.propTypes = props;\n\nconst mapStateToProps = ({ user, siteConfiguration }) => ({\n isAuthenticated: user.isAuthenticated,\n settings: siteConfiguration.settings,\n profile: user.profile,\n});\n\nexport default connect(mapStateToProps, {\n handleLogIn,\n handleLoginWithMicrosoft,\n})(withRouter(withTranslation()(LoginForm)));\n","import LoginForm from './LoginForm';\nexport default LoginForm;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n children: PropTypes.any,\n className: PropTypes.string,\n padding: PropTypes.string,\n background: PropTypes.string,\n};\n\nexport const defaults = {\n className: '',\n};\n","import style from 'styled-components';\n\nexport const StyledCard = style.div`\n box-shadow: 2px 2px 10px rgb(0 0 0 / 10%);\n border-radius: 10px;\n padding: ${({ padding }) => padding || '2rem 2.5rem'};\n background-color: ${({ background }) => background || 'white'};\n`;\n","import React from 'react';\nimport { defaults, props } from './Card.props';\nimport { StyledCard } from './Card.styled';\n\nfunction Card({ children, className, padding, background }) {\n return (\n <StyledCard className={className} padding={padding} background={background}>\n {children}\n </StyledCard>\n );\n}\n\nCard.propTypes = props;\nCard.defaultProps = defaults;\n\nexport default Card;\n","import Card from './Card';\nexport default Card;\n","import AccountPrivateRoute from './AccountPrivateRoute';\nexport default AccountPrivateRoute;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { Redirect, Route } from 'react-router-dom';\n\nconst AccountPrivateRoute = ({ component: Component, isAuthenticated, ...rest }) => {\n return (\n <Route\n {...rest}\n render={props =>\n isAuthenticated ? (\n <Component {...props} />\n ) : (\n <Redirect\n to={{\n pathname: '/login',\n state: { referrer: props.location },\n }}\n />\n )\n }\n />\n );\n};\n\nconst mapStateToProps = ({ user }) => ({\n isAuthenticated: user.isAuthenticated,\n});\n\nexport default connect(mapStateToProps)(AccountPrivateRoute);\n","import PropTypes from 'prop-types';\n\nexport const props = {\n booking: PropTypes.object,\n onCancel: PropTypes.func,\n};\n\nexport const defaults = {\n onCancel: () => {},\n};\n","import style from 'styled-components';\n\nconst getBalanceColor = (status, balance) => {\n if (status === 4) return '#858C99';\n if (Math.sign(balance) === -1) return '#E80C4D';\n return '#2BCE81';\n};\n\nexport const StyledBookingPreview = style.div`\n border: 1px solid #ECF0F3;\n border-radius: 10px;\n padding: 1rem 1.2rem;\n width: 100%;\n background: white;\n margin-bottom: 8px;\n text-align: left;\n box-shadow: 2px 2px 10px rgb(0 0 0 / 0%);\n transition: box-shadow 0.4s;\n\n &:hover { \n box-shadow: 2px 2px 10px rgb(0 0 0 / 10%);\n }\n\n p {\n font-size: 0.9rem;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 0;\n }\n\n .booking-id {\n p {\n color: #1A73E8;\n font-weight: 500; \n }\n }\n\n .booking-info { \n .delivery-info {\n font-size: 0.8rem;\n color: #656970;\n margin-left: 15px;\n }\n }\n\n .booking-actions {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .actions-wrapper {\n display: flex;\n\n button {\n border: none;\n background: transparent;\n color: #656970;\n transition: all 0.3s;\n padding: 0 10px;\n\n i { \n font-size: 1.2rem;\n }\n\n &:hover {\n color: #9fa6b3;\n }\n }\n\n .delete {\n color: ${({ theme }) => theme.colors.alert};\n\n &:disabled {\n color: ${({ theme }) => theme.colors.disabled};\n opacity: 0.5;\n }\n\n &:not([disabled]):hover {\n color: #da0000;\n }\n }\n }\n\n .booking-balance {\n text-align: left;\n \n p {\n text-align: left;\n }\n\n .amount {\n font-weight: 500;\n color: ${({ status, balance }) => getBalanceColor(status, balance)};\n }\n }\n\n @media (max-width: ${({ theme }) => theme.screens.md}) {\n .booking-status, .delivery-info {\n margin-left: 0;\n } \n\n .booking-info {\n margin-bottom: 1rem;\n }\n }\n`;\n","import React from 'react';\nimport { Row, Col } from 'react-bootstrap';\nimport moment from 'moment';\nimport { withTranslation } from 'react-i18next';\nimport { defaults, props } from './BookingPreview.props';\nimport { StyledBookingPreview } from './BookingPreview.styled';\nimport { Tooltip } from '@material-ui/core';\nimport { NumberDisplay, BookingStatus, TranslatedLink } from 'components';\nimport { invertValueSign } from 'utils/dataHelper';\nimport withSettingsContext from 'SettingsContext';\n\nfunction BookingPreview({ t, booking, onCancel, i18n, settings: { configurations } }) {\n const balance = booking?.customerBalance || booking?.balance;\n const isCancelDisabled = () => {\n // Disable if booking status is Delivered, Closed or Canceled\n if ([2, 3, 4].includes(booking.currentStatus)) return true;\n return false;\n };\n\n const dateTimeFormat = configurations.dateTimeDisplayFormat || t('bookingDateFormat');\n\n const deliveryInfo = () => {\n if (booking.deliveryInfo && [2, 3].includes(booking.currentStatus)) {\n return (\n <p className=\"delivery-info\">{`${t('delivery')} ${moment(booking.deliveryInfo.date).format(\n dateTimeFormat,\n )} hs - ${booking.deliveryPlace.name}`}</p>\n );\n } else {\n return (\n <p className=\"delivery-info\">{`${t('delivery')} ${moment(booking.fromDate).format(\n dateTimeFormat,\n )} hs - ${booking.deliveryPlace.name}`}</p>\n );\n }\n };\n\n const returnInfo = () => {\n if (booking.dropoffInfo && booking.currentStatus == 3) {\n return (\n <p className=\"delivery-info\">{`${t('return')} ${moment(booking.dropoffInfo.date).format(\n dateTimeFormat,\n )}hs - ${booking.returnPlace.name}`}</p>\n );\n } else {\n return null;\n }\n };\n\n return (\n <StyledBookingPreview status={booking.currentStatus} balance={balance}>\n <Row>\n <Col className=\"booking-id\" lg={1} md={2} sm={12}>\n <p>#{booking.id}</p>\n </Col>\n\n <Col lg={7} md={5} sm={12} className=\"booking-info\">\n <BookingStatus status={booking.currentStatus} />\n {deliveryInfo()}\n {returnInfo()}\n </Col>\n\n <Col lg={4} md={5} sm={12} className=\"booking-actions\">\n <div className=\"actions-wrapper\">\n <TranslatedLink\n className=\"nav-link\"\n name=\"myAccount.bookings\"\n path={`/my-account/bookings/${booking.id}`}\n >\n <Tooltip placement=\"top\" title={t('details')}>\n <i className=\"far fa-file-alt\"></i>\n </Tooltip>\n </TranslatedLink>\n\n <button className=\"delete\" onClick={onCancel} disabled={isCancelDisabled()}>\n <Tooltip placement=\"top\" title={t('cancel')}>\n <i className=\"fas fa-times-circle\"></i>\n </Tooltip>\n </button>\n </div>\n <div className=\"booking-balance\">\n <p>\n <span>\n <strong>{t('balance.total')}:</strong>\n </span>\n <NumberDisplay className=\"float-right ml-2\" value={booking.price} />\n </p>\n <p>\n <span>{t('balance.payed')}:</span>\n <NumberDisplay className=\"float-right ml-2\" value={booking.totalPayed} />\n </p>\n <p>\n <span>{t('balance.balance')}:</span>\n <NumberDisplay className=\"amount float-right ml-2\" value={invertValueSign(balance)} />\n </p>\n </div>\n </Col>\n </Row>\n </StyledBookingPreview>\n );\n}\n\nBookingPreview.propTypes = props;\nBookingPreview.defaultProps = defaults;\n\nexport default withSettingsContext(withTranslation()(BookingPreview));\n","import BookingPreview from './BookingPreview';\nexport default BookingPreview;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n icon: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n className: PropTypes.string,\n onClose: PropTypes.func,\n};\n\nexport const defaultProps = {\n icon: 'far fa-clock',\n className: '',\n};\n","import style from 'styled-components';\n\nexport const StyledCustomAlert = style.div``;\n","import style from 'styled-components';\n\nexport const CustomAlertModern = style.div`\n .alert {\n padding: ${({ dismissible }) => `0.75rem ${dismissible ? '3rem' : '1rem'} 0.75rem 0.7rem`};\n background: #fff; \n border-radius: 8px;\n margin: 0;\n\n p {\n color: ${({ theme }) => theme.colors.alert};\n font-size: 0.8rem; \n font-weight: 400;\n display: flex;\n align-items: center;\n }\n\n i {\n margin-right: 10px;\n }\n\n button {\n color: ${({ theme }) => theme.font.colors.secondary};\n top: 0;\n bottom: 0;\n }\n\n &:hover {\n background: #fff;\n }\n\n\n }\n\n .alert-dismissible .close {\n opacity: 1;\n }\n \n .alert.alert-danger {\n border: ${({ theme }) => `1px solid ${theme.colors.alert}`};\n\n i {\n color: ${({ theme }) => theme.colors.alert};\n }\n \n }\n\n \n`;\n","import React from 'react';\nimport { props, defaultProps } from './CustomAlert.props';\nimport { StyledCustomAlert } from './CustomAlert.styled';\nimport { CustomAlertModern } from './CustomAlert.styled.modern';\n\nimport withSettingsContext, { useSettingsContext } from 'SettingsContext';\n\nimport { MODERN_THEME } from 'styled/constants';\nimport { Alert } from 'react-bootstrap';\n\nconst CustomAlert = ({ icon = 'far fa-clock', children, className = '', onClose }) => {\n const settings = useSettingsContext();\n\n const getTemplateStyledComponent = () => {\n if (settings.theme.template === MODERN_THEME) {\n return CustomAlertModern;\n }\n return StyledCustomAlert;\n };\n\n const StyledComponent = getTemplateStyledComponent();\n\n return (\n <StyledComponent className={`${className} custom-alert`} dismissible={onClose ? true : false}>\n <Alert variant=\"danger\" onClose={onClose} dismissible={onClose ? true : false}>\n <p>\n <i className={icon}></i> {children}\n </p>\n </Alert>\n </StyledComponent>\n );\n};\n\nCustomAlert.propTypes = props;\nCustomAlert.defaultProps = defaultProps;\n\nexport default withSettingsContext(CustomAlert);\n","import CustomAlert from './CustomAlert';\nexport default CustomAlert;\n","import styled from 'styled-components';\n\nexport const StyledMyAccountNavLink = styled.div`\n display: flex;\n color: ${props => props.theme.font.colors.primary};\n background: ${({ bgColor }) => bgColor};\n margin-left: 5px;\n\n .login-button {\n border: none;\n color: ${({ color, theme }) => color || theme.font.colors.primary};\n padding: 7px 16px;\n transition: all 0.3s;\n font-size: 0.9rem;\n white-space: nowrap;\n\n &:hover {\n color: white;\n background-color: ${({ theme, hover }) => hover || theme.colors.secondary};\n }\n }\n\n .my-account-button {\n .profile-pic {\n width: 18px;\n aspect-ratio: 1;\n border-radius: 50px;\n margin-right: 8px;\n }\n\n .dropdown-toggle {\n padding: 9.5px 10px;\n\n &:hover {\n background-color: ${props => props.bgColor || props.theme.colors.secondary};\n }\n }\n\n .dropdown-toggle,\n .dropdown-toggle:active {\n background: transparent;\n color: ${({ color, theme }) => color || theme.font.colors.primary};\n font-size: 12px;\n text-transform: uppercase;\n font-weight: bold;\n border: none;\n display: flex;\n align-items: center;\n\n &:focus {\n box-shadow: none;\n }\n\n span {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n max-width: 100px;\n display: inline-block;\n }\n }\n\n button {\n background: transparent;\n border: none;\n width: 100%;\n text-align: left;\n }\n\n .nav-link {\n font-size: 12px;\n text-transform: uppercase;\n color: ${props => props.color || props.theme.font.colors.primary};\n background: ${({ theme }) => theme.colors.bg};\n padding: 8px 16px;\n border-bottom: 1px solid #ecf0f5;\n transition: all 0.3s;\n\n &:hover {\n background-color: ${({ theme, hoverBkg }) => hoverBkg || theme.colors.primary};\n color: ${({ hoverColor, theme }) => hoverColor || theme.font.colors.secondary};\n }\n\n &:last-child {\n border: none;\n }\n }\n }\n`;\n","import styled from 'styled-components';\n\nexport const StyledModernMyAccountNavLink = styled.div`\n display: flex;\n width: 150px;\n margin: 0 10px;\n\n #my-account-dropdown {\n width: 100%;\n }\n\n .login-button {\n border: ${({ theme }) => `1px solid ${theme.font.colors.primary}`};\n border-radius: 8px;\n color: ${({ theme }) => theme.font.colors.primary};\n background: white;\n padding: 7px 16px;\n transition: all 0.3s;\n margin-left: 10px;\n font-size: 0.9rem;\n white-space: nowrap;\n\n &:hover {\n color: ${({ theme, rightBtnColor }) => rightBtnColor || theme.colors.secondary};\n border-color: ${({ theme, rightBtnColor }) => rightBtnColor || theme.colors.secondary};\n }\n }\n\n div.my-account_mobile {\n margin: 0px 0px 5px 0px;\n\n .my-account-button {\n background-color: #fff;\n }\n }\n\n .my-account-button {\n .profile-pic {\n width: 18px;\n aspect-ratio: 1;\n border-radius: 50px;\n margin-right: 8px;\n }\n\n .show {\n min-width: 7.6rem;\n font-size: 0.8rem;\n .login-type-link {\n display: flex;\n padding: 10px;\n }\n }\n\n .login-menu {\n padding: 0 20px;\n font-size: 0.9rem;\n color: #ee3a1f;\n }\n\n .login-dropdown {\n padding: 0 10px 0 0;\n }\n\n .dropdown-toggle,\n .dropdown-toggle:active {\n background: transparent;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-right: 10px;\n font-size: 0.9rem;\n border: none;\n display: flex;\n align-items: center;\n\n &:focus {\n box-shadow: none;\n }\n\n span {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n max-width: 100px;\n display: inline-block;\n }\n }\n\n button {\n background: transparent;\n border: none;\n }\n\n .nav-link {\n font-size: 0.9rem;\n color: ${({ theme }) => theme.font.colors.primary};\n padding: 8px 16px;\n border-bottom: 1px solid #ecf0f5;\n transition: all 0.3s;\n\n &:hover {\n color: ${({ theme, rightBtnColor }) => rightBtnColor || theme.colors.primary};\n }\n\n &:last-child {\n border: none;\n }\n }\n }\n\n .dropdown-menu.show {\n display: block;\n border-radius: 8px;\n padding: 0;\n margin-top: 7px;\n min-width: 100%;\n\n .login-type-link {\n display: flex;\n padding: 10px;\n font-size: 0.9rem;\n padding: 8px 16px;\n border-top: 0.1px solid #ecf0f5;\n color: #5f6368;\n }\n }\n\n .notLogged {\n border: 1px solid #000;\n border-radius: 8px;\n color: #000;\n transition: all 0.3s;\n\n .login-menu {\n color: #000;\n padding: 0 10px;\n }\n\n .dropdown-toggle {\n margin-right: 0px;\n &::after {\n display: none;\n }\n span.login-menu {\n max-width: 100%;\n }\n\n &:active {\n margin-right: 0px;\n }\n }\n\n &:hover {\n border: 1px solid #000;\n border-radius: 8px;\n color: white;\n background-color: #000;\n transition: all 0.3s;\n button {\n span {\n color: white;\n }\n }\n }\n }\n`;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n bgColor: PropTypes.string,\n color: PropTypes.string,\n hoverBkg: PropTypes.string,\n hoverColor: PropTypes.string,\n className: PropTypes.string,\n};\n","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\nimport { connect } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nimport UserIcon from '../../assets/images/user.svg';\nimport { TranslatedLink } from 'components';\nimport { StyledMyAccountNavLink } from './MyAccountNavLink.styled';\nimport { StyledModernMyAccountNavLink } from './MyAccountNavLink.style.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { props } from './MyAccountNavLink.props';\nimport { handleLogOut } from 'actions';\nimport { tlink } from 'utils/translationHelper';\nimport { withRouter } from 'react-router-dom';\n\nfunction MyAccountNavLink({\n t,\n settings: { theme, myAccountConfiguration, configurations },\n color,\n bgColor,\n hoverBkg,\n hoverColor,\n isAuthenticated,\n handleLogOut,\n profile,\n className = '',\n i18n,\n history,\n}) {\n const StyledComponent =\n theme.template === MODERN_THEME ? StyledModernMyAccountNavLink : StyledMyAccountNavLink;\n\n const hideLoginBtn = myAccountConfiguration && myAccountConfiguration.hideLoginBtn;\n\n const showCompanyLoginBtn =\n myAccountConfiguration &&\n myAccountConfiguration.companyLoginEnable &&\n myAccountConfiguration.showCompanyLoginBtn;\n\n const showAgencyLoginBtn =\n myAccountConfiguration &&\n myAccountConfiguration.agencyLoginEnable &&\n myAccountConfiguration.showAgencyLoginBtn;\n\n const signOut = () => {\n handleLogOut();\n const link = tlink('/', t, i18n, null, configurations.langConfig);\n history.push(link);\n };\n\n return (\n <StyledComponent\n color={color}\n bgColor={bgColor}\n hover={hoverBkg}\n hoverColor={hoverColor}\n className={className}\n >\n {isAuthenticated ? (\n <Dropdown className=\"my-account-button\">\n <Dropdown.Toggle id=\"my-account-dropdown\">\n <img\n src={profile.picture || UserIcon}\n className={`profile-pic ${!profile.picture ? 'default-pic' : ''}`}\n alt={`${profile.firstName} ${profile.lastName}`}\n />\n <span>{`${profile.firstName} ${profile.lastName}`}</span>\n </Dropdown.Toggle>\n\n <Dropdown.Menu>\n <TranslatedLink className=\"nav-link\" name=\"myAccount.title\" path=\"/my-account\" />\n <TranslatedLink\n className=\"nav-link\"\n name=\"myAccount.bookings\"\n path=\"/my-account/bookings\"\n />\n <button className=\"nav-link\" onClick={signOut}>\n {t('myAccount.logOut')}\n </button>\n </Dropdown.Menu>\n </Dropdown>\n ) : (\n <>\n {!hideLoginBtn && (\n <Dropdown className=\"my-account-button notLogged\">\n <Dropdown.Toggle id=\"my-account-dropdown\">\n <div className=\"login-menu\"> {t('myAccount.logIn')}</div>\n </Dropdown.Toggle>\n <Dropdown.Menu>\n <TranslatedLink className=\"nav-link\" name=\"myAccount.personLogin\" path=\"/login\" />\n {showCompanyLoginBtn && (\n <TranslatedLink\n className=\"nav-link\"\n name=\"myAccount.companyLogin\"\n path=\"/login?isCompany=true\"\n />\n )}\n {showAgencyLoginBtn && (\n <TranslatedLink\n className=\"nav-link\"\n name=\"myAccount.agencyLogin\"\n path=\"/login?isAgency=true\"\n />\n )}\n </Dropdown.Menu>\n </Dropdown>\n )}\n </>\n )}\n </StyledComponent>\n );\n}\n\nMyAccountNavLink.propTypes = props;\n\nconst mapStateToProps = ({ user, siteConfiguration }) => ({\n isAuthenticated: user.isAuthenticated,\n settings: siteConfiguration.settings,\n profile: user.profile,\n});\n\nexport default withRouter(\n connect(mapStateToProps, { handleLogOut })(withTranslation()(MyAccountNavLink)),\n);\n","import MyAccountNavLink from './MyAccountNavLink';\nexport default MyAccountNavLink;\n","import style from 'styled-components';\n\nconst getStatusColor = status => {\n switch (status) {\n case 0: // Reserved\n return '#5AB9ED';\n case 1: // Confirmed\n return '#FFA400';\n case 2: // Delivered\n return '#2BCE81';\n case 3: // Closed\n return '#858C99';\n case 4: // Canceled\n return '#DE0050';\n case 5: // Quoted\n return '#3257B2';\n }\n return '#858C99';\n};\n\nexport const StyledBookingStatus = style.p` \n font-size: 0.8rem;\n color: #656970;\n margin-left: 15px; \n\n span {\n width: 10px;\n height: 10px;\n border-radius: 10px;\n display: inline-block;\n background: ${({ status }) => getStatusColor(status)};\n margin-right: 5px;\n } \n`;\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { StyledBookingStatus } from './BookingStatus.styled';\n\nfunction BookingStatus({ t, status }) {\n return (\n <StyledBookingStatus status={status} className=\"booking-status\">\n <span />\n {t(`bookingStatus.${status}`)}\n </StyledBookingStatus>\n );\n}\nexport default withTranslation()(BookingStatus);\n","import BookingStatus from './BookingStatus';\nexport default BookingStatus;\n","import style from 'styled-components';\n\nexport const StyledCancelConfirmationModal = style.div` \n`;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n t: PropTypes.func,\n show: PropTypes.bool,\n closeModal: PropTypes.func,\n item: PropTypes.object,\n handleGetUserBookings: PropTypes.func,\n};\n","import React, { useState } from 'react';\nimport { Alert, Modal } from 'react-bootstrap';\nimport { StyledCancelConfirmationModal } from './CancelConfirmationModal.styled';\nimport { Btn } from 'components';\nimport { props } from './CancelConfirmationModal.props';\nimport { withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { tt } from 'utils/translationHelper';\nimport { handleGetUserBookings } from 'actions';\nimport { userCancelReservation } from 'services/userService';\n\nconst CancelConfirmationModal = ({ t, show, closeModal, item, handleGetUserBookings }) => {\n const [loadingCancel, setLoadingCancel] = useState(false);\n const [error, setError] = useState('');\n\n const handleCancelBooking = event => {\n try {\n event.preventDefault();\n setError('');\n const parsedCancel = {\n BookingId: item.id,\n Lastname: item.customer.lastName,\n };\n setLoadingCancel(true);\n userCancelReservation(parsedCancel)\n .then(async () => {\n await handleGetUserBookings();\n closeModal();\n })\n .catch(error => {\n if (\n error.response == null ||\n error.response.data == null ||\n error.response.data.code !== 100\n ) {\n let errorMessage =\n error.response && error.response.data\n ? error.response.data.message\n : tt('__PageCancelarReserva.genericError', t);\n setError(errorMessage);\n } else {\n setError(error.response.data.message);\n }\n })\n .finally(() => {\n setLoadingCancel(false);\n });\n } catch (error) {\n alert(t('cancelError'));\n setLoadingCancel(false);\n }\n };\n\n return (\n <StyledCancelConfirmationModal>\n <Modal\n show={show}\n size=\"md\"\n aria-labelledby=\"cancel-booking-modal\"\n centered\n onHide={closeModal}\n >\n <Modal.Header closeButton>\n <Modal.Title id=\"cancel-booking-modal\">{t('cancelbooking')}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <p>\n {t('myAccount.cancelConfirmation', {\n bookingId: item && item.id,\n })}\n </p>\n {error && <Alert variant=\"danger\">{error}</Alert>}\n </Modal.Body>\n <Modal.Footer>\n <Btn onClick={closeModal} text={t('goBack')} secondary />\n <Btn\n onClick={handleCancelBooking}\n text={t('myAccount.cancelBooking')}\n loading={loadingCancel}\n iconSize=\"1rem\"\n iconColor=\"white\"\n />\n </Modal.Footer>\n </Modal>\n </StyledCancelConfirmationModal>\n );\n};\n\nCancelConfirmationModal.propTypes = props;\n\nconst mapStateToProps = ({ global, router }) => ({\n listCategories: global.listCategories,\n router: router,\n});\n\nconst CancelModalComp = withTranslation()(CancelConfirmationModal);\n\nexport default connect(mapStateToProps, { handleGetUserBookings })(CancelModalComp);\n","import CancelConfirmationModal from './CancelConfirmationModal';\nexport default CancelConfirmationModal;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n bgColor: PropTypes.string,\n bgImg: PropTypes.string,\n bgSize: PropTypes.string,\n bgPosition: PropTypes.string,\n bgAttachment: PropTypes.string,\n bgRepeat: PropTypes.string,\n titleSize: PropTypes.string,\n titleColor: PropTypes.string,\n descriptionSize: PropTypes.string,\n descriptionColor: PropTypes.string,\n iconSize: PropTypes.string,\n iconColor: PropTypes.string,\n items: PropTypes.array.isRequired,\n className: PropTypes.string,\n rate: PropTypes.number,\n showControls: PropTypes.bool,\n showIndicators: PropTypes.bool,\n interval: PropTypes.number,\n height: PropTypes.string,\n itemMargin: PropTypes.string,\n fade: PropTypes.bool,\n};\n","import styled from 'styled-components';\n\nexport const StyledReviewsCarousel = styled.div`\n background-color: ${({ theme, bgColor }) => bgColor || theme.colors.primary};\n background-image: ${({ bgImage }) => (bgImage ? ` url(${bgImage})` : 'none')};\n background-size: ${({ bgSize }) => bgSize || 'cover'};\n background-position: ${({ bgPosition }) => bgPosition || 'center'};\n background-attachment: ${({ bgAttachment }) => bgAttachment || 'fixed'};\n background-repeat: ${({ bgRepeat }) => bgRepeat || 'no-repeat'};\n\n .item-wrapper {\n width: 100%;\n display: flex;\n min-height: ${({ height }) => height || '200px'};\n margin: ${({ itemMargin }) => itemMargin || '2rem 0'};\n justify-content: center;\n align-items: center;\n }\n\n .carousel-caption {\n position: inherit;\n max-width: 750px;\n margin: auto;\n\n h3 {\n font-size: ${({ titleSize }) => titleSize || '1.3rem'};\n color: ${({ titleColor }) => titleColor || 'white'};\n }\n\n p {\n font-size: ${({ descriptionSize }) => descriptionSize || '1rem'};\n color: ${({ descriptionColor }) => descriptionColor || 'white'};\n margin-bottom: 0;\n }\n }\n\n .stars-wrapper {\n margin-bottom: 1rem;\n\n i {\n font-size: ${({ iconSize }) => iconSize || '13px'};\n margin: 0 5px;\n color: ${({ iconColor }) => iconColor || 'gold'};\n }\n }\n\n @media (max-width: ${({ theme }) => theme.screens.lg}) {\n .carousel-caption {\n max-width: 70%;\n }\n }\n`;\n","import React from 'react';\nimport { props } from './ReviewsCarousel.props';\nimport { StyledReviewsCarousel } from './ReviewsCarousel.styled';\nimport withSettingsContext from 'SettingsContext';\nimport { Carousel, Col } from 'react-bootstrap';\n\nfunction ReviewsCarousel({\n bgColor,\n bgImage,\n bgSize,\n bgPosition,\n bgAttachment,\n bgRepeat,\n titleSize,\n titleColor,\n descriptionSize,\n descriptionColor,\n iconSize,\n iconColor,\n height,\n itemMargin,\n items,\n className = '',\n showControls = true,\n showIndicators = false,\n interval,\n fade,\n}) {\n const getStarIcons = rate => {\n const rating = Math.round(rate * 2) / 2;\n let output = [];\n\n // Append all the filled whole stars\n for (var i = rating; i >= 1; i--) {\n output.push('<i class=\"fas fa-star\"></i>');\n }\n\n // If there is a half a star, append it\n if (i === 0.5) {\n output.push('<i class=\"fas fa-star-half-alt\"></i>');\n }\n\n // Fill the empty stars\n for (let i = 5 - rating; i >= 1; i--) {\n output.push('<i class=\"far fa-star\"></i>');\n }\n\n return output.join('');\n };\n\n return (\n <StyledReviewsCarousel\n className={`row reviews-carousel ${className}`}\n bgColor={bgColor}\n bgImage={bgImage}\n bgSize={bgSize}\n bgPosition={bgPosition}\n bgAttachment={bgAttachment}\n bgRepeat={bgRepeat}\n titleSize={titleSize}\n titleColor={titleColor}\n descriptionSize={descriptionSize}\n descriptionColor={descriptionColor}\n iconSize={iconSize}\n iconColor={iconColor}\n height={height}\n itemMargin={itemMargin}\n >\n <Col>\n <Carousel\n fade={fade}\n controls={showControls}\n indicators={showIndicators}\n interval={interval}\n >\n {items.map((item, idx) => {\n return (\n <Carousel.Item key={idx}>\n <div className=\"item-wrapper\">\n <Carousel.Caption>\n {item.rate && (\n <div\n className=\"stars-wrapper\"\n dangerouslySetInnerHTML={{\n __html: getStarIcons(item.rate),\n }}\n />\n )}\n <h3>{item.title}</h3>\n <p>{item.description}</p>\n </Carousel.Caption>\n </div>\n </Carousel.Item>\n );\n })}\n </Carousel>\n </Col>\n </StyledReviewsCarousel>\n );\n}\n\nReviewsCarousel.propTypes = props;\n\nexport default withSettingsContext(ReviewsCarousel);\n","import ReviewsCarousel from './ReviewsCarousel';\nexport default ReviewsCarousel;\n","import style from 'styled-components';\n\nexport const StyledForgotPasswordForm = style.div`\n margin-bottom: 1rem;\n\n form {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: 1rem;\n }\n\n .title {\n font-size: 1.1rem;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 1.2rem;\n } \n\n .submit_btn {\n min-width: 160px;\n }\n\n .error-alert { \n max-width: fit-content;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledModernForgotPasswordForm = style.div`\n margin-bottom: 1rem;\n\n form {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: 1rem;\n }\n\n .title {\n font-size: 1.1rem;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 1.2rem;\n } \n \n .submit_btn {\n min-width: 160px;\n }\n\n .input-wrapper, .input-wrapper input.form-control {\n border-radius: 8px !important;\n }\n \n .error-alert { \n max-width: fit-content;\n }\n`;\n","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { Alert, Col, Form, Row } from 'react-bootstrap';\nimport { withTranslation } from 'react-i18next';\nimport { StyledForgotPasswordForm } from './ForgotPasswordForm.styled';\nimport { StyledModernForgotPasswordForm } from './ForgotPasswordForm.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { TextInput, Card, Btn, Icon } from 'components/';\nimport { isValidEmail } from 'utils/dataHelper';\nimport { handleForgotPassword } from 'actions';\nimport { history } from 'store';\nimport { tlink } from 'utils/translationHelper';\n\nfunction ForgotPasswordForm({\n t,\n i18n,\n settings: { theme, configurations },\n isAuthenticated,\n handleForgotPassword,\n}) {\n const [loading, setLoading] = useState(false);\n const [email, setEmail] = useState('');\n const [emailBlur, setEmailBlur] = useState(false);\n const [error, setError] = useState('');\n const [success, setSuccess] = useState(false);\n\n const StyledComponent =\n theme.template === MODERN_THEME ? StyledModernForgotPasswordForm : StyledForgotPasswordForm;\n\n const getLink = path => {\n return tlink(path, t, i18n, null, configurations.langConfig);\n };\n\n useEffect(() => {\n if (isAuthenticated) history.replace(getLink('/my-account'));\n }, [isAuthenticated]);\n\n const submit = async e => {\n e.preventDefault();\n setError('');\n try {\n setLoading(true);\n const result = await handleForgotPassword({\n email,\n });\n if (result.payload && result.payload.success) {\n setSuccess(true);\n } else {\n setError(t(result.payload.data));\n }\n } catch (error) {\n const message = error.response && error.response.data.message;\n setError(message || t('registerError'));\n } finally {\n setLoading(false);\n }\n };\n\n const disableRegister = !isValidEmail(email);\n\n return (\n <StyledComponent>\n {error && (\n <Alert variant=\"danger\" onClose={() => setError('')} dismissible className=\"error-alert\">\n {error}\n </Alert>\n )}\n {success && (\n <div className=\"col-md-8 offset-md-2 text-center\">\n <Icon className=\"fas fa-check-circle display-3 mb-5 text-success\"></Icon>\n <h4>{t('myAccount.recoverPasswordEmailSuccess')}</h4>\n </div>\n )}\n {!success && (\n <Card>\n <Form>\n <Row>\n <Col>\n <h2 className=\"title\">{t('myAccount.recoverPassword')}</h2>\n </Col>\n </Row>\n <Row className=\"mb-3\">\n <Col md={12}>\n <TextInput\n inputClass=\"form-control\"\n type=\"mail\"\n className=\"form-control\"\n placeholder={t('myAccount.email')}\n value={email}\n onChange={setEmail}\n options={{ onBlur: () => setEmailBlur(true) }}\n error={emailBlur && !isValidEmail(email) && t('validEmail')}\n />\n </Col>\n </Row>\n <Row>\n <Col>\n <Btn\n className=\"m-auto submit_btn\"\n text={t('myAccount.recoverPassword')}\n disabled={disableRegister || loading}\n loading={loading}\n iconColor=\"white\"\n iconSize=\"1.2rem\"\n onClick={submit}\n />\n </Col>\n </Row>\n </Form>\n </Card>\n )}\n </StyledComponent>\n );\n}\n\nconst mapStateToProps = ({ siteConfiguration, user }) => ({\n settings: siteConfiguration.settings,\n isAuthenticated: user.isAuthenticated,\n});\n\nexport default connect(mapStateToProps, {\n handleForgotPassword,\n})(withTranslation()(ForgotPasswordForm));\n","import ForgotPasswordForm from './ForgotPasswordForm';\nexport default ForgotPasswordForm;\n","import style from 'styled-components';\n\nexport const StyledResetPasswordForm = style.div`\n margin-bottom: 1rem;\n\n form {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: 1rem;\n }\n\n .title {\n font-size: 1.1rem;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 1.2rem;\n } \n\n .subtitle {\n font-size: 14px;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 1.2rem;\n }\n\n .submit_btn {\n min-width: 160px;\n }\n\n .error-alert { \n max-width: fit-content;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledModernResetPasswordForm = style.div`\n margin-bottom: 1rem;\n\n form {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-top: 1rem;\n }\n\n .title {\n font-size: 1.1rem;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 1.2rem;\n } \n\n .subtitle {\n font-size: 14px;\n color: ${({ theme }) => theme.font.colors.primary};\n margin-bottom: 1.2rem;\n }\n \n .submit_btn {\n min-width: 160px;\n }\n\n .input-wrapper, .input-wrapper input.form-control {\n border-radius: 8px !important;\n }\n \n .error-alert { \n max-width: fit-content;\n }\n`;\n","import React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { Alert, Col, Form, Row } from 'react-bootstrap';\nimport { withTranslation } from 'react-i18next';\nimport { StyledResetPasswordForm } from './ResetPasswordForm.styled';\nimport { StyledModernResetPasswordForm } from './ResetPasswordForm.styled.modern';\nimport { MODERN_THEME } from 'styled/constants';\nimport { TextInput, Card, Btn, Logo } from 'components/';\nimport { handleResetPassword } from 'actions';\nimport { history } from 'store';\n\nfunction ResetPasswordForm({\n t,\n i18n,\n settings: { theme, myAccountConfiguration },\n isAuthenticated,\n handleResetPassword,\n email,\n token,\n}) {\n const [loading, setLoading] = useState(false);\n const [password, setPassword] = useState('');\n const [repeatPassword, setRepeatPassword] = useState('');\n const [passwordBlur, setPasswordBlur] = useState(false);\n const [repeatPasswordBlur, setRepeatPasswordBlur] = useState(false);\n const [error, setError] = useState('');\n const logo = myAccountConfiguration && myAccountConfiguration.logo;\n\n const StyledComponent =\n theme.template === MODERN_THEME ? StyledModernResetPasswordForm : StyledResetPasswordForm;\n\n useEffect(() => {\n if (isAuthenticated) history.replace('/my-account');\n }, [isAuthenticated]);\n\n const submit = async e => {\n e.preventDefault();\n setError('');\n try {\n setLoading(true);\n await handleResetPassword({\n email,\n password,\n token,\n });\n } catch (error) {\n if (!error.success) {\n setError(t(error.data));\n } else {\n const message = error.response && error.response.data.message;\n setError(message || t('registerError'));\n }\n } finally {\n setLoading(false);\n }\n };\n\n const disableRegister = password.length < 6 || password !== repeatPassword;\n\n return (\n <StyledComponent>\n {error && (\n <Alert variant=\"danger\" onClose={() => setError('')} dismissible className=\"error-alert\">\n {error}\n </Alert>\n )}\n <Card>\n <Form>\n {logo && <Logo className=\"ml-auto mr-auto mb-4\" src={logo} />}\n <Row>\n <Col>\n <h2 className=\"title\">{t('myAccount.restorePassword')}</h2>\n </Col>\n </Row>\n <Row className=\"mb-3\">\n <Col md={12}>\n <TextInput\n inputClass=\"form-control\"\n type=\"password\"\n className=\"form-control\"\n placeholder={t('myAccount.newPassword')}\n value={password}\n onChange={setPassword}\n options={{ onBlur: () => setPasswordBlur(true) }}\n error={passwordBlur && password.length < 6 && t('passwordError')}\n />\n </Col>\n </Row>\n <Row className=\"mb-3\">\n <Col md={12}>\n <TextInput\n inputClass=\"form-control\"\n type=\"password\"\n className=\"form-control\"\n placeholder={t('myAccount.repeatPassword')}\n value={repeatPassword}\n onChange={setRepeatPassword}\n options={{ onBlur: () => setRepeatPasswordBlur(true) }}\n error={\n repeatPasswordBlur &&\n (!repeatPassword || password !== repeatPassword) &&\n t('passwordMatch')\n }\n />\n </Col>\n </Row>\n <Row>\n <Col>\n <Btn\n className=\"m-auto submit_btn\"\n text={t('myAccount.confirm')}\n disabled={disableRegister || loading}\n loading={loading}\n iconColor=\"white\"\n iconSize=\"1.2rem\"\n onClick={submit}\n />\n </Col>\n </Row>\n </Form>\n </Card>\n </StyledComponent>\n );\n}\n\nconst mapStateToProps = ({ siteConfiguration, global, user }) => ({\n settings: siteConfiguration.settings,\n isAuthenticated: user.isAuthenticated,\n});\n\nexport default connect(mapStateToProps, {\n handleResetPassword,\n})(withTranslation()(ResetPasswordForm));\n","import ResetPasswordForm from './ResetPasswordForm';\nexport default ResetPasswordForm;\n","import style from 'styled-components';\n\nexport const StyledWhatsappContainer = style.div`\n position: fixed;\n bottom: 52px;\n right: 10px;\n width: 60px;\n height: 60px;\n transition: all 0.3s ease;\n z-index: 100;\n\n img {\n width: 100%;\n }\n\n &:hover {\n transform: scale(1.1);\n }\n\n img {\n width:100%;\n }\n`;\n","import FloatingWhatsapp from './FloatingWhatsapp';\nexport default FloatingWhatsapp;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n phoneNumber: PropTypes.string.isRequired,\n whatsappImage: PropTypes.string,\n messageText: PropTypes.string,\n disabled: PropTypes.bool,\n};\n","import React from 'react';\nimport { StyledWhatsappContainer } from './FloatingWhatsapp.styled';\nimport { props } from './FloatingWhatsapp.props';\nimport { withTranslation } from 'react-i18next';\nimport { tt } from 'utils/translationHelper';\n\nconst FloatingWhatsapp = ({ phoneNumber, whatsappImage, messageText, disabled, t }) => {\n if (disabled) return null;\n const defaultImg = 'https://rently.blob.core.windows.net/rently/Web/wt.png';\n return (\n <StyledWhatsappContainer>\n {tt(messageText, t).includes('__FloatingWhatsapp.messageText') ? (\n <a\n href={`https://api.whatsapp.com/send?phone=${phoneNumber}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n id=\"whatsapp-button-floating\"\n >\n <img src={whatsappImage || defaultImg} alt=\"logo-whatsapp\" />\n </a>\n ) : (\n <a\n href={`https://api.whatsapp.com/send?phone=${phoneNumber}&text=${tt(messageText, t)}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n id=\"whatsapp-button-floating\"\n >\n <img src={whatsappImage || defaultImg} alt=\"logo-whatsapp\" />\n </a>\n )}\n </StyledWhatsappContainer>\n );\n};\n\nFloatingWhatsapp.propTypes = props;\n\nexport default withTranslation()(FloatingWhatsapp);\n","import PropTypes from 'prop-types';\n\nexport const props = {\n disabled: PropTypes.bool,\n};\n","import style from 'styled-components';\n\nexport const StyledBackToTopButtonContainer = style.div`\nposition: fixed;\nbottom: 52px;\nleft: 10px;\nwidth: 60px;\nheight: 60px;\ntransition: all 0.3s ease;\nz-index: 9999;\n\nimg {\n width: 100%;\n}\n\n&:hover {\n transform: scale(1.1);\n}\n\nimg {\n width:100%;\n}\n\n@media (min-width: ${props => props.theme.screens.md}){\n display:none;\n}\n`;\n","import BackToTopButton from './BackToTopButton';\nexport default BackToTopButton;\n","import React from 'react';\nimport { withTranslation } from 'react-i18next';\nimport { props } from './BackToTopButton.props';\nimport { StyledBackToTopButtonContainer } from './BackToTopButton.styled';\n\nconst BackToTopButton = ({ disabled }) => {\n if (disabled) return null;\n return (\n <StyledBackToTopButtonContainer>\n <a href=\"#mainNav\" rel=\"noopener noreferrer\">\n <img\n src=\"https://rently.blob.core.windows.net/hertz/Web/up-arrow-white.png\"\n alt=\"back-to-top-button\"\n />\n </a>\n </StyledBackToTopButtonContainer>\n );\n};\n\nBackToTopButton.propTypes = props;\n\nexport default withTranslation()(BackToTopButton);\n","import style from 'styled-components';\n\nexport const StyledCookiesConsentContainter = style.div`\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n color: ${props => props.color || props.theme.font.colors.primary}\n background: ${props => props.bgColor || props.theme.colors.third};\n z-index: 10;\n box-shadow: 0 -2px 15px rgba(0, 0, 0, 0.5);\n \n .container {\n display: flex;\n gap: 20px;\n min-height: 60px;\n }\n`;\n","import CookiesConsent from './CookiesConsent';\nexport default CookiesConsent;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n policyLink: PropTypes.string,\n customMessage: PropTypes.string,\n bgColor: PropTypes.string,\n color: PropTypes.string,\n btnBackground: PropTypes.string,\n btnColor: PropTypes.string,\n disabled: PropTypes.bool,\n};\n","import React, { useEffect, useState } from 'react';\nimport Btn from 'components/Btn';\nimport withSettingsContext from 'SettingsContext';\nimport Storage from 'utils/storage';\nimport { tlink, tt } from 'utils/translationHelper';\nimport { Trans, withTranslation } from 'react-i18next';\nimport { StyledCookiesConsentContainter } from './CookiesConsent.styled';\nimport { props } from './CookiesConsent.props';\n\nconst CookiesConsent = ({\n bgColor,\n color,\n btnBackground,\n btnColor,\n customMessage,\n policyLink,\n disabled,\n t,\n i18n,\n settings,\n}) => {\n const [isAccepted, setIsAccepted] = useState(false);\n\n useEffect(() => {\n const storedValue = Storage.getElement('cookiesAccepted');\n if (storedValue) {\n setIsAccepted(JSON.parse(storedValue));\n }\n }, []);\n\n if (disabled || isAccepted) return null;\n\n function handleAcceptCookies() {\n Storage.setElement('cookiesAccepted', JSON.stringify(true));\n setIsAccepted(true);\n }\n\n return (\n <StyledCookiesConsentContainter id=\"cookies-modal\" bgColor={bgColor} color={color}>\n <div className=\"container my-3\">\n {customMessage ? (\n <div\n style={{ flexGrow: 1 }}\n dangerouslySetInnerHTML={{ __html: tt(customMessage, t) }}\n ></div>\n ) : (\n <p>\n <Trans i18nKey=\"cookies.consentMessage\">\n This site uses cookies. Visit our\n <a\n href={tlink(\n policyLink || '/cookies',\n t,\n i18n,\n null,\n settings.configurations.langConfig,\n )}\n >\n cookies policy page\n </a>\n or click the link in any footer for more information and to change your preferences.\n </Trans>\n </p>\n )}\n <Btn\n text={t('cookies.acceptBtn')}\n background={btnBackground}\n color={btnColor}\n onClick={handleAcceptCookies}\n />\n </div>\n </StyledCookiesConsentContainter>\n );\n};\n\nCookiesConsent.propTypes = props;\n\nexport default withSettingsContext(withTranslation()(CookiesConsent));\n","import styled from 'styled-components';\n\nexport const StyledPreHeaderContainer = styled.div`\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n padding: 10px 40px;\n gap: 10px;\n font-size: 14px;\n color: ${({ color }) => color || '#212529'};\n background: ${({ bgColor }) => bgColor || '#EFEFEF'};\n\n .contact-list {\n display: flex;\n width: 100%;\n overflow: scroll;\n gap: 10px;\n padding-right: 50px;\n\n -ms-overflow-style: none;\n scrollbar-width: none;\n ::-webkit-scrollbar {\n display: none;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n padding: 10px 20px;\n\n .header-title {\n display: none;\n }\n }\n`;\n\nexport const StyledContactCard = styled.div`\n display: flex;\n gap: 10px;\n min-width: 160px;\n\n .contact-icon {\n display: flex;\n flex-shrink: 0;\n justify-content: center;\n align-items: center;\n background-color: ${({ defaultIconBg }) => defaultIconBg};\n width: 40px;\n height: 40px;\n cursor: pointer;\n border-radius: 5px;\n\n i {\n color: #fff;\n font-size: 1.4rem;\n }\n }\n\n .contact-icon:hover {\n opacity: 0.7;\n box-shadow: 0 0px 4px rgba(0, 0, 0, 25%);\n }\n\n .contact-body {\n display: flex;\n flex-direction: column;\n justify-content: end;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n div {\n font-size: 12px;\n }\n }\n\n @media (max-width: ${props => props.theme.screens.lg}) {\n min-width: 130px;\n gap: 5px;\n\n .header-title {\n font-size: 14px;\n }\n\n .contact-icon {\n width: 32px;\n height: 32px;\n\n i {\n font-size: 1rem;\n }\n }\n\n .contact-body {\n font-size: 12px;\n\n div {\n font-size: 10px;\n }\n }\n }\n`;\n","import React from 'react';\nimport { StyledContactCard } from '../PreHeader.styled';\nimport withSettingsContext from 'SettingsContext';\nimport { withTranslation } from 'react-i18next';\n\nconst getContactStyles = path => {\n if (path.includes('mailto')) {\n return { defaultIcon: 'far fa-envelope', defaultIconBg: '#34C759' };\n }\n if (path.includes('wa.me')) {\n return { defaultIcon: 'fab fa-whatsapp', defaultIconBg: '#00C7BE' };\n }\n if (path.includes('://')) {\n return { defaultIcon: 'fas fa-link', defaultIconBg: '#348cc7' };\n }\n if (path.includes('tel')) {\n return { defaultIcon: 'fas fa-phone', defaultIconBg: '#FF5F00' };\n }\n return { defaultIcon: 'fas fa-globe', defaultIconBg: '#c75879' };\n};\n\nfunction ContactCard({ t, contact }) {\n const { defaultIcon, defaultIconBg } = getContactStyles(contact.path);\n\n return (\n <StyledContactCard className=\"contact-card\" defaultIconBg={contact.iconBg || defaultIconBg}>\n <a href={contact.path} className=\"contact-icon\">\n <i className={contact.icon || defaultIcon} />\n </a>\n <div className=\"contact-body\">\n {contact.legend && <div>{t(contact.legend) || contact.legend}</div>}\n <a href={contact.path}>{t(contact.name) || contact.name}</a>\n </div>\n </StyledContactCard>\n );\n}\n\nexport default withSettingsContext(withTranslation()(ContactCard));\n","import React from 'react';\nimport { StyledPreHeaderContainer } from './PreHeader.styled';\nimport withSettingsContext from 'SettingsContext';\nimport { withTranslation } from 'react-i18next';\nimport PreHeaderContactCard from './ContactCard/PreHeaderContactCard';\n\nfunction PreHeader({ t, color, bgColor, headerText, contactLinks }) {\n return (\n <StyledPreHeaderContainer className=\"row\" bgColor={bgColor} color={color}>\n {headerText && <div className=\"header-title\">{t(headerText) || headerText}</div>}\n <div className=\"contact-list\">\n {contactLinks.map((contact, idx) => {\n return <PreHeaderContactCard contact={contact} key={idx} />;\n })}\n </div>\n </StyledPreHeaderContainer>\n );\n}\n\nexport default withSettingsContext(withTranslation()(PreHeader));\n","import PreHeader from './PreHeader';\nexport default PreHeader;\n","import HubspotForm from './HubspotForm';\nexport default HubspotForm;\n","import PropTypes from 'prop-types';\n\nexport const props = {\n src: PropTypes.string.isRequired,\n config: PropTypes.shape({\n portalId: PropTypes.string,\n formId: PropTypes.string,\n target: PropTypes.string,\n }).isRequired,\n};\n","import React, { useEffect } from 'react';\nimport { props } from './HubspotForm.props';\n\nconst HubspotForm = ({ src, config }) => {\n useEffect(() => {\n const script = document.createElement('script');\n script.src = src;\n document.body.appendChild(script);\n\n script.addEventListener('load', () => {\n if (window.hbspt && config) {\n window.hbspt.forms.create({ ...config, target: '#hubspot-form' });\n }\n });\n }, []);\n\n return (\n <div>\n <div id=\"hubspot-form\"></div>\n </div>\n );\n};\n\nHubspotForm.propTypes = props;\n\nexport default HubspotForm;\n","import { fetchInitialSettings } from 'services/api';\nimport { SITE_CONFIGURATION_SET_SETTINGS } from 'utils/types';\nimport Storage from 'utils/storage';\n\nexport const fetchSettings = (\n refreshCache = false,\n version = null,\n isdraft = false,\n) => async dispatch => {\n try {\n if (refreshCache) {\n await Storage.removeElement('fetchInitialSettings', true);\n }\n\n const data = await Storage.getOrUpdateItem(\n 'fetchInitialSettings',\n async () => {\n return (await fetchInitialSettings(version, isdraft)).data;\n },\n 30,\n true,\n );\n\n return dispatch({\n type: SITE_CONFIGURATION_SET_SETTINGS,\n payload: data,\n });\n } catch (error) {\n return Promise.reject(error);\n }\n};\n","import {\n SEARCH_CARS_SET_PARAMS,\n SEARCH_CARS_SET_CARS,\n SEARCH_CARS_SET_CHECKOUT,\n} from 'utils/types';\nimport moment from 'moment';\nimport { fetchCars, fetchPrice } from 'services/api';\n\nexport const setSearchCarParams = params => {\n return {\n type: SEARCH_CARS_SET_PARAMS,\n payload: params,\n };\n};\n\nexport const fetchBookeableCars = (\n {\n dateFrom,\n hourFrom,\n pickUpId,\n pickUpEndpoint,\n dateTo,\n hourTo,\n dropOffId,\n dropOffEndpoint,\n onlyFullAvailability,\n promotions,\n driverAge,\n commercialAgreementCode,\n },\n language = '',\n ilimitedKm,\n showFinalPrice = false,\n globalId,\n listCurrencies,\n setWebCurrencyAction,\n isNewApi = false,\n\n) => async dispatch => {\n try {\n const [hoursFrom, minutesFrom] = hourFrom.split(':');\n const [hoursTo, minutesTo] = hourTo.split(':');\n const from = dateFrom._isAMomentObject\n ? `${dateFrom} ${hourFrom}`\n : moment(dateFrom, 'DD-MM-YYYY')\n .set({ hour: hoursFrom, minutes: minutesFrom })\n .format('YYYY/MM/DD HH:mm');\n const to = dateTo._isAMomentObject\n ? `${dateTo} ${hourTo}`\n : moment(dateTo, 'DD-MM-YYYY')\n .set({ hour: hoursTo, minutes: minutesTo })\n .format('YYYY/MM/DD HH:mm');\n\n dispatch({\n type: SEARCH_CARS_SET_CARS,\n payload: { cars: [], loading: true, error: null },\n });\n const { data } = await fetchCars(\n from,\n to,\n pickUpId,\n pickUpEndpoint,\n dropOffId || pickUpId,\n dropOffEndpoint || pickUpEndpoint,\n language,\n ilimitedKm,\n showFinalPrice,\n onlyFullAvailability,\n promotions,\n globalId,\n driverAge,\n commercialAgreementCode\n );\n\n if (isNewApi && data.length > 0 && listCurrencies && setWebCurrencyAction) {\n var cur = listCurrencies.find(x=>x.isoCode === data[0].currency);\n if (cur != null) {\n await setWebCurrencyAction(cur);\n }\n }\n\n return dispatch({\n type: SEARCH_CARS_SET_CARS,\n payload: { cars: data, loading: false, error: null },\n });\n } catch (err) {\n return dispatch({\n type: SEARCH_CARS_SET_CARS,\n payload: {\n cars: [],\n loading: false,\n error: err.response && err.response.data ? err.response.data : 'searchError',\n },\n });\n }\n};\n\nexport const setCheckout = checkout => ({\n type: SEARCH_CARS_SET_CHECKOUT,\n payload: checkout,\n});\n\nexport const fetchPrices = (\n language = '',\n additionals,\n params,\n booking,\n refreshStore = false,\n onlinePayment,\n globalId,\n) => async dispatch => {\n try {\n const {\n dateFrom,\n hourFrom,\n dateTo,\n hourTo,\n pickUpId,\n pickUpEndpoint,\n dropOffId,\n ilimitedKm,\n driverAge,\n commercialAgreementCode,\n } = params;\n\n if (refreshStore) {\n dispatch({\n type: SEARCH_CARS_SET_CHECKOUT,\n payload: {\n booking: null,\n isLoading: true,\n onlinePayment: onlinePayment,\n },\n });\n }\n\n let { data } = await fetchPrice(\n language,\n additionals,\n `${moment(dateFrom, 'DD-MM-YYYY').format('YYYY/MM/DD')} ${hourFrom}`,\n `${moment(dateTo, 'DD-MM-YYYY').format('YYYY/MM/DD')} ${hourTo}`,\n pickUpId,\n pickUpEndpoint,\n dropOffId,\n booking.car.model.id,\n ilimitedKm,\n booking.promotion,\n globalId,\n driverAge,\n commercialAgreementCode,\n );\n\n // booking came marked as onlyQuote, we want to keep this flag after a fetchPrice\n if (booking.onlyQuote) data['onlyQuote'] = true;\n\n return dispatch({\n type: SEARCH_CARS_SET_CHECKOUT,\n payload: {\n booking: data,\n isLoading: false,\n onlinePayment: onlinePayment,\n },\n });\n } catch (error) {\n return dispatch({\n type: SEARCH_CARS_SET_CHECKOUT,\n payload: {\n booking: null,\n isLoading: false,\n isError: true,\n errorMessage: error.response.data.message,\n onlinePayment: onlinePayment,\n },\n });\n }\n};\n","import userFetcher from 'utils/userFetcher';\n\nconst api = new userFetcher();\nconst apiUrl = process.env.REACT_APP_BACKEND_API;\n\nexport const validateInvitation = async token => {\n return await api.post(`${apiUrl}/UserCompany/validate-invitation?token=${token}`);\n};\n\nexport const registerCompany = async (globalId, password) => {\n return await api.post(`${apiUrl}/UserCompany/register-company`, {\n globalId,\n password,\n });\n};\n","export const getPriceWithExchangeRate = (price, currentCurrency, defaultCurrency, webCurrency) => {\n if (currentCurrency == null || defaultCurrency == null || webCurrency == null) return price;\n\n //selected currency (currentCurrency) is the same as api user currency (webCurrency) -> not apply exchange rate.\n if (currentCurrency?.isoCode == webCurrency?.isoCode) return price;\n //selected currency, is default currency -> apply web currency exchange rate.\n else if (currentCurrency?.isoCode == defaultCurrency?.isoCode)\n return price * (1 / webCurrency?.exchangeRate);\n //selected currency is different from default and web currency -> convert first to default, and then apply current exchange rate.\n else return price * (1 / webCurrency?.exchangeRate) * currentCurrency?.exchangeRate;\n};\n\nexport const applyCurrencyExchangeRate = (currentCurrency, webCurrency) => {\n const applyCurrencyExchange =\n currentCurrency != null &&\n webCurrency != null &&\n currentCurrency?.isoCode !== webCurrency?.isoCode;\n return applyCurrencyExchange;\n};\n","import moment from 'moment';\n\nexport const transformCountriesToSelectOptions = countries => {\n if (!countries) return [];\n\n return countries.map(country => {\n return { value: country.name, text: country.name };\n });\n};\n\nexport const isValidEmail = email => {\n const regExp = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return String(email)\n .toLowerCase()\n .match(regExp);\n};\n\nexport const getDocumentTypeName = (listDocumentTypes, id) => {\n const type = (listDocumentTypes || []).find(d => d.id === parseFloat(id) || d.value === id);\n if (type) return (type.name || type.value).toUpperCase();\n return null;\n};\n\nexport const getDocumentMask = (id, type, isFocused, listDocumentTypes) => {\n if (!id || getDocumentTypeName(listDocumentTypes, type) !== 'RUT') {\n return '******************************';\n }\n\n if (isFocused) return '9999999**';\n\n if (id.length > 8) return '99.999.999-*';\n\n return '9.999.999-*';\n};\n\nexport const invertValueSign = value => {\n if (value) {\n if (value > 0) return `-${value}`;\n return Math.abs(value);\n }\n return 0;\n};\n\nexport const useQuery = location => {\n return new URLSearchParams(location.search);\n};\n\nexport const isCompanyUser = profile => {\n if (!profile) return false;\n\n return profile.isCompany || profile.isAgency || profile.isProvider || profile.isHotel;\n};\n\nexport const isAgencyUser = profile => {\n if (!profile) return false;\n\n return profile.isAgency;\n};\n\nexport const convertToBase64 = file => {\n return new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n fileReader.readAsDataURL(file);\n fileReader.onload = () => {\n resolve(fileReader.result);\n };\n fileReader.onerror = error => {\n reject(error);\n };\n });\n};\n\nconst getCommissionAmount = (price, paymentConfiguration) => {\n // commissionPercentage is a round number for instance 30 = 30%\n return paymentConfiguration?.commissionPercentage\n ? (paymentConfiguration.commissionPercentage / 100) * price\n : 0;\n};\n\nexport const getPriceWithCommission = (price, paymentConfiguration) => {\n const commissionAmount = getCommissionAmount(price, paymentConfiguration);\n\n return price + commissionAmount;\n};\n\nexport const getPriceWithoutVat = priceItems => {\n const totalWithoutVat = priceItems.reduce((acc, item) => {\n if (item.type !== 15) {\n return acc + item.price;\n }\n return acc;\n }, 0);\n\n return totalWithoutVat;\n};\n\nexport const dateFormatEdition = (stringDate, dateFormat) => {\n const day = moment(stringDate, 'DD/MM/YYYY');\n const formattedDate = day.format(dateFormat);\n return formattedDate;\n};\n\nexport const handleGetTotalToPay = (balance, paymentConfiguration, qsamount) => {\n const amount = Math.abs(balance);\n const price = getPriceWithCommission(amount, paymentConfiguration);\n\n if (qsamount && Math.abs(price) >= Math.abs(qsamount)) {\n return Math.abs(qsamount);\n } else {\n if (paymentConfiguration?.onlyPayCommission && paymentConfiguration?.commissionPercentage) {\n return Math.abs(getCommissionAmount(amount, paymentConfiguration));\n }\n if (paymentConfiguration?.percentageToPay) {\n return Math.abs((price / 100) * paymentConfiguration.percentageToPay);\n } else {\n return Math.abs(price);\n }\n }\n};\n","export default class Storage {\n /*\n * store an element on the local/session storage\n * @param {string} index\n * @param {string} data\n * @param {bool} isLocal\n * @return {void}\n * */\n static setElement(index, data, isLocal = true) {\n if (isLocal) {\n window.localStorage.setItem(index, data);\n } else {\n window.sessionStorage.setItem(index, data);\n }\n }\n\n /*\n * get an element on the local/session storage\n * @param {string} index\n * @param {bool} isLocal\n * @return {string}\n * */\n static getElement(index, isLocal = true) {\n if (isLocal) {\n return window.localStorage.getItem(index);\n } else {\n return window.sessionStorage.getItem(index);\n }\n }\n\n /*\n * remove an element on the local/session storage\n * @param {string} index\n * @param {bool} useSession\n * @return {Promise<any>}\n * */\n static removeElement(index, useSession = false) {\n var storage = useSession ? sessionStorage : localStorage;\n\n return new Promise((resolve, reject) => {\n storage.removeItem(index);\n resolve(true);\n });\n }\n\n /*\n * clear the local/session storage\n * @param {bool} isLocal\n * @return {void}\n * */\n static clear(isLocal = true) {\n if (isLocal) {\n window.localStorage.clear();\n } else {\n window.sessionStorage.clear();\n }\n }\n\n /*\n Gets the item from the localstorage. If not exists or its expired (30 minutes by default)\n use the callback (async) to get the item and save it in the storage.\n If the callback fails or return null, the expired item will be used.\n */\n static async getOrUpdateItem(name, callback, expiresIn = 30, useSession = false) {\n if (process.env.NODE_ENV === 'development' && process.env.REACT_APP_USE_MOCK === 'true')\n return callback();\n\n var storage = useSession ? sessionStorage : localStorage;\n\n var sItem = JSON.parse(storage.getItem(name));\n\n if (!sItem || sItem.expiresOn <= Date.now()) {\n try {\n let newItem = await callback();\n\n if (newItem) {\n let expiresOn = new Date();\n\n sItem = {\n value: newItem,\n expiresOn: expiresOn.setMinutes(expiresOn.getMinutes() + 30),\n };\n\n storage.setItem(name, JSON.stringify(sItem));\n }\n } catch (err) {\n // TODO log\n throw err;\n }\n }\n return sItem == null ? null : sItem.value;\n }\n}\n","const BaseTheme = {\n name: 'base',\n colors: {\n bg: '#fff',\n searchBg: '#EFEFEF',\n primary: '#000',\n secondary: '#FCDE2F',\n third: '#fff',\n mobileHeader: '#272727',\n buttonPrimaryBg: '#FCDE2F',\n buttonPrimaryBgHover: '#f7b500',\n buttonPrimaryBorder: '#ffd255',\n buttonPrimaryColor: '#000',\n disabled: '#a19fa4',\n alert: '#ff0000',\n hightlight: '#DDDDDD',\n },\n font: {\n colors: {\n primary: '#fff',\n secondary: '#000',\n third: '#FFBB3C',\n },\n },\n screens: {\n xs: '475.98px',\n sm: '575.98px',\n md: '767.98px',\n lg: '1080px',\n xl: '1280px',\n xxl: '1480px',\n xxxl: '2300px',\n },\n};\n\nexport default BaseTheme;\n","import React from 'react';\nimport AuthService from '../../auth/AuthService';\nimport { Redirect, Route } from 'react-router-dom';\n\nconst PrivateRoute = ({ component: Component, ...rest }) => {\n // Add your own authentication on the below line.\n const isLoggedIn = AuthService.isAuthenticated();\n\n return (\n <Route\n {...rest}\n render={props =>\n isLoggedIn ? <Component {...props} /> : <Redirect to={AuthService.login()} />\n }\n />\n );\n};\n\nexport default PrivateRoute;\n","export const BookingStatus = {\n reserved: 0,\n confirmed: 1,\n delivered: 2,\n closed: 3,\n canceled: 4,\n quoted: 5,\n};\n\nexport const InfractionStatus = {\n collected: 0,\n notCollected: 1,\n collectionNotPossible: 2,\n};\n\nexport const AirportNames = ['airport', 'aeropuertos', 'aeroparques', 'aeropuerto'];\n\nexport const OfficeNames = [\n 'oficina',\n 'oficinas',\n 'sucursales',\n 'sucursal',\n 'branchoffice',\n 'branch',\n];\n\nexport const PointNames = ['delivery', 'punto', 'encuentro', 'domicilios'];\n\nexport const BusNames = ['terminales', 'terminal'];\n\nexport const PortNames = ['puerto', 'port', 'ferry'];\n\nexport const FileTypesList = [\n {\n name: 'documentTypes.booking',\n id: 0,\n },\n {\n name: 'documentTypes.delivery',\n id: 1,\n },\n {\n name: 'documentTypes.return',\n id: 2,\n },\n {\n name: 'documentTypes.contract',\n id: 3,\n },\n {\n name: 'documentTypes.tickets',\n id: 4,\n },\n {\n name: 'documentTypes.bill',\n id: 5,\n },\n {\n name: 'documentTypes.accident',\n id: 6,\n },\n {\n name: 'documentTypes.other',\n id: 7,\n },\n {\n name: 'documentTypes.webFiles',\n id: 8,\n },\n {\n name: 'documentTypes.purchaseOrder',\n id: 9,\n },\n];\n","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","module.exports = {}","export const transformDocTypesToSelectOptions = documentTypes => {\n if (!documentTypes) return [];\n\n return documentTypes.map(docType => {\n return { value: docType.id, text: docType.name };\n });\n};\n\nexport const transformFiscalConditionsToSelectOptions = (fiscalConditions, t) => {\n if (!fiscalConditions) return [];\n\n return fiscalConditions.map(condition => {\n return {\n value: condition.id.toString(),\n text: t(`${condition.name}`),\n };\n });\n};\n\nexport const isValidDocument = (tenantDocumentTypes, documentTypeId, documentId) => {\n const doc = findDocumentType(tenantDocumentTypes, documentTypeId);\n if (!doc) return true;\n\n const documentString = (doc.name || doc.value).toUpperCase();\n switch (documentString) {\n case 'CUIT':\n case 'CUIL':\n return isValidCUIT(documentId);\n case 'DNI':\n return isValidDNI(documentId);\n case 'RUT':\n return isValidRUT(documentId);\n default:\n return true;\n }\n};\n\nexport const getDocumentSample = (tenantDocumentTypes, documentTypeId) => {\n const doc = findDocumentType(tenantDocumentTypes, documentTypeId);\n if (!doc) return null;\n\n const documentString = (doc.name || doc.value).toUpperCase();\n switch (documentString) {\n case 'CUIT':\n case 'CUIL':\n return '30111111112';\n case 'RUT':\n return '99.999.999-9';\n default:\n return null;\n }\n};\n\nconst findDocumentType = (tenantDocumentTypes, documentTypeId) => {\n if (!tenantDocumentTypes) return [];\n return tenantDocumentTypes.find(\n docType => docType.id === Number(documentTypeId) || docType.value === documentTypeId,\n );\n};\n\n// source: https://elbotija.github.io/validar-cuit-javascript/\nconst isValidCUIT = cuit => {\n if (!cuit) return false;\n if (cuit.length !== 11) {\n return false;\n }\n\n let acumulado = 0;\n let digitos = cuit.split('');\n let digito = parseInt(digitos.pop());\n\n for (let i = 0; i < digitos.length; i++) {\n acumulado += digitos[9 - i] * (2 + (i % 6));\n }\n\n let verif = 11 - (acumulado % 11);\n if (verif === 11) {\n verif = 0;\n } else if (verif === 10) {\n verif = 9;\n }\n\n return digito === verif;\n};\n\nconst isValidDNI = dni => {\n const regex = /^\\d+$/;\n\n if (regex.test(dni)) {\n if (dni.length >= 6 && dni.length <= 8) return true;\n }\n\n return false;\n};\n\nconst isValidRUT = rut => {\n if (!rut || rut.length <= 1) return false;\n\n let value = cleanRUT(rut);\n\n // Divide el valor ingresado en dígito verificador y resto del RUT.\n const body = value.slice(0, -1);\n let verifyDigit = value.slice(-1).toUpperCase();\n\n // Si no cumple con el mínimo ej. (n.nnn.nnn)\n if (body.length < 7) {\n return false;\n }\n\n // Calcular Dígito Verificador \"Método del Módulo 11\"\n let sum = 0;\n let multiple = 2;\n\n // Para cada dígito del Cuerpo\n for (let i = 1; i <= body.length; i++) {\n // Obtener su Producto con el Múltiplo Correspondiente\n let index = multiple * value.charAt(body.length - i);\n\n // Sumar al Contador General\n sum = sum + index;\n\n // Consolidar Múltiplo dentro del rango [2,7]\n if (multiple < 7) {\n multiple = multiple + 1;\n } else {\n multiple = 2;\n }\n }\n\n // Calcular Dígito Verificador en base al Módulo 11\n let expectedDigit = 11 - (sum % 11);\n\n // Casos Especiales (0 y K)\n expectedDigit = expectedDigit == 10 ? 'K' : expectedDigit;\n expectedDigit = expectedDigit == 11 ? 0 : expectedDigit;\n\n // Validar que el Cuerpo coincide con su Dígito Verificador\n if (expectedDigit != verifyDigit) {\n return false;\n } else {\n return true;\n }\n};\n\nexport const cleanRUT = rut => {\n return typeof rut === 'string' ? rut.replace(/[^a-zA-Z0-9]/g, '').toUpperCase() : '';\n};\n","module.exports = {}","module.exports = {}","module.exports = {}","import React from 'react';\nimport { PropTypes } from 'prop-types';\n\nclass ScriptComponent extends React.Component {\n static propTypes = {\n url: PropTypes.string,\n async: PropTypes.bool,\n scriptType: PropTypes.string,\n content: PropTypes.string,\n loadLibrary: PropTypes.bool,\n };\n\n state = {\n id: 'script' + Math.random(),\n };\n\n componentDidMount() {\n if (this.props.loadLibrary) {\n document.body.appendChild(this.getScript());\n } else if (this.props.loadLibraryInHead) {\n document.head.appendChild(this.getScript());\n } else {\n const scriptNode = document.getElementById(this.state.id);\n if (scriptNode) {\n scriptNode.appendChild(this.getScript());\n // eslint-disable-next-line no-eval\n eval(scriptNode.textContent);\n }\n }\n }\n\n shouldComponentUpdate() {\n return false;\n }\n\n getScript() {\n const script = document.createElement('script');\n\n if (this.props.url) script.src = this.props.url;\n\n if (this.props.async !== undefined) script.async = this.props.async;\n\n if (this.props.scriptType) script.type = this.props.scriptType;\n\n if (this.props.content) script.innerHTML = this.props.content;\n\n if (this.props.setAttributes) {\n this.props.setAttributes.forEach(element => {\n script.setAttribute(element.name, element.content);\n });\n }\n\n if (this.props.onLoaded)\n script.onload =\n typeof this.props.onLoaded === 'string' ? eval(this.props.onLoaded) : this.props.onLoaded;\n\n return script;\n }\n\n render() {\n return <div id={this.state.id}></div>;\n }\n}\n\nexport default ScriptComponent;\n","/* eslint-disable no-console */\nimport {\n GLOBAL_SET_SPINNER,\n GLOBAL_SET_LIST_CATEGORIES,\n GLOBAL_SET_LIST_ADDITIONALS,\n GLOBAL_SET_LIST_PLACES,\n GLOBAL_SET_LIST_PROMOTIONS,\n GLOBAL_SET_LIST_SCHEDULES,\n GLOBAL_SET_LIST_HOLIDAYS,\n GLOBAL_SET_LIST_LANGUAGES,\n GLOBAL_SET_LIST_CURRENCIES,\n GLOBAL_SET_LIST_LANGUAGES_INFO,\n GLOBAL_SET_LIST_COUNTRIES,\n GLOBAL_SET_LIST_DOCUMENT_TYPES,\n GLOBAL_SET_LIST_FISCAL_CONDITIONS,\n GLOBAL_SET_LIST_CITIES,\n GLOBAL_SET_GENERAL_SETTINGS,\n GLOBAL_SET_WEB_CURRENCY,\n CHANGE_CURRENCY,\n} from 'utils/types';\nimport {\n listCategories,\n listPlaces,\n listPromotions,\n listAdditionals,\n listHolidays,\n listSchedules,\n listLanguages,\n listCurrencies,\n listLanguagesInfo,\n listCountries,\n listDocumentTypes,\n listTaxPayerTypes,\n listCities,\n getGeneralSettings,\n} from 'services/api';\nimport Storage from 'utils/storage';\n\nexport const setSpinner = loading => dispatch => {\n dispatch({\n type: GLOBAL_SET_SPINNER,\n payload: loading,\n });\n};\n\nexport const changeCurrencyAction = currency => ({\n type: CHANGE_CURRENCY,\n payload: currency,\n});\n\nexport const setWebCurrencyAction = webCurrency => ({\n type: GLOBAL_SET_WEB_CURRENCY,\n payload: webCurrency,\n});\n\nexport const fetchCategories = (language = '') => async dispatch => {\n try {\n const data = await Storage.getOrUpdateItem(\n `fetchCategories.${language}`,\n async () => {\n return (await listCategories(language)).data;\n },\n 30,\n true,\n );\n return dispatch({\n type: GLOBAL_SET_LIST_CATEGORIES,\n payload: data,\n });\n } catch (error) {\n console.error(error.response);\n return dispatch({\n type: GLOBAL_SET_LIST_CATEGORIES,\n payload: null,\n });\n }\n};\n\nexport const fetchPlaces = (language = '') => async dispatch => {\n try {\n const data = await Storage.getOrUpdateItem(\n `listPlaces.${language}`,\n async () => {\n return (await listPlaces(language)).data;\n },\n 30,\n true,\n );\n return dispatch({\n type: GLOBAL_SET_LIST_PLACES,\n payload: data,\n });\n } catch (error) {\n console.error(error.response);\n return dispatch({\n type: GLOBAL_SET_LIST_PLACES,\n payload: null,\n });\n }\n};\n\nexport const fetchCurrencies = () => async dispatch => {\n try {\n const data = await Storage.getOrUpdateItem(\n 'listCurrencies',\n async () => {\n return (await listCurrencies()).data;\n },\n 30,\n true,\n );\n return dispatch({\n type: GLOBAL_SET_LIST_CURRENCIES,\n payload: data,\n });\n } catch (error) {\n console.error(error.response);\n return dispatch({\n type: GLOBAL_SET_LIST_CURRENCIES,\n payload: null,\n });\n }\n};\n\nexport const fetchPromotions = (language = '') => async dispatch => {\n try {\n const data = await Storage.getOrUpdateItem(\n `fetchPromotions.${language}`,\n async () => {\n return (await listPromotions(language)).data;\n },\n 30,\n true,\n );\n return dispatch({\n type: GLOBAL_SET_LIST_PROMOTIONS,\n payload: data,\n });\n } catch (error) {\n console.error(error.response);\n return dispatch({\n type: GLOBAL_SET_LIST_PROMOTIONS,\n payload: null,\n });\n }\n};\n\nexport const fetchAdditionals = (rentlyEndpointName = '', language = '') => async dispatch => {\n try {\n const data = await Storage.getOrUpdateItem(\n `listAdditionals.${rentlyEndpointName}.${language}`,\n async () => {\n return (await listAdditionals(rentlyEndpointName, language)).data;\n },\n 30,\n true,\n );\n return dispatch({\n type: GLOBAL_SET_LIST_ADDITIONALS,\n payload: data,\n });\n } catch (error) {\n console.error(error.response);\n return dispatch({\n type: GLOBAL_SET_LIST_ADDITIONALS,\n payload: null,\n });\n }\n};\n\nexport const fetchHolidays = () => async dispatch => {\n try {\n const data = await Storage.getOrUpdateItem(\n 'listHolidays',\n async () => {\n return (await listHolidays()).data;\n },\n 30,\n true,\n );\n\n const parsedData = data.map(d => ({ ...d, date: d.date.split('T')[0] }));\n return dispatch({\n type: GLOBAL_SET_LIST_HOLIDAYS,\n payload: parsedData,\n });\n } catch (error) {\n console.error(error.response);\n return dispatch({\n type: GLOBAL_SET_LIST_HOLIDAYS,\n payload: null,\n });\n }\n};\n\nexport const fetchSchedules = () => async dispatch => {\n try {\n const data = await Storage.getOrUpdateItem(\n 'listSchedules',\n async () => {\n return (await listSchedules()).data;\n },\n 30,\n true,\n );\n return dispatch({\n type: GLOBAL_SET_LIST_SCHEDULES,\n payload: data,\n });\n } catch (error) {\n console.error(error.response);\n return dispatch({\n type: GLOBAL_SET_LIST_SCHEDULES,\n payload: null,\n });\n }\n};\n\nexport const fetchLanguages = () => async dispatch => {\n try {\n const data = await Storage.getOrUpdateItem(\n 'listLanguages',\n async () => {\n return (await listLanguages()).data;\n },\n 30,\n true,\n );\n return dispatch({\n type: GLOBAL_SET_LIST_LANGUAGES,\n payload: data,\n });\n } catch (error) {\n console.error(error.response);\n return dispatch({\n type: GLOBAL_SET_LIST_LANGUAGES,\n payload: null,\n });\n }\n};\n\nexport const fetchLanguagesInfo = () => async dispatch => {\n try {\n const data = await Storage.getOrUpdateItem(\n 'listLanguagesInfo',\n async () => {\n return (await listLanguagesInfo()).data;\n },\n 30,\n true,\n );\n return dispatch({\n type: GLOBAL_SET_LIST_LANGUAGES_INFO,\n payload: data,\n });\n } catch (error) {\n console.error(error.response);\n return dispatch({\n type: GLOBAL_SET_LIST_LANGUAGES_INFO,\n payload: null,\n });\n }\n};\n\nexport const fetchCountries = (language = '') => async dispatch => {\n try {\n const data = await Storage.getOrUpdateItem(\n 'listCountries',\n async () => {\n return (await listCountries(language)).data;\n },\n 30,\n true,\n );\n\n return dispatch({\n type: GLOBAL_SET_LIST_COUNTRIES,\n payload: data,\n });\n } catch (error) {\n console.error(error.response && error.response.data);\n return dispatch({\n type: GLOBAL_SET_LIST_COUNTRIES,\n payload: null,\n });\n }\n};\n\nexport const fetchCities = countryIsoCode => async dispatch => {\n try {\n const { data } = await listCities(countryIsoCode);\n\n return Promise.resolve(\n dispatch({\n type: GLOBAL_SET_LIST_CITIES,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const fetchDocumentTypes = (language = '') => async dispatch => {\n try {\n const data = await Storage.getOrUpdateItem(\n 'listDocumentTypes',\n async () => {\n return (await listDocumentTypes(language)).data;\n },\n 30,\n true,\n );\n\n return dispatch({\n type: GLOBAL_SET_LIST_DOCUMENT_TYPES,\n payload: data,\n });\n } catch (error) {\n console.error(error.response && error.response.data);\n return dispatch({\n type: GLOBAL_SET_LIST_DOCUMENT_TYPES,\n payload: null,\n });\n }\n};\n\nexport const fetchFiscalConditions = (language = '') => async dispatch => {\n try {\n const data = await Storage.getOrUpdateItem(\n 'listTaxPayerTypes',\n async () => {\n return (await listTaxPayerTypes(language)).data;\n },\n 30,\n true,\n );\n\n return dispatch({\n type: GLOBAL_SET_LIST_FISCAL_CONDITIONS,\n payload: data,\n });\n } catch (error) {\n console.error(error.response);\n return dispatch({\n type: GLOBAL_SET_LIST_FISCAL_CONDITIONS,\n payload: null,\n });\n }\n};\n\nexport const fetchGeneralSettings = () => async dispatch => {\n try {\n const { data } = await getGeneralSettings();\n return Promise.resolve(\n dispatch({\n type: GLOBAL_SET_GENERAL_SETTINGS,\n payload: data,\n }),\n );\n } catch (error) {\n console.error(error.response);\n return dispatch({\n type: GLOBAL_SET_GENERAL_SETTINGS,\n payload: null,\n });\n }\n};\n","import React from 'react';\nimport queryString from 'query-string';\nimport { tt } from 'utils/translationHelper';\nimport { withTranslation } from 'react-i18next';\nimport withSettingsContext from 'SettingsContext';\nimport { withRouter } from 'react-router-dom';\n\nfunction PartialPayWarning({ settings, t, location, className = '' }) {\n const parseQs = queryString.parse(location.search);\n const partialPayCustomMessage = settings && settings.paymentConfiguration.partialPayMessage;\n\n if (\n settings?.paymentConfiguration?.percentageToPay &&\n !parseQs?.amount &&\n !parseQs?.infractionid\n ) {\n return (\n <div className={`alert alert-danger w-100 ${className}`} role=\"alert\">\n <i className=\"fas fa-exclamation-circle mr-2\"></i>\n {partialPayCustomMessage ? tt('__PaymentOptions.PartialPayMessage', t) : t('PartialPay')}\n </div>\n );\n } else {\n return null;\n }\n}\nexport default withTranslation()(withRouter(withSettingsContext(PartialPayWarning)));\n","import userFetcher from 'utils/userFetcher';\n\nconst api = new userFetcher();\nconst apiUrl = process.env.REACT_APP_BACKEND_API;\n\nexport const logIn = async (email, password, remember) => {\n return await api.post(`${apiUrl}/User/authenticate`, {\n email,\n password,\n remember,\n });\n};\n\nexport const logOut = async () => {\n return await api.get(`${apiUrl}/User/logout`);\n};\n\nexport const register = async (name, lastname, email, password) => {\n return await api.post(`${apiUrl}/User/register`, {\n name,\n lastname,\n email,\n password,\n });\n};\n\nexport const getMicrosoftAuthorizationUrl = async () => {\n return api.get(`${apiUrl}/User/microsoft/get-authorization-url`);\n};\n\nexport const loginWithMicrosoft = async (code, state) => {\n return await api.post(`${apiUrl}/User/microsoft/login`, { code, state });\n};\n\nexport const getUserProfile = async () => {\n return await api.get(`${apiUrl}/User/profile`);\n};\n\nexport const getUserBookings = async (offset = 0, limit = 6) => {\n return await api.get(`${apiUrl}/User/bookings?offset=${offset}&limit=${limit}`);\n};\n\nexport const getUserInfractions = async (offset = 0, limit = 30) => {\n return await api.get(`${apiUrl}/User/infractions?offset=${offset}&limit=${limit}`);\n};\n\nexport const getUserFiles = async (offset = 0, limit = 30) => {\n return await api.get(`${apiUrl}/User/profile/attachments?offset=${offset}&limit=${limit}`);\n};\n\nexport const attachUserFile = async file => {\n return await api.post(`${apiUrl}/User/profile/attachments`, file);\n};\n\nexport const updateUserProfile = async profile => {\n return await api.post(`${apiUrl}/User/profile`, { ...profile });\n};\n\nexport const userCancelReservation = async reservation =>\n api.post(`${apiUrl}/User/cancel`, reservation);\n\nexport const forgotPassword = async email => {\n return await api.post(`${apiUrl}/User/forgot-password?email=${email}`);\n};\n\nexport const forgotPasswordValidation = async token => {\n return await api.post(`${apiUrl}/User/forgot-password-validation?token=${token}`);\n};\n\nexport const resetPassword = async (email, password, token) => {\n return await api.post(`${apiUrl}/User/reset-password`, {\n email,\n password,\n token,\n });\n};\n\nexport const validateCustomerGuidToken = async token => {\n return await api.post(`${apiUrl}/User/validate-customer-guid-token?token=${token}`);\n};\n","import { useState, useEffect } from 'react';\n\nexport default function useWindowDimensions() {\n const hasWindow = typeof window !== 'undefined';\n\n function getWindowDimensions() {\n const width = hasWindow ? window.innerWidth : null;\n const height = hasWindow ? window.innerHeight : null;\n return {\n width,\n height,\n };\n }\n\n const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n useEffect(() => {\n if (hasWindow) {\n function handleResize() {\n if (windowDimensions && windowDimensions.width !== window.innerWidth) {\n setWindowDimensions(getWindowDimensions());\n }\n }\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }\n }, [hasWindow]);\n\n return windowDimensions;\n}\n","import {\n BOOKING_SET_BOOK,\n BOOKING_SET_ADDITIONALS,\n SET_BOOKING_PAY_INSTALLMENT,\n BOOKING_SET_CONFIGURATION,\n BOOKING_GET_ATTACHMENTS,\n BOOKING_ADD_ATTACHMENTS,\n} from 'utils/types';\nimport {\n createBooking,\n getBooking,\n getBookingAdditionals,\n getBookingWithPromotion,\n getBookingsConfiguration,\n getBookingAttachments,\n attachBookingFiles,\n} from 'services/api';\n\nexport const book = (\n booking,\n userInfo,\n bookingParams,\n isQuotation,\n currentLanguage,\n) => async dispatch => {\n try {\n const {\n car: {\n model: { id: ModelId },\n },\n ilimitedKm: IlimitedKm,\n additionals,\n promotion,\n } = booking;\n\n let parsedBooking = {\n Customer: {\n FirstName: userInfo.firstName,\n LastName: userInfo.lastName,\n FiscalConditionId:\n userInfo.fiscalConditionId != null ? parseFloat(userInfo.fiscalConditionId) : null,\n DocumentId: userInfo.id,\n DocumentTypeId: userInfo.typeId,\n EmailAddress: userInfo.email,\n Address: userInfo.address,\n AddressNumber: userInfo.addressNumber,\n AddressDepartment: userInfo.addressDepartment,\n CellPhone: userInfo.phone,\n ZipCode: userInfo.zipCode,\n Country: userInfo.country,\n City: userInfo.city || userInfo.cityInput,\n Region: userInfo.region,\n State: userInfo.state || userInfo.stateInput,\n IsCompany: userInfo.isCompany,\n Age: userInfo.driverAge,\n DriverLicenceNumber: userInfo.driverLicenseNumber,\n DriverLicenceCountry: userInfo.driverLicenseCountry,\n DriverLicenseExpiration: userInfo.driverLicenseExpiration,\n },\n CustomDeliveryCity: userInfo.customDeliveryCity,\n CustomDeliveryAddress: userInfo.customDeliveryAddress,\n CustomReturnCity: userInfo.customReturnCity,\n CustomReturnAddress: userInfo.customReturnAddress,\n IsCustomDeliveryAddress: userInfo.isCustomDeliveryAddress,\n IsCustomReturnAddress: userInfo.isCustomReturnAddress,\n isCustomAddress: userInfo.isCustomAddress,\n From: booking.fromDate,\n To: booking.toDate,\n IsQuotation: isQuotation,\n PickupEndpoint: bookingParams.pickUpEndpoint,\n PickupId: bookingParams.pickUpId,\n ReturnEndPoint: bookingParams.dropOffEndpoint,\n ReturnId: bookingParams.dropOffId || bookingParams.pickUpId,\n ModelId,\n Additionals: additionals.map(a => ({\n Quantity: a.quantity,\n AdditionalId: a.additional.id,\n })),\n IlimitedKm,\n fullResponse: true,\n promotion: promotion,\n promotionCode: bookingParams.promotionCode || null,\n onlinePayment: bookingParams.onlinePayment,\n isOnRequest: booking.onlyQuote || false,\n DeliveryTransportationId: userInfo.flightNumber,\n currentLanguage: currentLanguage || '',\n purchaseOrder: userInfo.purchaseOrder,\n extra: userInfo.notes,\n files: userInfo.companyFiles\n ? userInfo.companyFiles.map(a => ({\n name: a.name,\n content: a.file,\n type: a.type,\n }))\n : null,\n AgencyGuid: userInfo.profileIsCompany\n ? userInfo.profileGlobalId\n : bookingParams.agencyGuid ?? null,\n CommercialAgreementCode:\n userInfo.profileIsCompany || bookingParams.agencyGuid\n ? bookingParams.commercialAgreementCode\n : null,\n MaxAllowedDistance: booking.maxAllowedDistance,\n MaxAllowedDistanceByDay: booking.maxAllowedDistanceByDay,\n };\n\n if (userInfo.globalId) {\n parsedBooking = {\n ...parsedBooking,\n Customer: {\n ...parsedBooking.Customer,\n GlobalId: userInfo.globalId,\n },\n };\n }\n\n if (userInfo.isCompany) {\n parsedBooking = {\n ...parsedBooking,\n Driver: {\n FirstName: userInfo.driverFirstName,\n LastName: userInfo.driverLastName,\n DocumentId: userInfo.driverId,\n DocumentTypeId: userInfo.driverTypeId,\n EmailAddress: userInfo.driverEmail,\n Address: userInfo.driverAddress,\n AddressNumber: userInfo.driverAddressNumber,\n AddressDepartment: userInfo.driverAddressDepartment,\n CellPhone: userInfo.driverPhone,\n ZipCode: userInfo.driverZipCode,\n Country: userInfo.driverCountry,\n City: userInfo.driverCity,\n Region: userInfo.driverRegion,\n State: userInfo.driverState,\n Age: userInfo.driverAge,\n },\n };\n }\n\n let data = await createBooking(parsedBooking);\n return Promise.resolve(\n dispatch({\n type: BOOKING_SET_BOOK,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const SetBook = booking => async dispatch => {\n try {\n return Promise.resolve(\n dispatch({\n type: BOOKING_SET_BOOK,\n payload: booking,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const GetBook = (bookingId, promotionId = null) => async dispatch => {\n try {\n const { data } = promotionId\n ? await getBookingWithPromotion(null, bookingId, promotionId)\n : await getBooking(null, bookingId);\n\n return Promise.resolve(\n dispatch({\n type: BOOKING_SET_BOOK,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const fetchBookingAdditionals = (params, booking, language, globalId) => async dispatch => {\n try {\n const { data } = await getBookingAdditionals(params, booking, language, globalId);\n\n return Promise.resolve(\n dispatch({\n type: BOOKING_SET_ADDITIONALS,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const setBookingInstallment = installment => async dispatch => {\n return Promise.resolve(\n dispatch({\n type: SET_BOOKING_PAY_INSTALLMENT,\n payload: installment,\n }),\n );\n};\n\nexport const fetchBookingsConfiguration = () => async dispatch => {\n try {\n const { data } = await getBookingsConfiguration();\n return Promise.resolve(\n dispatch({\n type: BOOKING_SET_CONFIGURATION,\n payload: data,\n }),\n );\n } catch (error) {\n return { error };\n }\n};\n\nexport const getAttachments = (bookingId, category) => async dispatch => {\n try {\n const { data } = await getBookingAttachments(bookingId, category);\n\n return Promise.resolve(\n dispatch({\n type: BOOKING_GET_ATTACHMENTS,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n\nexport const attachFiles = (bookingId, bookingFiles) => async dispatch => {\n try {\n let files = bookingFiles\n ? bookingFiles.map(a => ({\n name: a.name,\n content: a.file,\n type: a.type,\n }))\n : null;\n const { data } = await attachBookingFiles(bookingId, files);\n\n return Promise.resolve(\n dispatch({\n type: BOOKING_ADD_ATTACHMENTS,\n payload: data,\n }),\n );\n } catch (error) {\n return Promise.reject(error);\n }\n};\n","export const tt = (key, t, forceTranslate, paramsObj = null) => {\n if (key && typeof key === 'string' && key.indexOf('__') === 0) return t(key, paramsObj);\n\n if (forceTranslate) return t(key, paramsObj);\n\n return key;\n};\n\nexport const translate = (key, t, forceTranslate) => {\n if (key && typeof key === 'string' && key.indexOf('__') === 0) return t(key);\n\n if (forceTranslate) return t(key);\n\n return key;\n};\n\nexport const getLanguagePath = (langConfig, lang) => {\n if (langConfig) {\n return (langConfig[lang] && langConfig[lang].url) || lang;\n }\n return lang;\n};\n\nexport const tlink = (key, t, i18n, lang = null, langConfig = null, params = null) => {\n if (lang) {\n t = i18n.getFixedT(lang);\n }\n\n lang = lang || i18n.language;\n\n let base = lang !== i18n.options.fallbackLng[0] ? `/${getLanguagePath(langConfig, lang)}` : '';\n\n let route = tt(key, t);\n\n if (params) {\n let stringParams = '';\n Object.entries(params).forEach(([key, value]) => {\n stringParams += `${key}=${value}&`;\n });\n route += `?${stringParams}`;\n }\n\n if (route === '/' && base !== '') route = '';\n\n return base + route;\n};\n","export const getAllCategoryIdsInCollection = categoryGroupCollection => {\n return categoryGroupCollection.flatMap(cg => cg.categories.flatMap(c => c.ids));\n};\n\nexport const getSippByCategory = (categoryGroupCollection, category) => {\n let categoryGroupName = '';\n\n categoryGroupCollection.every(cg => {\n const includedCategories = cg.categories.flatMap(c => c.ids);\n if (includedCategories.includes(category.id)) {\n categoryGroupName = cg.name;\n return false;\n }\n return true;\n });\n\n return categoryGroupName;\n};\n","import style from 'styled-components';\n\nexport const StyledApp = style.div`\n display: flex;\n flex-direction: column;\n transition: all 0.3s ease;\n position: relative;\n padding-bottom: 32px;\n min-height: 100vh;\n \n .old-version-message{\n background-color: #fff3cd;\n color: #a27a00;\n text-align: center;\n padding:4px;\n margin:0 -15px;\n }\n\n input, select, textarea {\n border-radius: 0 !important;\n }\n\n textarea::-webkit-input-placeholder, input::-webkit-input-placeholder, select{ \n font-size: 12px;\n color: #6f6f6f;\n }\n\n .pl-0, .px-0 {\n padding-left: 0 !important;\n }\n \n .row-p {\n padding-right: 2% !important;\n padding-left: 2% !important;\n\n @media (min-width: ${props => props.theme.screens.xxxl}) {\n padding-left: 6% !important; padding-right:6% !important; \n }\n }\n\n header.row-p {\n @media (max-width: ${props => props.theme.screens.md}) {\n padding-left: 0 !important; padding-right:0 !important; \n }\n }\n\n .recaptcha{\n margin-bottom: 10px;\n }\n\n .contact-form-centered{\n .recaptcha div, button{\n margin-left: auto;\n margin-right: auto;\n }\n }\n \n a{\n transition: all .2s;\n text-decoration: none;\n color: ${props => props.theme.font.colors.third};\n }\n\n a:hover{\n text-decoration: none;\n color: ${props => props.theme.font.colors.hover};\n }\n \n ul.contact-list li a {\n color: ${props => props.theme.font.colors.primary};\n line-height: 2em;\n font-size: 14px;\n\n &:hover{\n color: ${props => props.theme.colors.secondary};\n text-decoration: none;\n }\n }\n\n ul.contact-list li a i{\n margin-right:10px;\n color: ${props => props.theme.colors.secondary};\n }\n\n .parallax {\n background-attachment: fixed;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n }\n\n .top-header{\n padding: 10px 0;\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n margin-left:0px;\n \n &.mobile-navbar-show{\n margin-left:256px;\n }\n }\n .CalendarMonth_caption{\n text-transform: capitalize;\n }\n`;\n\nexport const StyledError = style.div`\n\n margin-left: auto;\n margin-right: auto;\n text-align: center;\n margin-top: 10%;\n padding: 0px 20%;\n img{\n width:400px;\n margin-bottom:15px;\n }\n\n p{\n font-size:2em;\n color: grey;\n }\n`;\n","import style from 'styled-components';\n\nexport const StyledModernApp = style.div`\n display: flex;\n flex-direction: column;\n transition: all 0.3s ease;\n position: relative;\n padding-bottom: 32px;\n min-height: 100vh;\n\n .old-version-message{\n background-color: #fff3cd;\n color: #a27a00;\n text-align: center;\n padding:4px;\n margin:0 -15px;\n }\n\n input, select, textarea {\n border-radius: 0 !important;\n }\n\n textarea::-webkit-input-placeholder, input::-webkit-input-placeholder, select{\n font-size: 12px;\n color: #6f6f6f;\n }\n\n .pl-0, .px-0 {\n padding-left: 0 !important;\n }\n\n .row-p {\n padding-right: 2% !important;\n padding-left: 2% !important;\n\n @media (min-width: ${props => props.theme.screens.xxxl}) {\n padding-left: 6% !important; padding-right:6% !important;\n }\n }\n\n header.row-p {\n @media (max-width: ${props => props.theme.screens.md}) {\n padding-left: 0 !important; padding-right:0 !important;\n }\n }\n\n .recaptcha{\n margin-bottom: 10px;\n }\n\n .contact-form-centered{\n .recaptcha div, button{\n margin-left: auto;\n margin-right: auto;\n }\n }\n\n a{\n transition: all .2s;\n text-decoration: none;\n color: ${props => props.theme.font.colors.third};\n }\n\n a:hover{\n text-decoration: none;\n color: ${props => props.theme.font.colors.hover};\n }\n\n ul.contact-list li a {\n color: ${props => props.theme.font.colors.primary};\n line-height: 2em;\n font-size: 14px;\n\n &:hover{\n color: ${props => props.theme.colors.secondary};\n text-decoration: none;\n }\n }\n\n ul.contact-list li a i{\n margin-right:10px;\n color: ${props => props.theme.colors.secondary};\n }\n\n .parallax {\n background-attachment: fixed;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n }\n\n .top-header{\n padding: 10px 0;\n }\n\n @media (max-width: ${props => props.theme.screens.md}) {\n margin-left:0px;\n\n &.mobile-navbar-show{\n margin-left:256px;\n }\n }\n .CalendarMonth_caption{\n text-transform: capitalize;\n }\n`;\n\nexport const StyledError = style.div`\n\n margin-left: auto;\n margin-right: auto;\n text-align: center;\n margin-top: 10%;\n padding: 0px 20%;\n img{\n width:400px;\n margin-bottom:15px;\n }\n\n p{\n font-size:2em;\n color: grey;\n }\n`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { Route, Switch, withRouter } from 'react-router-dom';\nimport { CancelModal, RentlyFooter, AccountPrivateRoute } from 'components/';\nimport {\n fetchSettings,\n fetchLanguages,\n fetchCurrencies,\n handleLogIn,\n fetchBookingsConfiguration,\n fetchGeneralSettings,\n setWebCurrencyAction,\n changeCurrencyAction,\n} from 'actions';\nimport { ThemeProvider } from 'styled-components';\nimport BaseTheme from './styled/theme';\nimport queryString from 'query-string';\nimport { history } from '/store';\nimport TagManager from 'react-gtm-module';\n\n// Pages\nimport NotFound from 'pages/NotFound';\n\nimport * as Components from 'components';\nimport * as Sections from 'sections';\nimport * as PageComponents from './pages';\nimport { StyledApp, StyledError } from './App.container.styled';\nimport { StyledModernApp } from './App.container.styled.modern';\nimport { withTranslation, Trans } from 'react-i18next';\nimport { Helmet } from 'react-helmet';\nimport AuthService from 'auth/AuthService';\nimport { getLanguagePath } from 'utils/translationHelper';\nimport { SettingsContext } from './SettingsContext';\nimport { MODERN_THEME } from 'styled/constants';\nimport Storage from 'utils/storage';\n\nconst LoginSection = React.lazy(() => import('./sections/myAccount/login/LoginSection.js'));\nconst RegisterSection = React.lazy(() =>\n import('./sections/myAccount/register/RegisterSection.js'),\n);\nconst CompanyValidateInvitationSection = React.lazy(() =>\n import('./sections/myAccount/loginCompany/CompanyValidateInvitationSection.js'),\n);\nconst ForgotPasswordSection = React.lazy(() =>\n import('./sections/myAccount/forgotPassword/ForgotPasswordSection.js'),\n);\nconst ForgotPasswordValidationSection = React.lazy(() =>\n import('./sections/myAccount/forgotPassword/ForgotPasswordValidationSection.js'),\n);\nconst ProfileSection = React.lazy(() => import('./sections/myAccount/profile/ProfileSection.js'));\n\nconst BookingsSection = React.lazy(() =>\n import('./sections/myAccount/bookings/BookingsSection.js'),\n);\n\nconst BookingDetails = React.lazy(() =>\n import('./sections/myAccount/bookingDetails/BookingDetails.js'),\n);\n\nconst InfractionsSection = React.lazy(() =>\n import('./sections/myAccount/infractions/InfractionsSection.js'),\n);\n\nconst BlogList = React.lazy(() => import('./pages/Blog/BlogList/BlogList.js'));\nconst BlogPage = React.lazy(() => import('./pages/Blog/BlogPost/BlogPost.js'));\n\nconst AxleVerificationSection = React.lazy(() =>\n import('./sections/axleVerification/AxleVerificationSection.js'),\n);\n\nclass AppContainer extends Components.TranslatedComponent {\n static propTypes = {\n fetchSettings: PropTypes.func.isRequired,\n };\n\n constructor() {\n super();\n this.createLayoutRoute = this.createLayoutRoute.bind(this);\n this.createLayoutPageComponent = this.createLayoutPageComponent.bind(this);\n }\n\n state = {\n error: null,\n loading: true,\n mobileNavBarShow: false,\n pathComponents: {},\n };\n pathComponents = {};\n\n async componentDidMount() {\n this.removeLoading();\n await this.fetchApiData();\n //Inicializo Tag Manager\n const {\n settings: { configurations },\n } = this.props;\n if (configurations?.googleTagManager?.id) {\n const tagManagerArgs = {\n gtmId: configurations.googleTagManager.id,\n };\n TagManager.initialize(tagManagerArgs);\n }\n }\n\n removeLoading() {\n var loading = document.getElementById('loading');\n if (loading) {\n loading.parentNode.removeChild(loading);\n }\n }\n\n reactDatesCss(theme) {\n return `\n .CalendarDay__selected_span {\n background-color: ${theme.colors.buttonPrimaryBgHover};\n border-color: ${theme.colors.buttonPrimaryBg};\n }\n .CalendarDay__selected_start, .CalendarDay__selected_end {\n background-color: ${theme.colors.buttonPrimaryBg};\n border-color: ${theme.colors.buttonPrimaryBg};\n }\n `;\n }\n\n header(theme) {\n const {\n settings: { configurations },\n } = this.props;\n\n return (\n <Helmet>\n {configurations.fontLink && <link rel=\"stylesheet\" href={configurations.fontLink} />}\n {configurations.favicon && <link rel=\"shortcut icon\" href={configurations.favicon} />}\n <link\n rel=\"preload\"\n as=\"stylesheet\"\n href=\"/fonts/font-awesome/css/font-awesome.min.css\"\n ></link>\n <style type=\"text/css\">{theme && theme.customcss}</style>\n <style type=\"text/css\">{this.reactDatesCss(theme)}</style>\n </Helmet>\n );\n }\n\n async fetchApiData(pushHistory = true) {\n try {\n const {\n i18n,\n fetchSettings,\n fetchLanguages,\n fetchCurrencies,\n fetchBookingsConfiguration,\n fetchGeneralSettings,\n setWebCurrencyAction,\n changeCurrencyAction,\n router,\n } = this.props;\n\n for (let retry = 0; retry < 3; retry++) {\n try {\n await fetchLanguages();\n continue;\n } catch (err) {\n retry++;\n if (retry === 3) throw err;\n }\n }\n\n for (let retry = 0; retry < 3; retry++) {\n try {\n await fetchCurrencies();\n continue;\n } catch (err) {\n retry++;\n if (retry === 3) throw err;\n }\n }\n\n let isOldVersion = false;\n let fetch = async () => fetchSettings();\n\n if (AuthService.isAuthenticated()) {\n const searchQueryStrings = queryString.parse(router.location.search);\n const { version, isdraft } = searchQueryStrings;\n fetch = async () => fetchSettings(true, version, isdraft);\n if (version) isOldVersion = true;\n }\n\n // fetchSettings\n await fetch();\n await fetchBookingsConfiguration();\n await fetchGeneralSettings();\n\n if (this.props.settings.translations) {\n for (let prop in this.props.settings.translations) {\n i18n.addResourceBundle(prop, 'translation', this.props.settings.translations[prop]);\n }\n }\n\n if (this.props.settings?.configurations?.defaultLang) {\n i18n.options.fallbackLng[0] = this.props.settings.configurations.defaultLang;\n }\n\n const defaultLang = this.props.settings?.configurations?.defaultLang;\n\n if (!i18n.language) {\n if (defaultLang) await i18n.changeLanguage(defaultLang);\n else await i18n.changeLanguage(this.props.listLanguages[0]);\n }\n\n if (!this.props.listLanguages.find(lng => lng === i18n.language)) {\n let currentLanguage = this.props.listLanguages.find(\n lng => lng === i18n.language.substring(0, 2),\n );\n if (!currentLanguage) {\n currentLanguage = this.props.listLanguages.find(lng => lng.startsWith(i18n.language));\n }\n\n if (currentLanguage) await i18n.changeLanguage(currentLanguage);\n else {\n if (defaultLang) await i18n.changeLanguage(defaultLang);\n else await i18n.changeLanguage(this.props.listLanguages[0]);\n }\n }\n\n const langPath =\n i18n.language !== defaultLang\n ? `/${getLanguagePath(this.props.settings.configurations.langConfig, i18n.language)}`\n : '/';\n\n if (!router.location.pathname.startsWith(langPath) && pushHistory) {\n history.push(langPath);\n }\n\n if (\n this.props.settings.myAccountConfiguration &&\n this.props.settings.myAccountConfiguration.showMyAccount\n )\n await this.props.handleLogIn();\n\n if (\n this.props.settings.featureFlags &&\n this.props.settings.featureFlags.showCurrenciesDropdown &&\n this.props.settings.currency &&\n this.props.settings.currency.isoCode\n ) {\n const matchingCurrency = this.props.listCurrencies?.find(\n currency => currency?.isoCode === this.props.settings.currency.isoCode,\n );\n //set web currency\n await setWebCurrencyAction(matchingCurrency);\n //set current currency\n const userCurrency = Storage.getElement('currency');\n if (userCurrency) {\n await changeCurrencyAction(JSON.parse(userCurrency));\n } else {\n await changeCurrencyAction(matchingCurrency);\n }\n }\n\n this.setState(prevState => ({\n ...prevState,\n error: null,\n loading: false,\n isOldVersion: isOldVersion,\n }));\n } catch (error) {\n this.setState(prevState => ({\n ...prevState,\n error: error.message,\n loading: false,\n }));\n }\n }\n\n findComponent(type) {\n let ComponentToRender = PageComponents[type];\n if (!ComponentToRender) ComponentToRender = Sections[type];\n if (!ComponentToRender) ComponentToRender = Components[type];\n\n return ComponentToRender;\n }\n\n getCommObject() {\n const commObj = {\n changeLanguage: this.changeLanguage.bind(this),\n toogleNavBar: this.toogleNavBar.bind(this),\n isNavBarOpen: this.isNavBarOpen.bind(this),\n };\n\n return commObj;\n }\n\n toogleNavBar = () => this.setState({ mobileNavBarShow: !this.state.mobileNavBarShow });\n\n isNavBarOpen = () => this.state.mobileNavBarShow;\n\n createLayoutRoute(page, index, Component, translatePath = true) {\n const {\n settings: { layouts, sharedComponents },\n i18n,\n t,\n } = this.props;\n\n let layout = layouts.find(l => l.name === page.layout) || layouts[0];\n\n const LayoutRoute = this.findComponent(layout.type);\n\n for (let i = 0; i < layout.sections.length; i++) {\n const section = layout.sections[i];\n if (section.type === 'SharedComponent') {\n var comp = sharedComponents && sharedComponents.find(c => c.name === section.name);\n layout.sections[i] = comp || layout.sections[i];\n }\n }\n\n const compProps = {\n ...page,\n ...{ comm: this.getCommObject(), routerProps: this.props.location },\n };\n const layoutProps = { ...layout, ...{ comm: this.getCommObject() } };\n\n const defaultLang =\n this.props.settings.configurations.defaultLang || i18n.options.fallbackLng[0];\n\n let langPath =\n i18n.language !== defaultLang\n ? `/${getLanguagePath(this.props.settings.configurations.langConfig, i18n.language)}`\n : '';\n\n let path = '';\n\n if (!translatePath) {\n path = `${langPath}${page.path}`;\n } else {\n if (!Array.isArray(page.path)) {\n path = `${langPath}${this.tt(page.path, t)}`;\n } else {\n path = page.path.map(x => `${langPath}${this.tt(x, t)}`);\n }\n }\n\n return (\n <LayoutRoute\n key={index}\n exact\n path={path}\n {...layoutProps}\n component={() => <Component {...compProps} />}\n />\n );\n }\n\n createLayoutPageComponent(page, index, path) {\n const {\n settings: { layouts, sharedComponents },\n } = this.props;\n\n const Component = this.findComponent(page.type);\n\n let layout = layouts.find(l => l.name === page.layout) || layouts[0];\n\n const LayoutComponent = this.findComponent(layout.type);\n\n for (let i = 0; i < layout.sections.length; i++) {\n const section = layout.sections[i];\n if (section.type === 'SharedComponent') {\n var comp = sharedComponents && sharedComponents.find(c => c.name === section.name);\n layout.sections[i] = comp || layout.sections[i];\n }\n }\n\n const compProps = {\n ...page,\n ...{ comm: this.getCommObject(), routerProps: this.props.location },\n };\n const layoutProps = { ...layout, ...{ comm: this.getCommObject() } };\n\n const comppp = <Component {...compProps} />;\n\n const res = <LayoutComponent key={index} {...layoutProps} component={() => comppp} />;\n\n this.pathComponents[path] = res;\n\n return res;\n }\n\n renderRoutes() {\n const {\n settings: { pages },\n i18n,\n } = this.props;\n\n const defaultLang =\n this.props.settings.configurations.defaultLang || i18n.options.fallbackLng[0];\n const privateSite = this.props.settings.myAccountConfiguration?.privateSite;\n const CustomRoute = privateSite ? AccountPrivateRoute : Route;\n\n let langPath =\n i18n.language !== defaultLang\n ? `/${getLanguagePath(this.props.settings.configurations.langConfig, i18n.language)}`\n : '';\n\n return pages.map((page, index) => {\n let path = !Array.isArray(page.path)\n ? `${langPath}${this.tt(page.path)}`\n : page.path.map(x => `${langPath}${this.tt(x)}`);\n\n if (!Array.isArray(path)) {\n return (\n <CustomRoute\n key={index}\n exact\n path={path}\n component={() =>\n this.pathComponents[path] || this.createLayoutPageComponent(page, index, path)\n }\n />\n );\n } else {\n return path.map(x => (\n <CustomRoute\n key={index + 10000}\n exact\n path={x}\n component={() =>\n this.pathComponents[x] || this.createLayoutPageComponent(page, index, x)\n }\n />\n ));\n }\n });\n }\n\n setTheme(base) {\n const {\n settings: { theme },\n } = this.props;\n if (theme)\n return {\n colors: { ...base.colors, ...theme.colors },\n screens: { ...base.screens, ...theme.screens },\n font: {\n colors: { ...base.font.colors, ...theme.font.colors },\n },\n customcss: theme.customcss,\n };\n\n return base;\n }\n\n async changeLanguage(lng) {\n const { i18n, history, location, settings, listLanguages } = this.props;\n\n this.setState(prevState => ({\n ...prevState,\n error: null,\n loading: true,\n }));\n\n if (!listLanguages?.some(l => l.startsWith(lng))) return;\n\n const currentLang = !settings.translations[i18n.language] ? lng : i18n.language;\n const routes = settings.translations[currentLang]?.__Routes;\n let currentRouteName =\n routes &&\n Object.keys(routes).find(r =>\n location.pathname.endsWith(settings.translations[currentLang].__Routes[r]),\n );\n i18n.changeLanguage(lng);\n\n const defaultLang = settings.configurations.defaultLang || i18n.options.fallbackLng[0];\n\n let newRoute =\n lng !== defaultLang ? `/${getLanguagePath(settings.configurations.langConfig, lng)}` : '/';\n\n if (currentRouteName) {\n if (newRoute.endsWith('/')) newRoute = newRoute.substr(0, newRoute.length - 1);\n\n newRoute = newRoute + settings.translations[lng].__Routes[currentRouteName];\n }\n\n await this.fetchApiData(false);\n\n history.push(newRoute);\n }\n\n errorPage(error) {\n // eslint-disable-next-line no-console\n console.error('Error on initialization: ' + error);\n const { t } = this.props;\n\n return (\n <StyledError>\n <img src=\"images/carani.gif\" alt=\"\" />\n <p>\n {t('errorText')} <a href=\"support@rentlysoft.com\">support@rentlysoft.com</a>.\n </p>\n </StyledError>\n );\n }\n\n getOldVersionNavigationMessage() {\n if (this.state.isOldVersion) {\n const {\n settings: { version },\n } = this.props;\n\n return (\n <div className=\"old-version-message\">\n <Trans i18nKey=\"oldVersionNavigationMessage\">\n Atencion! Estas navegando una version del sitio que no es la publicada.{' '}\n <strong>{{ version }}</strong> - <a href=\"/\">Volver al sitio publicado</a>\n </Trans>\n </div>\n );\n }\n\n return null;\n }\n\n getGoogleLocalBusiness() {\n const {\n settings: {\n configurations: { googleLocalBusiness },\n },\n settings: { configurations },\n } = this.props;\n\n var tag = {\n '@context': 'http://schema.org',\n '@type': 'AutoRental',\n name: configurations.title,\n url: window.location.origin,\n };\n\n return { ...tag, ...googleLocalBusiness };\n }\n\n render() {\n if (this.state.loading) return null;\n if (!this.state.loading && this.state.error) return this.errorPage(this.state.error);\n\n const theme = this.setTheme(BaseTheme);\n const {\n settings: {\n configurations: {\n facebookDomainVerification,\n blogSettings,\n googleSearchConsole,\n defaultLang,\n },\n myAccountConfiguration,\n },\n } = this.props;\n\n const StyledTemplatedApp = theme.template === MODERN_THEME ? StyledModernApp : StyledApp;\n\n const companyLogin =\n myAccountConfiguration != undefined && myAccountConfiguration.companyLoginEnable;\n\n const agencyLogin =\n myAccountConfiguration != undefined && myAccountConfiguration.agencyLoginEnable;\n\n return (\n <SettingsContext.Provider value={this.props.settings}>\n <ThemeProvider theme={theme}>\n <StyledTemplatedApp\n id=\"app-container\"\n className={`container-fluid ${this.state.mobileNavBarShow ? 'mobile-navbar-show' : ''}`}\n >\n <Helmet>\n {googleSearchConsole && googleSearchConsole.content && (\n <meta name=\"google-site-verification\" content={googleSearchConsole.content} />\n )}\n ,\n {facebookDomainVerification && (\n <meta name=\"facebook-domain-verification\" content={facebookDomainVerification} />\n )}\n ,{<meta http-equiv=\"content-language\" content={defaultLang || 'es-es'} />},\n <script type=\"application/ld+json\">\n {`\n ${JSON.stringify(this.getGoogleLocalBusiness())}\n `}\n </script>\n </Helmet>\n\n {this.header(theme)}\n {this.getOldVersionNavigationMessage()}\n\n <Switch>\n {this.renderRoutes()}\n {this.createLayoutRoute({ path: '/login' }, 'login', LoginSection, false)}\n {this.createLayoutRoute({ path: '/register' }, 'register', RegisterSection, false)}\n {this.createLayoutRoute(\n { path: '/forgot-password' },\n 'forgot-password',\n ForgotPasswordSection,\n false,\n )}\n {this.createLayoutRoute(\n { path: '/forgot-password-validation' },\n 'forgot-password',\n ForgotPasswordValidationSection,\n false,\n )}\n {(companyLogin || agencyLogin) &&\n this.createLayoutRoute(\n { path: '/company-validate-invitation' },\n 'company-validate-invitation',\n CompanyValidateInvitationSection,\n false,\n )}\n {(companyLogin || agencyLogin) &&\n this.createLayoutRoute(\n { path: '/register-company' },\n 'register-company',\n RegisterSection,\n false,\n )}\n\n {this.createLayoutRoute({ path: '/my-account' }, 'my-account', ProfileSection, false)}\n {this.createLayoutRoute(\n { path: '/my-account/bookings' },\n 'bookings',\n BookingsSection,\n false,\n )}\n {this.createLayoutRoute(\n { path: '/my-account/bookings/:id' },\n 'booking-details',\n BookingDetails,\n false,\n )}\n {this.createLayoutRoute(\n { path: '/my-account/infractions' },\n 'infractions',\n InfractionsSection,\n false,\n )}\n\n {blogSettings &&\n blogSettings.enabled &&\n this.createLayoutRoute(\n { path: '/blog', layout: blogSettings.layout },\n 'blog',\n BlogList,\n false,\n )}\n {blogSettings &&\n blogSettings.enabled &&\n this.createLayoutRoute(\n { path: '/blog/:url', layout: blogSettings.layout },\n 'blog-post',\n BlogPage,\n false,\n )}\n {this.createLayoutRoute(\n { path: '/axle-verification-request' },\n 'axle-verification-request',\n AxleVerificationSection,\n false,\n )}\n <Route component={AxleVerificationSection} path=\"/axle-verification-response\" />\n\n {this.createLayoutRoute({ path: '*' }, 1000, NotFound)}\n </Switch>\n <CancelModal />\n <RentlyFooter />\n </StyledTemplatedApp>\n </ThemeProvider>\n </SettingsContext.Provider>\n );\n }\n}\n\nconst mapStateToProps = ({ siteConfiguration, global, router }) => ({\n settings: siteConfiguration.settings,\n listLanguages: global.listLanguages,\n currentLanguage: global.currentLanguage,\n listCurrencies: global.listCurrencies,\n router: router,\n});\n\nconst AppContainerComp = withTranslation()(AppContainer);\n\nexport default withRouter(\n connect(mapStateToProps, {\n fetchSettings,\n fetchLanguages,\n fetchCurrencies,\n handleLogIn,\n fetchBookingsConfiguration,\n fetchGeneralSettings,\n setWebCurrencyAction,\n changeCurrencyAction,\n })(AppContainerComp),\n);\n","import React, { Component } from 'react';\nimport { Provider } from 'react-redux';\nimport { ConnectedRouter } from 'connected-react-router';\nimport store, { history } from './store';\nimport AppContainer from 'App.container';\nimport { Switch, Route } from 'react-router';\nimport PrivateRoute from 'components/PrivateRoute/PrivateRoute';\nimport AuthService from 'auth/AuthService';\n\nconst AsyncAdminContainer = React.lazy(() => import('pages/Admin'));\n\nclass App extends Component {\n handleAuthentication = ({ location }) => {\n if (/access_token|id_token|error/.test(location.hash)) {\n AuthService.handleAuthentication();\n }\n };\n\n render() {\n return (\n <Provider store={store}>\n <ConnectedRouter history={history}>\n <Switch>\n <Route\n path=\"/callback\"\n render={props => {\n this.handleAuthentication(props);\n return <div style={{ height: `100%` }} />;\n }}\n />\n <PrivateRoute path=\"/admin\" component={AsyncAdminContainer} />\n <Route component={AppContainer} {...this.props} />\n </Switch>\n </ConnectedRouter>\n </Provider>\n );\n }\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/),\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA',\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.',\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import i18n from 'i18next';\n//import Backend from 'i18next-xhr-backend';\nimport Backend from 'i18next-http-backend';\n//import LanguageDetector from 'i18next-browser-languagedetector';\nimport { initReactI18next } from 'react-i18next';\nimport LanguageDetector from 'i18next-browser-languagedetector';\n\ni18n\n // load translation using xhr -> see /public/locales\n // learn more: https://github.com/i18next/i18next-xhr-backend\n .use(Backend)\n // detect user language\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\n //.use(LanguageDetector)\n .use(LanguageDetector)\n // pass the i18n instance to the react-i18next components.\n // Alternative use the I18nextProvider: https://react.i18next.com/components/i18nextprovider\n .use(initReactI18next)\n // init i18next\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n fallbackLng: '',\n preload: [\n 'es',\n 'en',\n 'pt',\n 'es-CL',\n 'pl',\n 'it',\n 'de',\n 'al',\n 'en-GB',\n 'es-Mx',\n 'fr',\n 'lt',\n 'nl',\n 'ru',\n ],\n debug: process.env.NODE_ENV === 'development',\n\n detection: {\n order: ['path'],\n },\n\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n\n // special options for react-i18next\n // learn more: https://react.i18next.com/components/i18next-instance\n react: {\n wait: true,\n },\n });\n\nexport default i18n;\n","import React, { Suspense } from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport styled from 'styled-components';\nimport * as serviceWorker from './serviceWorker';\nimport 'normalize.css';\nimport './i18n';\nimport { PageLoading } from 'components/';\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\nimport { setChonkyDefaults } from 'chonky';\nimport { ChonkyIconFA } from 'chonky-icon-fontawesome';\n\nconst StyledApp = styled.div`\n * {\n box-sizing: border-box;\n }\n\n html {\n margin: 0;\n padding: 0;\n width: 100%;\n scroll-behavior: smooth;\n overflow-x: hidden;\n }\n\n body {\n margin: 0;\n padding: 0;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n #root {\n }\n`;\n\nconst appInsights = new ApplicationInsights({\n config: {\n instrumentationKey: '87007c52-9413-4032-b629-726c522c07ce',\n /* ...Other Configuration Options... */\n },\n});\nappInsights.loadAppInsights();\nappInsights.trackPageView();\n\nsetChonkyDefaults({ iconComponent: ChonkyIconFA });\n\nconst rootApp = (\n <StyledApp>\n <Suspense fallback={<PageLoading show={false} />}>\n <App />\n </Suspense>\n </StyledApp>\n);\n\nReactDOM.render(rootApp, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}