{"version":3,"file":"static/chunks/pages/_site/[city]/full-buy-65246eef353caf41.js","mappings":"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","sources":["webpack://_N_E/../../node_modules/@google-pay/button-react/dist/index.umd.min.js","webpack://_N_E/../../node_modules/lodash/sortBy.js","webpack://_N_E/../../node_modules/lodash/uniqBy.js","webpack://_N_E/?a180","webpack://_N_E/./src/features/full-buy/constants/analytics.ts","webpack://_N_E/./src/features/full-buy/components/EquipmentControls/ControlsWithQuantity.tsx","webpack://_N_E/./src/features/full-buy/components/EquipmentControls/styled.ts","webpack://_N_E/./src/features/full-buy/components/EquipmentControls/index.tsx","webpack://_N_E/./src/features/full-buy/components/PurchaseOptionsSlider/components/PurchaseOptionsItem/styled.ts","webpack://_N_E/./src/features/full-buy/components/PurchaseOptionsSlider/components/PurchaseOptionsItem/index.tsx","webpack://_N_E/./src/features/full-buy/components/PurchaseOptionsSlider/styled.ts","webpack://_N_E/./src/features/full-buy/helpersForProducts.ts","webpack://_N_E/./src/features/full-buy/components/PurchaseOptionsSlider/index.tsx","webpack://_N_E/./src/features/full-buy/popups/BasePopupRightAlign/index.tsx","webpack://_N_E/./src/features/full-buy/store/selectors/products/selectProductsByCategory.ts","webpack://_N_E/./src/features/full-buy/components/EquipmentInfo/styled.ts","webpack://_N_E/./src/features/full-buy/components/EquipmentInfo/index.tsx","webpack://_N_E/./src/features/full-buy/components/EquipmentPopup/styled.ts","webpack://_N_E/./src/features/full-buy/types.ts","webpack://_N_E/./src/features/full-buy/components/EquipmentPopup/index.tsx","webpack://_N_E/./src/features/full-buy/containers/DecoderList/DecoderCardsView.tsx","webpack://_N_E/./src/features/full-buy/containers/DecoderList/DecoderCardsViewWithButton.tsx","webpack://_N_E/./src/features/full-buy/containers/DecoderList/DecoderCardsViewWithCarousel.tsx","webpack://_N_E/./src/features/full-buy/helpers/helpersForProduct/getPurchaseOptions.ts","webpack://_N_E/./src/features/full-buy/store/actions/filters.ts","webpack://_N_E/./src/features/full-buy/store/actions/products/addProduct.ts","webpack://_N_E/./src/features/full-buy/store/actions/products/decProductQuantity.ts","webpack://_N_E/./src/features/full-buy/store/actions/products/setProducts.ts","webpack://_N_E/./src/features/full-buy/store/actions/selectSubscription.ts","webpack://_N_E/./src/features/full-buy/store/actions/selectTariff.ts","webpack://_N_E/./src/features/full-buy/store/actions/setAddressData.ts","webpack://_N_E/./src/features/full-buy/store/actions/setAgreementData.ts","webpack://_N_E/./src/features/full-buy/store/actions/setDisplayTariffLineState.ts","webpack://_N_E/./src/features/full-buy/store/actions/setInitialized.ts","webpack://_N_E/./src/features/full-buy/store/actions/setPrevStep.ts","webpack://_N_E/./src/features/full-buy/store/actions/setPromoCode.ts","webpack://_N_E/./src/features/full-buy/store/actions/setSlot.ts","webpack://_N_E/./src/features/full-buy/store/actions/setStep.ts","webpack://_N_E/./src/features/full-buy/store/actions/setTariffLineAlias.ts","webpack://_N_E/./src/features/full-buy/store/actions/toggleBackgroundLoading.ts","webpack://_N_E/./src/features/full-buy/store/actions/unSelectSubscription.ts","webpack://_N_E/./src/features/full-buy/store/actions/products/thunk/addEquipment.ts","webpack://_N_E/./src/features/full-buy/store/actions/products/setSelectedPrice.ts","webpack://_N_E/./src/features/full-buy/store/actions/products/thunk/changeEquipmentCount.ts","webpack://_N_E/./src/features/full-buy/store/actions/products/incProductQuantity.ts","webpack://_N_E/./src/features/full-buy/containers/DecoderList/index.tsx","webpack://_N_E/./src/features/full-buy/containers/EquipmentList/RouterCardsView.tsx","webpack://_N_E/./src/features/full-buy/containers/EquipmentList/RouterCardsViewWithButton.tsx","webpack://_N_E/./src/features/full-buy/containers/EquipmentList/RouterCardsViewWithCarousel.tsx","webpack://_N_E/./src/features/full-buy/containers/EquipmentList/index.tsx","webpack://_N_E/./src/features/full-buy/containers/AdditionalEquipment/AdditionalEquipmentWithToggle.tsx","webpack://_N_E/./src/features/full-buy/helpers/ab/isAdditionalEquipment.ts","webpack://_N_E/./src/features/full-buy/containers/AdditionalEquipment/useCheckAdditionalEquipment.tsx","webpack://_N_E/./src/features/full-buy/containers/AdditionalEquipment/index.tsx","webpack://_N_E/./src/features/full-buy/Banner/styled.ts","webpack://_N_E/./src/features/full-buy/Banner/BannerView.tsx","webpack://_N_E/./src/features/full-buy/store/selectors/selectBannerInfoForFullBuy.ts","webpack://_N_E/./src/features/full-buy/Banner/index.tsx","webpack://_N_E/../../packages/ui-react/src/organisms/OrderSummary/Item/ItemWithoutCost.tsx","webpack://_N_E/./src/features/full-buy/store/selectors/getAddressCheckingResult.ts","webpack://_N_E/./src/features/full-buy/store/selectors/selectStepName.ts","webpack://_N_E/./src/features/full-buy/store/selectors/getSummaryInfo/getDescriptionForTariffForNewSubscriptions.ts","webpack://_N_E/./src/features/full-buy/components/OrderSummary/AdditionalProductDetailedInfo.tsx","webpack://_N_E/./src/features/full-buy/store/selectors/getSummaryInfo/getTitleByQuantity.ts","webpack://_N_E/./src/features/full-buy/store/selectors/getSummaryInfo/processProduct.ts","webpack://_N_E/./src/features/full-buy/store/selectors/getSummaryInfo/index.ts","webpack://_N_E/./src/features/full-buy/helpers/ab/isConnectionCostHidden.ts","webpack://_N_E/./src/features/full-buy/containers/OrderSummary/index.tsx","webpack://_N_E/./src/features/full-buy/containers/TotalSummary/index.tsx","webpack://_N_E/./src/features/full-buy/PromoCode/hooks/checkPromoCode.ts","webpack://_N_E/./src/features/full-buy/PromoCode/styled.tsx","webpack://_N_E/./src/features/full-buy/PromoCode/index.tsx","webpack://_N_E/./src/features/full-buy/containers/agregate/TiketContainer/styled.ts","webpack://_N_E/./src/features/full-buy/containers/agregate/TiketContainer/index.tsx","webpack://_N_E/./src/features/full-buy/AgreementInfo/index.tsx","webpack://_N_E/./src/features/full-buy/CallbackContacts/styled.ts","webpack://_N_E/./src/features/full-buy/CallbackContacts/index.tsx","webpack://_N_E/./src/features/full-buy/Feedback/styled.tsx","webpack://_N_E/./src/features/full-buy/Feedback/index.tsx","webpack://_N_E/./src/features/full-buy/TariffInclude/Card/styled.ts","webpack://_N_E/./src/features/full-buy/TariffInclude/Card/index.tsx","webpack://_N_E/./src/features/full-buy/TariffInclude/CardLoader/styled.ts","webpack://_N_E/./src/features/full-buy/TariffInclude/CardLoader/index.tsx","webpack://_N_E/./src/features/full-buy/TariffInclude/styled.ts","webpack://_N_E/./src/features/full-buy/TariffInclude/CardRow/index.tsx","webpack://_N_E/./src/features/full-buy/TariffInclude/index.tsx","webpack://_N_E/./src/api/authorizeApplePaySession.ts","webpack://_N_E/./src/helpers/load-script.ts","webpack://_N_E/./src/components/ApplePayBtn/styled.ts","webpack://_N_E/./src/components/ApplePayBtn/index.tsx","webpack://_N_E/../../packages/api-domru/src/api-profile/v1/pay-list/acquiring-seamless-pay-gw-list.ts","webpack://_N_E/./src/components/GooglePayBtn/styled.ts","webpack://_N_E/./src/components/GooglePayBtn/index.tsx","webpack://_N_E/./src/features/full-buy/PaymentVariants/styled.ts","webpack://_N_E/./src/features/full-buy/PaymentVariants/index.tsx","webpack://_N_E/./src/features/full-buy/TicketFinal/styled.ts","webpack://_N_E/./src/features/full-buy/TicketFinal/index.tsx","webpack://_N_E/./src/features/full-buy/containers/pages/styled.ts","webpack://_N_E/./src/features/full-buy/containers/GoToNextStepButton/index.tsx","webpack://_N_E/./src/features/full-buy/containers/agregate/TiketContainerFinal/index.tsx","webpack://_N_E/./src/features/full-buy/store/actions/goToNextStep.ts","webpack://_N_E/./src/features/full-buy/store/selectors/selectFilteredTariffs.ts","webpack://_N_E/./src/features/full-buy/containers/GoToNextStepButton/useOldAddressFormNextButton.ts","webpack://_N_E/./src/features/full-buy/store/selectors/products/getSelectedProductsByCategory.ts","webpack://_N_E/./src/features/full-buy/containers/GoToNextStepButton/usePrivateSectorEquipmentNextButton.ts","webpack://_N_E/./src/features/full-buy/constants/abnTest.ts","webpack://_N_E/./src/features/full-buy/helpers/ab/isOneLineAddressScreen.ts","webpack://_N_E/./src/features/full-buy/store/selectors/nextButton/getStepForNextButton.ts","webpack://_N_E/./src/features/full-buy/store/selectors/nextButton/getStateForContactsButton.ts","webpack://_N_E/./src/features/full-buy/containers/GoToNextStepButton/useContactsNextButton.ts","webpack://_N_E/./src/features/full-buy/store/selectors/products/isHaveSelectedProducts.ts","webpack://_N_E/./src/features/full-buy/containers/GoToNextStepButton/useEquipmentsNextButton.ts","webpack://_N_E/./src/features/full-buy/containers/GoToNextStepButton/useEquipmentsTvNextButton.ts","webpack://_N_E/./src/features/full-buy/containers/GoToNextStepButton/useStubNextButton.ts","webpack://_N_E/./src/features/full-buy/store/selectors/getSubscriptionsWithConditions.ts","webpack://_N_E/./src/features/full-buy/containers/GoToNextStepButton/useSubscriptionsNextButton.ts","webpack://_N_E/./src/features/full-buy/store/selectors/nextButton/getStateForTariffInfoButton.ts","webpack://_N_E/./src/features/full-buy/containers/GoToNextStepButton/useTariffInfoNextButton.ts","webpack://_N_E/./src/features/full-buy/containers/GoToNextStepButton/useUnifiedAddressFormNextButton.ts","webpack://_N_E/./src/features/full-buy/store/actions/updateConnectionCostForSelectedTariff.ts","webpack://_N_E/../../packages/ui-react/src/components/svg/devices/Game.tsx","webpack://_N_E/../../packages/ui-react/src/components/svg/devices/MovixHelper.tsx","webpack://_N_E/./src/features/full-buy/store/selectors/getGuideData/data.tsx","webpack://_N_E/./src/features/full-buy/store/selectors/getGuideData/getGuideData.ts","webpack://_N_E/./src/features/full-buy/containers/GuideFullBuy/index.tsx","webpack://_N_E/./src/features/full-buy/store/actions/goToPrevStep.ts","webpack://_N_E/./src/features/full-buy/containers/ProgressBarWithBackBtn/index.tsx","webpack://_N_E/./src/features/full-buy/containers/MainLayout/styled.ts","webpack://_N_E/./src/features/full-buy/containers/MainLayout/MainLayout.tsx","webpack://_N_E/./src/features/full-buy/containers/pages/Address/HasAgreementPopup/index.tsx","webpack://_N_E/./src/features/full-buy/components/uiReactComponents/PersonForm/index.tsx","webpack://_N_E/./src/features/full-buy/AddressCheckMessage/RequestForm/styled.ts","webpack://_N_E/./src/features/full-buy/AddressCheckMessage/RequestForm/index.tsx","webpack://_N_E/./src/features/full-buy/components/OneLineAddressInput/OneLineAddressInput.tsx","webpack://_N_E/./src/features/full-buy/AddressCheckMessage/styled.ts","webpack://_N_E/./src/features/full-buy/containers/pages/OneLineAddress/styled.tsx","webpack://_N_E/./src/features/full-buy/containers/pages/OneLineAddress/UnifiedAddressForm.tsx","webpack://_N_E/./src/features/full-buy/containers/pages/OneLineAddress/index.tsx","webpack://_N_E/./src/features/full-buy/styled.ts","webpack://_N_E/./src/features/full-buy/skeleton/styled.ts","webpack://_N_E/./src/features/full-buy/skeleton/TariffInfoPageSkeleton.tsx","webpack://_N_E/./src/helpers/useSendReferrerToGA.ts","webpack://_N_E/./src/features/full-buy/containers/Loader/styles.tsx","webpack://_N_E/./src/features/full-buy/containers/Loader/index.tsx","webpack://_N_E/./src/features/full-buy/AddressCheckMessage/index.tsx","webpack://_N_E/./src/features/full-buy/ContactAddress/EditableForm/styled.ts","webpack://_N_E/./src/features/full-buy/ContactAddress/EditableForm/index.tsx","webpack://_N_E/./src/features/full-buy/ContactAddress/styled.ts","webpack://_N_E/./src/features/full-buy/ContactAddress/index.tsx","webpack://_N_E/./src/features/full-buy/containers/pages/Address/index.tsx","webpack://_N_E/./src/features/full-buy/ContactPerson/EditableContactsForm/styled.ts","webpack://_N_E/./src/features/full-buy/ContactPerson/EditableContactsForm/index.tsx","webpack://_N_E/./src/features/full-buy/containers/pages/Contacts/styled.ts","webpack://_N_E/./src/features/full-buy/containers/pages/EngineerRequest/index.tsx","webpack://_N_E/./src/features/full-buy/containers/pages/Contacts/index.tsx","webpack://_N_E/../../packages/api-domru/src/api-tariffs/v1/tariffs/[salePackageId]/packageIdBySubscriptions/index.ts","webpack://_N_E/./src/api/content/cities/tariffs.ts","webpack://_N_E/./src/features/full-buy/store/functions.ts","webpack://_N_E/./src/features/full-buy/store/selectors/selectDataForCreateAgreement.ts","webpack://_N_E/./src/features/full-buy/containers/pages/CreateAgreement/index.tsx","webpack://_N_E/./src/features/full-buy/store/actions/createAgreement.ts","webpack://_N_E/./src/features/full-buy/store/actions/setCalculatedSalePackageId.ts","webpack://_N_E/./src/features/full-buy/store/actions/helpers.ts","webpack://_N_E/./src/features/full-buy/helpers/selectTimeSubText.ts","webpack://_N_E/./src/features/full-buy/store/actions/setIsLoadingShown.ts","webpack://_N_E/./src/features/full-buy/components/RouterChoiceInfo/index.tsx","webpack://_N_E/./src/features/full-buy/store/actions/skipEquipmentStep.ts","webpack://_N_E/./src/features/full-buy/containers/pages/Equipments/index.tsx","webpack://_N_E/./src/features/full-buy/components/DecoderInfo/index.tsx","webpack://_N_E/./src/features/full-buy/containers/pages/EquipmentsTv/index.tsx","webpack://_N_E/./src/features/full-buy/store/actions/skipEquipmentTvStep.ts","webpack://_N_E/./src/features/full-buy/EmployeeVisit/index.tsx","webpack://_N_E/./src/features/full-buy/containers/pages/Final/index.tsx","webpack://_N_E/./src/features/full-buy/store/actions/skipPrivateSectorEquipment.ts","webpack://_N_E/./src/features/full-buy/containers/pages/PrivateSectorEquipments/index.tsx","webpack://_N_E/./src/features/full-buy/store/selectors/getSubscriptionsSummary/getSubscriptionsSummary.ts","webpack://_N_E/./src/features/full-buy/containers/pages/Subscriptions/WantMoreSubscriptions.tsx","webpack://_N_E/./src/features/full-buy/components/SubscriptionsPopup/styled.tsx","webpack://_N_E/./src/features/full-buy/components/SubscriptionsPopup/SubscriptionsAdditionalInfoPopup.tsx","webpack://_N_E/./src/features/full-buy/helpers/selectSubscriptionPopup.ts","webpack://_N_E/./src/features/full-buy/store/selectors/getRequiredAndSelectivelySubscriptions.ts","webpack://_N_E/./src/features/full-buy/containers/Subscriptions/RequiredAndSelectivelySubscriptionsContainer.tsx","webpack://_N_E/./src/features/full-buy/containers/Subscriptions/SubscriptionsContainer.tsx","webpack://_N_E/./src/features/full-buy/containers/Subscriptions/CombinedContainerForMainPage.tsx","webpack://_N_E/./src/features/full-buy/store/actions/skipSubscriptionsStep.ts","webpack://_N_E/./src/features/full-buy/containers/pages/Subscriptions/index.tsx","webpack://_N_E/./src/components/CustomSwiper/styled.tsx","webpack://_N_E/./src/components/CustomSwiper/index.tsx","webpack://_N_E/./src/components/TariffCardMinimal/styled.tsx","webpack://_N_E/./src/components/TariffCardMinimal/index.tsx","webpack://_N_E/./src/features/full-buy/renderTariffList/index.tsx","webpack://_N_E/./src/features/full-buy/SelectedTariffElements/ElementInfo/styled.ts","webpack://_N_E/./src/features/full-buy/SelectedTariffElements/ElementInfo/index.tsx","webpack://_N_E/./src/features/full-buy/SelectedTariffElements/styled.ts","webpack://_N_E/./src/features/full-buy/SelectedTariffElements/index.tsx","webpack://_N_E/../../packages/api-domru/src/api-tariffs/v1/tariffs/[salePackageId]/equipment/index.ts","webpack://_N_E/./src/features/full-buy/helpers/ab/isOnlyPurchaseEquipment.ts","webpack://_N_E/./src/features/full-buy/store/actions/getEquipment.ts","webpack://_N_E/../../packages/ui-react/src/components/controls/multiCheckboxWithIcon/styled.ts","webpack://_N_E/../../packages/ui-react/src/components/controls/multiCheckboxWithIcon/index.tsx","webpack://_N_E/../../packages/ui-react/src/components/controls/CheckboxList/styled.ts","webpack://_N_E/../../packages/ui-react/src/components/controls/CheckboxList/index.tsx","webpack://_N_E/./src/features/full-buy/useFiltersByTags/helpers.ts","webpack://_N_E/./src/features/full-buy/useFiltersByTags/styled.ts","webpack://_N_E/./src/features/full-buy/useFiltersByTags/index.tsx","webpack://_N_E/./src/features/full-buy/containers/pages/TariffInfo/styled.ts","webpack://_N_E/./src/features/full-buy/containers/pages/TariffInfo/index.tsx","webpack://_N_E/./src/features/full-buy/helpers/getFlow.ts","webpack://_N_E/./src/features/full-buy/store/actions/getSubscriptions.ts","webpack://_N_E/./src/features/full-buy/store/actions/setBundleOfSubscriptions.ts","webpack://_N_E/./src/features/full-buy/indexByPage.tsx","webpack://_N_E/./src/features/full-buy/store/actions/initFullBuy.ts","webpack://_N_E/./src/features/full-buy/store/actions/setTariffs.ts","webpack://_N_E/./src/features/full-buy/store/actions/setFlow.ts","webpack://_N_E/./src/features/full-buy/store/actions/resetFullBuy.ts","webpack://_N_E/./src/features/full-buy/index.tsx","webpack://_N_E/./pages/_site/[city]/full-buy.tsx","webpack://_N_E/./src/constants/sessionStorageKeys.ts","webpack://_N_E/./src/features/full-buy/TariffElementNew/TariffElement.tsx","webpack://_N_E/./src/features/full-buy/TariffElementNew/components/ButtonElement/styled.ts","webpack://_N_E/./src/features/full-buy/TariffElementNew/components/ButtonElement/index.tsx","webpack://_N_E/./src/features/full-buy/TariffElementNew/components/ImageElement/index.tsx","webpack://_N_E/./src/features/full-buy/TariffElementNew/components/ImageElement/styled.ts","webpack://_N_E/./src/features/full-buy/TariffElementNew/styled.ts","webpack://_N_E/./src/helpers/hooks/usePrepareQueryData.tsx","webpack://_N_E/../../packages/api-domru/src/api-loyalty/v1/unauth-promocode/check.ts","webpack://_N_E/../../packages/api-domru/src/api-pay/v1/payment/add.ts","webpack://_N_E/../../packages/entities/src/ContactAddress/actions/resetAddress.ts","webpack://_N_E/../../packages/shared/src/hooks/useResizeObserver.tsx","webpack://_N_E/../../packages/ui-react/src/components/HtmlContentFromApi/styled.ts","webpack://_N_E/../../packages/ui-react/src/components/HtmlContentFromApi/index.tsx","webpack://_N_E/../../packages/ui-react/src/components/List/OrderedList.tsx","webpack://_N_E/../../packages/ui-react/src/components/NukaCarousel/SliderHoc/constants.ts","webpack://_N_E/../../packages/ui-react/src/components/NukaCarousel/SliderHoc/styled.ts","webpack://_N_E/../../packages/ui-react/src/components/NukaCarousel/SliderHoc/index.tsx","webpack://_N_E/../../packages/ui-react/src/components/controls/Toggle/styled.ts","webpack://_N_E/../../packages/ui-react/src/components/controls/Toggle/index.tsx","webpack://_N_E/../../packages/ui-react/src/components/select/titleSelect/index.js","webpack://_N_E/../../packages/ui-react/src/components/svg/main/Check.tsx","webpack://_N_E/../../packages/ui-react/src/components/svg/money/Coin.tsx","webpack://_N_E/../../packages/ui-react/src/components/svg/video/VideoPlay.tsx","webpack://_N_E/../../packages/ui-react/src/deprecated/icon/index.js","webpack://_N_E/../../packages/ui-react/src/tokens/mediaWidth.ts","webpack://_N_E/./static/images/full-buy/banner.png"],"sourcesContent":["!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t(require(\"react\")):\"function\"==typeof define&&define.amd?define([\"react\"],t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).GooglePayButton=t(e.React)}(this,(function(e){\"use strict\";function t(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var n=t(e);\n/*! *****************************************************************************\n Copyright (c) Microsoft Corporation.\n\n Permission to use, copy, modify, and/or distribute this software for any\n purpose with or without fee is hereby granted.\n\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n PERFORMANCE OF THIS SOFTWARE.\n ***************************************************************************** */function o(e,t,n,o){return new(n||(n=Promise))((function(i,a){function s(e){try{l(o.next(e))}catch(e){a(e)}}function r(e){try{l(o.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}l((o=o.apply(e,t||[])).next())}))}let i={};function a(e){const t=i[e];if(t)return t;const n=new Promise((t,n)=>{const o=document.createElement(\"script\");o.src=e,o.async=!0;const a=()=>{t()},s=()=>{o.removeEventListener(\"load\",a),o.removeEventListener(\"error\",s),delete i[e],o.remove(),n(new Error(\"Unable to load script \"+e))};o.addEventListener(\"load\",a),o.addEventListener(\"error\",s),document.body.appendChild(o)});return i[e]=n,n}class s{constructor(e){this.handleClick=e=>o(this,void 0,void 0,(function*(){const t=this.config;if(!t)throw new Error(\"google-pay-button: Missing configuration\");const n=this.createLoadPaymentDataRequest(t);try{if(t.onClick&&t.onClick(e),e.defaultPrevented)return;const o=yield this.client.loadPaymentData(n);t.onLoadPaymentData&&t.onLoadPaymentData(o)}catch(e){\"CANCELED\"===e.statusCode?t.onCancel&&t.onCancel(e):t.onError?t.onError(e):console.error(e)}})),this.options=e}getElement(){return this.element}isGooglePayLoaded(){var e,t;return\"google\"in(window||global)&&!!(null===(t=null===(e=null===google||void 0===google?void 0:google.payments)||void 0===e?void 0:e.api)||void 0===t?void 0:t.PaymentsClient)}mount(e){return o(this,void 0,void 0,(function*(){this.isGooglePayLoaded()||(yield a(\"https://pay.google.com/gp/p/js/pay.js\")),this.element=e,e&&(this.appendStyles(),this.config&&this.updateElement())}))}unmount(){this.element=void 0}configure(e){let t=void 0;return this.config=e,this.oldInvalidationValues&&!this.isClientInvalidated(e)||(t=this.updateElement()),this.oldInvalidationValues=this.getInvalidationValues(e),null!=t?t:Promise.resolve()}createClientOptions(e){const t={environment:e.environment,merchantInfo:this.createMerchantInfo(e)};return(e.onPaymentDataChanged||e.onPaymentAuthorized)&&(t.paymentDataCallbacks={},e.onPaymentDataChanged&&(t.paymentDataCallbacks.onPaymentDataChanged=t=>e.onPaymentDataChanged(t)||{}),e.onPaymentAuthorized&&(t.paymentDataCallbacks.onPaymentAuthorized=t=>e.onPaymentAuthorized(t)||{})),t}createIsReadyToPayRequest(e){const t=e.paymentRequest;return{apiVersion:t.apiVersion,apiVersionMinor:t.apiVersionMinor,allowedPaymentMethods:t.allowedPaymentMethods,existingPaymentMethodRequired:e.existingPaymentMethodRequired}}createLoadPaymentDataRequest(e){return Object.assign(Object.assign({},e.paymentRequest),{merchantInfo:this.createMerchantInfo(e)})}createMerchantInfo(e){const t=Object.assign({},e.paymentRequest.merchantInfo);return t.softwareInfo||(t.softwareInfo={id:this.options.softwareInfoId,version:this.options.softwareInfoVersion}),t}isMounted(){return null!=this.element&&!1!==this.element.isConnected}removeButton(){if(this.element instanceof ShadowRoot||this.element instanceof Element)for(const e of Array.from(this.element.children))\"STYLE\"!==e.tagName&&e.remove()}updateElement(){return o(this,void 0,void 0,(function*(){if(!this.isMounted())return;const e=this.getElement();if(!this.config)throw new Error(\"google-pay-button: Missing configuration\");this.removeButton(),this.client=new google.payments.api.PaymentsClient(this.createClientOptions(this.config));const t={buttonType:this.config.buttonType,buttonColor:this.config.buttonColor,buttonSizeMode:this.config.buttonSizeMode,buttonLocale:this.config.buttonLocale,onClick:this.handleClick,allowedPaymentMethods:this.config.paymentRequest.allowedPaymentMethods},n=e.getRootNode();n instanceof ShadowRoot&&(t.buttonRootNode=n);const o=this.client.createButton(t);this.setClassName(e,[e.className,\"not-ready\"]),e.appendChild(o);let i,a=!1;try{i=yield this.client.isReadyToPay(this.createIsReadyToPayRequest(this.config)),a=i.result&&!this.config.existingPaymentMethodRequired||i.result&&i.paymentMethodPresent&&this.config.existingPaymentMethodRequired||!1}catch(e){this.config.onError?this.config.onError(e):console.error(e)}if(this.isMounted()){if(a){try{this.client.prefetchPaymentData(this.createLoadPaymentDataRequest(this.config))}catch(e){console.log(\"Error with prefetch\",e)}this.setClassName(e,(e.className||\"\").split(\" \").filter(e=>e&&\"not-ready\"!==e))}if((this.isReadyToPay!==(null==i?void 0:i.result)||this.paymentMethodPresent!==(null==i?void 0:i.paymentMethodPresent))&&(this.isReadyToPay=!!(null==i?void 0:i.result),this.paymentMethodPresent=null==i?void 0:i.paymentMethodPresent,this.config.onReadyToPayChange)){const e={isButtonVisible:a,isReadyToPay:this.isReadyToPay};this.paymentMethodPresent&&(e.paymentMethodPresent=this.paymentMethodPresent),this.config.onReadyToPayChange(e)}}}))}setClassName(e,t){const n=t.filter(e=>e).join(\" \");n?e.className=n:e.removeAttribute(\"class\")}appendStyles(){var e,t,n;if(\"undefined\"==typeof document)return;const o=null===(e=this.element)||void 0===e?void 0:e.getRootNode(),i=`default-google-style-${this.options.cssSelector.replace(/[^\\w-]+/g,\"\")}-${null===(t=this.config)||void 0===t?void 0:t.buttonLocale}`;if(o&&!(null===(n=o.getElementById)||void 0===n?void 0:n.call(o,i))){const e=document.createElement(\"style\");e.id=i,e.type=\"text/css\",e.innerHTML=`\\n ${this.options.cssSelector} {\\n display: inline-block;\\n }\\n ${this.options.cssSelector}.not-ready {\\n width: 0;\\n height: 0;\\n overflow: hidden;\\n }\\n `,o instanceof Document&&o.head?o.head.appendChild(e):o.appendChild(e)}}isClientInvalidated(e){if(!this.oldInvalidationValues)return!0;return this.getInvalidationValues(e).some((e,t)=>e!==this.oldInvalidationValues[t])}getInvalidationValues(e){var t,n;return[e.environment,e.existingPaymentMethodRequired,!!e.onPaymentDataChanged,!!e.onPaymentAuthorized,e.buttonColor,e.buttonType,e.buttonLocale,e.buttonSizeMode,e.paymentRequest.merchantInfo.merchantId,e.paymentRequest.merchantInfo.merchantName,null===(t=e.paymentRequest.merchantInfo.softwareInfo)||void 0===t?void 0:t.id,null===(n=e.paymentRequest.merchantInfo.softwareInfo)||void 0===n?void 0:n.version,e.paymentRequest.allowedPaymentMethods]}}const r=\"google-pay-button-container\";class l extends n.default.Component{constructor(){super(...arguments),this.manager=new s({cssSelector:\".\"+r,softwareInfoId:\"@google-pay/button-react\",softwareInfoVersion:\"3.0.0\"}),this.elementRef=n.default.createRef()}componentDidMount(){return o(this,void 0,void 0,(function*(){const e=this.elementRef.current;e&&(yield this.manager.mount(e),this.manager.configure(this.props))}))}componentWillUnmount(){this.manager.unmount()}componentDidUpdate(){this.manager.configure(this.props)}render(){return n.default.createElement(\"div\",{ref:this.elementRef,className:[r,this.props.className].filter(e=>e).join(\" \"),style:this.props.style})}}return l}));\n","var baseFlatten = require('./_baseFlatten'),\n baseOrderBy = require('./_baseOrderBy'),\n baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","var baseIteratee = require('./_baseIteratee'),\n baseUniq = require('./_baseUniq');\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nmodule.exports = uniqBy;\n","\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_site/[city]/full-buy\",\n function () {\n return require(\"private-next-pages/_site/[city]/full-buy.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/_site/[city]/full-buy\"])\n });\n }\n ","export const ANALYTICS = {\n category: {\n fullBuy: 'fullbuy',\n },\n action: {\n clickGuide: 'click_guide',\n goToPage: 'go_to_page_full_buy',\n },\n};\n","import Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport Stepper from '@r1-frontend/ui-react/components/Stepper';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\ninterface IProps {\n quantity: number,\n onIncrement: () => void,\n onDecrement: () => void,\n onClose: () => void,\n minQuantity?: number,\n disabled?: boolean,\n}\n\nexport const ControlsWithQuantity = ({\n quantity,\n minQuantity = 0,\n disabled = false,\n onIncrement,\n onDecrement,\n onClose,\n}: IProps) => {\n const isMobile = useMatchMediaByWidth(wideBreakpoints.mobile);\n\n return <>\n \n \n Продолжить оформление\n \n ;\n};\n","import styled from 'styled-components';\n\nimport { Cost } from '@r1-frontend/ui-react/components/costs';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { Paragraph5 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { ListContainer } from '@r1-frontend/ui-react/experimental/containers';\n\nexport const EquipmentControlsComponent = styled(ListContainer)`\n align-items: center;\n \n ${Cost} {\n width: 100%;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${Paragraph5} {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n ${Cost} {\n width: auto;\n }\n }\n`;\n","import Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { Cost } from '@r1-frontend/ui-react/components/costs';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { Paragraph5 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { NBSP } from '@r1-frontend/ui-react/tokens/symbols';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { ControlsWithQuantity } from '~/src/features/full-buy/components/EquipmentControls/ControlsWithQuantity';\n\nimport * as ST from './styled';\n\n\ninterface IProps {\n cost: number,\n quantity: number,\n text: string,\n onIncrement: () => void,\n onDecrement: () => void,\n onAddClick: () => void,\n onClose: () => void,\n minQuantity?: number,\n disabled?: boolean,\n isMonthly?: boolean,\n}\n\nexport const EquipmentControls = ({\n cost,\n quantity,\n minQuantity = 0,\n disabled = false,\n onIncrement,\n onDecrement,\n onAddClick,\n onClose,\n text,\n isMonthly,\n}: IProps) => {\n const isMobile = useMatchMedia(`(max-width: ${wideBreakpoints.mobile})`);\n\n return \n {quantity\n ? \n : \n Добавить\n \n }\n \n {text}{NBSP}\n {cost}\n \n ;\n};\n","import styled from 'styled-components';\n\nimport BaseRadio from '@r1-frontend/ui-react/components/controls/baseRadio';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const Item = styled.div<{ isChecked: boolean }>`\n height: 76px;\n padding: 16px;\n\n border-width: 2px;\n border-style: solid;\n border-color: ${({ isChecked }) => isChecked ? COLORS.Outline_Dark : 'transparent'};\n border-radius: 26px;\n background-color: ${COLORS.BgSurface};\n transition: all .25s ease;\n`;\n\nexport const ItemRadio = styled(BaseRadio)`\n label {\n font-size: 14px;\n line-height: 20px;\n\n white-space: break-spaces;\n }\n \n input[type='radio'] {\n align-self: center;\n }\n`;\n\nexport const TextWrapper = styled.div`\n span {\n ${FONTS.XS}\n }\n`;\n","import { TPurchaseOptionProps } from '@r1-frontend/ui-react/components/costs/PurchaseOptions/types';\n\nimport * as ST from './styled';\n\ntype TPurchaseOptionsItemProps = {\n isChecked: boolean,\n name?: string,\n customText?: string,\n} & TPurchaseOptionProps;\n\nconst PurchaseOptionsItem = ({ cost, period, onSelect, isChecked, name = 'PurchaseOption', customText, ...props }: TPurchaseOptionsItemProps) => {\n return (\n \n \n {customText\n ? customText\n : (\n \n Рассрочка на {period} мес.\n
\n {cost} ₽/мес\n
\n )\n }\n \n \n );\n};\n\nexport default PurchaseOptionsItem;\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nexport const PurchaseContainer = styled.div`\n background: ${COLORS.BgMain};\n\n padding-left: 24px;\n \n @media (min-width: ${wideBreakpoints.mobile}) {\n padding-left: 32px;\n }\n`;\n","import { TPeriod } from '@r1-frontend/ui-react/components/costs/PurchaseOptions/types';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\n\nimport { TProduct } from './store/transformShopItem';\n\n/**\n * Способ покупки в рассрочку (duration > 0)\n */\nexport const isInstallment = (product: TProduct) => !!product.selectedPrice?.duration;\n\n/**\n * Лимиты по единовременной покупке оборудования\n * лимиты устанавливаются на категорию (т.е. в каждой категории можно приобрести не более 5 штук за раз и например декодеров не более 2 штук в рассрочку)\n */\nexport const limitsByCategories: Record = {\n [EShopCategory.Routers]: {\n total: 5,\n installment: 1,\n },\n [EShopCategory.YandexStation]: {\n total: 5,\n installment: 5,\n },\n [EShopCategory.Decoders]: {\n total: 5,\n installment: 2,\n },\n [EShopCategory.PrivateSectorEquipment]: {\n total: 1,\n installment: 1,\n },\n};\n\n/**\n * Подсчитывает количество выбранного оборудования\n */\nconst getTotalCount = (products: TProduct[]): number => {\n return products.reduce((acc: number, curr) => acc + curr.quantity, 0);\n};\n\n/**\n * Возвращает продукты в рассрочку\n */\nconst getProductsInInstallments = (products: TProduct[]) =>\n products?.filter(product => product.quantity > 0 && product.selectedPrice?.duration && product.selectedPrice.duration > 0);\n\n/**\n * Подсчитывает количество оборудования в рассрочку\n */\nconst getInstalmentCount = (products: TProduct[]): number => {\n const installmentItems = getProductsInInstallments(products);\n return getTotalCount(installmentItems);\n};\n\nexport interface ILimits {\n total: boolean,\n installment: boolean,\n}\n\n/**\n * Достигнут лимит на покупку оборудования (всего и в рассрочку)\n */\nexport const getLimits = (products: TProduct[], category: string): ILimits => {\n const limit = limitsByCategories[category];\n if (!limit) {\n return {\n total: false,\n installment: false,\n };\n }\n\n const productsByCategory = products.filter(el => el.category === category);\n const installmentCount = getInstalmentCount(productsByCategory);\n const totalCount = getTotalCount(productsByCategory);\n\n return {\n total: totalCount >= limit.total,\n installment: installmentCount >= limit.installment,\n };\n};\n\ninterface IGetTextForOptionsResult {\n text: string,\n isMonthly?: boolean,\n}\n\nexport const getTextForOptions = (value: TPeriod): IGetTextForOptionsResult => {\n if (value === 0) {\n return {\n text: 'Полная стоимость',\n };\n }\n\n return {\n text: `Рассрочка на ${value} мес.`,\n isMonthly: true,\n };\n};\n\ninterface IGetIsDisabledByLimits {\n duration: number,\n productQuantity: number,\n limits: ILimits,\n}\n\nexport const getIsDisabledByLimits = ({ duration, limits, productQuantity }: IGetIsDisabledByLimits) => {\n const isInstallmentLimit = !!duration && limits.installment && !!productQuantity;\n return limits.total || isInstallmentLimit;\n};\n","import { useMemo } from 'react';\nimport sortBy from 'lodash/sortBy';\n\nimport {\n TBaseOption,\n TPeriod,\n TPurchaseOptionsProps,\n} from '@r1-frontend/ui-react/components/costs/PurchaseOptions/types';\nimport SlideCarousel from '@r1-frontend/ui-react/components/SlideCarousel';\nimport { H4 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\n\nimport PurchaseOptionsItem\n from '~/src/features/full-buy/components/PurchaseOptionsSlider/components/PurchaseOptionsItem';\nimport { ILimits } from '~/src/features/full-buy/helpersForProducts';\n\nimport * as ST from './styled';\n\ntype TPurchaseOptionsSliderProps = {\n options: TPurchaseOptionsProps['options'],\n selectedOption: { cost: number, period: TPeriod },\n handleSelect: (cost: number, period: TPeriod) => () => void,\n hasAdded: boolean,\n limits: ILimits,\n}\n\nconst PurchaseOptionsSlider = ({\n options,\n selectedOption,\n handleSelect,\n hasAdded,\n limits,\n}: TPurchaseOptionsSliderProps) => {\n const {\n 1: fullPriceOption,\n ...elseOptions\n } = options;\n\n const isChecked = (option: TBaseOption) => {\n return option.cost === selectedOption?.cost && option.period === selectedOption.period;\n };\n\n const { sortedOptions, lowestPriceOption } = useMemo(() => {\n const sortedOptions = sortBy(Object.values(elseOptions), 'cost');\n return { sortedOptions, lowestPriceOption: sortedOptions[0] };\n }, [elseOptions]);\n\n const isFullPriceChecked = isChecked(fullPriceOption);\n const isFullPriceDisabled = hasAdded && !isFullPriceChecked || limits.total;\n\n const isLowestPriceChecked = lowestPriceOption && isChecked(lowestPriceOption) || !isFullPriceChecked;\n const isLowestPriceDisabled = lowestPriceOption && hasAdded && isFullPriceChecked || limits.installment;\n\n return (\n \n

Варианты приобретения

\n \n \n {lowestPriceOption && }\n \n {\n selectedOption && selectedOption?.period > 0 && (\n <>\n Выберите длительность рассрочки:\n \n {sortedOptions.map((option) => {\n return (\n \n );\n })}\n \n \n )\n }\n
\n );\n};\n\nexport default PurchaseOptionsSlider;\n","import CustomScrollbar from '@r1-frontend/ui-react/components/CustomScrollbar';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport DefaultPopup from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { Indent, isIndent } from '@r1-frontend/ui-react/experimental/containers/IndentContainer';\nimport { TListSize } from '@r1-frontend/ui-react/experimental/containers/ListContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\ninterface IPopupState {\n isOpen: boolean,\n children: React.ReactNode,\n dPadding?: Indent,\n mPadding?: Indent,\n onClose: () => void,\n}\n\nconst scrollIndent: Indent = 8; // Отступ скрола от контента\nconst popupIndent = 24; // Отступ попапа от края экрана\n\n/**\n * Базовый попап выровненный по правому краю, с отступом под кастомный скролл\n * Компонент скролла экспортируется отдельно\n * TODO вытащить в ui-react\n */\nconst BasePopupRightAlign = ({\n isOpen,\n onClose,\n children,\n dPadding = 24,\n mPadding = 16,\n}: IPopupState): JSX.Element => {\n const isMobile = useMatchMediaByWidth(wideBreakpoints.mobile);\n const popupHeight = isMobile ? '100vh' : `calc(100vh - ${2 * popupIndent}px)`;\n // Паддинг справа минус отступ от скролла\n const desktopPadding = dPadding - scrollIndent;\n const scrollPaddingDesktop = isIndent(desktopPadding) ? desktopPadding : scrollIndent;\n const mobilePadding = dPadding - scrollIndent;\n const scrollPaddingMobile = isIndent(mobilePadding) ? mobilePadding : scrollIndent;\n const rightIndent = isMobile ? 'auto' : `${popupIndent}px`;\n\n return (\n \n \n {children}\n \n \n );\n};\n\ninterface IProps {\n children: React.ReactNode,\n $desktop?: TListSize,\n $mobile?: TListSize,\n desktopHeaderHeight?: number,\n mobileHeaderHeight?: number,\n}\n\n/**\n * Компонент скрола\n */\nconst TheScrollbar = ({\n children,\n}: IProps) => {\n const isMobile = useMatchMediaByWidth(wideBreakpoints.mobile);\n\n return \n {children}\n ;\n};\n\nexport {\n BasePopupRightAlign,\n TheScrollbar,\n};\n","import { createSelector } from 'reselect';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { TState } from '~/src/store';\n\n/** Выбирает shopItems\n * @param state {TState} - стор\n * @param category {string} - категория товара\n */\nexport const selectProductsByCategory = createSelector(\n [\n (state: TState, category: EShopCategory) => ({ items: state.fullBuy.products, category }),\n ],\n ({ items, category }) => {\n if (!items) {\n return [];\n }\n\n return items.filter(item => item.category === category);\n },\n);\n","import styled from 'styled-components';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nexport const CarouselContainer = styled.div`\n padding: 32px;\n width: 100%;\n\n @media(max-width: ${wideBreakpoints.mobile}) {\n padding: 24px;\n }\n`;\n\nexport const ContentContainer = styled(IndentContainer)`\n background: ${COLORS.BgMain};\n\n &:last-child {\n margin-bottom: 84px;\n }\n`;\n\nexport const RoundedContainer = styled(ContentContainer)`\n border-top-left-radius: ${BorderRadius.OuterBlockRadius};\n border-top-right-radius: ${BorderRadius.OuterBlockRadius};\n`;\n\nexport const Footer = styled.div`\n position: absolute;\n bottom: 0;\n background: ${COLORS.BgSubstrate};\n width: 100%;\n border-top: 1.5px solid ${COLORS.Outline_Light};\n \n @media(max-width: ${wideBreakpoints.mobile}) {\n ${Button}[data-bType='accent']{\n width: 100%;\n }\n }\n`;\n","import React, { ReactNode, useMemo, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { Cost } from '@r1-frontend/ui-react/components/costs';\nimport { TPeriod, TPurchaseOptionsProps } from '@r1-frontend/ui-react/components/costs/PurchaseOptions/types';\nimport HtmlContentFromApi from '@r1-frontend/ui-react/components/HtmlContentFromApi';\nimport Characteristics from '@r1-frontend/ui-react/components/List/Characteristics';\nimport { TCharacteristicsProps } from '@r1-frontend/ui-react/components/List/Characteristics/Characteristics';\nimport NukaCarousel from '@r1-frontend/ui-react/components/NukaCarousel';\nimport { H3, H4 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\nimport { FullWidthListContainer, IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { EquipmentControls } from '~/src/features/full-buy/components/EquipmentControls';\nimport PurchaseOptionsSlider from '~/src/features/full-buy/components/PurchaseOptionsSlider';\nimport { getIsDisabledByLimits, getLimits, getTextForOptions } from '~/src/features/full-buy/helpersForProducts';\nimport { TheScrollbar } from '~/src/features/full-buy/popups/BasePopupRightAlign';\nimport { selectProductsByCategory } from '~/src/features/full-buy/store/selectors/products/selectProductsByCategory';\nimport { TState } from '~/src/store';\n\nimport * as ST from './styled';\n\ntype TEquipmentInfoProps = {\n title: string,\n body: string,\n characteristics: TCharacteristicsProps[],\n description: string,\n category: EShopCategory.Routers | EShopCategory.PrivateSectorEquipment | EShopCategory.Decoders,\n quantity: number,\n onIncrement: () => void,\n onDecrement: () => void,\n onClose: () => void,\n images?: string[],\n labels?: ReactNode[],\n} & TPurchaseOptionsProps;\n\nconst EquipmentInfo = ({\n title,\n body,\n images,\n characteristics,\n description,\n category,\n options,\n labels,\n quantity,\n onDecrement,\n onIncrement,\n onClose,\n onSelect,\n}: TEquipmentInfoProps) => {\n const {\n 1: fullPriceOption,\n } = options;\n const [selectedOption, setOption] = useState<{ cost: number, period: TPeriod }>(fullPriceOption);\n const analytics = useAnalytics();\n\n const equipments = useSelector((state: TState) => selectProductsByCategory(state, category));\n\n const { limits, isDisabled } = useMemo(() => {\n const limits = getLimits(equipments, category);\n const isDisabled = getIsDisabledByLimits({\n limits,\n duration: selectedOption.period,\n productQuantity: quantity,\n });\n\n return { limits, isDisabled };\n }, [equipments, category, selectedOption, quantity]);\n\n\n const handleSelect = (cost: number, period: TPeriod) => () => {\n analytics.equipment.chooseCostType(`type:${category}|name:${title}|`);\n if (period) {\n analytics.equipment.chooseDuration(`type:${category}|name:${title}|`);\n }\n setOption({ cost, period });\n };\n\n const handleAdd = () => onSelect(selectedOption.cost, selectedOption.period);\n\n const handleClose = () => {\n analytics.equipment.chooseEquipmentContinue();\n onClose();\n };\n\n const textForOptions = getTextForOptions(selectedOption.period);\n\n return (\n <>\n \n {images && (\n \n \n {images\n .map((item) => )}\n \n \n )}\n\n \n \n \n {labels}\n \n

{title}

\n \n

\n {\n selectedOption.period > 0\n ? 'Рассрочка от '\n : 'Полная стоимость '\n }\n 0}>\n {selectedOption.cost}\n \n

\n
\n
\n \n \n \n \n

Характеристики

\n {characteristics.map((item, index) => (\n \n ))}\n
\n \n

Описание

\n \n {description}\n \n
\n
\n\n
\n
\n\n \n \n \n \n \n \n \n \n );\n};\n\nexport default EquipmentInfo;\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport DefaultPopup, { IDefaultPopupCustomStyles } from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nexport const PopupCustomStyles: IDefaultPopupCustomStyles = {\n popup: {},\n closePopup: {\n default: {\n top: `${24}px`,\n right: `${24}px`,\n position: 'fixed',\n },\n mobile: {\n top: `${16}px`,\n right: `${16}px`,\n position: 'absolute',\n },\n },\n};\n\ntype TPopupPros = {\n popupIndent: number,\n}\n\nexport const Popup = styled(DefaultPopup)`\n position: static;\n \n overflow-y: hidden;\n \n align-self: stretch;\n \n max-width: none;\n max-height: none;\n height: 100%;\n \n background: ${COLORS.BgSurface};\n border-radius: 0;\n \n margin: 0;\n \n @media (min-width: ${wideBreakpoints.mobile}) {\n height: ${($props) => `calc(100vh - ${2 * $props.popupIndent}px)`};\n border-radius: ${BorderRadius.OuterBlockRadius};\n \n margin: ${($props) => `${$props.popupIndent}px ${$props.popupIndent}px ${$props.popupIndent}px auto`};\n }\n`;\n","import { ETariffFilters } from './store/initialState';\n\nexport interface IPrices {\n id: number,\n router_id: number,\n billing_city_id?: number,\n type: number,\n value: number,\n duration: number | null,\n sort?: number,\n access_mode?: string,\n}\n\nexport enum ESteps {\n tariffInfo = 'tariffInfo',\n subscriptions = 'subscriptions',\n equipments = 'equipments',\n equipmentsTv = 'equipmentsTv',\n equipmentsCottage = 'equipmentsCottage',\n address = 'address',\n contacts = 'contacts',\n agreementCreated = 'agreementCreated',\n timeSlots = 'timeSlots',\n final = 'final',\n}\n\n/**\n * Тип query-параметров для для фильтрации тарифов на станице\n */\nexport interface ITariffQueryParams {\n salePackageId?: string,\n tariffName?: string, // TODO использовать salePackageId вместо alias\n monoTariff?: 'true' | 'false', // TODO при использовании salePackageId - отпадет необходимость в параметре monoTariff\n tariffLine?: string,\n filters?: ETariffFilters[],\n landingAvailable?: string,\n}\n","import { memo, ReactNode } from 'react';\n\nimport * as ST from './styled';\n\ntype TEquipmentPopupProps = {\n isOpen: boolean,\n onClose: () => void,\n children: ReactNode,\n};\n\nconst popupIndent = 24; // Отступ попапа от края экрана\n\nconst EquipmentPopup = ({ isOpen, onClose, children }: TEquipmentPopupProps) => {\n return (\n \n {children}\n \n );\n};\n\nexport default memo(EquipmentPopup);\n","import React, { memo } from 'react';\n\nimport TVSetTopSelectable from '@r1-frontend/ui-react/organisms/Card/TVSetTopSelectable';\n\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\n\ninterface IProps {\n product: TProduct,\n isDisabled: boolean,\n openAddEquipmentPopup: (equipment: TProduct, isInstallmentDisabled: boolean) => void,\n handleDecrement: (id: number) => () => void,\n handleIncrement: (id: number) => () => void,\n isSkipImages?: boolean,\n}\n\nconst DecoderCardView = ({\n product,\n isDisabled,\n openAddEquipmentPopup,\n handleDecrement,\n handleIncrement,\n isSkipImages,\n}: IProps) => {\n const {\n id,\n image,\n images,\n title,\n categoryTitle,\n body,\n selectedPrice: { cost, duration },\n quantity,\n } = product;\n\n return openAddEquipmentPopup(product, true)}\n onIncrement={handleIncrement(id)}\n onDecrement={handleDecrement(id)}\n onCostClick={() => openAddEquipmentPopup(product, false)}\n btnText={'Подробнее'}\n disabled={isDisabled}\n />;\n};\n\nexport default memo(DecoderCardView);\n","import React, { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { SingleArrowDown, SingleArrowUp } from '@r1-frontend/ui-react/components/svg/arrows';\nimport ControlElement from '@r1-frontend/ui-react/components/typography/controlElement';\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { usePartialList } from '@r1-frontend/shared/hooks/usePartialList';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport DecoderCardView from '~/src/features/full-buy/containers/DecoderList/DecoderCardsView';\nimport { getLimits } from '~/src/features/full-buy/helpersForProducts';\nimport { selectProductsByCategory } from '~/src/features/full-buy/store/selectors/products/selectProductsByCategory';\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\nimport { useValueByBreakpoint } from '~/src/helpers/hooks/useValueByBreakpoint';\nimport { TState } from '~/src/store';\n\ninterface IProps {\n openAddEquipmentPopup: (equipment: TProduct, isInstallmentDisabled: boolean) => void,\n handleDecrement: (id: number) => () => void,\n handleIncrement: (id: number) => () => void,\n}\n\nexport const DecoderCardsViewWithButton = ({\n handleIncrement,\n handleDecrement,\n openAddEquipmentPopup,\n}: IProps) => {\n const analytics = useAnalytics();\n const category = EShopCategory.Decoders;\n const equipments = useSelector((state: TState) => selectProductsByCategory(state, category));\n\n const cardCount = useValueByBreakpoint({\n desktop: 3,\n sDesktop: 2,\n });\n const [partialEquipments, isPartial, setIsPartial] = usePartialList(equipments, cardCount);\n const showMoreText = useMemo(() => isPartial ? 'Показать все тв-приставки' : 'Скрыть тв-приставки', [isPartial]);\n\n const limits = useMemo(() => getLimits(equipments, category), [equipments, category]);\n\n const onClickShowAll = () => {\n setIsPartial(!isPartial);\n analytics.equipment.clickShowMore();\n };\n\n return <>\n \n {partialEquipments.map((product) => {\n const { selectedPrice: { duration }, quantity } = product;\n const isInstallmentLimit = !!duration && limits.installment && !!quantity;\n const isDisabled = limits.total || isInstallmentLimit;\n\n return (\n \n );\n })}\n \n\n {\n equipments.length > cardCount && (\n \n {showMoreText}\n \n )\n }\n ;\n};\n","import React, { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport AdaptiveNukaCarousel from '~/src/components/AdaptiveNukaCarousel';\nimport DecoderCardView from '~/src/features/full-buy/containers/DecoderList/DecoderCardsView';\nimport { getLimits } from '~/src/features/full-buy/helpersForProducts';\nimport { selectProductsByCategory } from '~/src/features/full-buy/store/selectors/products/selectProductsByCategory';\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\nimport { TState } from '~/src/store';\n\ninterface IProps {\n openAddEquipmentPopup: (equipment: TProduct, isInstallmentDisabled: boolean) => void,\n handleDecrement: (id: number) => () => void,\n handleIncrement: (id: number) => () => void,\n}\n\nexport const DecoderCardsViewWithCarousel = ({\n handleIncrement,\n handleDecrement,\n openAddEquipmentPopup,\n}: IProps) => {\n const category = EShopCategory.Decoders;\n\n const equipments = useSelector((state: TState) => selectProductsByCategory(state, category));\n\n const limits = useMemo(() => getLimits(equipments, category), [equipments, category]);\n\n return <>\n \n \n {equipments.map((product) => {\n const { selectedPrice: { duration }, quantity } = product;\n const isInstallmentLimit = !!duration && limits.installment && !!quantity;\n const isDisabled = limits.total || isInstallmentLimit;\n\n return (\n \n );\n })}\n \n \n ;\n};\n","import { TBaseOption } from '@r1-frontend/ui-react/components/costs/PurchaseOptions/types';\n\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\n\n/**\n * Возврашает список опций стоимости оборудования\n * isInstallmentDisable - дизейблит опции рассрочки\n */\nexport const getPurchaseOptions = (prices: TProduct['prices'], isInstallmentDisable: boolean) => {\n const pricesAscDuration = [...prices].sort((a, b) => a.duration - b.duration);\n\n return pricesAscDuration.reduce((result: Record, value, key) => {\n result[key + 1] = {\n cost: value.cost,\n period: value.duration,\n disabled: value.duration > 0 && isInstallmentDisable,\n };\n\n return result;\n }, {});\n};\n","import { actionTypes } from '../index';\nimport { ETariffFilters } from '../initialState';\n\nexport const setTariffFilters = (filters: ETariffFilters[]) => ({\n type: actionTypes.SET_TARIFF_FILTERS,\n payload: filters,\n});\n\nexport const addTariffFilter = (filter: ETariffFilters) => ({\n type: actionTypes.ADD_TARIFF_FILTER,\n payload: filter,\n});\n\nexport const removeTariffFilter = (filter: ETariffFilters) => ({\n type: actionTypes.REMOVE_TARIFF_FILTER,\n payload: filter,\n});\n\nexport const clearTariffFilter = () => ({\n type: actionTypes.CLEAR_TARIFF_FILTERS,\n});\n","import { actionTypes } from '~/src/features/full-buy/store/index';\n\nexport const addProduct = (productId: number) => ({\n type: actionTypes.ADD_PRODUCT,\n payload: productId,\n});\n","import { actionTypes } from '~/src/features/full-buy/store/index';\n\nexport const decProductQuantity = (productId: number) => ({\n type: actionTypes.DEC_PRODUCT_QUANTITY,\n payload: productId,\n});\n","import { actionTypes } from '~/src/features/full-buy/store/index';\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\n\n// @todo remove action and move implementation to the initialization method\nexport const setProducts = (products: TProduct[]) => ({\n type: actionTypes.SET_PRODUCTS,\n payload: products,\n});\n","import SubscriptionsAnalytics from '~/src/features/full-buy/analytics/Subscriptions.analytics';\nimport { actionTypes } from '~/src/features/full-buy/store';\n\nexport const selectSubscription = (subscriptionId: number, title: string, analytics: SubscriptionsAnalytics) => {\n analytics.clickSubscriptionsCheckBox(title);\n\n return {\n type: actionTypes.SelectSubscription,\n payload: {\n subscriptionId,\n },\n };\n};\n","import { actionTypes } from '../index';\nimport { ISelectedTariffParamsByAlias, ISelectedTariffParamsById } from '../initialState';\n\nexport const selectTariff = (params: ISelectedTariffParamsById | ISelectedTariffParamsByAlias) => ({\n type: actionTypes.SelectTariff,\n payload: {\n ...params,\n },\n});\n","import { actionTypes } from '~/src/features/full-buy/store';\n\nconst setAddressData = (addressData: {\n address: {\n value: string,\n flat: string,\n unifiedHouseId?: number,\n },\n isConnectionAvailable: boolean,\n isTariffAvailable: boolean,\n} | undefined) => ({\n type: actionTypes.SetAddressData,\n payload: { selectedAddress: addressData },\n});\n\nexport default setAddressData;\n","import { actionTypes } from '../index';\nimport { IAgreementData } from '../initialState';\n\nexport const setAgreementData = ({\n agreementId,\n agreementNumber,\n isDouble,\n hasError,\n errorMessage,\n}: IAgreementData) => ({\n type: actionTypes.SET_AGREEMENT_DATA,\n payload: {\n agreementId,\n agreementNumber,\n isDouble,\n hasError,\n errorMessage,\n },\n});\n","import { actionTypes } from '~/src/features/full-buy/store';\n\nexport const setDisplayTariffLineState = (displayState: boolean) => ({\n type: actionTypes.SET_DISPLAY_TARIFF_LINE_STATE,\n payload: {\n displayState,\n },\n});\n","import { actionTypes } from '../index';\n\n// @todo expand this method for getting fetched filtered tariffs, products and the tariff alias\nexport const setInitialized = (status: boolean, isAddressVerificationOnFirstStep: boolean) => ({\n type: actionTypes.INITIALIZED,\n payload: { status, isAddressVerificationOnFirstStep },\n});\n","import { actionTypes } from '../index';\n\nexport const setPrevStep = (stepIndex: number) => ({\n type: actionTypes.SET_PREV_STEP,\n payload: stepIndex,\n});\n","import { actionTypes } from '~/src/features/full-buy/store';\nimport { IPromoCode } from '~/src/features/full-buy/store/initialState';\n\nexport const setPromoCode = (data: IPromoCode | null) => ({\n type: actionTypes.SET_PROMO_CODE,\n payload: data,\n});\n","import { TReturnType } from '@r1-frontend/service-engineer-visit';\n\nimport { actionTypes } from '~/src/features/full-buy/store';\n\nexport const setSlot = (slot: TReturnType | null) => ({\n type: actionTypes.SET_SLOT,\n payload: slot,\n});\n","import { actionTypes } from '../index';\n\nexport const setStep = (stepIndex: number) => ({\n type: actionTypes.SET_CURRENT_STEP,\n payload: stepIndex,\n});\n","import { actionTypes } from '../index';\n\n// @todo remove action and move implementation to the initialization method\nexport const setTariffLineAlias = (tariffLineAlias: string) => ({\n type: actionTypes.SET_TARIFF_LINE_ALIAS,\n payload: tariffLineAlias,\n});\n","import { actionTypes } from '~/src/features/full-buy/store';\n\nexport const toggleBackgroundLoading = (newState = false) => ({\n type: actionTypes.ToggleBackgroundLoading,\n payload: newState,\n});\n","import { actionTypes } from '~/src/features/full-buy/store';\n\nexport const unSelectSubscription = (subscriptionId: number) => ({\n type: actionTypes.UnSelectSubscription,\n payload: {\n subscriptionId,\n },\n});\n","import { batch } from 'react-redux';\n\nimport FullBuyAnalytics from '~/src/features/full-buy/analytics';\nimport { addProduct, setSelectedPrice } from '~/src/features/full-buy/store/actions';\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\nimport { TAppThunkDispatch } from '~/src/store';\n\n/**\n * Добавляет продукт и устанавливает выбранную цену\n */\nexport const addEquipment = (currentEquipment: TProduct | undefined, cost: number, analytics: FullBuyAnalytics) => {\n return async(dispatch: TAppThunkDispatch): Promise => {\n if (!currentEquipment) {\n return;\n }\n\n const selectedPrice = currentEquipment.prices.find(el => el.cost === cost);\n\n if (!selectedPrice) {\n return;\n }\n\n batch(() => {\n dispatch(setSelectedPrice(currentEquipment.id, selectedPrice.duration));\n dispatch(addProduct(currentEquipment.id));\n });\n\n analytics.equipment.addProduct(currentEquipment.title);\n };\n};\n","import { actionTypes } from '~/src/features/full-buy/store/index';\n\nexport const setSelectedPrice = (productId: number, duration: number) => ({\n type: actionTypes.SET_SELECTED_PRICE,\n payload: {\n id: productId,\n duration,\n },\n});\n","\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport FullBuyAnalytics from '~/src/features/full-buy/analytics';\nimport { getLimits } from '~/src/features/full-buy/helpersForProducts';\nimport { isInstallment } from '~/src/features/full-buy/helpersForProducts';\nimport { decProductQuantity, incProductQuantity } from '~/src/features/full-buy/store/actions';\nimport { selectProductsByCategory } from '~/src/features/full-buy/store/selectors/products/selectProductsByCategory';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\n/**\n * Увеличивает/уменьшает количество для выбранного оборудования\n */\nexport const changeEquipmentCount = (elementId: number, isIncrement: boolean, category: EShopCategory, analytics: FullBuyAnalytics) => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n const state = getState();\n\n const products = selectProductsByCategory(state, category);\n\n const currentEl = products.find(el => el.id === elementId);\n const limits = getLimits(products, category);\n\n if (!currentEl) {\n return;\n }\n\n if (isIncrement) {\n // Если достигнут общий лимит или лимит по покупке в рассрочку, то не увеличиваем количество\n if (limits.total || (isInstallment(currentEl) && limits.installment)) {\n return;\n }\n\n dispatch(incProductQuantity(elementId));\n } else {\n dispatch(decProductQuantity(elementId));\n\n if (currentEl.quantity === 1) {\n analytics.equipment.deleteEquipment(currentEl.title);\n }\n }\n };\n};\n","import { actionTypes } from '~/src/features/full-buy/store/index';\n\nexport const incProductQuantity = (productId: number) => ({\n type: actionTypes.INC_PRODUCT_QUANTITY,\n payload: productId,\n});\n","import React, { useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { TBaseOption } from '@r1-frontend/ui-react/components/costs/PurchaseOptions/types';\nimport { Label } from '@r1-frontend/ui-react/components/label';\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport EquipmentInfo from '~/src/features/full-buy/components/EquipmentInfo';\nimport EquipmentPopup from '~/src/features/full-buy/components/EquipmentPopup';\nimport { DecoderCardsViewWithButton } from '~/src/features/full-buy/containers/DecoderList/DecoderCardsViewWithButton';\nimport {\n DecoderCardsViewWithCarousel,\n} from '~/src/features/full-buy/containers/DecoderList/DecoderCardsViewWithCarousel';\nimport { getPurchaseOptions } from '~/src/features/full-buy/helpers/helpersForProduct/getPurchaseOptions';\nimport { getLimits } from '~/src/features/full-buy/helpersForProducts';\nimport { addEquipment } from '~/src/features/full-buy/store/actions/products/thunk/addEquipment';\nimport { changeEquipmentCount } from '~/src/features/full-buy/store/actions/products/thunk/changeEquipmentCount';\nimport { selectProductsByCategory } from '~/src/features/full-buy/store/selectors/products/selectProductsByCategory';\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\nimport { TState } from '~/src/store';\n\nexport type TDecoderListProperties = {\n withCarousel?: boolean,\n}\n\n/**\n * Список тв-приставок\n */\nexport const DecoderList = ({ withCarousel }: TDecoderListProperties): JSX.Element => {\n const analytics = useAnalytics();\n const dispatch = useDispatch();\n const category = EShopCategory.Decoders;\n const [isPopupOpen, setIsPopupOpen] = useState(false);\n\n const equipments = useSelector((state: TState) => selectProductsByCategory(state, category));\n\n const limits = useMemo(() => getLimits(equipments, category), [equipments, category]);\n const [currentEquipmentId, setCurrentEquipmentId] = useState();\n const [isInstallmentDisable, setIsInstallmentDisable] = useState(false);\n\n const currentEquipment: { value: TProduct, options: Record } | undefined = useMemo(() => {\n if (currentEquipmentId) {\n const value = equipments.find(e => e.id === currentEquipmentId);\n const options = value && getPurchaseOptions(value?.prices, (isInstallmentDisable && limits.installment));\n if (value && options) {\n return { value, options };\n }\n }\n }, [currentEquipmentId, equipments]);\n\n /* Записывает выбранный продукт в стор */\n const handleAddEquipment = (cost: number) => {\n setIsPopupOpen(false);\n\n dispatch(addEquipment(currentEquipment?.value, cost, analytics));\n };\n\n const openAddEquipmentPopup = (equipment: TProduct, isInstallmentDisabled: boolean) => {\n setCurrentEquipmentId(equipment.id);\n setIsInstallmentDisable(isInstallmentDisabled);\n setIsPopupOpen(true);\n };\n\n const handleIncrement = (id: number) => () => {\n dispatch(changeEquipmentCount(id, true, category, analytics));\n };\n const handleDecrement = (id: number) => () => {\n dispatch(changeEquipmentCount(id, false, category, analytics));\n };\n\n const handleClosePopup = () => {\n setIsPopupOpen(false);\n };\n\n return (\n \n {withCarousel\n ? \n : \n }\n\n {!currentEquipment\n ? null\n : (\n \n (\n \n ))}\n body={currentEquipment.value.body}\n characteristics={currentEquipment.value.props}\n description={currentEquipment.value.description}\n options={currentEquipment.options}\n onSelect={handleAddEquipment}\n onClose={handleClosePopup}\n quantity={currentEquipment.value.quantity}\n onIncrement={handleIncrement(currentEquipment.value.id)}\n onDecrement={handleDecrement(currentEquipment.value.id)}\n />\n \n )\n }\n \n );\n};\n","import React, { memo } from 'react';\n\nimport { Label } from '@r1-frontend/ui-react/components/label';\nimport { Flash } from '@r1-frontend/ui-react/components/svg/main';\nimport RouterCard from '@r1-frontend/ui-react/organisms/Card/Router';\nimport { TRouterCardCharacteristicsProps } from '@r1-frontend/ui-react/organisms/Card/Router/Router';\nimport { truncate } from '@r1-frontend/shared/helpers/truncate';\n\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\n\nconst prepareCharacteristic = >(acc: TAcc, elem?: {\n title: string,\n value: string,\n}) => {\n if (!elem) {\n return acc;\n }\n\n const maxTitle = 20;\n const maxValue = 12;\n\n acc.push({\n ...elem,\n title: truncate(elem.title, maxTitle),\n value: truncate(elem.value, maxValue),\n Icon: Flash,\n });\n\n return acc;\n};\n\ninterface IProps {\n product: TProduct,\n isDisabled: boolean,\n openAddEquipmentPopup: (equipment: TProduct, isInstallmentDisabled: boolean) => () => void,\n handleDecrement: (id: number) => () => void,\n handleIncrement: (id: number) => () => void,\n isSkipImages?: boolean,\n}\n\nconst RouterCardView = ({\n product,\n isDisabled,\n openAddEquipmentPopup,\n handleDecrement,\n handleIncrement,\n isSkipImages,\n}: IProps) => {\n const {\n id,\n image,\n images,\n title,\n categoryTitle,\n selectedPrice,\n props,\n quantity,\n labels,\n } = product;\n\n const slicedProps = props.slice(0, 3);\n\n return (\n \n ))}\n cost={selectedPrice.cost}\n period={selectedPrice.duration}\n quantity={quantity}\n btnText={'Подробнее'}\n onButtonClick={openAddEquipmentPopup(product, true)}\n onIncrement={handleIncrement(id)}\n onDecrement={handleDecrement(id)}\n onCostClick={openAddEquipmentPopup(product, false)}\n disabled={isDisabled}\n />;\n};\n\nexport default memo(RouterCardView);\n","import React, { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { SingleArrowDown, SingleArrowUp } from '@r1-frontend/ui-react/components/svg/arrows';\nimport ControlElement from '@r1-frontend/ui-react/components/typography/controlElement';\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { usePartialList } from '@r1-frontend/shared/hooks/usePartialList';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport RouterCardView from '~/src/features/full-buy/containers/EquipmentList/RouterCardsView';\nimport { getIsDisabledByLimits, getLimits } from '~/src/features/full-buy/helpersForProducts';\nimport { selectProductsByCategory } from '~/src/features/full-buy/store/selectors/products/selectProductsByCategory';\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\nimport { useValueByBreakpoint } from '~/src/helpers/hooks/useValueByBreakpoint';\nimport { TState } from '~/src/store';\n\ninterface IProps {\n openAddEquipmentPopup: (equipment: TProduct, isInstallmentDisabled: boolean) => () => void,\n handleDecrement: (id: number) => () => void,\n handleIncrement: (id: number) => () => void,\n category?: EShopCategory.Routers | EShopCategory.PrivateSectorEquipment,\n}\n\nconst getShowMoreEquipmentText = (category: EShopCategory, isPartial: boolean): string => {\n const entity = category === EShopCategory.Routers ? 'роутеры' : 'оборудование';\n\n return `${isPartial ? 'Показать все' : 'Скрыть'} ${entity}`;\n};\n\nexport const RouterCardsViewWithButton = ({\n category = EShopCategory.Routers,\n handleIncrement,\n handleDecrement,\n openAddEquipmentPopup,\n}: IProps) => {\n const analytics = useAnalytics();\n\n const equipments = useSelector((state: TState) => selectProductsByCategory(state, category));\n\n const cardCount = useValueByBreakpoint({\n desktop: 3,\n sDesktop: 2,\n });\n const [partialEquipments, isPartial, setIsPartial] = usePartialList(equipments, cardCount);\n const showMoreText = useMemo(() => getShowMoreEquipmentText(category, isPartial), [isPartial]);\n\n const limits = useMemo(() => getLimits(equipments, category), [equipments, category]);\n\n const onClickShowAll = () => {\n setIsPartial(!isPartial);\n analytics.equipment.clickShowMore();\n };\n\n return <>\n \n\n {partialEquipments.map((product) => {\n const { selectedPrice } = product;\n\n const isDisabled = getIsDisabledByLimits({\n limits,\n duration: selectedPrice.duration,\n productQuantity: product.quantity,\n });\n\n return (\n \n );\n })}\n \n\n {\n equipments.length > cardCount && (\n \n {showMoreText}\n \n )\n }\n ;\n};\n","import React, { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport AdaptiveNukaCarousel from '~/src/components/AdaptiveNukaCarousel';\nimport RouterCardView from '~/src/features/full-buy/containers/EquipmentList/RouterCardsView';\nimport { getIsDisabledByLimits, getLimits } from '~/src/features/full-buy/helpersForProducts';\nimport { selectProductsByCategory } from '~/src/features/full-buy/store/selectors/products/selectProductsByCategory';\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\nimport { TState } from '~/src/store';\n\ninterface IProps {\n openAddEquipmentPopup: (equipment: TProduct, isInstallmentDisabled: boolean) => () => void,\n handleDecrement: (id: number) => () => void,\n handleIncrement: (id: number) => () => void,\n category?: EShopCategory.Routers | EShopCategory.PrivateSectorEquipment,\n}\n\nexport const RouterCardsViewWithCarousel = ({\n category = EShopCategory.Routers,\n handleIncrement,\n handleDecrement,\n openAddEquipmentPopup,\n}: IProps) => {\n const equipments = useSelector((state: TState) => selectProductsByCategory(state, category));\n\n const limits = useMemo(() => getLimits(equipments, category), [equipments, category]);\n\n return <>\n \n \n {equipments.map((product) => {\n const { selectedPrice } = product;\n\n const isDisabled = getIsDisabledByLimits({\n limits,\n duration: selectedPrice.duration,\n productQuantity: product.quantity,\n });\n\n return (\n \n );\n })}\n \n \n ;\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { TBaseOption } from '@r1-frontend/ui-react/components/costs/PurchaseOptions/types';\nimport { Label } from '@r1-frontend/ui-react/components/label';\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport EquipmentInfo from '~/src/features/full-buy/components/EquipmentInfo';\nimport EquipmentPopup from '~/src/features/full-buy/components/EquipmentPopup';\nimport { RouterCardsViewWithButton } from '~/src/features/full-buy/containers/EquipmentList/RouterCardsViewWithButton';\nimport {\n RouterCardsViewWithCarousel,\n} from '~/src/features/full-buy/containers/EquipmentList/RouterCardsViewWithCarousel';\nimport { getPurchaseOptions } from '~/src/features/full-buy/helpers/helpersForProduct/getPurchaseOptions';\nimport { getLimits } from '~/src/features/full-buy/helpersForProducts';\nimport { addEquipment } from '~/src/features/full-buy/store/actions/products/thunk/addEquipment';\nimport { changeEquipmentCount } from '~/src/features/full-buy/store/actions/products/thunk/changeEquipmentCount';\nimport { selectProductsByCategory } from '~/src/features/full-buy/store/selectors/products/selectProductsByCategory';\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\nimport { TState } from '~/src/store';\n\nexport type TRouterListProperties = {\n category?: EShopCategory.Routers | EShopCategory.PrivateSectorEquipment,\n withCarousel?: boolean,\n}\n\n/**\n * Список роутеров\n */\nexport const EquipmentList = ({ category = EShopCategory.Routers, withCarousel }: TRouterListProperties): JSX.Element => {\n const analytics = useAnalytics();\n\n const dispatch = useDispatch();\n const [isPopupOpen, setIsPopupOpen] = useState(false);\n\n const equipments = useSelector((state: TState) => selectProductsByCategory(state, category));\n\n const limits = useMemo(() => getLimits(equipments, category), [equipments, category]);\n const [currentEquipmentId, setCurrentEquipmentId] = useState();\n const [isInstallmentDisable, setIsInstallmentDisable] = useState(false);\n\n const currentEquipment: { value: TProduct, options: Record } | undefined = useMemo(() => {\n if (currentEquipmentId) {\n const value = equipments.find(e => e.id === currentEquipmentId);\n const options = value && getPurchaseOptions(value?.prices, (isInstallmentDisable && limits.installment));\n if (value && options) {\n return { value, options };\n }\n }\n }, [currentEquipmentId, equipments]);\n\n /* Записывает выбранный продукт в стор */\n const handleAddEquipment = (cost: number) => {\n dispatch(addEquipment(currentEquipment?.value, cost, analytics));\n setIsPopupOpen(false);\n };\n\n const openAddEquipmentPopup = (equipment: TProduct, isInstallmentDisabled: boolean) => () => {\n setCurrentEquipmentId(equipment.id);\n setIsInstallmentDisable(isInstallmentDisabled);\n setIsPopupOpen(true);\n };\n\n useEffect(() => {\n if (isPopupOpen && currentEquipment?.value.title) {\n currentEquipment && analytics.equipment.clickAddProduct(\n `type:${category}|name:${currentEquipment.value.title}|`,\n );\n }\n }, [analytics.equipment, currentEquipment?.value.title, isPopupOpen]);\n\n const handleIncrement = (id: number) => () => {\n dispatch(changeEquipmentCount(id, true, category, analytics));\n };\n const handleDecrement = (id: number) => () => {\n dispatch(changeEquipmentCount(id, false, category, analytics));\n };\n\n const handleClosePopup = () => {\n setIsPopupOpen(false);\n };\n\n return (\n \n {withCarousel\n ? \n : }\n\n {!currentEquipment\n ? null\n : (\n \n (\n \n ))}\n body={currentEquipment.value.body}\n characteristics={currentEquipment.value.props}\n description={currentEquipment.value.description}\n options={currentEquipment.options}\n onSelect={handleAddEquipment}\n onClose={handleClosePopup}\n quantity={currentEquipment.value.quantity}\n onIncrement={handleIncrement(currentEquipment.value.id)}\n onDecrement={handleDecrement(currentEquipment.value.id)}\n />\n \n )}\n \n );\n};\n","import React, { useState } from 'react';\n\nimport Toggle from '@r1-frontend/ui-react/components/controls/Toggle';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { DecoderList } from '~/src/features/full-buy/containers/DecoderList';\nimport { EquipmentList } from '~/src/features/full-buy/containers/EquipmentList';\n\ntype TAdditionalEquipmentWithToggleProps = {\n routerCategory?: EShopCategory.Routers | EShopCategory.PrivateSectorEquipment,\n [key: string]: unknown,\n}\n\nconst TOGGLE_MODES = {\n leftText: 'Wi-Fi-роутеры',\n rightText: 'ТВ-приставки',\n};\n\nexport const AdditionalEquipmentWithToggle = ({ routerCategory = EShopCategory.Routers }: TAdditionalEquipmentWithToggleProps) => {\n const [toggleState, setToggleState] = useState(TOGGLE_MODES.leftText);\n\n return <>\n \n\n {toggleState === TOGGLE_MODES.leftText\n ? \n : \n }\n ;\n};\n","import { getABNVariant } from '~/src/helpers/abn-tests';\n\nconst isAdditionalEquipment = () => {\n return getABNVariant('additional_equipment') === 'additional_equipment_on';\n};\n\nexport default isAdditionalEquipment;\n","import { useContext, useMemo } from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { FullBuyContext, TFullBuyContextProperties } from '~/src/features/full-buy/analytics/context';\nimport isAdditionalEquipment from '~/src/features/full-buy/helpers/ab/isAdditionalEquipment';\nimport { selectProductsByCategory } from '~/src/features/full-buy/store/selectors/products/selectProductsByCategory';\nimport { ESteps } from '~/src/features/full-buy/types';\nimport { TState } from '~/src/store';\n\nconst EXCLUDE_STEPS = [\n ESteps.agreementCreated,\n ESteps.timeSlots,\n ESteps.final,\n ESteps.equipments,\n ESteps.equipmentsTv,\n];\n\nexport type TEquipmentComponent = 'all' | 'none' | 'routers' | 'decoders';\n\ninterface IUseCheckAdditionalEquipmentResult {\n hasAdditionalEquipment: boolean,\n equipmentComponentType: TEquipmentComponent,\n routerCategory: EShopCategory.Routers | EShopCategory.PrivateSectorEquipment,\n}\n\nexport const useCheckAdditionalEquipment = (): IUseCheckAdditionalEquipmentResult => {\n const { isVillage } = useContext(FullBuyContext);\n const routerCategory = EShopCategory.Routers;\n const {\n stepIndex,\n flow,\n routerEquipments,\n decoderEquipments,\n } = useSelector((state: TState) => ({\n stepIndex: state.fullBuy.stepIndex,\n flow: state.fullBuy.flow,\n routerEquipments: selectProductsByCategory(state, routerCategory),\n decoderEquipments: selectProductsByCategory(state, EShopCategory.Decoders),\n }), shallowEqual);\n\n const step = flow?.steps[stepIndex];\n const hasAdditionalEquipment = isAdditionalEquipment();\n\n const equipmentComponentType = useMemo(() => {\n if (routerEquipments.length && decoderEquipments.length) {\n return 'all';\n }\n if (routerEquipments.length) {\n return 'routers';\n }\n if (decoderEquipments.length) {\n return 'decoders';\n }\n return 'none';\n }, [routerEquipments, decoderEquipments]);\n\n if (!hasAdditionalEquipment || (step && EXCLUDE_STEPS.includes(step) || equipmentComponentType === 'none' || isVillage)) {\n return {\n hasAdditionalEquipment: false,\n equipmentComponentType: 'none',\n routerCategory,\n };\n }\n return {\n hasAdditionalEquipment: true,\n equipmentComponentType,\n routerCategory,\n };\n};\n","import React, { memo, useMemo } from 'react';\nimport styled from 'styled-components';\n\nimport WideContainer, { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { Separator } from '@r1-frontend/ui-react/components/Separator';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { FullWidthListContainer, IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport {\n AdditionalEquipmentWithToggle,\n} from '~/src/features/full-buy/containers/AdditionalEquipment/AdditionalEquipmentWithToggle';\nimport {\n TEquipmentComponent,\n useCheckAdditionalEquipment,\n} from '~/src/features/full-buy/containers/AdditionalEquipment/useCheckAdditionalEquipment';\nimport { DecoderList } from '~/src/features/full-buy/containers/DecoderList';\nimport { EquipmentList, TRouterListProperties } from '~/src/features/full-buy/containers/EquipmentList';\n\nconst componentForEquipment: Record JSX.Element) | null> = {\n 'all': AdditionalEquipmentWithToggle,\n 'routers': EquipmentList,\n 'decoders': DecoderList,\n 'none': null,\n};\n\nconst AdditionalEquipment = ({ className } : { className?: string }) => {\n const {\n hasAdditionalEquipment,\n equipmentComponentType,\n routerCategory,\n } = useCheckAdditionalEquipment();\n\n const EquipmentComponent = useMemo(\n () => componentForEquipment[equipmentComponentType],\n [equipmentComponentType],\n );\n\n if (!hasAdditionalEquipment || !EquipmentComponent) {\n return null;\n }\n\n return \n \n \n \n \n

Вам может понадобиться оборудование

\n \n
\n
;\n};\n\nconst StyledAdditionalEquipment = styled(AdditionalEquipment)`\n @media (max-width: ${wideBreakpoints.laptop}) {\n margin-top: -32px;\n }\n`;\n\nexport default memo(StyledAdditionalEquipment);\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BlockContainer, ListContainer } from '@r1-frontend/ui-react/experimental/containers';\n\nexport const BannerBlockContainer = styled(BlockContainer)`\n ${ListContainer} {\n z-index: 2;\n }\n \n img {\n position: absolute;\n height: 78px;\n right: 0;\n bottom: 0;\n \n @media (min-width: ${wideBreakpoints.mobile}) {\n right: 100px;\n height: auto;\n }\n }\n`;\n","import Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { H4 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph5 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { IndentContainer, ListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport * as ST from '~/src/features/full-buy/Banner/styled';\n\ninterface IProps {\n title: string,\n subtitle: string,\n onClick: () => void,\n buttonText?: string,\n}\n\nexport const BannerView = ({ title, subtitle, onClick, buttonText = 'Подключить' }: IProps) => {\n return (\n \n \n

\n \n \n \n \n \n \n \n );\n};\n\n","import { inRange } from 'lodash';\nimport { createSelector } from 'reselect';\n\nimport { format } from '@r1-frontend/ui-react/components/costs';\n\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\n\ninterface IBannerInfo {\n title: string,\n subtitle: string,\n path: string,\n tariffName: string,\n}\n\nconst MIN_SPEED_IN_RANGE = 100;\nconst MAX_SPEED_IN_RANGE = 301;\n\n// Собирает баннер из recommendedPacket\nexport const selectBannerInfoForFullBuy = createSelector(\n selectCurrentTariff,\n (tariff): IBannerInfo | null => {\n const speedInRange = tariff && inRange(tariff.speed, MIN_SPEED_IN_RANGE, MAX_SPEED_IN_RANGE);\n\n if (!tariff || !tariff.isMono || !tariff.recommendedPackets?.length || !speedInRange) {\n return null;\n }\n\n const [recommendedPacket] = tariff.recommendedPackets;\n const { priceFinal, promoPriceFinal, promoDuration, sale_package_id } = recommendedPacket;\n\n return ({\n tariffName: recommendedPacket.title,\n title: `Успейте подключить Интернет+ТВ по цене Интернета на ${promoDuration} месяца`,\n subtitle: `${format(promoPriceFinal, { monthly: true })} вместо ${format(priceFinal, { monthly: true })}`,\n path: `/full-buy?salePackageId=${sale_package_id}`,\n });\n },\n);\n","import { useSelector } from 'react-redux';\n\nimport { EVerificationStatus } from '@r1-frontend/entities/ContactAddress/initialState';\n\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { BannerView } from '~/src/features/full-buy/Banner/BannerView';\nimport {\n useCheckAdditionalEquipment,\n} from '~/src/features/full-buy/containers/AdditionalEquipment/useCheckAdditionalEquipment';\nimport { selectBannerInfoForFullBuy } from '~/src/features/full-buy/store/selectors/selectBannerInfoForFullBuy';\nimport { TState } from '~/src/store';\n\nexport const Banner = () => {\n // todo- удалить свойство hasAdditionalEquipment из хука,\n // когда будет отвязан баннер от AdditionalEquipment\n const { hasAdditionalEquipment } = useCheckAdditionalEquipment();\n\n const banner = useSelector(selectBannerInfoForFullBuy);\n const verifiedAddressDataStatus = useSelector((state: TState) => state.contactAddress.verifiedAddressData.status);\n const analytics = useAnalytics();\n\n const isAddressNotVerified = verifiedAddressDataStatus === EVerificationStatus.notVerified;\n\n if (!banner || hasAdditionalEquipment || !isAddressNotVerified) {\n return null;\n }\n\n const onClickHandle = () => {\n analytics.clickBanner(banner.tariffName);\n location.href = banner.path;\n };\n\n return (\n \n \n \n );\n};\n","import React from 'react';\n\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { TOrderSummaryItem } from '@r1-frontend/ui-react/organisms/OrderSummary/types';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport * as S from '../styled';\n\nconst ItemWithoutCost = (\n {\n title,\n description,\n Component = Paragraph4,\n color = COLORS.TextInfo,\n }: TOrderSummaryItem,\n): JSX.Element => {\n return \n \n {title}\n Считаем...\n \n {description ? {description} : null}\n ;\n};\n\nexport default ItemWithoutCost;\n","import { createSelector } from 'reselect';\n\nimport { TState } from '~/src/store';\n\nconst getAddressCheckingResult = createSelector(\n [\n (state: TState) => state.fullBuy.selectedAddress,\n ],\n (selectedAddress) => ({\n isChecked: Boolean(selectedAddress),\n isConnectionAvailable: Boolean(selectedAddress?.isConnectionAvailable),\n isTariffAvailable: Boolean(selectedAddress?.isTariffAvailable),\n newPrice: selectedAddress?.checkingResult &&\n selectedAddress?.checkingResult?.connectionPrice &&\n selectedAddress?.checkingResult.connectionPrice.value &&\n selectedAddress?.checkingResult.connectionPrice.isValid,\n }),\n);\n\nexport default getAddressCheckingResult;\n","import { createSelector } from 'reselect';\n\nimport { ESteps } from '~/src/features/full-buy/types';\nimport { TState } from '~/src/store';\n\nconst selectStepName = createSelector([\n (state: TState) => state.fullBuy,\n], ({ stepIndex, flow }): ESteps | undefined => {\n return flow?.steps[stepIndex] || undefined;\n});\n\nexport default selectStepName;\n","import { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TState } from '~/src/store';\n\nconst getDescriptionForTariffForNewSubscriptions = (state: TState) => {\n const tariff = selectCurrentTariff(state);\n const {\n selectedSubscriptions,\n subscriptions,\n } = state.fullBuy;\n\n const result = ['Интернет'];\n\n if (tariff && !tariff.isMono) {\n result.push('Дом.ru TV');\n }\n\n if (tariff) {\n tariff.subscriptions?.forEach(item => result.push(item.title));\n selectedSubscriptions.forEach(sId => {\n const title = subscriptions[tariff.sale_package_id].items.find(s => s.serviceId === sId)?.title;\n if (title) {\n result.push(title);\n }\n });\n }\n\n return result.join(', ');\n};\n\nexport default getDescriptionForTariffForNewSubscriptions;\n","import { useState } from 'react';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport DefaultPopup from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { InfoCircleFlip } from '@r1-frontend/ui-react/components/svg/main';\nimport ControlElement from '@r1-frontend/ui-react/components/typography/controlElement';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { Cost } from '@r1-frontend/ui-react/experimental/purchase/cost';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { monthPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nconst periodText = getPluralize(monthPluralize);\n\nexport type TAdditionProductDetailedInfoProps = {\n productName: string,\n period: number,\n finalPrice: number,\n startPrice: number | null,\n}\n\nconst AdditionalProductDetailedInfo = (\n {\n productName,\n period,\n finalPrice,\n startPrice,\n }: TAdditionProductDetailedInfoProps,\n): JSX.Element => {\n const [isOpen, changePopupState] = useState(false);\n\n const handleClosePopup = () => {\n changePopupState(false);\n };\n\n const handleOpenPopup = () => {\n changePopupState(true);\n };\n\n return (\n <>\n Условия приобретения\n\n \n \n \n

{productName} — условия приобретения

\n \n Оборудование в рассрочку за {finalPrice} включено в стоимость тарифа.\n {startPrice !== null && (<> При этом в первый месяц цена {startPrice}.)}\n  Через {period} {periodText(period)} оборудование перейдет к вам в собственность.\n \n
\n\n \n \n \n
\n
\n \n );\n};\n\nexport default AdditionalProductDetailedInfo;\n","const getTitleByQuantity = (quantity: number): string => quantity > 1 ? ` (${quantity} шт.)` : '';\n\nexport default getTitleByQuantity;\n","import { Indentation2SatisfyTheDesignIdea } from '@r1-frontend/ui-react/organisms/OrderSummary/styled';\nimport { TOrderSummaryComponent, TOrderSummaryItem } from '@r1-frontend/ui-react/organisms/OrderSummary/types';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { monthPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport AdditionalProductDetailedInfo from '~/src/features/full-buy/components/OrderSummary/AdditionalProductDetailedInfo';\nimport { IAdditionalProduct } from '~/src/features/full-buy/store/helpers/tariffTransformerHelpers';\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\n\nimport getTitleByQuantity from './getTitleByQuantity';\n\nconst dMonth = getPluralize(monthPluralize);\n\nconst truncate = (str: string, max: number, suffix: string) => str.length < max ? str : `${str.substr(0, str.substr(0, max - suffix.length).lastIndexOf(' '))}${suffix}`;\n\nconst processProduct = (items: (TOrderSummaryItem | TOrderSummaryComponent)[], givenQuantityForCost = false) => (product: TProduct | IAdditionalProduct) => {\n const { title, quantity, selectedPrice } = product;\n const isRequired = ('required' in product && product.required === 1);\n\n if (!quantity || !selectedPrice) {\n return null;\n }\n\n items.push({\n title: `${truncate(title.trim(), 25, '...')}${getTitleByQuantity(quantity)}${isRequired ? ', в тарифе' : ''}`,\n cost: givenQuantityForCost ? selectedPrice.cost * quantity : selectedPrice.cost,\n color: COLORS.TextPrimary,\n description: 'required' in product ? null : selectedPrice.duration ? `Рассрочка на ${selectedPrice.duration} ${dMonth(selectedPrice.duration)}` : 'Полная стоимость',\n });\n\n if ('required' in product && product.required === 1) {\n items.push({\n Component: AdditionalProductDetailedInfo,\n props: {\n productName: title,\n period: selectedPrice.duration,\n startPrice: product.firstMonthPrice,\n finalPrice: product.basePrice,\n },\n });\n }\n items.push({\n Component: Indentation2SatisfyTheDesignIdea,\n props: {},\n });\n\n};\n\nexport default processProduct;\n","import { H4 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { TOrderSummary } from '@r1-frontend/ui-react/organisms/OrderSummary';\nimport ItemWithoutCost from '@r1-frontend/ui-react/organisms/OrderSummary/Item/ItemWithoutCost';\nimport { Indentation2SatisfyTheDesignIdea } from '@r1-frontend/ui-react/organisms/OrderSummary/styled';\nimport { TOrderSummaryItem } from '@r1-frontend/ui-react/organisms/OrderSummary/types';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { monthPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport ConnectionConditions from '~/src/components/ConnectionConditions/ConnectionConditions';\nimport TariffDetailedInfo from '~/src/features/full-buy/components/OrderSummary/TariffDetailedInfo';\nimport { getProductsCosts } from '~/src/features/full-buy/functions';\nimport { isConnectionCostHidden } from '~/src/features/full-buy/helpers/ab/isConnectionCostHidden';\nimport getAddressCheckingResult from '~/src/features/full-buy/store/selectors/getAddressCheckingResult';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport selectStepName from '~/src/features/full-buy/store/selectors/selectStepName';\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\nimport { TState } from '~/src/store';\n\nimport getDescriptionForTariffForNewSubscriptions from './getDescriptionForTariffForNewSubscriptions';\nimport processProduct from './processProduct';\n\nexport const monthText = getPluralize(monthPluralize);\n\nconst getSummaryInfo = (isVillage?: boolean, analyticsCallback?: () => void) => (state: TState): {\n fullSummaryData: TOrderSummary,\n total: TOrderSummaryItem,\n} => {\n const selectedTariff = selectCurrentTariff(state);\n const stepName = selectStepName(state);\n const isShownLoader = state.fullBuy.isShownLoader;\n const addressCheckingResult = getAddressCheckingResult(state);\n\n const products = state.fullBuy.products;\n const total = {\n cost: 0,\n title: 'Итого при подключении:',\n Component: H4,\n props: {\n $withIndent: false,\n $inline: true,\n },\n };\n const orderSummary: TOrderSummary = {\n items: [],\n };\n\n if (!selectedTariff) {\n return {\n fullSummaryData: orderSummary,\n total,\n };\n } else {\n orderSummary.items = [];\n }\n\n const { additionalProducts, connectionPrice } = selectedTariff;\n\n const tariffPrice = selectedTariff.promoPrice || selectedTariff.price;\n const productsCost = getProductsCosts(products);\n\n const { instalmentProducts, oneTimePurchaseProducts } = products\n .reduce<{ instalmentProducts: TProduct[], oneTimePurchaseProducts: TProduct[] }>(\n (acc, product) => {\n if (product.selectedPrice?.duration) {\n acc.instalmentProducts.push(product);\n }\n\n if (!product.selectedPrice?.duration) {\n acc.oneTimePurchaseProducts.push(product);\n }\n\n return acc;\n }, { instalmentProducts: [], oneTimePurchaseProducts: [] },\n );\n\n const totalCost = {\n monthly: tariffPrice + productsCost.monthly,\n once: productsCost.once,\n };\n\n const allData = [];\n allData.push({\n title: `Тариф «${selectedTariff.title}»:`,\n description: getDescriptionForTariffForNewSubscriptions(state),\n cost: tariffPrice,\n Component: Paragraph4,\n color: COLORS.TextPrimary,\n });\n\n if (selectedTariff.promoPeriod) {\n allData.push({\n Component: TariffDetailedInfo,\n props: {\n period: selectedTariff.promoPeriod,\n startPrice: tariffPrice,\n finalPrice: selectedTariff.price,\n },\n });\n }\n allData.push({\n Component: Indentation2SatisfyTheDesignIdea,\n props: {},\n });\n\n additionalProducts.forEach(processProduct(allData));\n instalmentProducts.forEach(processProduct(allData, true));\n oneTimePurchaseProducts.forEach(processProduct(allData, true));\n\n if (!isConnectionCostHidden(stepName, !selectedTariff.isCottage && !isShownLoader)) {\n\n if (isVillage && !addressCheckingResult.newPrice) {\n allData.push({\n Component: ItemWithoutCost,\n props: {\n title: 'Подключение',\n color: COLORS.TextPrimary,\n },\n });\n } else {\n allData.push({\n title: 'Подключение',\n cost: connectionPrice.final,\n previousCost: connectionPrice.isDiscounted ? connectionPrice.base : undefined,\n color: COLORS.TextPrimary,\n });\n\n allData.push({\n Component: ConnectionConditions,\n props: {\n isVillage,\n analyticsCallback: analyticsCallback,\n },\n });\n\n totalCost.once += connectionPrice.final;\n }\n }\n\n total.cost = totalCost.monthly + totalCost.once;\n orderSummary.items.push(allData, 'separator', { total });\n\n return {\n fullSummaryData: orderSummary,\n total,\n };\n};\n\nexport default getSummaryInfo;\n","import { ESteps } from '~/src/features/full-buy/types';\nimport { getABNVariant } from '~/src/helpers/abn-tests';\n\nexport const isConnectionCostHidden = (step: ESteps | undefined, isApartmentPackage: boolean) => {\n return getABNVariant('full_buy_hide_connection_cost') === 'hide_connection_cost' && !(step === ESteps.timeSlots || step === ESteps.final) && isApartmentPackage;\n};\n\nexport const isConnectionCostByVisitShown = (isApartmentPackage: boolean) => {\n return getABNVariant('full_buy_hide_connection_cost') === 'hide_connection_cost' && isApartmentPackage;\n};\n","import { useContext } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport BaseOrderSummary from '@r1-frontend/ui-react/organisms/OrderSummary';\n\nimport { FullBuyContext, TFullBuyContextProperties } from '~/src/features/full-buy/analytics/context';\nimport getSummaryInfo from '~/src/features/full-buy/store/selectors/getSummaryInfo';\n\nconst OrderSummary = ({ withoutTitle = false }): JSX.Element => {\n const { isVillage, analytics } = useContext(FullBuyContext);\n const clickViewConnectionCostPopup = analytics.summary.clickViewConnectionCostPopup.bind(analytics.summary);\n const { fullSummaryData } = useSelector(getSummaryInfo(isVillage, clickViewConnectionCostPopup));\n\n\n return ;\n};\n\nexport default OrderSummary;\n","import { useContext } from 'react';\nimport { useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport { H4 } from '@r1-frontend/ui-react/components/typography/heading';\nimport OrderSummaryItem from '@r1-frontend/ui-react/organisms/OrderSummary/Item';\n\nimport { FullBuyContext, TFullBuyContextProperties } from '~/src/features/full-buy/analytics/context';\nimport getSummaryInfo from '~/src/features/full-buy/store/selectors/getSummaryInfo';\n\nconst Wrapper = styled.div`\n width: 100%;\n\n display: block;\n\n ${ButtonGroup} {\n margin-top: 16px;\n width: calc(100% + 32px);\n }\n\n ${ButtonGroup} button {\n width: 100%;\n }\n`;\n\nconst TotalSummary = (): JSX.Element => {\n const { isVillage } = useContext(FullBuyContext);\n const { total } = useSelector(getSummaryInfo(isVillage));\n\n return \n \n ;\n};\n\nexport default TotalSummary;\n","import { useState } from 'react';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { check, ICheckResponse } from '@r1-frontend/api-domru/api-loyalty/v1/unauth-promocode/check';\n\nimport FullBuyAnalytics from '~/src/features/full-buy/analytics';\nimport { IPromoCode } from '~/src/features/full-buy/store/initialState';\n\ninterface ICheckPromoCode {\n processCheck: (promoCode: string) => void,\n isError: boolean,\n errorMessage: string,\n isLoading: boolean,\n clearErrors: () => void,\n}\n\nconst useCheckPromoCode = (providerId: number, domain: string, analytics: FullBuyAnalytics, callback: (data: IPromoCode) => void) : ICheckPromoCode => {\n const [isError, setIsError] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n\n const processCheck = async(promoCode: string) => {\n analytics.summary.promocodeClickVerification();\n setIsLoading(true);\n\n const respPromoCode = await doRequest.apiLoyalty(\n check(providerId, promoCode),\n );\n\n if (respPromoCode.isSuccess) {\n const data: IPromoCode = {\n value: promoCode,\n amount: respPromoCode.payload.sum,\n type: respPromoCode.payload.type,\n };\n callback(data);\n } else {\n analytics.summary.promocodeFailVerification(promoCode);\n setIsError(true);\n setErrorMessage(respPromoCode.error.message);\n }\n\n setIsLoading(false);\n };\n\n const clearErrors = () => {\n setIsError(false);\n setErrorMessage('');\n };\n\n return { processCheck, isError, errorMessage, isLoading, clearErrors };\n};\n\nexport default useCheckPromoCode;\n","import styled from 'styled-components';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport InputSimple from '@r1-frontend/ui-react/components/inputSimple';\nimport { TickCircle } from '@r1-frontend/ui-react/components/svg/main';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const PromoWrapper = styled.div`\n width: 100%;\n`;\n\nexport const FormLine = styled.div`\n width: 100%;\n justify-content: space-between;\n align-items: baseline;\n flex-direction: row;\n gap: 12px;\n`;\n\nexport const StyledInputSimple = styled(InputSimple)`\n flex: 1;\n margin-bottom: 0;\n`;\n\nexport const ResultLine = styled.div`\n width: 100%;\n justify-content: space-between;\n flex-direction: row;\n gap: 8px;\n`;\n\nexport const Icon = styled(TickCircle)`\n & g{\n stroke: #15A250 !important;\n }\n`;\n\nexport const Text = styled.div`\n flex: 1;\n ${FONTS.XS};\n & > span {\n display: contents;\n ${FONTS.H6};\n }\n`;\n\nexport const StyledButton = styled(Button)`\n padding: 6px 0;\n`;\n","import { ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport HtmlContentFromApi from '@r1-frontend/ui-react/components/HtmlContentFromApi';\nimport { Close } from '@r1-frontend/ui-react/components/svg/main';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport useCheckPromoCode from '~/src/features/full-buy/PromoCode/hooks/checkPromoCode';\nimport { setPromoCode } from '~/src/features/full-buy/store/actions/setPromoCode';\nimport { usePrepareQueryData } from '~/src/helpers/hooks/usePrepareQueryData';\nimport { TState } from '~/src/store';\nimport { selectDomain } from '~/src/store/selectors/domain';\nimport selectProviderId from '~/src/store/selectors/selectProviderId';\n\nimport * as ST from './styled';\n\nexport enum EBonusTypes {\n AMOUNT = 0,\n PERCENT = 1,\n}\n\ninterface IProps {\n hasAgreement: boolean,\n}\n\nconst PromoCode = ({ hasAgreement }: IProps) => {\n const analytics = useAnalytics();\n\n const domain = useSelector((state: TState) => selectDomain(state));\n const { providerId, bonusAmount, bonusType } = useSelector((state: TState) => ({\n providerId: selectProviderId(state),\n bonusAmount: state.fullBuy.promoCode?.amount,\n bonusType: state.fullBuy.promoCode?.type,\n }));\n const [promoCodeValue, setPromoCodeValue] = useState('');\n const [startInput, setStartInput] = useState(true);\n\n const { code } = usePrepareQueryData();\n\n const dispatch = useDispatch();\n const { processCheck, isError, errorMessage, isLoading, clearErrors } = useCheckPromoCode(providerId, domain, analytics, (data) => {\n analytics.summary.promocodeSuccessVerification(data.value);\n dispatch(setPromoCode(data));\n });\n\n const onInputChange = (e: ChangeEvent) => {\n if (startInput) {\n analytics.summary.promocodeStartedTyping();\n setStartInput(false);\n }\n setPromoCodeValue(e.target.value);\n if (e.target.value === '') {\n clearErrors();\n }\n };\n\n useEffect(() => {\n if (code && !promoCodeValue) {\n setPromoCodeValue(code);\n processCheck(code);\n }\n }, []);\n\n const onCheckCode = useCallback(async() => {\n processCheck(promoCodeValue);\n }, [promoCodeValue]);\n\n const bonusMessage = useMemo(() => {\n return bonusType === EBonusTypes.AMOUNT\n ? `Вам будет начислено ${bonusAmount} бонусов.
Мы зарегистрируем вас в программе лояльности, чтобы вы могли ими воспользоваться.`\n : `${bonusAmount}% от абонентской платы будет начислено бонусами. Мы зарегистрируем вас в программе лояльности, чтобы вы могли ими воспользоваться`;\n }, [bonusAmount, bonusType]);\n\n const onClickClear = useCallback(() => {\n dispatch(setPromoCode(null));\n setPromoCodeValue('');\n clearErrors();\n }, [promoCodeValue]);\n\n const onInputCLick = useCallback(() => {\n analytics.summary.promocodeClickedOnHave();\n }, []);\n\n return (\n \n {bonusAmount\n ? \n \n \n \n {bonusMessage}\n \n \n {!hasAgreement && } bType={'ghost'} size={'small'} onClick={onClickClear}/>}\n \n : !hasAgreement\n ? \n ) => onInputChange(e)}\n onClick={onInputCLick}\n errorMessage={isError ? errorMessage : null}\n isNotValid={isError}\n disabled={isLoading}\n />\n Проверить\n \n : <>\n }\n \n );\n};\n\nexport default PromoCode;\n","import styled from 'styled-components';\n\nimport DefaultPopup from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { RoundedBlock } from '@r1-frontend/ui-react/experimental/blocks';\n\nexport const BottomStickyOrderSummaryWrapper = styled.div`\n display: flex;\n flex-basis: 100%;\n flex-direction: column;\n row-gap: 24px;\n`;\n\nexport const OrderSummaryWrapper = styled(RoundedBlock)`\n display: flex;\n flex-direction: column;\n row-gap: 24px;\n padding: 24px;\n`;\n\nexport const StyledDefaultPopup = styled(DefaultPopup)`\n & > div {\n top: 24px;\n right: 24px;\n }\n`;\n","import React from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport BottomStickyBlock from '@r1-frontend/ui-react/components/BottomStickyBlock';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\nimport { useOnceExecute } from '@r1-frontend/shared/hooks/useOnceExecute';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport OrderSummary from '~/src/features/full-buy/containers/OrderSummary';\nimport TotalSummary from '~/src/features/full-buy/containers/TotalSummary';\nimport PromoCode from '~/src/features/full-buy/PromoCode';\nimport { TState } from '~/src/store';\n\nimport * as ST from './styled';\n\ninterface IProps {\n withPromocode?: boolean,\n}\n\nexport const TiketContainer = ({ withPromocode = true }: IProps): JSX.Element => {\n const analytics = useAnalytics();\n\n const {\n agreementData,\n } = useSelector((state: TState) => ({\n agreementData: state.fullBuy.agreement,\n }), shallowEqual);\n\n const isLaptop = useMatchMediaByWidth(wideBreakpoints.laptop);\n\n const onOpenBottomSticky = useOnceExecute(() => {\n analytics.summary.clickOpenBottomStickySummary();\n });\n\n return (\n <>\n {isLaptop &&\n (\n \n \n {withPromocode && }\n \n )}\n OuterComponent={TotalSummary}\n onOpen={onOpenBottomSticky}\n />\n }\n\n {!isLaptop &&\n \n \n {withPromocode && }\n \n\n }\n \n );\n};\n","import React, { FC, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { getAddressByStr } from '@r1-frontend/entities/ContactAddress/selectors/helpers';\n\nimport { CallCalling } from '@r1-frontend/ui-react/components/svg/call';\nimport { Location } from '@r1-frontend/ui-react/components/svg/location';\nimport { Coin } from '@r1-frontend/ui-react/components/svg/money';\nimport { User } from '@r1-frontend/ui-react/components/svg/users';\n\nimport InfoBlock from '~/src/features/full-buy/InfoBlock';\nimport InfoBlockItem from '~/src/features/full-buy/InfoBlock/Item';\nimport { EBonusTypes } from '~/src/features/full-buy/PromoCode';\nimport { TState } from '~/src/store';\n\ninterface IProps {\n agreementNumber: number | null,\n}\n\nconst AgreementInfo: FC = ({ agreementNumber }) => {\n const title = agreementNumber ? `Заявка № ${agreementNumber}` : 'Ваши данные';\n const {\n fio,\n phone,\n address,\n bonusAmount,\n bonusType,\n promoCodeError,\n } = useSelector((state: TState) => ({\n fio: state.contactDetails.editedFio,\n phone: state.contactDetails.confirmedPhone.phone,\n address: state.fullBuy.selectedAddress?.address.value || getAddressByStr(state.contactAddress.verifiedAddressData.address),\n bonusAmount: state.fullBuy.promoCode?.amount,\n bonusType: state.fullBuy.promoCode?.type,\n promoCodeError: state.fullBuy.promoCode?.hasError,\n }));\n\n const bonusMessage = useMemo(() => {\n return promoCodeError\n ? 'Не удалось активировать промокод — возникла ошибка при регистрации в программе лояльности.'\n : bonusType === EBonusTypes.AMOUNT\n ? `Начислим вам ${bonusAmount} бонусов после визита инженера.`\n : `Начислим вам ${bonusAmount}% от абонентской платы в виде бонусов после визита инженера.`;\n }, [bonusAmount, bonusType, promoCodeError]);\n\n return (\n \n }\n title={'ФИО'}\n content={fio}\n />\n }\n title={'Номер телефона'}\n content={phone}\n />\n }\n title={'Адрес подключения'}\n content={address}\n />\n {bonusType !== undefined || promoCodeError\n ? }\n title={'Программа лояльности'}\n content={bonusMessage}\n />\n : <>\n }\n \n );\n};\n\nexport default AgreementInfo;\n","import styled from 'styled-components';\n\nimport { BaseButton } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const Wrapper = styled.div`\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n background-color: ${COLORS.BgSurface};\n border-radius: ${BorderRadius.OuterBlockRadius};\n flex-wrap: nowrap;\n width: 100%;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n flex-direction: column;\n align-items: baseline;\n }\n`;\n\nexport const Text = styled.div`\n display: block;\n max-width: 700px;\n ${FONTS.S};\n color: ${COLORS.TextSecondary};\n`;\n\nexport const Phone = styled.a`\n ${FONTS.S};\n color: ${COLORS.TextSecondary};\n text-decoration: none;\n`;\n\nexport const StBaseButton = styled(BaseButton)`\n margin-left: 24px;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n margin-left: 0;\n margin-top: 24px;\n width: 100%;\n }\n`;\n","import { useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { btnSizes, btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { TState } from '~/src/store';\nimport { openChat } from '~/src/store/actions/chat';\n\nimport * as ST from './styled';\n\nconst CallbackContacts = (): JSX.Element => {\n const analytics = useAnalytics();\n\n const city = useSelector((state: TState) => state.city.currentCity);\n const dispatch = useDispatch();\n\n const callCenterNumber = useMemo(() => city.callCenter.replace(/\\D/g, ''), [city.callCenter]);\n const href = useMemo(() => `tel:+${callCenterNumber}`, [callCenterNumber]);\n\n const callTouchHandler = () => {\n analytics.final.clickCallTouch();\n };\n\n const openChatHandler = () => {\n analytics.final.clickChat();\n dispatch(openChat());\n };\n\n return (\n \n \n Напишите или позвоните в поддержку \n \n {city.callCenter}\n . Мы всегда на связи.\n \n \n );\n};\n\nexport default CallbackContacts;\n","import styled, { css } from 'styled-components';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport InputSimple from '@r1-frontend/ui-react/components/inputSimple';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport Throbber from '@r1-frontend/ui-react/components/loaders/Throbber';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const FeedbackWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-content: center;\n text-align: center;\n width: 100%;\n border-radius: ${BorderRadius.OuterBlockRadius};\n background-color: ${COLORS.BgSurface};\n margin-bottom: 40px;\n padding: 24px 16px;\n row-gap: 16px;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n padding: 16px;\n }\n position: relative;\n`;\n\nexport const FeedbackTitle = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n width: 100%;\n background-color: ${COLORS.BgSurface};\n ${FONTS.H3};\n color: ${COLORS.TextPrimary};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H5};\n }\n`;\n\nexport const FeedbackButtonsContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n column-gap: 16px;\n`;\n\nexport const FeedbackButton = styled.div<{ clickable: boolean }>`\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: center;\n width: 124px;\n \n ${({ clickable }) => clickable && css`\n cursor: pointer;\n `}\n`;\n\nexport const FeedbackEmoticon = styled.div`\n width: 60px;\n height: 60px;\n`;\n\nexport const FeedbackButtonTitle = styled.div`\n ${FONTS.XS};\n color: ${COLORS.TextSecondary};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.XXS};\n }\n`;\n\nexport const InputMessage = styled(InputSimple)`\n width: 100%;\n margin-bottom: 0;\n`;\n\nexport const ButtonMessage = styled(Button)`\n width: 100%;\n margin-top: 12px;\n margin-bottom: 0;\n`;\n\nexport const StyledThrobber = styled(Throbber)`\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n background-color: rgba(0,0,0,0.1);\n border-radius: ${BorderRadius.OuterBlockRadius};\n`;\n","import { ChangeEvent, useCallback, useMemo, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport WebpImage from '@r1-frontend/ui-react/components/WebpImage';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { TState } from '~/src/store';\n\nimport * as ST from './styled';\n\nconst grade_good = '/static/images/full-buy/grade_good.png';\nconst grade_good_webp = '/static/images/full-buy/grade_good.webp';\nconst grade_bad = '/static/images/full-buy/grade_bad.png';\nconst grade_bad_webp = '/static/images/full-buy/grade_bad.webp';\n\nenum EFeedback {\n not_grade = 'not_grade',\n bad_grade = 'bad_grade',\n good_grade = 'good_grade',\n}\n\nconst Feedback = (): JSX.Element => {\n const analytics = useAnalytics();\n\n const agreementNumber = useSelector((state: TState) => (state.fullBuy.agreement.agreementNumber));\n const [feedback, setFeedback] = useState(EFeedback.not_grade);\n const [isLoading] = useState(false);\n const [message, setMessage] = useState('');\n const [isValid, setIsValid] = useState(false);\n const [startInput, setStartInput] = useState(false);\n const [isSentFeedback, setIsSentFeedback] = useState(false);\n\n const title = useMemo(() => {\n switch (feedback) {\n case EFeedback.not_grade:\n return 'Вам всё понравилось?';\n case EFeedback.bad_grade:\n return 'Будем исправляться';\n case EFeedback.good_grade:\n return 'Спасибо за вашу оценку!';\n }\n }, [feedback]);\n\n const sendGoodGrade = useCallback(() => {\n setFeedback(EFeedback.good_grade);\n analytics.feedback.positive(agreementNumber);\n }, []);\n\n const sendBadGrade = useCallback(() => {\n setFeedback(EFeedback.bad_grade);\n analytics.feedback.negative(agreementNumber);\n }, []);\n\n const sendBadGradeWithMessage = () => {\n setFeedback(EFeedback.bad_grade);\n setIsSentFeedback(true);\n analytics.feedback.negative(agreementNumber, message);\n };\n\n const onChangeMessage = (e: ChangeEvent) => {\n setStartInput(true);\n setIsValid(e.target.value !== '');\n setMessage(e.target.value);\n };\n\n return (\n \n

{title}

\n \n {feedback !== EFeedback.good_grade &&\n \n \n \n \n \n \n {feedback !== EFeedback.bad_grade && Можно было лучше}\n \n }\n {feedback !== EFeedback.bad_grade &&\n \n \n \n \n \n \n {feedback !== EFeedback.good_grade && Всё отлично}\n \n }\n \n {feedback === EFeedback.bad_grade &&\n (!isSentFeedback\n ?
\n ) => onChangeMessage(e)}\n placeholder='Можете рассказать нам всё как есть'\n name='message'\n value={message}\n isNotValid={startInput && !isValid}\n errorMessage='Введите текст сообщения'\n required\n />\n \n {'Отправить'}\n \n
\n : Спасибо за ваш отзыв!)\n }\n {isLoading && }\n
\n );\n};\n\nexport default Feedback;\n","import { LazyLoadImage } from 'react-lazy-load-image-component';\nimport styled from 'styled-components';\n\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const CardWrapper = styled.div<{ width: number }>`\n width: ${(props) => props.width}px;\n height: auto;\n display: flex;\n flex-direction: column;\n border-radius: ${BorderRadius.OuterBlockRadius};\n background-color: ${COLORS.BgSurface};\n overflow: hidden;\n`;\n\nexport const CardImage = styled(LazyLoadImage)<{ isCover: boolean }>`\n width: 100%;\n height: 134px;\n border-radius: ${BorderRadius.OuterBlockRadius} ${BorderRadius.OuterBlockRadius} 0 0;\n background-repeat: no-repeat;\n background-position: center;\n object-fit: ${(props) => props.isCover ? 'cover' : 'contain'};\n background-color: ${COLORS.BgMain};\n`;\n\nexport const CardContent = styled.div`\n width: 100%;\n padding: 12px 24px;\n display: flex;\n flex-direction: column;\n`;\n\nexport const CardTitle = styled.div`\n ${FONTS.H4};\n color: ${COLORS.TextPrimary};\n margin-bottom: 8px;\n`;\n\nexport const CardDescription = styled.div`\n ${FONTS.XS};\n color: ${COLORS.TextSecondary};\n`;\n","\nimport HtmlContentFromApi from '@r1-frontend/ui-react/components/HtmlContentFromApi';\nimport WebpImage from '@r1-frontend/ui-react/components/WebpImage';\n\nimport * as ST from './styled';\n\nexport interface ICard {\n img: string,\n webpImg: string,\n isCover: boolean,\n title: string,\n description: string,\n}\n\ninterface ICardProps {\n card: ICard,\n width: number,\n}\n\nconst Card = ({ card, width }: ICardProps): JSX.Element => {\n const { img, webpImg, title, description, isCover } = card;\n return (\n \n \n \n \n {title && {title}}\n {description && (\n \n \n {description}\n \n \n )}\n \n );\n};\n\nexport default Card;\n","import styled from 'styled-components';\n\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const CardWrapper = styled.div<{ width: number }>`\n width: ${(props) => props.width}px;\n height: 346px;\n display: flex;\n align-items: center;\n flex-direction: column;\n border-radius: ${BorderRadius.OuterBlockRadius};\n background-color: ${COLORS.BgSurface};\n overflow: hidden;\n cursor: pointer;\n`;\n\nexport const CardContent = styled.div`\n width: 129px;\n height: 145px;\n display: flex;\n align-items: center;\n flex-direction: column;\n margin-top: 104px;\n`;\n\nexport const CardCircle = styled.div`\n width: 74px;\n height: 74px;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n border-radius: 50%;\n background-color: ${COLORS.BgMain};\n margin-bottom: 16px;\n`;\n\nexport const CardArrow = styled.div<{ imgUrl: string }>`\n width: 26px;\n height: 14px;\n background-image: url('${(props) => props.imgUrl}');\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n`;\n\nexport const CardLabel = styled.div`\n ${FONTS.H4};\n color: ${COLORS.Link};\n`;\n","import * as ST from './styled';\n\nconst arrow_load_cards = '/static/images/full-buy/arrow_load_cards.svg';\n\ninterface ICardLoader {\n onClick: () => void,\n width: number,\n}\n\nconst CardLoader = ({ onClick, width }: ICardLoader): JSX.Element => {\n return (\n \n \n \n \n \n Показать все\n \n \n );\n};\n\nexport default CardLoader;\n","import styled from 'styled-components';\n\nimport { BaseButton } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const Wrapper = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n margin-bottom: 40px;\n }\n`;\n\nexport const BlockTitle = styled.div`\n ${FONTS.H3};\n color: ${COLORS.TextPrimary};\n margin-bottom: 16px;\n \n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H4};\n }\n`;\n\nexport const SwiperContainer = styled.div`\n width: 100%;\n padding: 0;\n display: flex;\n flex-direction: column;\n\n & > div:first-of-type {\n margin-left: 20px;\n }\n`;\n\nexport const BlockArray = styled.div`\n display: flex;\n gap: 16px;\n`;\n\nexport const StyledButton = styled(BaseButton)`\n ${FONTS.MediumXS};\n width: 240px;\n margin-top: 16px;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: 100%;\n margin-top: 20px;\n }\n`;\n\nexport const CardRowWrapper = styled.div<{ cardGap: number }>`\n gap: ${(props) => props.cardGap}px;\n`;\n","import Card, { ICard } from '../Card';\nimport CardLoader from '../CardLoader';\nimport * as ST from '../styled';\n\ninterface ICardRow {\n rowCards: ICard[],\n arrayCount: number,\n cardGap: number,\n cardWidth: number,\n amountInRow: number,\n rowIndex: number,\n isShowAll: boolean,\n onClick: () => void,\n}\n\nconst CardRow = ({ rowCards, arrayCount, cardGap, cardWidth, amountInRow, rowIndex, isShowAll, onClick }: ICardRow): JSX.Element => {\n\n return (\n {\n rowCards.map((card, innerIndex) => {\n const currentCardNumber = (innerIndex + 1) * (rowIndex + 1);\n const isLastCardInSecondRow = (rowIndex === 1) && (innerIndex === amountInRow - 1);\n const showCardLoad = arrayCount > currentCardNumber && isLastCardInSecondRow && !isShowAll;\n return showCardLoad\n ? \n : ;\n })\n }\n );\n};\n\nexport default CardRow;\n","import { useMemo, useRef, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport uniqBy from 'lodash/uniqBy';\nimport Link from 'next/link';\n\nimport { btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { SliderHoc } from '@r1-frontend/ui-react/components/NukaCarousel/SliderHoc';\nimport { EMediaWidth } from '@r1-frontend/ui-react/tokens/mediaWidth';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\nimport { useResizeObserver } from '@r1-frontend/shared/hooks/useResizeObserver';\n\nimport { ISubscriptionItem } from '~/src/api/common-types/sale-package';\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { USER_LOGIN_ROUTE } from '~/src/constants/routes';\nimport { selectProductsByCategory } from '~/src/features/full-buy/store/selectors/products/selectProductsByCategory';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TState } from '~/src/store';\n\nimport Card, { ICard } from './Card';\nimport CardRow from './CardRow';\n\nimport * as ST from './styled';\n\nconst shopItemTypeIDs = {\n internet: 16171,\n tvChannels: 16181,\n};\n\nconst cardWidth = 294;\nconst cardGap = 24;\n\ninterface ITariffInclude {\n showLink?: boolean,\n}\n\nconst TariffInclude = ({ showLink }: ITariffInclude): JSX.Element => {\n const parentBlock = useRef(null);\n const { width } = useResizeObserver(parentBlock);\n const [isShowAll, setIsShowAll] = useState(false);\n const isMobile = useMatchMedia(EMediaWidth.mobile);\n\n const {\n tariffPackage,\n salePackageId,\n products,\n } = useSelector((state: TState) => ({\n tariffPackage: selectCurrentTariff(state),\n salePackageId: state.fullBuy.calculatedSalePackageId,\n products: selectProductsByCategory(state, EShopCategory.Products),\n }));\n\n const {\n additionalProducts,\n subscriptions,\n isMono,\n salePackageLinks,\n } = tariffPackage || {};\n\n // Выбранный тариф с подписками \"Засмотрись\"\n const finalsalePackageLink = salePackageLinks?.filter(item => item.salePackageId === salePackageId) || [];\n const subscriptionsArray: (undefined | ISubscriptionItem)[] = [];\n\n // Получение массива подписок, которые лежат в выбранном тарифе \"Засмотрись\"\n const finalSubscriptions = finalsalePackageLink && finalsalePackageLink[0]?.subscriptions?.map((item) => finalsalePackageLink[0]\n ? finalsalePackageLink[0]?.subscriptions?.map(el => item.service_id === el.service_id && item)\n : null);\n finalSubscriptions?.map((item) => item?.map(el => subscriptionsArray.push(el ? el : undefined)));\n const filteredSubscriptionsArray = subscriptionsArray.filter(item => item);\n\n const requiredAdditionalProducts = useMemo(() => {\n const filteredProducts = additionalProducts?.filter(item => item.required);\n return uniqBy(filteredProducts, 'id');\n }, [additionalProducts]);\n\n const allTariffIncludes: ICard[] = useMemo(() => {\n const tariffIncludesResult: ICard[] = [];\n // @TODO Костыль для скрытия Мувикса\n products\n .filter(product =>\n product.props.find(prop => prop.name === 'name_micro' && prop.value?.toString().toLowerCase() !== 'тв-приставка'))\n .forEach(product => {\n const isMonoTariffWithTVShopItems = isMono && product.id === shopItemTypeIDs.tvChannels;\n if (!isMonoTariffWithTVShopItems) {\n const isCover = (product.image_width && product.image_height)\n ? product.image_width / product.image_height > 1.8\n : true;\n tariffIncludesResult.push({\n img: product?.image || '',\n webpImg: product?.image_webp || '',\n isCover,\n title: product?.title || '',\n description: product?.body || product?.description || '',\n });\n }\n });\n requiredAdditionalProducts.forEach(product => {\n const shopItem = product;\n const isCover = (shopItem && shopItem.image_width && shopItem.image_height)\n ? shopItem.image_width / shopItem.image_height > 1.8\n : true;\n tariffIncludesResult.push({\n img: shopItem?.image || '',\n webpImg: shopItem?.image_webp || '',\n isCover,\n title: shopItem?.title || '',\n description: shopItem?.body || shopItem?.description || '',\n });\n });\n {\n salePackageId && finalsalePackageLink[0]?.subscriptions\n ? filteredSubscriptionsArray.forEach(content => {\n tariffIncludesResult.push({\n img: content?.extend_image_for_full_buy || content?.image || '',\n webpImg: content?.extend_image_for_full_buy_webp || content?.image_webp || '',\n isCover: content && content?.image_width / content?.image_height > 1.8 || false,\n title: content?.title || '',\n description: content?.extend_body_for_full_buy || content?.body_for_full_buy || '',\n });\n })\n : subscriptions?.forEach(content => {\n tariffIncludesResult.push({\n img: content?.imageForFullBuy || content?.image || '',\n webpImg: content?.imageForFullBuyWebp || content?.image_webp || '',\n isCover: content?.image_width / content?.image_height > 1.8,\n title: content?.title || '',\n description: content?.extendBodyForFullBuy || content?.bodyForFullBuy || '',\n });\n });\n }\n\n return tariffIncludesResult;\n }, [subscriptions, requiredAdditionalProducts, products, isMono, salePackageId]);\n\n const amountInRow: number = useMemo(() => {\n if (width) {\n const countWithGap = Math.floor(width / (cardWidth + cardGap));\n const widthWithGap = ((cardWidth + cardGap) * countWithGap);\n const freeWidth = (width - widthWithGap) >= cardWidth;\n return freeWidth ? countWithGap + 1 : countWithGap;\n }\n return 2;\n }, [width]);\n\n const rowsCardsToShow: ICard[][] = useMemo(() => {\n const res = [];\n if (allTariffIncludes.length) {\n for (let i = 0; i < allTariffIncludes.length; i += amountInRow) {\n const chunk = allTariffIncludes.slice(i, i + amountInRow);\n res.push(chunk);\n }\n return res;\n }\n return [];\n }, [allTariffIncludes, amountInRow]);\n\n return (\n {allTariffIncludes.length > 0 && <>\n Скоро вы сможете пользоваться:\n {isMobile\n ? \n \n {allTariffIncludes.map(card => ())}\n \n \n : \n {rowsCardsToShow.map((rowCards, rowIndex) => {\n const isHideRow = !isShowAll && rowIndex > 1;\n return !isHideRow\n ? setIsShowAll(true)}\n />\n : <>;\n })}\n \n }\n }\n {Boolean(showLink) && \n \n }\n );\n};\n\nexport default TariffInclude;\n","import axios from 'axios';\n\nimport { TResponse } from '@r1-frontend/do-request/core/types';\nimport { captureQueryError } from '@r1-frontend/do-request/error';\n\ninterface IAppleSession {\n displayName: string,\n domainName: string,\n epochTimestamp: number,\n expiresAt: number,\n merchantIdentifier: string,\n merchantSessionIdentifier: string,\n nonce: string,\n operationalAnalyticsIdentifier: string,\n retries: number,\n signature: string,\n}\n\nexport type TDataResponse = TResponse;\n\n/**\n * Запрос в pages/api/authorizeApplePaySession\n */\n\nexport const fetchAuthorizeApplePaySession = async(domain: string): Promise => {\n const url = '/api/apple-pay-session';\n\n const headers = {\n 'Domain': domain,\n 'Content-Type': 'application/json',\n };\n\n try {\n const resp = await axios({\n url,\n method: 'GET',\n headers,\n });\n\n return {\n isSuccess: true,\n payload: resp.data,\n };\n } catch (error) {\n return captureQueryError(error);\n }\n};\n","/**\n * Keeps track scripts that have been requested by loadScript.\n */\nlet cachedScripts: Record> = {};\n\n/**\n * Asynchronously loads a script keeping track of which scripts have already\n * requested and loaded.\n *\n * Multiple requests to the same resource will return the same promise.\n *\n * @param src Script URL to load\n */\nexport function loadScript(src: string): Promise {\n const existing = cachedScripts[src];\n if (existing) {\n return existing;\n }\n\n const promise = new Promise((resolve, reject) => {\n // Create script\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n // Script event listener callbacks for load and error\n const onScriptLoad = (): void => {\n resolve();\n };\n\n const onScriptError = (): void => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n cleanup();\n\n // Remove from cachedScripts so that we can try loading again\n delete cachedScripts[src];\n script.remove();\n\n reject(new Error(`Unable to load script ${src}`));\n };\n\n script.addEventListener('load', onScriptLoad);\n script.addEventListener('error', onScriptError);\n\n // Add script to document body\n document.body.appendChild(script);\n\n // Remove event listeners on cleanup\n function cleanup(): void {\n script.removeEventListener('load', onScriptLoad);\n script.removeEventListener('error', onScriptError);\n }\n });\n\n cachedScripts[src] = promise;\n\n return promise;\n}\n\n/**\n * Clears the script cache. Used for testing purposes only.\n */\nexport function clearScriptCache(): void {\n cachedScripts = {};\n}\n","import style, { createGlobalStyle } from 'styled-components';\n\nexport const AppleBtnGlobalStyle = createGlobalStyle`\n apple-pay-button {\n --apple-pay-button-width: 100%;\n --apple-pay-button-height: 48px;\n --apple-pay-button-border-radius: 12px;\n --apple-pay-button-padding: 0px;\n }\n`;\n\nexport const AppleBtnWrapper = style.div`\n min-width: 250px;\n height: 48px;\n`;\n","import { useCallback, useEffect, useState } from 'react';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { getMerchantInfo, IGetMerchantInfoResponseDto } from '@r1-frontend/api-domru/api-profile/v1/pay-list/acquiring-seamless-pay-gw-list';\nimport { ICurrentCity } from '@r1-frontend/entities/City/models/ICurrentCity';\n\nimport { fetchAuthorizeApplePaySession } from '~/src/api/authorizeApplePaySession';\nimport { IS_PRODUCTION_ENVIROMENT } from '~/src/constants';\nimport { loadScript } from '~/src/helpers/load-script';\n\nimport * as ST from './styled';\n\nexport const TYPE_APPLE_TOKEN = '2';\n\nconst APPLE_PAY_BTN_SCRIPT = 'https://applepay.cdn-apple.com/jsapi/v1/apple-pay-sdk.js';\n\ninterface IMerchantInfo {\n gateway: string,\n gatewayMerchantId: string,\n samsungService: string,\n merchantId: string,\n}\n\nconst getAppleConf = (info: IMerchantInfo) => ([{\n supportedMethods: 'https://apple.com/apple-pay',\n data: {\n environment: IS_PRODUCTION_ENVIROMENT ? 'PRODUCTION' : 'TEST',\n version: 3,\n merchantIdentifier: IS_PRODUCTION_ENVIROMENT ? info.merchantId : 'example.com.store',\n merchantCapabilities: [\n 'supports3DS',\n ],\n supportedNetworks: [\n 'masterCard',\n 'visa',\n ],\n countryCode: 'RU',\n },\n}]);\n\ninterface IProps {\n currentCity: ICurrentCity,\n paySumm: number,\n onPaymentCreate: (payToken: string, type: typeof TYPE_APPLE_TOKEN) => Promise,\n}\n\nexport const ApplePayBtn = ({ currentCity, paySumm, onPaymentCreate }: IProps): JSX.Element => {\n const [isLoadedScript, setIsLoadedScript] = useState(false);\n\n const [paymentMethodData, setPaymentMethodData] = useState(null);\n\n const onPayClick = useCallback(async() => {\n if (paymentMethodData) {\n const details = {\n total: { label: 'dom.ru', amount: { currency: 'RUB', value: `${paySumm}` } },\n };\n\n const request = new PaymentRequest(paymentMethodData, details);\n\n // @ts-ignore\n request.onmerchantvalidation = async(event) => {\n const appleSession = await fetchAuthorizeApplePaySession(currentCity.domain);\n\n if (appleSession.isSuccess) {\n event.complete(appleSession.payload);\n }\n };\n\n const paymentResp = await request.show();\n\n const payToken = paymentResp?.details?.token?.paymentData; // apple токен\n\n const payResult = await onPaymentCreate(payToken || '', TYPE_APPLE_TOKEN);\n\n paymentResp.complete(payResult ? 'success' : 'fail');\n }\n }, [paymentMethodData, paySumm, onPaymentCreate, currentCity]);\n\n const initialazeClient = useCallback(async() => {\n if (!isLoadedScript) {\n try {\n await loadScript(APPLE_PAY_BTN_SCRIPT);\n setIsLoadedScript(true);\n } catch {\n return;\n }\n }\n\n const resp = await doRequest.apiProfile(getMerchantInfo());\n\n if (!resp.isSuccess) {\n return;\n }\n\n const methodData = getAppleConf(resp.payload);\n\n /* Проверка доступности оплаты, с помощью ApplePay */\n const details = {\n total: { label: 'Test purchase', amount: { currency: 'RUB', value: '0.01' } },\n };\n\n const request = new PaymentRequest(methodData, details);\n\n const canMakePayment = await request.canMakePayment();\n\n if (canMakePayment) {\n setPaymentMethodData(methodData);\n }\n }, [isLoadedScript]);\n\n useEffect(() => {\n initialazeClient();\n }, [initialazeClient]);\n\n useEffect(() => {\n if (isLoadedScript) {\n const appleBtn = document.querySelector('apple-pay-button');\n\n appleBtn?.addEventListener('click', onPayClick);\n\n return () => {\n appleBtn?.removeEventListener('click', onPayClick);\n };\n }\n }, [isLoadedScript, onPayClick]);\n\n return (\n \n \n {isLoadedScript &&\n // @ts-ignore\n \n }\n \n );\n};\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\nexport interface IGetMerchantInfoResponseDto {\n gateway: string,\n gatewayMerchantId: string,\n samsungService: string,\n merchantId: string,\n}\n\n/**\n * Платежная информация. Доступность эквайрингов.\n * https://master.api-profile.sandbox.d2c.r-one.io/docs/v1#/%D0%9F%D0%BB%D0%B0%D1%82%D1%91%D0%B6%D0%BD%D0%B0%D1%8F%20%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F/94052a780f3d251b21ef4cb91fc8050d\n */\nexport const getMerchantInfo = (): IRequest => ({\n uri: '/v1/pay-list/acquiring-seamless-pay-gw-list',\n method: 'GET',\n withProvider: true,\n withAuth: false,\n});\n","import style from 'styled-components';\n\nexport const GoogleBtnWrapper = style.div`\n min-width: 250px;\n height: 48px;\n\n .google-pay-button-container {\n width: 100%;\n height: 48px;\n }\n\n .gpay-card-info-container,\n .gpay-button {\n border-radius: 12px;\n }\n`;\n\n","import { useCallback, useEffect, useState } from 'react';\nimport GooglePayButton from '@google-pay/button-react';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { getMerchantInfo, IGetMerchantInfoResponseDto } from '@r1-frontend/api-domru/api-profile/v1/pay-list/acquiring-seamless-pay-gw-list';\n\nimport { IS_PRODUCTION_ENVIROMENT } from '~/src/constants';\n\nimport * as ST from './styled';\n\nexport const TYPE_GOOGLE_TOKEN = '1';\n\nconst MERCHANT_ID = '01297674766164485968'; // Боевой ID от гугла\n\nconst getDataRequest = (paySumm: string, info: IGetMerchantInfoResponseDto): google.payments.api.PaymentDataRequest => ({\n apiVersion: 2,\n apiVersionMinor: 0,\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n allowedCardNetworks: ['MASTERCARD', 'VISA'],\n },\n tokenizationSpecification: {\n type: 'PAYMENT_GATEWAY',\n parameters: {\n gateway: info.gateway,\n gatewayMerchantId: IS_PRODUCTION_ENVIROMENT ? info.gatewayMerchantId : 'domru',\n },\n },\n },\n ],\n merchantInfo: {\n merchantId: MERCHANT_ID,\n merchantName: 'dom.ru',\n },\n transactionInfo: {\n totalPriceStatus: 'FINAL',\n totalPriceLabel: 'Total',\n totalPrice: paySumm || '0',\n currencyCode: 'RUB',\n countryCode: 'RU',\n },\n});\n\nexport interface IGBtnProps {\n paySumm: number,\n onPaymentCreate: (payToken: string, type: typeof TYPE_GOOGLE_TOKEN) => void,\n}\n\nexport const GooglePayBtn = ({\n paySumm,\n onPaymentCreate,\n}: IGBtnProps): JSX.Element => {\n const [paymentDataRequest, setPaymentDataRequest] = useState(null);\n const [merchantInfo, setMerchantInfo] = useState(null);\n\n const initialazeClient = useCallback(async() => {\n if (!merchantInfo) {\n /* Получаем информацию по мерчанту */\n const resp = await doRequest.apiProfile(getMerchantInfo());\n\n if (!resp.isSuccess) {\n return;\n }\n\n setMerchantInfo(resp.payload);\n }\n }, [merchantInfo]);\n\n useEffect(() => {\n initialazeClient();\n }, [initialazeClient]);\n\n useEffect(() => {\n if (merchantInfo) {\n /* Заполняем первоначальные настройки */\n const paymentData = getDataRequest(`${paySumm}`, merchantInfo);\n\n setPaymentDataRequest(paymentData);\n }\n }, [paySumm, merchantInfo]);\n\n const onPayClick = useCallback((ev) => {\n if (!paySumm) {\n ev.preventDefault();\n }\n }, [paySumm]);\n\n const onLoadPaymentData = useCallback((paymentData) => {\n const payToken = paymentData?.paymentMethodData?.tokenizationData?.token;\n onPaymentCreate(payToken || '', TYPE_GOOGLE_TOKEN);\n }, [onPaymentCreate]);\n\n return (\n <>\n {merchantInfo && paymentDataRequest &&\n \n \n \n }\n \n );\n};\n","import styled from 'styled-components';\n\nimport { BaseButton } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\n\nexport const PaymentVariants = styled.div`\n flex-direction: column;\n margin-top: 16px;\n\n @media (min-width: ${wideBreakpoints.mobile}) {\n width: calc(100% + 4px);\n margin-left: -8px;\n }\n`;\n\nexport const BtnWrap = styled.div`\n flex-direction: column;\n margin-top: 20px;\n width: 100%;\n\n & > * {\n margin-bottom: 12px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n`;\n\nexport const Button = styled(BaseButton)`\n width: 100%;\n`;\n","import { useCallback, useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { captureException } from '@sentry/node';\nimport { useRouter } from 'next/router';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { IRegPayCard } from '@r1-frontend/api-domru/api-pay/v1/card/dto/IRegPayCard';\nimport { makePaymentUnauth } from '@r1-frontend/api-domru/api-pay/v1/payment/add';\nimport { IRegisterPayment } from '@r1-frontend/api-domru/api-pay/v1/payment/dto/IRegisterPayment';\n\nimport { btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\n\nimport { ApplePayBtn, TYPE_APPLE_TOKEN } from '~/src/components/ApplePayBtn';\nimport { GooglePayBtn } from '~/src/components/GooglePayBtn';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { getABNVariant } from '~/src/helpers/abn-tests';\nimport { TState } from '~/src/store';\nimport selectProviderId from '~/src/store/selectors/selectProviderId';\n\nimport * as ST from './styled';\n\nconst DISPLAY_GOOGLE_BTN = 'display_google_btn';\nconst DISPLAY_APPLE_BTN = 'display_apple_btn';\n\ninterface IPaymentVariantsProps {\n paySumm: number,\n agreementNumber: number | null | undefined,\n isLastStep?: boolean,\n}\n\nexport const PaymentVariants: React.FC = ({\n paySumm,\n agreementNumber,\n isLastStep = false,\n}): JSX.Element => {\n const analytics = useAnalytics();\n\n const [isGoogleBtnDisplay, setGoogleBtnDisplay] = useState(false);\n const [isAppleBtnDisplay, setAppleBtnDisplay] = useState(false);\n\n const router = useRouter();\n const { providerId, currentCity } = useSelector((state: TState) => ({\n providerId: selectProviderId(state),\n currentCity: state.city.currentCity,\n }));\n\n const onPaymentMake = useCallback(async(data: Partial) => {\n router.push({\n pathname:'/payments',\n query: {\n pay: 'pay_token',\n MD: data.gateTransactionId,\n PaReq: data.PaReq,\n TermUrl: data.TermUrl,\n acsUrl: data.acsUrl,\n billingTransactionId: data.billingTransactionId,\n },\n });\n }, [router]);\n\n const onPaymentCreate = useCallback(async(paymentToken, tokenType) => {\n if (!providerId && !agreementNumber && !paySumm) {\n return false;\n }\n\n try {\n const typeAggreement = 1;\n\n const token = tokenType === TYPE_APPLE_TOKEN\n ? window.btoa(JSON.stringify(paymentToken))\n : window.btoa(paymentToken);\n\n if (providerId && paymentToken) {\n const params = {\n number_type: typeAggreement,\n number_value: agreementNumber,\n payment_token: token,\n payment_token_type: tokenType,\n payment_value: paySumm,\n payment_source: 1,\n return_url: location.origin + '/payments-response?',\n };\n\n const paymentResult = await doRequest.apiPay(\n makePaymentUnauth(providerId, params),\n );\n if (paymentResult.isSuccess) {\n const data = paymentResult.payload;\n\n onPaymentMake(\n data?.regStatus !== 0 ? data : {},\n );\n }\n }\n } catch (err) {\n captureException(err);\n }\n }, [currentCity, providerId, paySumm, agreementNumber, onPaymentMake]);\n\n useEffect(() => {\n const abnGoogleVariant = getABNVariant(DISPLAY_GOOGLE_BTN);\n\n const abnAppleVariant = getABNVariant(DISPLAY_APPLE_BTN);\n\n if (abnGoogleVariant === 'display') {\n setGoogleBtnDisplay(true);\n }\n\n if (abnAppleVariant === 'display') {\n setAppleBtnDisplay(true);\n }\n }, []);\n\n const onGoToPayment = useCallback(() => {\n analytics.final.clickPayment();\n router.push({\n pathname:'/payments',\n query: {\n pay: 'online',\n agreement: agreementNumber,\n s: paySumm,\n },\n });\n }, []);\n\n return (\n <>\n {paySumm &&\n \n {isGoogleBtnDisplay &&\n \n }\n {isAppleBtnDisplay &&\n \n }\n \n \n }\n \n );\n};\n","import styled, { css } from 'styled-components';\n\nimport { BaseButton } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\n// @ts-ignore\nimport Select from '@r1-frontend/ui-react/components/select/titleSelect';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const StyledTicketWrap = styled.div`\n flex-direction: column;\n width: 100%;\n\n & > div {\n margin-bottom: 20px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n`;\n\nexport const StyledTicket = styled.div`\n background-color: ${COLORS.BgSurface};\n display: flex;\n flex-direction: column;\n max-width: 480px;\n width: 100%;\n border-radius: ${BorderRadius.componentRadius};\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n max-width: none;\n }\n`;\n\nexport const StyledTicketTitle = styled.p`\n ${FONTS.H3};\n color: ${COLORS.TextPrimary};\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n ${FONTS.H5};\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n ${FONTS.H3};\n }\n\n @media (max-width: 432px) {\n ${FONTS.H5};\n }\n`;\n\nexport const StyledTicketList = styled.div<{ marginTop?: string, marginTopMobile?: string }>`\n display: flex;\n flex-direction: column;\n row-gap: 8px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n padding-right: 32px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n padding-right: 0;\n }\n`;\n\ninterface TicketItemProps {\n type: 'mobileRow' | 'mobileColumn',\n marginBottom?: string,\n isEquipment?: boolean,\n successStatus?: boolean,\n isLeasingPrice?: boolean,\n}\n\nexport const StyledTicketItem = styled.div`\n width: 100%;\n display: flex;\n justify-content: space-between;\n position: relative;\n margin-top: ${props => (props.isEquipment && props.type === 'mobileColumn') ? '8px' : props.isEquipment ? '0' : '10px'};\n margin-bottom: ${props => props.marginBottom ?? '0'};\n\n ${p => p.isEquipment && css`\n &:last-child {\n border-top: 2px solid ${COLORS.TextSecondary};\n margin-top: 24px;\n }\n `}\n\n ${p => p.successStatus && css`\n &:last-child {\n border-top: none;\n margin-top: 0;\n }\n `}\n\n ${p => p.successStatus && css`\n &:last-child {\n margin-top: ${(p: TicketItemProps) => p.isLeasingPrice ? '8px' : '24px'};\n }\n `};\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n justify-content: ${(p: TicketItemProps) => (!p.isEquipment && p.type === 'mobileColumn') ? 'flex-start' : 'space-between'};\n align-items: flex-start;\n flex-direction: ${(p: TicketItemProps) => (!p.isEquipment && p.type === 'mobileColumn') ? 'column' : 'row'};\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n justify-content: space-between;\n align-items: normal;\n flex-direction: row;\n }\n \n`;\n\ninterface TicketItemTextProps {\n isName: boolean,\n type: 'title' | 'final' | 'item' | 'withPlan',\n isEquipment?: boolean,\n successStatus?: boolean,\n isLeasingPrice?: boolean,\n}\n\nexport const StyledTicketItemText = styled.p`\n display: flex;\n flex-direction: column;\n max-width: ${(p: TicketItemTextProps) => p.isName ? '300px' : 'none'};\n \n ${(p: TicketItemTextProps) => (p.type === 'title' || p.type === 'final') ? FONTS.M : FONTS.S};\n\n color: ${(p: TicketItemTextProps) => (p.type === 'title' || p.type === 'final') ? COLORS.TextPrimary : COLORS.TextInfo};\n\n ${p => p.isEquipment && p.type === 'final' && css`\n margin-top: 8px;\n `}\n\n ${p => p.isEquipment && p.type === 'title' && css`\n margin-top: 24px;\n flex-direction: row;\n `}\n\n ${p => p.successStatus && css`\n margin-top: ${(p: TicketItemTextProps) => p.isLeasingPrice ? '24px' : '0'};\n `}\n\n ${p => p.isEquipment && p.type === 'final' && css`\n ${FONTS.H4};\n `};\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n ${p => !p.isEquipment && css`\n ${FONTS.XS};\n `}\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n ${p => !p.isEquipment && css`\n ${FONTS.S};\n `}\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${(p: TicketItemTextProps) => {\n switch (!p.isEquipment && p.type) {\n case 'final': {\n return FONTS.S;\n }\n case 'item': {\n return FONTS.XS;\n }\n case 'title': {\n return FONTS.XS;\n }\n }\n }};\n }\n`;\n\nexport const StyledTicketItemWithActionNameBlock = styled.div<{ isEquipment?: boolean }>`\n display: flex;\n flex-direction: column;\n max-width: ${p => p.isEquipment ? '260px' : '282px'};\n width: 100%;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${p => p.isEquipment && css`\n max-width: 200px;\n `}\n }\n`;\n\nexport const StyledTicketItemWithActionName = styled.div<{ isEquipment?: boolean }>`\n ${FONTS.S};\n color: ${COLORS.TextInfo};\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n ${p => !p.isEquipment && css`\n ${FONTS.XS};\n `}\n padding-right: 20px;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n ${FONTS.S};\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.XS};\n }\n`;\n\nexport const StyledTicketItemWithActionPlan = styled(Select)`\n max-width: 260px;\n\n & div:nth-child(2) > div:last-child {\n display: none;\n }\n`;\n\nexport const StyledTicketItemWithActionValue = styled.p`\n ${FONTS.M};\n color: ${COLORS.TextPrimary};\n`;\n\nexport const StyledTicketItemWithActionButton = styled.div<{ isLaptop?: boolean }>`\n position: absolute;\n cursor: pointer;\n right: -29px;\n top: 4px;\n\n img {\n width: 16px;\n height: 16px;\n }\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n right: ${p => p.isLaptop ? '-29px' : '0'};\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n right: 0;\n }\n`;\n\nexport const StyledPlanSelect = styled(Select)`\n margin-bottom: 10px;\n`;\n\nexport const Button = styled(BaseButton)`\n width: 100%;\n margin-top: 24px;\n`;\n\nexport const LkWrap = styled.div`\n padding: 0 24px;\n`;\n","import { RubleSymbol } from '@r1-frontend/ui-react/experimental/purchase/cost/Cost/RubleSymbol';\n\nimport InfoBlock from '~/src/features/full-buy/InfoBlock';\nimport { PaymentVariants } from '~/src/features/full-buy/PaymentVariants';\n\nimport OrderSummary from '../containers/OrderSummary';\n\nimport * as ST from './styled';\n\ninterface IProps {\n totalCost: number,\n agreementNumber?: number | null,\n hasError?: boolean,\n}\n\nexport const TicketFinal = (\n {\n totalCost,\n agreementNumber,\n hasError,\n }: IProps,\n): JSX.Element => {\n return (\n \n \n \n : undefined}\n >\n \n \n );\n};\n","import styled, { css } from 'styled-components';\n\nimport WideContainer, { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\n\nexport const Block = styled.div`\n display: block;\n width: 100%;\n \n & > div {\n display: block;\n }\n`;\n\n/**\n * Двухколоночный шаблон для страницы\n */\nexport const DoubleColumnLayout = styled(WideContainer)<{ isHide?: boolean }>`\n display: grid;\n flex-wrap: nowrap;\n grid-template-columns: 1fr 480px;\n gap: 32px;\n max-width: 100%;\n\n ${({ isHide = false }) => isHide && css`\n opacity: 0;\n height: 0;\n overflow: hidden;\n ` };\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n grid-template-columns: 1fr 384px;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n grid-template-columns: 100%;\n }\n`;\n\nexport const StageWrap = styled.section`\n display: flex;\n flex-direction: column;\n row-gap: 16px;\n`;\n\nexport const Section = styled.section`\n width: 100%;\n display: flex;\n flex-direction: column;\n`;\n\nexport const BlocksWrapper = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n row-gap: 16px;\n`;\n\nexport const BtnWrap = styled.div`\n width: 100%;\n flex-direction: column;\n align-items: flex-start;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n align-items: stretch;\n }\n`;\n","import React, { useContext, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\n\nimport { FullBuyContext, TFullBuyContextProperties } from '~/src/features/full-buy/analytics/context';\nimport useOldAddressFormNextButton from '~/src/features/full-buy/containers/GoToNextStepButton/useOldAddressFormNextButton';\nimport usePrivateSectorEquipmentNextButton from '~/src/features/full-buy/containers/GoToNextStepButton/usePrivateSectorEquipmentNextButton';\nimport getStepForNextButton from '~/src/features/full-buy/store/selectors/nextButton/getStepForNextButton';\nimport { ESteps } from '~/src/features/full-buy/types';\n\nimport useContactsNextButton from './useContactsNextButton';\nimport useEquipmentsNextButton from './useEquipmentsNextButton';\nimport useEquipmentsTvNextButton from './useEquipmentsTvNextButton';\nimport useStubNextButton from './useStubNextButton';\nimport useSubscriptionsNextButton from './useSubscriptionsNextButton';\nimport useTariffInfoNextButton from './useTariffInfoNextButton';\nimport useUnifiedAddressFormNextButton from './useUnifiedAddressFormNextButton';\n\nconst hooksList = {\n [ESteps.tariffInfo]: useTariffInfoNextButton,\n [ESteps.subscriptions]: useSubscriptionsNextButton,\n [ESteps.equipments]: useEquipmentsNextButton,\n [ESteps.equipmentsTv]: useEquipmentsTvNextButton,\n [ESteps.equipmentsCottage]: usePrivateSectorEquipmentNextButton,\n /**\n * We have a two address input screens by one AB test (one-line input, old input).\n * The AB test returns a boolean value, so in this case for the step we have added `_${Number(boolean)}` variable\n * to identify which screen is being and which hook should be used.\n */\n [`${ESteps.address}_1`]: useUnifiedAddressFormNextButton,\n [`${ESteps.address}_0`]: useOldAddressFormNextButton,\n [ESteps.contacts]: useContactsNextButton,\n [ESteps.agreementCreated]: useStubNextButton,\n [ESteps.timeSlots]: useStubNextButton,\n [ESteps.final]: useStubNextButton,\n};\n\nconst GoToNextStepButton = (): JSX.Element | null => {\n const { isVillage } = useContext(FullBuyContext);\n const step = useSelector(getStepForNextButton(isVillage));\n const useDynamicHook = useMemo(() => {\n return (step && step in hooksList) ? hooksList[step] : useStubNextButton;\n }, [step]);\n\n const { children, doNotDisplay = false, ...props } = useDynamicHook();\n\n if (doNotDisplay) {\n return null;\n }\n\n return \n \n ;\n};\n\nexport default GoToNextStepButton;\n","import React, { useMemo } from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport AgreementInfo from '~/src/features/full-buy/AgreementInfo';\nimport CallbackContacts from '~/src/features/full-buy/CallbackContacts';\nimport Feedback from '~/src/features/full-buy/Feedback';\nimport { calculateTotalPrices } from '~/src/features/full-buy/functions';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport TariffInclude from '~/src/features/full-buy/TariffInclude';\nimport { TicketFinal } from '~/src/features/full-buy/TicketFinal';\nimport { TState } from '~/src/store';\n\nimport * as S from '~/src/features/full-buy/containers/pages/styled';\n\nexport const TiketContainerFinal = (): JSX.Element => {\n const {\n slot,\n selectedTariff,\n products,\n agreementData,\n } = useSelector((state: TState) => ({\n slot: state.fullBuy.slot,\n selectedTariff: selectCurrentTariff(state),\n products: state.fullBuy.products,\n agreementData: state.fullBuy.agreement,\n }), shallowEqual);\n\n const isLaptop = useMatchMediaByWidth(wideBreakpoints.laptop);\n\n const { additionalProducts, price, promoPrice, connectionPrice } = selectedTariff || {};\n\n const { monthlyPayment, oncePayment } = useMemo(() => {\n return calculateTotalPrices(promoPrice || price, connectionPrice?.final, products);\n }, [price, promoPrice, connectionPrice?.final, additionalProducts, products]);\n\n const dateTime = slot?.date;\n\n return (\n <>\n \n\n \n \n \n\n {slot && agreementData?.agreementNumber && }\n\n {isLaptop &&\n <>\n \n

Если остались вопросы

\n \n \n }\n \n );\n};\n","import { batch } from 'react-redux';\n\nimport { setPrevStep, setStep } from '~/src/features/full-buy/store/actions';\nimport { TDispatch, TGetState } from '~/src/store';\n\nexport const goToNextStep = () => (dispatch: TDispatch, getState: TGetState) => {\n const state = getState().fullBuy;\n\n const {\n stepIndex,\n flow,\n } = state;\n\n if (!flow) {\n return;\n }\n\n const newIndex = stepIndex + 1;\n\n if (newIndex <= flow.steps.length) {\n batch(() => {\n dispatch(setPrevStep(stepIndex));\n dispatch(setStep(newIndex));\n });\n }\n};\n","import { createSelector } from 'reselect';\n\nimport { GIGABIT_SPEED } from '~/src/features/full-buy/consts';\nimport { TState } from '~/src/store';\n\nimport { ETariffFilters } from '../initialState';\nimport { IFullBuyTariff } from '../tariffTransformer';\n\nconst MEGABIT_SPEED = 100;\n\n// Возвращает тарифы по переданным фильтрам\nconst getfilteredPack = (packages: IFullBuyTariff[], filterType: ETariffFilters) => {\n if (filterType === ETariffFilters.MONO) {\n return packages?.filter((pack) => pack.isMono);\n }\n\n if (filterType === ETariffFilters.KP) {\n return packages?.filter((pack) => !pack.isMono);\n }\n\n if (filterType === ETariffFilters.SPEED100) {\n return packages?.filter((el) => el.available_on_address_restrict || el.speed <= MEGABIT_SPEED);\n }\n\n if (filterType === ETariffFilters.SPEED_LESS_1000) {\n return packages?.filter((el) => el.speed < GIGABIT_SPEED);\n }\n\n return packages;\n};\n\n// Возвращает тарифы по указанной линейке\nconst getTariffsByTariffLine = (packages: IFullBuyTariff[], tariffLineAlias: string) => {\n if (!tariffLineAlias) {\n return packages;\n }\n\n return packages.filter(tariffPack => tariffPack.tariffLineAlias.includes(tariffLineAlias));\n};\n\n// Выбирает тарифы отобранные по фильтрам и линейкам\nexport const selectFilteredTariffs = createSelector(\n [\n (state: TState) => state.fullBuy,\n ],\n ({ tariffs: tariffPackages, tariffLineAlias, filters }): IFullBuyTariff[] => {\n let filteredPackages: IFullBuyTariff[] = tariffPackages;\n\n if (tariffLineAlias) {\n filteredPackages = getTariffsByTariffLine(tariffPackages, tariffLineAlias);\n }\n\n filters?.forEach((filterType) => {\n filteredPackages = getfilteredPack(filteredPackages, filterType);\n });\n\n return filteredPackages;\n },\n);\n","import { SyntheticEvent, useMemo } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { checkAddress } from '@r1-frontend/entities/ContactAddress/actions/checkAddress';\nimport { setAddressEdit } from '@r1-frontend/entities/ContactAddress/actions/setAddressEdit';\nimport { EAvailableSpeed } from '@r1-frontend/entities/ContactAddress/initialState';\nimport { isAddressFilled } from '@r1-frontend/entities/ContactAddress/selectors/isAddressFilled';\nimport { EVerificationStatus } from '@r1-frontend/entities/ContactDetail/initialState';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { GIGABIT_SPEED, MEGABIT_SPEED } from '~/src/features/full-buy/consts';\nimport { TNextButtonHook } from '~/src/features/full-buy/containers/GoToNextStepButton/types';\nimport { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { selectFilteredTariffs } from '~/src/features/full-buy/store/selectors/selectFilteredTariffs';\nimport { TState } from '~/src/store';\n\nconst useOldAddressFormNextButton = (): TNextButtonHook => {\n const analytics = useAnalytics();\n const dispatch = useDispatch();\n\n const {\n selectedTariff,\n addressStatus,\n isEdit,\n isAgree,\n isConfirmButtonActive,\n verifiedAddressData: {\n isHouseConnected,\n isHouseCottage,\n availableSpeed,\n },\n } = useSelector((state: TState) => ({\n selectedTariff: selectCurrentTariff(state),\n filteredTariffs: selectFilteredTariffs(state),\n addressStatus: state.contactAddress.verifiedAddressData.status,\n isEdit: state.contactAddress.isEdit,\n isAgree: state.contactAddress.isAgree,\n isConfirmButtonActive: isAddressFilled(state),\n\n verifiedAddressData: state.contactAddress.verifiedAddressData,\n }), shallowEqual);\n\n const { speed: tariffSpeed = null } = selectedTariff || {};\n\n const addressIsVerified = addressStatus === EVerificationStatus.verified;\n\n const tariffSpeedAcrossEnum = useMemo(() => {\n if (tariffSpeed === null) {\n return null;\n }\n\n if (tariffSpeed >= GIGABIT_SPEED) {\n return EAvailableSpeed.more1000;\n }\n\n if (tariffSpeed > MEGABIT_SPEED) {\n return EAvailableSpeed.between100and1000;\n }\n\n return EAvailableSpeed.lessOrEqual100;\n }, [tariffSpeed]);\n\n const shouldConnect = isHouseConnected && (\n (Number(tariffSpeedAcrossEnum) > EAvailableSpeed.lessOrEqual100 && Number(tariffSpeedAcrossEnum) <= availableSpeed) ||\n (Number(tariffSpeedAcrossEnum) === EAvailableSpeed.lessOrEqual100)\n );\n\n if (addressStatus === EVerificationStatus.notVerified || isEdit) {\n return {\n disabled: !isConfirmButtonActive || !isAgree,\n onClick: (e: SyntheticEvent) => {\n e.stopPropagation();\n dispatch(checkAddress(true, selectedTariff?.isMono));\n dispatch(setAddressEdit(false));\n analytics.address.checkClicked();\n },\n children: 'Подтвердить',\n };\n } else {\n return {\n disabled: !shouldConnect || !isConfirmButtonActive || !isAgree || !addressIsVerified || !isHouseConnected || isHouseCottage,\n onClick: (e: SyntheticEvent) => {\n e.stopPropagation();\n analytics.address.continueClicked();\n dispatch(goToNextStep());\n },\n children: 'Продолжить',\n };\n }\n};\n\nexport default useOldAddressFormNextButton;\n","import { createSelector } from 'reselect';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { TState } from '~/src/store';\n\n/** Возвращает выбранные shopItems, по категории\n * @param state {TState} - стор\n * @param category {string} - категория товара\n */\nexport const getSelectedProductsByCategory = (category?: EShopCategory) => createSelector(\n [\n (state: TState) => ({ items: state.fullBuy.products, category }),\n ],\n ({ items, category }) => {\n if (!items) {\n return [];\n }\n\n return category\n ? items.filter(item => item.category === category && item.quantity > 0)\n : items.filter(item => item.quantity > 0);\n },\n);\n","import { SyntheticEvent } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { TNextButtonHook } from '~/src/features/full-buy/containers/GoToNextStepButton/types';\nimport { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport { getSelectedProductsByCategory } from '~/src/features/full-buy/store/selectors/products/getSelectedProductsByCategory';\n\nconst useEquipmentsTvNextButton = (): TNextButtonHook => {\n const analytics = useAnalytics();\n const dispatch = useDispatch();\n\n const privateSectorEquipments = useSelector(getSelectedProductsByCategory(EShopCategory.PrivateSectorEquipment));\n const hasSelected = privateSectorEquipments.length > 0;\n\n return {\n disabled: !hasSelected,\n onClick: (e: SyntheticEvent) => {\n e.stopPropagation();\n analytics.equipment.clickContinue();\n dispatch(goToNextStep());\n },\n children: hasSelected ? 'Продолжить' : 'Выберите оборудование',\n };\n};\n\nexport default useEquipmentsTvNextButton;\n","export const ADDRESS_VERIFICATION_SINGLE_INPUT = {\n testName: 'address_verification_single_input',\n variants: {\n on: 'new_address_verification',\n off: 'old_address_verification',\n },\n};\n","import { ADDRESS_VERIFICATION_SINGLE_INPUT } from '~/src/features/full-buy/constants/abnTest';\nimport { getABNVariant } from '~/src/helpers/abn-tests';\n\nconst isOneLineAddressScreen = (): boolean => {\n return getABNVariant(ADDRESS_VERIFICATION_SINGLE_INPUT.testName) === ADDRESS_VERIFICATION_SINGLE_INPUT.variants.on;\n};\n\nexport default isOneLineAddressScreen;\n","import { createSelector } from 'reselect';\n\nimport isOneLineAddressScreen from '~/src/features/full-buy/helpers/ab/isOneLineAddressScreen';\nimport { ESteps } from '~/src/features/full-buy/types';\nimport { TState } from '~/src/store';\n\nconst getStep = (state: TState) => state.fullBuy.stepIndex;\nconst getFlow = (state: TState) => state.fullBuy.flow;\n\nconst getStepForNextButton = (isVillage = false) => createSelector(\n [getStep, getFlow],\n (stepIndex, flow) => {\n const isOneLineAddressFormScreen = isOneLineAddressScreen() || isVillage;\n let _step = String(flow?.steps[stepIndex]);\n\n if (_step === ESteps.address) {\n _step = `${_step}_${Number(isOneLineAddressFormScreen)}`;\n }\n\n return _step;\n },\n);\n\nexport default getStepForNextButton;\n","import { createSelector } from 'reselect';\n\nimport { selectIsPhoneConfirmed } from '@r1-frontend/entities/ContactDetail/selectors/selectIsPhoneConfirmed';\n\nimport { TState } from '~/src/store';\n\nconst getStateForContactsButton = createSelector(\n [\n selectIsPhoneConfirmed,\n (state: TState) => state.contactDetails.editedPhone.length < 11,\n ],\n (isPhoneConfirmed, isConfirmButtonDisabled) => ({\n isPhoneConfirmed,\n disabled: isConfirmButtonDisabled,\n }),\n);\n\nexport default getStateForContactsButton;\n","import { SyntheticEvent } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { TNextButtonHook } from '~/src/features/full-buy/containers/GoToNextStepButton/types';\nimport { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport getStateForContactsButton from '~/src/features/full-buy/store/selectors/nextButton/getStateForContactsButton';\nimport { showPopup } from '~/src/store/reducers/popups/actions';\n\nconst popupId = 'confirmPopup';\n\nconst useContactsNextButton = (): TNextButtonHook => {\n const dispatch = useDispatch();\n const analytics = useAnalytics();\n\n const {\n isPhoneConfirmed,\n disabled,\n } = useSelector(getStateForContactsButton);\n\n return {\n disabled,\n onClick: (e: SyntheticEvent) => {\n e.stopPropagation();\n if (isPhoneConfirmed) {\n dispatch(goToNextStep());\n } else {\n analytics.contacts.openVerification();\n dispatch(showPopup(popupId));\n }\n analytics.contacts.submitVerificationForm();\n },\n children: 'Продолжить',\n };\n};\n\nexport default useContactsNextButton;\n","import { createSelector } from 'reselect';\n\nimport { TState } from '~/src/store';\n\n/** Есть ли добавленное оборудование (не учитывает обязательное)\n * @param state {TState} - стор\n */\nexport const isHaveSelectedProducts = createSelector(\n [\n (state: TState) => state.fullBuy.products,\n ],\n (products) => !!products?.some(product => product.quantity > 0),\n);\n","import { SyntheticEvent } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { TNextButtonHook } from '~/src/features/full-buy/containers/GoToNextStepButton/types';\nimport { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport { isHaveSelectedProducts } from '~/src/features/full-buy/store/selectors/products/isHaveSelectedProducts';\n\nconst useEquipmentsNextButton = (): TNextButtonHook => {\n const analytics = useAnalytics();\n const dispatch = useDispatch();\n\n const hasProducts = useSelector(isHaveSelectedProducts);\n\n return {\n disabled: false,\n onClick: (e: SyntheticEvent) => {\n e.stopPropagation();\n if (hasProducts) {\n analytics.equipment.chooseEquipmentContinue();\n } else {\n analytics.equipment.clickContinue();\n }\n dispatch(goToNextStep());\n },\n children: hasProducts ? 'Продолжить' : 'Мне не нужен роутер',\n };\n};\n\nexport default useEquipmentsNextButton;\n","import { SyntheticEvent } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { TNextButtonHook } from '~/src/features/full-buy/containers/GoToNextStepButton/types';\nimport { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport { getSelectedProductsByCategory } from '~/src/features/full-buy/store/selectors/products/getSelectedProductsByCategory';\n\nconst useEquipmentsTvNextButton = (): TNextButtonHook => {\n const analytics = useAnalytics();\n const dispatch = useDispatch();\n\n const selectedDecoders = useSelector(getSelectedProductsByCategory(EShopCategory.Decoders));\n\n return {\n disabled: false,\n onClick: (e: SyntheticEvent) => {\n e.stopPropagation();\n analytics.equipment.clickContinue();\n dispatch(goToNextStep());\n },\n children: selectedDecoders.length ? 'Продолжить' : 'Продолжить без приставки',\n };\n};\n\nexport default useEquipmentsTvNextButton;\n","import { SyntheticEvent } from 'react';\n\nimport { TNextButtonHook } from '~/src/features/full-buy/containers/GoToNextStepButton/types';\n\nconst useStubNextButton = (): TNextButtonHook => ({\n disabled: false,\n onClick: (e: SyntheticEvent) => {\n e.stopPropagation();\n return;\n },\n children: 'need to implement action',\n doNotDisplay: true,\n});\n\nexport default useStubNextButton;\n","import { createSelector } from 'reselect';\n\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TState } from '~/src/store';\n\nconst getSubscriptionsWithConditions = createSelector(\n [\n selectCurrentTariff,\n (state: TState) => state.fullBuy.subscriptions,\n (state: TState) => state.fullBuy.selectedSubscriptions,\n ],\n (tariff, subscriptions, selectedSubscriptions) => {\n\n if (tariff && subscriptions && tariff.sale_package_id in subscriptions) {\n const needToSelect = Number(tariff?.subscriptionsSummary?.find(s => tariff.speed === s.speed)?.cnt || 1);\n const leftToSelect = needToSelect - selectedSubscriptions.length;\n\n return {\n subscriptions: subscriptions[tariff.sale_package_id].items,\n selected: selectedSubscriptions,\n needToSelect,\n leftToSelect,\n tariffName: tariff.tariff_name,\n };\n } else {\n return {\n subscriptions: [],\n selected: [],\n needToSelect: 0,\n leftToSelect: 0,\n tariffName: '',\n };\n }\n },\n);\n\nexport default getSubscriptionsWithConditions;\n","import { SyntheticEvent } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { TNextButtonHook } from '~/src/features/full-buy/containers/GoToNextStepButton/types';\nimport { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport getSubscriptionsWithConditions from '~/src/features/full-buy/store/selectors/getSubscriptionsWithConditions';\n\nconst subscriptionPlural = getPluralize(['подписку', 'подписки', 'подписок']);\n\nconst useSubscriptionsNextButton = (): TNextButtonHook => {\n const analytics = useAnalytics();\n const dispatch = useDispatch();\n\n const { leftToSelect, tariffName } = useSelector(getSubscriptionsWithConditions);\n\n return {\n disabled: Boolean(leftToSelect),\n onClick: (e: SyntheticEvent) => {\n e.stopPropagation();\n analytics.tariff.choose(tariffName);\n\n dispatch(goToNextStep());\n },\n children: leftToSelect ? `Выберите ${leftToSelect} ${subscriptionPlural(leftToSelect)}` : 'Продолжить',\n };\n};\n\nexport default useSubscriptionsNextButton;\n","import { createSelector } from 'reselect';\n\nimport getSubscriptionsWithConditions from '~/src/features/full-buy/store/selectors/getSubscriptionsWithConditions';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TState } from '~/src/store';\n\nconst getStateForTariffInfoButton = createSelector(\n [\n getSubscriptionsWithConditions,\n selectCurrentTariff,\n (state: TState) => state.fullBuy._backgroundLoading,\n ],\n (subscriptions, tariff, loading) => ({\n subscriptions,\n tariff,\n loading,\n }),\n);\n\nexport default getStateForTariffInfoButton;\n","import { SyntheticEvent } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { TNextButtonHook } from '~/src/features/full-buy/containers/GoToNextStepButton/types';\nimport { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport getStateForTariffInfoButton from '~/src/features/full-buy/store/selectors/nextButton/getStateForTariffInfoButton';\n\nconst subscriptionPlural = getPluralize(['подписку', 'подписки', 'подписок']);\n\nconst useTariffInfoNextButton = (): TNextButtonHook => {\n const dispatch = useDispatch();\n const analytics = useAnalytics();\n\n const { subscriptions, tariff, loading } = useSelector(getStateForTariffInfoButton);\n\n return {\n disabled: loading || !tariff || Boolean(subscriptions.leftToSelect),\n onClick: (e: SyntheticEvent) => {\n e.stopPropagation();\n analytics.tariff.choose(tariff?.tariff_name);\n dispatch(goToNextStep());\n },\n children: subscriptions.subscriptions.length > 0 && subscriptions.leftToSelect\n ? `Выберите ${subscriptions.leftToSelect} ${subscriptionPlural(subscriptions.leftToSelect)}`\n : 'Перейти к оформлению',\n };\n};\n\nexport default useTariffInfoNextButton;\n","import { SyntheticEvent, useContext } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport submit from '@r1-frontend/unified-address-form/actions/submit';\nimport { TSubmitButtonResult } from '@r1-frontend/unified-address-form/containers/SubmitButton';\nimport { Ctx as UnifiedAddressFormContext } from '@r1-frontend/unified-address-form/Ctx';\nimport * as unifiedAddressFormHooks from '@r1-frontend/unified-address-form/hooks';\nimport getSubmitButtonProps from '@r1-frontend/unified-address-form/selectors/getSubmitButtonProps';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { TNextButtonHook } from '~/src/features/full-buy/containers/GoToNextStepButton/types';\nimport { setAddress, updateConnectionCostForSelectedTariff } from '~/src/features/full-buy/store/actions';\nimport { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport getAddressCheckingResult from '~/src/features/full-buy/store/selectors/getAddressCheckingResult';\n\nconst useUnifiedAddressFormNextButton = (): TNextButtonHook => {\n const analytics = useAnalytics();\n const dispatch = useDispatch();\n\n const checkingResult = useSelector(getAddressCheckingResult);\n\n const { analytics: unifiedAddressAnalytics } = useContext(UnifiedAddressFormContext);\n const uafDispatch = unifiedAddressFormHooks.useCtxDispatch();\n const submitButtonProps = unifiedAddressFormHooks.useCtxSelector(getSubmitButtonProps);\n\n const onAddressConfirmedCallback = (result: TSubmitButtonResult) => {\n dispatch(setAddress({\n address: result.address,\n isConnectionAvailable: result.isConnectionAvailable,\n isTariffAvailable: Boolean(result.isTariffAvailableForActivation),\n // @ts-ignore\n checkingResult: result,\n }));\n\n if (result.address.connectionCost) {\n dispatch(updateConnectionCostForSelectedTariff(result.address.connectionCost));\n }\n };\n\n if (!checkingResult.isChecked) {\n return {\n disabled: submitButtonProps.disabled,\n onClick: (e: SyntheticEvent) => {\n e.stopPropagation();\n uafDispatch(submit(onAddressConfirmedCallback, unifiedAddressAnalytics));\n },\n children: 'Проверить адрес',\n\n };\n } else {\n return {\n doNotDisplay: !checkingResult.isTariffAvailable,\n disabled: !(checkingResult.isTariffAvailable && checkingResult.isConnectionAvailable),\n onClick: (e: SyntheticEvent) => {\n e.stopPropagation();\n analytics.address.continueClicked();\n dispatch(goToNextStep());\n },\n children: 'Продолжить',\n };\n }\n};\n\nexport default useUnifiedAddressFormNextButton;\n","import { actionTypes } from '~/src/features/full-buy/store';\n\nexport const updateConnectionCostForSelectedTariff = (newPrice: number) => ({\n type: actionTypes.UpdateTariffConnectionCost,\n payload: {\n newPrice,\n },\n});\n","import { createSvg } from '@r1-frontend/ui-react/components/svg/createSvg';\n\nconst Game = ({ strokeWidth = 1.5 }): JSX.Element => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default createSvg(\n Game,\n 'game',\n);\n","import { createSvg } from '@r1-frontend/ui-react/components/svg/createSvg';\n\nconst MovixHelper = ({ strokeWidth = 1.5 }): JSX.Element => {\n return (\n \n \n \n );\n};\n\nexport default createSvg(\n MovixHelper,\n 'movix',\n);\n","import { TGuideItem } from '@r1-frontend/ui-react/components/Guide/GuideItem';\nimport { House } from '@r1-frontend/ui-react/components/svg/building';\nimport { CloseBox } from '@r1-frontend/ui-react/components/svg/delivery';\nimport { Game, MovixHelper } from '@r1-frontend/ui-react/components/svg/devices';\nimport { Location } from '@r1-frontend/ui-react/components/svg/location';\nimport { CalendarSecond } from '@r1-frontend/ui-react/components/svg/time';\nimport { ProfileCircle } from '@r1-frontend/ui-react/components/svg/users';\nimport { VideoPlay } from '@r1-frontend/ui-react/components/svg/video';\n\nimport { ESteps } from '~/src/features/full-buy/types';\n\ntype TGuideSteps = Exclude & {\n value: ESteps,\n info?: string,\n}\n\nexport const guideSteps: TGuideSteps[] = [\n {\n value: ESteps.address,\n title: 'Проверка адреса',\n description: 'Убедитесь, что в вашем доме есть техническая возможность подключить тариф.',\n Icon: Location,\n isActive: false,\n },\n {\n value: ESteps.equipments,\n title: 'Выбор роутера',\n description: 'Выберите один, если хотите получить от своего тарифа максимум скорости и управлять настройками Wi-Fi через приложение. ',\n Icon: Game,\n isActive: false,\n },\n {\n value: ESteps.equipmentsCottage,\n title: 'Выбор оборудования',\n description: 'Без него услуги не будут работать, и мы не сможем вам их подключить. Оборудование нужно, чтобы преобразовать оптический ' +\n 'сигнал в электрический и передать его по кабелю Ethernet.',\n Icon: House,\n isActive: false,\n },\n {\n value: ESteps.tariffInfo,\n title: 'Выбор подписок',\n description: 'Подписки уже входят в цену тарифа, каждый месяц их можно менять.',\n Icon: VideoPlay,\n isActive: false,\n },\n {\n value: ESteps.contacts,\n title: 'Ввод данных',\n description: 'Укажите свои ФИО и номер телефона, чтобы мы смогли оформить вашу ' +\n 'заявку на подключение. Договор оформляем только на лицо старше 18 лет.',\n Icon: ProfileCircle,\n isActive: false,\n info: ` \n

Дома должен быть владелец — тот, на чьё имя оформлен договор. Или его представитель старше 18 лет.

\n

У представителя должна быть доверенность, которую можно написать от руки.

\n

\n Что обязательно нужно указать в доверенности:\n

\n
    \n
  • - ФИО клиента и его представителя
  • \n
  • - паспортные данные владельца и его адрес
  • \n
  • - дату подписания доверенности
  • \n
  • - подтверждение, что клиент передает представителю право представлять его перед третьими лицами
  • \n
\n

Также понадобится паспорт представителя и копия паспорта того, на чьё имя будет оформлен договор.

\n `,\n },\n {\n value: ESteps.timeSlots,\n title: 'Выбор даты подключения',\n description: 'Выберите день и время, когда инженер приедет, привезёт оборудование, всё установит и настроит.',\n Icon: CalendarSecond,\n isActive: false,\n info: `\n

На все работы инженеру понадобится около 60 минут.

\n

\n Как подготовиться в визиту инженера:\n

\n
    \n
  • - Держите под рукой свой паспорт или доверенность на того, кто будет встречать инженера вместо вас.
  • \n
  • - Вспомните логин и пароль от Госуслуг, чтобы быстро ввести их и заключить онлайн-договор.
  • \n
  • - Убедитесь, что на вашей карте хватает денег для оплаты услуг.
  • \n
  • - Выберите и подготовьте место для роутера или ТВ-приставки.
  • \n
\n `,\n },\n {\n value: ESteps.equipmentsTv,\n title: 'Выбор ТВ приставки',\n description: 'Добавьте её, чтобы смотреть ТВ-каналы и подписки из своего тарифа. Если у вас Smart TV, приставку можно не брать.',\n Icon: MovixHelper,\n isActive: false,\n },\n {\n value: ESteps.final,\n title: 'Отслеживание заявки',\n description: 'После оплаты получите смс с ссылкой на свой личный кабинет. ' +\n 'Там вы сможете следить за статусом своей заявки, изменить её или отменить.',\n Icon: CloseBox,\n isActive: false,\n },\n {\n value: ESteps.subscriptions,\n title: 'Выбор подписок',\n description: 'Подписки уже входят в цену тарифа, каждый месяц их можно менять.',\n Icon: VideoPlay,\n isActive: false,\n },\n];\n","import { isTruthy } from '@r1-frontend/shared/guards';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { ESteps } from '~/src/features/full-buy/types';\nimport { TState } from '~/src/store';\n\nimport { guideSteps } from './data';\n\nexport const getGuideData = (state: TState) =>{\n const { flow, stepIndex, selectedTariff } = state.fullBuy;\n\n const isSalePackageId = !!((selectedTariff && 'salePackageId' in selectedTariff));\n const tariff = selectCurrentTariff(state);\n const currentStep = flow?.steps[stepIndex];\n\n const hasEquipmentInTariff = tariff?.additionalProducts.some(product => product.category === 'router' && product.required);\n const hasRequiredTvBox = tariff?.additionalProducts.find(el => el.category === EShopCategory.Decoders && el.required);\n // @todo replace to a selector. Simplify condition by `!!tariff?.subscriptions Summary?.length && !!tariff?.sale Package Links?.length;`\n const hasSubscriptions = (tariff?.subscriptionsSummary && tariff?.subscriptionsSummary?.length > 0) && (tariff?.salePackageLinks && tariff?.salePackageLinks?.length > 0);\n\n if (!flow) {\n return undefined;\n }\n\n return flow.steps\n .map((step) =>{\n const findStep = guideSteps.find(item => item.value === step);\n\n if (isSalePackageId && findStep?.value === ESteps.tariffInfo) {\n return null;\n }\n\n if (!hasSubscriptions && findStep?.value === ESteps.subscriptions) {\n return null;\n }\n if ((tariff?.isMono || hasRequiredTvBox) && findStep?.value === ESteps.equipmentsTv) {\n return null;\n }\n if (hasEquipmentInTariff && findStep?.value === ESteps.equipments) {\n return null;\n }\n if (findStep) {\n const { value, ...mappedItem } = { ...findStep, isActive: currentStep === findStep.value }; // eslint-disable-line\n return { ...mappedItem };\n }\n return null;\n })\n .filter(isTruthy);\n};\n","import React, { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { Guide } from '@r1-frontend/ui-react/components/Guide';\nimport HtmlContentFromApi from '@r1-frontend/ui-react/components/HtmlContentFromApi';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport OpenChat from '~/src/components/OpenChatLink';\nimport { BasePopupRightAlign, TheScrollbar } from '~/src/features/full-buy/popups/BasePopupRightAlign';\nimport { getGuideData } from '~/src/features/full-buy/store/selectors/getGuideData/getGuideData';\n\ninterface IGuideFullBuy {\n isOpen: boolean,\n onClose: () => void,\n}\n\nexport const GuideFullBuy = ({ isOpen, onClose }: IGuideFullBuy): JSX.Element => {\n const guideData = useSelector(getGuideData);\n\n const createDescriptionElements = useMemo(()=>{\n return guideData?.map((item)=> {\n if (item?.info) {\n return { ...item, info: {item.info} };\n } else {\n return item;\n }\n });\n }, [guideData]);\n\n if (!createDescriptionElements) {\n return <>;\n }\n\n return (\n \n

Подключение тарифа: шаги

\n \n \n Если на каком-либо шаге появятся сложности, напишите в чат. Поможем разобраться.\n \n \n \n \n );\n};\n","import { batch } from 'react-redux';\n\nimport { setPrevStep, setStep } from '~/src/features/full-buy/store/actions';\nimport { TDispatch, TGetState } from '~/src/store';\n\nexport const goToPrevStep = () => (dispatch: TDispatch, getState: TGetState) => {\n const state = getState().fullBuy;\n\n const {\n stepIndex,\n flow,\n } = state;\n\n if (!flow) {\n return;\n }\n\n const newIndex = stepIndex - 1;\n\n if (newIndex >= 0) {\n batch(() => {\n dispatch(setPrevStep(stepIndex));\n dispatch(setStep(newIndex));\n });\n }\n};\n","import React, { useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { TSvgProps } from '@r1-frontend/ui-react/components/svg/createSvg';\nimport SteppableProgressBar from '@r1-frontend/ui-react/organisms/SteppableProgressBar';\n\nimport { MEGABIT_AVAIL_CODES_LIST, MEGABIT_SPEED } from '~/src/features/full-buy/consts';\nimport isOneLineAddressScreen from '~/src/features/full-buy/helpers/ab/isOneLineAddressScreen';\nimport { goToPrevStep } from '~/src/features/full-buy/store/actions/goToPrevStep';\nimport { isHaveSelectedProducts } from '~/src/features/full-buy/store/selectors/products/isHaveSelectedProducts';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { ESteps } from '~/src/features/full-buy/types';\nimport { TState } from '~/src/store';\n\ntype TGetProgressTitlesArgument = {\n step: ESteps,\n hasProducts: boolean,\n canConnectAfterCheckedAddress: boolean,\n isEdit: boolean,\n hasError: boolean,\n isAddressVerificationOnFirstStep: boolean,\n}\n\nconst getProgressTitles = ({\n step,\n hasProducts,\n canConnectAfterCheckedAddress,\n isEdit,\n hasError,\n isAddressVerificationOnFirstStep,\n}: TGetProgressTitlesArgument): { title: string, imgName?: string, hasPrevBtn?: boolean } => {\n switch (step) {\n case ESteps.tariffInfo: {\n return {\n title: 'Что входит в стоимость тарифа',\n };\n }\n case ESteps.subscriptions: {\n return {\n title: 'Выбор подписок',\n hasPrevBtn: true,\n };\n }\n case ESteps.equipments: {\n return {\n title: hasProducts ? 'Уже пакуем роутер...' : 'Выбор роутера',\n imgName: hasProducts ? 'box-packing.gif' : '',\n hasPrevBtn: true,\n };\n }\n case ESteps.equipmentsTv: {\n return {\n title: 'Выбор приставки',\n hasPrevBtn: true,\n };\n }\n case ESteps.equipmentsCottage: {\n return {\n title: 'Выбор оборудования',\n hasPrevBtn: true,\n };\n }\n case ESteps.address: {\n return {\n title: (canConnectAfterCheckedAddress && !isEdit) ? 'Уже прокладываем маршрут...' : 'Проверка адреса',\n imgName: (canConnectAfterCheckedAddress && !isEdit) ? 'dog-walking.gif' : '',\n hasPrevBtn: !isAddressVerificationOnFirstStep,\n };\n }\n case ESteps.contacts: {\n return {\n title: 'Ввод данных',\n hasPrevBtn: true,\n };\n }\n case ESteps.agreementCreated: {\n return {\n title: 'Осталось совсем чуть-чуть...',\n };\n }\n case ESteps.timeSlots: {\n return {\n title: 'Остался последний шаг',\n };\n }\n case ESteps.final: {\n return {\n title: hasError ? 'Получили вашу заявку, но есть нюанс' : 'Вы молодец! Заявка отправлена.',\n imgName: 'lightblue-paper-airplane.gif',\n };\n }\n default: {\n const unknownAction: never = step;\n return {\n title: '',\n } || unknownAction;\n }\n }\n};\n\ninterface IProgressBarWithBackBtnContainer {\n Icon?: (props: TSvgProps) => JSX.Element,\n onClickInfoIcon?: () => void,\n}\n\nconst ProgressBarWithBackBtnContainer = ({\n Icon,\n onClickInfoIcon,\n}: IProgressBarWithBackBtnContainer): JSX.Element | null => {\n const {\n fullBuy: { stepIndex, flow, agreement: agreementData },\n contactAddress: { isEdit, verifiedAddressData: { gigabitAvail, isHouseConnected } },\n hasProducts,\n selectedTariff,\n selectedAddress,\n isAddressVerificationOnFirstStep,\n } = useSelector((state: TState) => ({\n fullBuy: state.fullBuy,\n hasProducts: isHaveSelectedProducts(state),\n contactAddress: state.contactAddress,\n selectedTariff: selectCurrentTariff(state),\n selectedAddress: state.fullBuy.selectedAddress,\n isAddressVerificationOnFirstStep: state.fullBuy._addressVerificationOnFirstStep,\n }));\n\n const isOneLineAddressFormScreen = isOneLineAddressScreen();\n\n const dispatch = useDispatch();\n\n const { speed: tariffSpeed } = selectedTariff || {};\n\n const canConnectAfterCheckedAddress = useMemo(() => {\n const _gigabitMayConnect = MEGABIT_AVAIL_CODES_LIST.includes(gigabitAvail);\n\n const _requiredGigaSpeed = !!tariffSpeed && (tariffSpeed > MEGABIT_SPEED);\n\n const _shouldConnect = _requiredGigaSpeed\n ? (isHouseConnected && _gigabitMayConnect)\n : isHouseConnected;\n\n return isOneLineAddressFormScreen\n ? Boolean(selectedAddress?.isConnectionAvailable)\n : (_shouldConnect && !isEdit);\n }, [isHouseConnected, gigabitAvail, tariffSpeed, selectedAddress]);\n\n const onClickHandler = () => {\n dispatch(goToPrevStep());\n };\n\n if (!flow) {\n return null;\n }\n\n const progress = (stepIndex + 1) / flow.steps.length;\n const currentStep = flow.steps[stepIndex];\n\n const dynamicProps = getProgressTitles({\n step: currentStep,\n hasProducts,\n canConnectAfterCheckedAddress,\n isEdit: isOneLineAddressFormScreen ? !selectedAddress : isEdit,\n hasError: agreementData.hasError,\n isAddressVerificationOnFirstStep,\n });\n\n const props = {\n progress: progress,\n imgPath: '/static/images/full-buy/for-progress-bar',\n onClick: dynamicProps.hasPrevBtn ? onClickHandler : undefined,\n Icon: Icon,\n onClickInfoIcon: onClickInfoIcon,\n\n ...dynamicProps,\n };\n\n return ;\n};\nexport default ProgressBarWithBackBtnContainer;\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\n\nexport const RequestContent = styled.div`\n margin-top: 32px;\n position: sticky;\n flex-direction: column;\n width: 100%;\n top: 120px;\n \n &:empty {\n display: none;\n }\n`;\n\nexport const LeftSide = styled.div`\n flex: 1;\n flex-direction: column;\n display: contents;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n flex: 0 1 auto;\n display: flex;\n width: 100%;\n }\n`;\n","import React, { ReactNode, useMemo, useState } from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { useRouter } from 'next/router';\n\nimport { UnifiedAddressFormCtx } from '@r1-frontend/unified-address-form';\n\nimport { InfoCircleFlip } from '@r1-frontend/ui-react/components/svg/main';\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { Banner } from '~/src/features/full-buy/Banner';\nimport { TiketContainer } from '~/src/features/full-buy/containers/agregate/TiketContainer';\nimport { TiketContainerFinal } from '~/src/features/full-buy/containers/agregate/TiketContainerFinal';\nimport GoToNextStepButton from '~/src/features/full-buy/containers/GoToNextStepButton';\nimport { GuideFullBuy } from '~/src/features/full-buy/containers/GuideFullBuy';\nimport ProgressBarWithBackBtnContainer from '~/src/features/full-buy/containers/ProgressBarWithBackBtn';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { ESteps } from '~/src/features/full-buy/types';\nimport { TState } from '~/src/store';\n\nimport { DoubleColumnLayout } from '~/src/features/full-buy/containers/pages/styled';\nimport * as ST from './styled';\n\ninterface IMainLayout {\n children: ReactNode,\n showFinalTicket?: boolean,\n className?: string,\n isHide?: boolean,\n}\n\nexport const MainLayout = ({ children, isHide = false, showFinalTicket = false, className }: IMainLayout) => {\n const router = useRouter();\n const analytics = useAnalytics();\n\n const [isOpenGuide, setIsOpenGuide] = useState(false);\n\n const {\n selectedTariff,\n stepIndex,\n flow,\n } = useSelector((state: TState) => ({\n selectedTariff: selectCurrentTariff(state),\n stepIndex: state.fullBuy.stepIndex,\n flow: state.fullBuy.flow,\n }), shallowEqual);\n\n const onCloseGuide = () => {\n setIsOpenGuide(false);\n };\n\n const onOpenGuide = () => {\n setIsOpenGuide(true);\n analytics.clickGuide(step);\n };\n\n const step = flow?.steps[stepIndex];\n\n const isHideGuideIcon = useMemo(() => {\n return (step === ESteps.final) || (!router?.query?.tariffName && step === ESteps.tariffInfo);\n }, [step]);\n\n return (\n \n \n \n \n {children}\n\n \n\n \n \n \n \n {\n showFinalTicket\n ? \n : \n }\n \n \n \n \n \n );\n};\n","import { useState } from 'react';\nimport { useRouter } from 'next/router';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport DefaultPopup from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { InfoCircleFlip } from '@r1-frontend/ui-react/components/svg/main';\nimport ControlElement from '@r1-frontend/ui-react/components/typography/controlElement';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport { USER_LOGIN_ROUTE } from '~/src/constants/routes';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\n\nexport const HasAgreementPopup = (): JSX.Element => {\n const analytics = useAnalytics();\n\n const router = useRouter();\n\n const [isOpen, changePopupState] = useState(false);\n\n const goToLk = () => {\n router.push(USER_LOGIN_ROUTE);\n changePopupState(false);\n analytics.address.popupAddressAgreement('click_enter_lk');\n };\n\n const handleClosePopup = () => {\n changePopupState(false);\n analytics.address.popupAddressAgreement('click_create_agreement');\n };\n\n const handleOpenPopup = () => {\n changePopupState(true);\n analytics.address.popupAddressAgreement('view_popup');\n };\n\n return (\n <>\n \n Проверим техническую возможность подключить тариф. Уже подключали Дом.ру?\n \n\n \n \n \n

Уже подключали Дом.ру?

\n \n Чтобы не создавать новый договор, вы можете войти в личный кабинет и поменять тариф на более подходящий.\n \n
\n\n \n \n \n \n
\n
\n \n );\n};\n","import React, { useCallback } from 'react';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { ResponseDto } from '@r1-frontend/api-domru/dadata/suggest/dto/ResponseDto';\nimport suggestFio from '@r1-frontend/api-domru/dadata/suggest/fio';\n\nimport { IPersonFormProps, PersonForm as PersonFormComponent } from '@r1-frontend/ui-react/organisms/Forms/PersonForm';\n\n\ntype TProps = Omit;\n\nexport const PersonForm = ({\n fio,\n phone,\n onChangeFio,\n onChangePhone,\n isNeedToBlockInvalidFio = false,\n actionButtonProps,\n}: TProps): JSX.Element => {\n const onLoadSuggestions = useCallback(async(value) => {\n const resp = await doRequest.dadataProxy(\n suggestFio(value),\n );\n\n return resp.isSuccess\n ? resp.payload?.suggestions.map(suggestion => suggestion.value)\n : [];\n }, []);\n\n return (\n \n );\n};\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const EditableContactsForm = styled.div`\n position: relative;\n flex-direction: column;\n align-items: flex-start;\n row-gap: 12px;\n width: 100%;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n align-items: stretch;\n }\n`;\n\nexport const NoWrapText = styled.span`\n display: contents;\n white-space: nowrap;\n`;\n\nexport const BoldText = styled.span`\n display: contents;\n ${FONTS.H5};\n`;\n\nexport const BlockWrap = styled.div`\n display: grid;\n flex-wrap: nowrap;\n align-items: flex-start;\n grid-template-columns: 524px min-content;\n column-gap: 12px;\n width: 100%;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n grid-template-columns: 1fr;\n row-gap: 24px;\n } \n`;\n\nexport const BlockTitle = styled.div`\n ${FONTS.S};\n color: ${COLORS.TextPrimary};\n`;\n","import { memo, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useRouter } from 'next/router';\n\nimport { selectAddressParamsMemoize } from '@r1-frontend/entities/ContactAddress/selectors/selectAddressParams';\n\nimport { EResultPopupStatus } from '@r1-frontend/ui-react/components/popups/popupResult'; // TODO заменить на объединение строк\nimport { useResultPopup } from '@r1-frontend/ui-react/components/popups/useResultPopup';\n\nimport { PersonForm } from '~/src/features/full-buy/components/uiReactComponents/PersonForm';\nimport {\n isGigabitCanConnected,\n isGigaSpeedRequired,\n isTariffCanConnected,\n submitRequest,\n} from '~/src/features/full-buy/functions';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TState } from '~/src/store';\nimport { selectCsrf } from '~/src/store/selectors/auth/selectCsrf';\n\nimport * as ST from './styled';\n\n/**\n * Форма для отправки заявки на подключение\n */\nconst RequestForm = (): JSX.Element => {\n const csrf = useSelector(selectCsrf);\n const router = useRouter();\n const onClickClose = () => router.push('/');\n const [PopupResult, showResult] = useResultPopup(onClickClose);\n const [fio, setFio] = useState('');\n const [phone, setPhone] = useState('');\n\n const {\n tariffPackage,\n products,\n unifiedSelectedAddress,\n addressParams,\n isHouseConnected,\n gigabitAvail,\n } = useSelector((state: TState) => ({\n tariffPackage: selectCurrentTariff(state),\n products: state.fullBuy.products,\n unifiedSelectedAddress: state.fullBuy.selectedAddress,\n addressParams: selectAddressParamsMemoize(state),\n isHouseConnected: state.contactAddress.verifiedAddressData.isHouseConnected,\n gigabitAvail: state.contactAddress.verifiedAddressData.gigabitAvail,\n }));\n\n const { isMono, speed, sale_package_id, tariff_name, additionalProducts } = tariffPackage || {};\n\n const gigabitMayConnect = isGigabitCanConnected(gigabitAvail);\n const requiredGigaSpeed = isGigaSpeedRequired(speed || 0);\n const shouldConnect = isTariffCanConnected(isHouseConnected, requiredGigaSpeed, gigabitMayConnect);\n\n const onSubmitRequest = async() => {\n const resp = await submitRequest({\n isMono: !!isMono,\n fio,\n phone,\n csrf,\n sale_package_id,\n tariff_name,\n additionalProducts: additionalProducts || [],\n products: products || [],\n address: unifiedSelectedAddress?.address.value,\n street: addressParams?.street?.label,\n house: addressParams?.house?.label,\n flat: addressParams?.flat,\n shouldConnect,\n });\n\n const { ok, message } = resp;\n\n showResult({\n type: ok ? EResultPopupStatus.SUCCESS : EResultPopupStatus.ERROR,\n title: ok ? 'Заявка на подключение отправлена' : 'Произошла ошибка',\n text: ok ? 'Мы свяжемся с вами в ближайшее время' : message,\n });\n };\n\n return (\n \n \n \n \n \n \n );\n};\n\nexport default memo(RequestForm);\n","import React, { useContext } from 'react';\n\nimport { AddressInput } from '@r1-frontend/unified-address-form';\n\nimport { FullBuyContext, TFullBuyContextProperties } from '~/src/features/full-buy/analytics/context';\n\nexport const OneLineAddressInput = () => {\n const { isVillage } = useContext(FullBuyContext);\n\n return (\n \n );\n};\n","import styled from 'styled-components';\n\nimport BaseAlert from '@r1-frontend/ui-react/components/Alert';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const MsgContent = styled.div`\n width: 100%;\n`;\n\nexport const Text = styled.div`\n flex: 1;\n width: 100%;\n ${FONTS.S};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.XS};\n }\n`;\n\nexport const NoWrapText = styled.span`\n display: contents;\n white-space: nowrap;\n`;\n\nexport const BoldText = styled.span`\n display: contents;\n ${FONTS.H5};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H6};\n }\n`;\n\nexport const Alert = styled(BaseAlert)`\n flex-direction: column;\n gap: 10px;\n width: 100%;\n align-items: baseline;\n overflow: visible;\n`;\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { RounderContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nexport const Block = styled.div`\n display: block;\n`;\n\nexport const GrayBlock = styled(RounderContainer)`\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n background-color: ${COLORS.BgSurface};\n padding: 24px;\n \n @media (min-width: ${wideBreakpoints.mobile}) {\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n }\n`;\n","// @ts-nocheck\nimport React, { useContext, useEffect, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { ResultMessage } from '@r1-frontend/unified-address-form';\nimport { flush } from '@r1-frontend/unified-address-form/actions';\nimport { useCtxDispatch } from '@r1-frontend/unified-address-form/hooks';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport { PolicyNote } from '@r1-frontend/ui-react/components/PolicyNote';\nimport { Location } from '@r1-frontend/ui-react/components/svg/location';\nimport { InfoCircle } from '@r1-frontend/ui-react/components/svg/main';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { IndentContainer, ListContainer, RounderContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport ListItemWithIcon from '@r1-frontend/ui-react/organisms/ListItemWithIcon';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport { POLICY_PAGE_LINK } from '~/src/constants';\nimport RequestForm from '~/src/features/full-buy/AddressCheckMessage/RequestForm';\nimport { FullBuyContext, TFullBuyContextProperties, useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { OneLineAddressInput } from '~/src/features/full-buy/components/OneLineAddressInput/OneLineAddressInput';\nimport isFullBuyVillage from '~/src/features/full-buy/helpers/ab/isFullBuyVillage';\nimport { setAddress } from '~/src/features/full-buy/store/actions';\nimport { ETariffFilters } from '~/src/features/full-buy/store/initialState';\nimport { TState } from '~/src/store';\n\nimport * as FullBuyST from '~/src/features/full-buy/AddressCheckMessage/styled';\nimport * as S from './styled';\n\nconst SPEED_OF_INTERNET_100 = 100;\n\nconst UnifiedAddressForm = ({ ...props }): JSX.Element => {\n const analytics = useAnalytics();\n const dispatch = useDispatch();\n const { isVillage } = useContext(FullBuyContext);\n\n const checkingResult = useSelector((state: TState) => state.fullBuy?.selectedAddress?.checkingResult);\n const addressFormDispatch = useCtxDispatch();\n const buttonText = useMemo(() => 'Проверить адрес', []);\n\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [checkingResult]);\n\n\n const handleChangeAddress = () => {\n analytics.address.changeAddressClicked();\n dispatch(setAddress(undefined));\n addressFormDispatch(flush());\n };\n\n const goToMainPageWithRestrictions = () => {\n // @todo remove ignore, write type\n // @ts-ignore\n const restrictions = checkingResult.availableSpeed.max;\n\n if (restrictions === SPEED_OF_INTERNET_100) {\n analytics.address.only100Clicked();\n } else {\n analytics.address.lessThan1000Clicked();\n }\n\n location.href = `/full-buy?filters=${restrictions === SPEED_OF_INTERNET_100 ? ETariffFilters.SPEED100 : ETariffFilters.SPEED_LESS_1000}${isVillage ? '&filters=cottage' : ''}`;\n };\n\n const goToMainPageInViewOfCompatibilities = () => {\n location.href = '/full-buy' + (isVillage ? '' : '?filters=cottage');\n };\n\n // main component with the address input form and the own store\n if (!checkingResult) {\n return \n \n \n \n \n \n \n \n \n \n ;\n }\n\n // situation when checking was fail or connection unavailable\n if (checkingResult && checkingResult.isConnectionAvailable === false) {\n return \n \n \n \n \n\n \n \n \n \n ;\n }\n\n // connection available\n return \n \n {checkingResult.isCompatible && (\n \n )}\n\n {(!checkingResult.isTariffAvailableForActivation && checkingResult.isCompatible) && (\n \n \n \n )}\n\n {!checkingResult.isCompatible && (\n <>\n \n \n \n \n {isFullBuyVillage() && (\n \n \n \n )}\n \n )}\n\n \n \n \n \n \n ;\n};\n\nexport default styled(UnifiedAddressForm)`\n ${RounderContainer} {\n background-color: ${COLORS.BgSurface};\n width: 100%;\n display: block;\n\n overflow: visible;\n }\n`;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\n\nimport { MainLayout } from '~/src/features/full-buy/containers/MainLayout/MainLayout';\nimport { HasAgreementPopup } from '~/src/features/full-buy/containers/pages/Address/HasAgreementPopup';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\n\nimport UnifiedAddressForm from './UnifiedAddressForm';\n\nconst OneLineAddress = (): JSX.Element => {\n const selectedTariff = useSelector(selectCurrentTariff);\n const { title = '' } = selectedTariff || {};\n\n return \n \n

{`Проверьте, доступен ли тариф «${title}» по вашему адресу`}

\n \n
\n\n \n
;\n};\n\nexport default OneLineAddress;\n","import styled, { css } from 'styled-components';\n\nimport { BaseButton } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const FullBuy = styled.div`\n display: block;\n width: 100%;\n padding-top: 60px;\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n padding-top: 69px;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n padding-top: 24px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n padding-top: 40px;\n }\n`;\n\nexport const FullBuyByPage = styled.div<{ isNotNeedGap?: boolean }>`\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n padding-top: 40px;\n ${({ isNotNeedGap = false }) => !isNotNeedGap && css`\n row-gap: 40px;\n `}\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n padding-top: 10px;\n }\n`;\n\nexport const StageWrap = styled.section`\n display: flex;\n flex-direction: column;\n row-gap: 16px;\n align-items: flex-start;\n`;\n\nexport const LeftSide = styled.div`\n flex: 1;\n flex-direction: column;\n gap: 32px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n flex: 0 1 auto;\n display: flex;\n width: 100%;\n }\n\n @media (max-width: 1350px) {\n flex-direction: column;\n }\n`;\n\nexport const RightSide = styled.div<{ isLastStage?: boolean, isOnTimeslots?: boolean }>`\n z-index: 1;\n flex: 0 1 auto;\n display: flex;\n flex-direction: column;\n padding-top: ${p => p.isLastStage ? '78px' : p.isOnTimeslots ? '82px' : '48px'};\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n width: 100%;\n max-width: 100%;\n ${p => p.isLastStage ? 'padding-top: 0px' : ''};\n }\n`;\n\nexport const Title = styled.div`\n margin-top: 24px;\n width: 100%;\n padding: 0 16px;\n ${FONTS.XS};\n color: ${COLORS.TextPrimary};\n\n @media (min-width: ${wideBreakpoints.mobile}) {\n padding: 0;\n }\n`;\n\n/**\n * @deprecated use the @r1-frontend/ui-react/typography/heading H3\n */\nexport const BlockTitle = styled.div`\n ${FONTS.H3};\n color: ${COLORS.TextPrimary};\n margin-bottom: 16px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n ${FONTS.H4};\n }\n \n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H4};\n }\n`;\n\nexport const TextWrap = styled.div`\n flex: 1;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n`;\n\n/**\n * @deprecated use the @r1-frontend/ui-react/typography/heading H3 or H4...\n */\nexport const Text = styled.div`\n ${FONTS.H3};\n color: ${COLORS.TextPrimary};\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n ${FONTS.H4};\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H5};\n }\n`;\n\nexport const Button = styled(BaseButton)`\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: 100% !important;\n }\n`;\n","import styled from 'styled-components';\n\nexport const Block = styled.div`\n width: 100%;\n\n * {\n width: 100%;\n }\n`;\n\nexport const FlexBlock = styled.div`\n width: auto;\n display: flex;\n gap: 16px;\n`;\n","import React from 'react';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\n\nimport 'react-loading-skeleton/dist/skeleton.css';\n\nimport { DoubleColumnLayout } from '~/src/components/DoubleColumnLayout';\nimport { StageTitle } from '~/src/features/full-buy/StageTitle';\n\nimport * as ST from '../styled';\n\nimport * as S from './styled';\n\nconst TariffInfoPageSkeleton = ({ title }: { title: string }): JSX.Element => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default TariffInfoPageSkeleton;\n","import { useEffect } from 'react';\n\nimport { dataLayerPush } from '@r1-frontend/analytics/dataLayerPush';\n\nimport { EVENTS } from '@r1-frontend/shared/constants/analytics';\n\n/**\n * Хук для отправки referrer в GA метрику,\n * в label пишется путь без домена.\n * Использовать на конечной странице.\n */\nexport const useSendReferrerToGA = (category: string, action: string) => {\n const sendReferrer = () => {\n const {\n document: { referrer = '/' },\n location: { origin },\n } = window;\n const withoutOrigin = referrer.replace(origin, '');\n\n dataLayerPush({\n event: EVENTS.UAevent,\n category,\n action,\n label: withoutOrigin,\n });\n };\n\n useEffect(() => {\n sendReferrer();\n }, []);\n};\n","import styled from 'styled-components';\n\nimport InteractiveLoader from '~/src/components/InteractiveLoader';\n\nexport const SInteractiveLoader = styled(InteractiveLoader)`\n flex: 1;\n`;\n","import { RefObject, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { isClientSide } from '@r1-frontend/shared/helpers/ssr';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { agreementCreationStatuses } from '~/src/features/full-buy/consts';\nimport { MainLayout } from '~/src/features/full-buy/containers/MainLayout/MainLayout';\n\nimport * as ST from './styles';\n\ninterface IProps {\n parent?: RefObject,\n}\n\nconst Loader = ({ parent }: IProps) => {\n const [root, setRoot] = useState(null);\n const isMobile = useMatchMedia(`(max-width: ${wideBreakpoints.mobile})`);\n\n useEffect(() => {\n if (isClientSide()) {\n const portal = parent ? parent.current : document.getElementById('loader-portal');\n if (portal) {\n if (isMobile) {\n portal.style.minHeight = '70vh';\n } else {\n portal.style.minHeight = 'auto';\n }\n setRoot(portal);\n }\n }\n }, [isMobile, parent]);\n\n return root\n ? createPortal(\n (\n \n \n \n ),\n root,\n )\n : null;\n};\n\nexport default Loader;\n","import React, { useMemo } from 'react';\n\nimport { EAvailableSpeed, EVerificationStatus } from '@r1-frontend/entities/ContactAddress/initialState';\n\nimport { TAlertIcon } from '@r1-frontend/ui-react/components/Alert';\nimport { TAlertTypes } from '@r1-frontend/ui-react/components/Alert/TAlertTypes';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { InfoCircle, TickCircle } from '@r1-frontend/ui-react/components/svg/main';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport RequestForm from './RequestForm';\n\nimport * as ST from './styled';\n\ntype TResultTypes = 'notConnected' | 'canConnected' | 'gigabitError' | 'checkError' | 'flatError';\n\ninterface IResult {\n getText: (args: { tariffName?: string, availableSpeed: EAvailableSpeed }) => JSX.Element,\n hasCallRequest: boolean,\n messageType: TAlertTypes,\n icon: TAlertIcon,\n}\n\nconst results: Record = {\n canConnected: {\n getText: ({ tariffName = '' }) => <>По вашему адресу можно подключить тариф «{tariffName}»,\n hasCallRequest: false,\n messageType: 'success',\n icon: () => ,\n },\n notConnected: {\n getText: () => <>Ваш дом пока не подключён к Дом.ру. Можем сообщить вам, когда подключим.\n Чтобы мы смогли дозвониться — проверьте, что у вас отключен автоответчик и антиспам приложения.,\n hasCallRequest: true,\n messageType: 'error',\n icon: () => ,\n },\n gigabitError: {\n getText: ({ availableSpeed }) => {\n if (availableSpeed === EAvailableSpeed.between100and1000) {\n return <>\n Пока в вашем доме можно подключить только тарифы со скоростью меньше 1000 Мбит/с.\n ;\n } else {\n return <>\n Пока в вашем доме можно подключить только тариф с максимальной скоростью 100 Мбит/с.\n ;\n }\n },\n hasCallRequest: false,\n messageType: 'info',\n icon: () => ,\n },\n checkError: {\n getText: () => <>Не смогли проверить ваш адрес. Пожалуйста, оставьте ваши ФИО и номер телефона — мы позвоним вам и всё проверим.\n Чтобы мы смогли дозвониться — проверьте, что у вас отключен автоответчик и антиспам приложения.,\n hasCallRequest: true,\n messageType: 'error',\n icon: () => ,\n },\n flatError: {\n getText: () => <>Этот тариф недоступен по вашему адресу. Оставьте свои контакты — мы перезвоним и подберём другой вариант.\n Чтобы мы смогли дозвониться — проверьте, что у вас отключен автоответчик и антиспам приложения.,\n hasCallRequest: true,\n messageType: 'error',\n icon: () => ,\n },\n};\n\nexport interface IAddressCheckMessageProps {\n tariffName: string | undefined,\n gigabitMayConnect: boolean,\n requiredGigaSpeed: boolean,\n isNotFlatAddress?: boolean,\n isHouseConnected: boolean,\n addressStatus: EVerificationStatus,\n availableSpeed: EAvailableSpeed,\n}\n\n/**\n * Выводит сообщение с результатом проверки адреса или null, если адрес ещё не проверялся\n */\nexport const AddressCheckMessage = ({\n tariffName,\n gigabitMayConnect,\n requiredGigaSpeed,\n isNotFlatAddress,\n isHouseConnected,\n addressStatus,\n availableSpeed,\n}: IAddressCheckMessageProps): JSX.Element | null => {\n const isGigabitError = requiredGigaSpeed && !gigabitMayConnect;\n const isTariffCanConnect = isHouseConnected && !isGigabitError;\n const isMobile = useMatchMediaByWidth(wideBreakpoints.mobile);\n const resultType = useMemo(() => {\n switch (true) {\n // Проверка адреса не прошла\n case (addressStatus === EVerificationStatus.error):\n return 'checkError';\n // Проверка адреса не прошла\n case (isNotFlatAddress):\n return 'flatError';\n // Тариф можно подключить\n case (isTariffCanConnect):\n return 'canConnected';\n // Дом не подключен\n case (![EVerificationStatus.notVerified, EVerificationStatus.verifying].includes(addressStatus) && !isHouseConnected):\n return 'notConnected';\n // Нет гигабитной сети\n case (isGigabitError):\n return 'gigabitError';\n default:\n return 'checkError';\n }\n }, [isTariffCanConnect, isGigabitError, isHouseConnected, addressStatus]);\n\n const result = results[resultType];\n\n // Адрес ещё не проверяли\n if (addressStatus === EVerificationStatus.notVerified || addressStatus === EVerificationStatus.verifying) {\n return null;\n }\n\n return (\n \n \n {result.getText({ tariffName, availableSpeed: availableSpeed })}\n \n {result.hasCallRequest &&\n \n }\n \n );\n};\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const EditableForm = styled.div`\n position: relative;\n flex-direction: column;\n align-items: flex-start;\n row-gap: 24px;\n width: 100%;\n border-radius: ${BorderRadius.componentRadius};\n background-color: ${COLORS.BgSurface};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n align-items: stretch;\n }\n`;\n\nexport const NoWrapText = styled.span`\n display: contents;\n white-space: nowrap;\n`;\n\nexport const BoldText = styled.span`\n display: contents;\n ${FONTS.H5};\n`;\n\nexport const BlockWrap = styled.div`\n width: 100%;\n flex-direction: column;\n`;\n","import { memo } from 'react';\n\nimport { BaseButton, btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { PolicyNote } from '@r1-frontend/ui-react/components/PolicyNote';\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { IAddress } from '@r1-frontend/shared/types/IAddress';\n\nimport AddressInputFields from '~/src/components/AddressInputFields';\nimport { POLICY_PAGE_LINK } from '~/src/constants';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\n\nimport * as ST from './styled';\n\nexport type TField = {\n value: string,\n isValid: boolean,\n clearInput: () => void,\n}\n\nexport type TContactDetailsProps = {\n isConfirmButtonActive: boolean,\n defaultAddress?: IAddress | null,\n showConfirmButton?: boolean,\n withSatelliteFilter?: boolean,\n}\n\nexport type TContactDetailsCallbacks = {\n onFillAddress: (address: IAddress) => void,\n onConfirmBtnClick: () => void,\n}\n\nconst EditableForm = ({\n isConfirmButtonActive,\n onFillAddress,\n onConfirmBtnClick,\n defaultAddress,\n showConfirmButton = true,\n withSatelliteFilter,\n}: TContactDetailsProps & TContactDetailsCallbacks): JSX.Element => {\n const analytics = useAnalytics();\n\n return (\n \n \n analytics.send(action)}\n defaultAddress={defaultAddress}\n withSatelliteFilter={withSatelliteFilter}\n />\n \n \n \n \n {showConfirmButton &&\n \n }\n \n );\n};\n\nexport default memo(EditableForm);\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport Throbber from '@r1-frontend/ui-react/components/loaders/Throbber';\nimport { StyledMenu } from '@r1-frontend/ui-react/components/select/dropdown';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nimport { ResultMessage } from '~/src/features/full-buy/ResultMessage';\n\nexport const AddressWrapper = styled.div`\n position: relative;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n padding: 24px;\n border-radius: ${BorderRadius.OuterBlockRadius};\n background-color: ${COLORS.BgSurface};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n padding: 16px;\n }\n \n ${StyledMenu} {\n z-index: 198 !important;\n }\n`;\n\nexport const SelectOtherTariff = styled.div`\n position: relative;\n flex-wrap: nowrap;\n flex-direction: column;\n row-gap: 16px;\n width: 100%;\n margin-top: 20px;\n padding: 24px 0 24px 24px;\n border-radius: ${BorderRadius.componentRadius};\n background-color: ${COLORS.BgSurface};\n`;\n\nexport const SResultMessage = styled(ResultMessage)`\n align-items: center;\n padding-right: 24px;\n fill: ${COLORS.Error};\n\n & > div:first-child {\n flex: 0 0 40px;\n align-self: flex-start;\n width: 40px;\n height: 40px;\n margin-right: 16px;\n background-color: ${COLORS.BgMain};\n border-radius: 20px;\n }\n`;\n\nexport const NoWrapText = styled.span`\n display: contents;\n white-space: nowrap;\n`;\n\nexport const BoldText = styled.span`\n display: contents;\n ${FONTS.H5};\n`;\n\nexport const STrobber = styled(Throbber)`\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n`;\n","import React, { memo, useCallback } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { ERequestStatus } from '@r1-frontend/api-domru/api-request/v1/user/request-by-connection';\nimport { checkAddress } from '@r1-frontend/entities/ContactAddress/actions/checkAddress';\nimport { fillAddressAction } from '@r1-frontend/entities/ContactAddress/actions/fillAddress';\nimport { setAddressEdit } from '@r1-frontend/entities/ContactAddress/actions/setAddressEdit';\nimport { isAddressFilled } from '@r1-frontend/entities/ContactAddress/selectors/isAddressFilled';\nimport { EVerificationStatus } from '@r1-frontend/entities/ContactDetail/initialState';\n\nimport { IAddress } from '@r1-frontend/shared/types/IAddress';\n\nimport { TState } from '~/src/store';\n\nimport { ConfirmedForm } from './ConfirmedForm';\nimport EditableForm from './EditableForm';\nimport { useStorageAddress } from './useStorageAddress';\n\nimport * as ST from './styled';\n\nexport type TField = {\n value: string,\n isValid: boolean,\n clearInput: () => void,\n}\n\nexport interface IResp {\n ok: boolean,\n message: string,\n status: ERequestStatus,\n id: number | undefined,\n}\n\ninterface IProps {\n showConfirmButton?: boolean,\n showConfirmForm?: boolean,\n addressBlockRef?: React.RefObject,\n}\n\nconst ContactAddress = ({ showConfirmButton = true, showConfirmForm = true, addressBlockRef }: IProps): JSX.Element => {\n const dispatch = useDispatch();\n\n const {\n isConfirmButtonActive,\n verifiedAddress,\n addressStatus,\n isEdit,\n } = useSelector((state: TState) => ({\n isConfirmButtonActive: isAddressFilled(state),\n verifiedAddress: state.contactAddress.verifiedAddressData.address,\n addressStatus: state.contactAddress.verifiedAddressData.status,\n editedAddress: state.contactAddress.editedAddressData,\n isEdit: state.contactAddress.isEdit,\n }), shallowEqual);\n\n useStorageAddress();\n\n const onEdit = useCallback(() => {\n dispatch(setAddressEdit(true));\n }, [dispatch]);\n\n const onFillAddress = useCallback((address: IAddress) => {\n dispatch(fillAddressAction(address));\n }, [dispatch]);\n\n const checkAddressData = () => {\n dispatch(checkAddress());\n dispatch(setAddressEdit(false));\n };\n\n return (\n \n {isEdit &&\n \n }\n\n {!isEdit && showConfirmForm &&\n \n }\n {(addressStatus === EVerificationStatus.verifying) &&\n \n }\n \n );\n};\n\nexport default memo(ContactAddress);\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { batch, shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { EAvailableSpeed } from '@r1-frontend/entities/ContactAddress/initialState';\nimport { EVerificationStatus } from '@r1-frontend/entities/ContactDetail/initialState';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\n\nimport { AddressCheckMessage } from '~/src/features/full-buy/AddressCheckMessage';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { GIGABIT_SPEED, MEGABIT_SPEED } from '~/src/features/full-buy/consts';\nimport ContactAddress from '~/src/features/full-buy/ContactAddress';\nimport { MainLayout } from '~/src/features/full-buy/containers/MainLayout/MainLayout';\nimport { setDisplayTariffLineState, setTariffFilters, setTariffLineAlias } from '~/src/features/full-buy/store/actions';\nimport { ETariffFilters } from '~/src/features/full-buy/store/initialState';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { selectFilteredTariffs } from '~/src/features/full-buy/store/selectors/selectFilteredTariffs';\nimport { TState } from '~/src/store';\n\nimport { HasAgreementPopup } from './HasAgreementPopup';\n\ntype TAdditionalTariffs = 'only100' | 'less1000';\n\nexport const Address = (): JSX.Element => {\n const analytics = useAnalytics();\n\n const {\n selectedTariff,\n addressStatus,\n isEdit,\n verifiedAddressData: {\n isHouseConnected,\n isHouseCottage,\n availableSpeed,\n },\n } = useSelector((state: TState) => ({\n selectedTariff: selectCurrentTariff(state),\n filteredTariffs: selectFilteredTariffs(state),\n addressStatus: state.contactAddress.verifiedAddressData.status,\n isEdit: state.contactAddress.isEdit,\n\n verifiedAddressData: state.contactAddress.verifiedAddressData,\n }), shallowEqual);\n\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [isEdit]);\n\n const dispatch = useDispatch();\n\n const [displayAdditionalTariffLine, setDisplayAdditionalTariffLine] = useState(false);\n\n const { title = '', speed: tariffSpeed = null } = selectedTariff || {};\n\n const tariffSpeedAcrossEnum = useMemo(() => {\n if (tariffSpeed === null) {\n return null;\n }\n\n if (tariffSpeed >= GIGABIT_SPEED) {\n return EAvailableSpeed.more1000;\n }\n\n if (tariffSpeed > MEGABIT_SPEED) {\n return EAvailableSpeed.between100and1000;\n }\n\n return EAvailableSpeed.lessOrEqual100;\n }, [tariffSpeed]);\n\n const shouldConnect = isHouseConnected && (\n (Number(tariffSpeedAcrossEnum) > EAvailableSpeed.lessOrEqual100 && Number(tariffSpeedAcrossEnum) <= availableSpeed) ||\n (Number(tariffSpeedAcrossEnum) === EAvailableSpeed.lessOrEqual100)\n );\n\n const addressIsVerified = addressStatus === EVerificationStatus.verified;\n\n useEffect(() => {\n if (addressStatus === EVerificationStatus.verified) {\n const allowedSpeed = availableSpeed === EAvailableSpeed.lessOrEqual100 ? 'only100' : 'less1000';\n if (!isHouseConnected) {\n analytics.address.verificationFailed('Ваш дом пока не подключён к Дом.ру');\n return;\n }\n\n if (Number(tariffSpeedAcrossEnum) > availableSpeed) {\n analytics.address.verificationFailed(`Ваш дом пока не подключен к такой скорости (${allowedSpeed})`);\n return;\n }\n\n analytics.address.verificationSuccess();\n }\n\n if (addressStatus === EVerificationStatus.error) {\n analytics.address.verificationFailed('Не смогли проверить ваш адрес');\n }\n }, [addressStatus]);\n\n useEffect(() => {\n if (!tariffSpeed || !addressIsVerified || !isHouseConnected) {\n return;\n }\n\n if (!shouldConnect) {\n setDisplayAdditionalTariffLine(availableSpeed === EAvailableSpeed.lessOrEqual100 ? 'only100' : 'less1000');\n batch(() => {\n dispatch(setTariffFilters([availableSpeed === EAvailableSpeed.lessOrEqual100 ? ETariffFilters.SPEED100 : ETariffFilters.SPEED_LESS_1000]));\n dispatch(setTariffLineAlias(''));\n dispatch(setDisplayTariffLineState(true));\n });\n }\n }, [dispatch, tariffSpeed, addressIsVerified, shouldConnect]);\n\n useEffect(() => {\n if (displayAdditionalTariffLine && isEdit) {\n setDisplayAdditionalTariffLine(false);\n }\n }, [displayAdditionalTariffLine, isEdit]);\n\n const goToSpeed100Tariffs = () => {\n if (availableSpeed === EAvailableSpeed.lessOrEqual100) {\n analytics.address.only100Clicked();\n } else {\n analytics.address.lessThan1000Clicked();\n }\n\n location.href = `/full-buy?filters=${availableSpeed === EAvailableSpeed.lessOrEqual100 ? ETariffFilters.SPEED100 : ETariffFilters.SPEED_LESS_1000}`;\n };\n\n return (\n \n {isEdit &&\n \n

{`Проверьте, доступен ли тариф «${title}» по вашему адресу`}

\n \n
\n }\n\n {!isEdit &&\n EAvailableSpeed.lessOrEqual100}\n requiredGigaSpeed={Number(tariffSpeedAcrossEnum) > EAvailableSpeed.lessOrEqual100}\n availableSpeed={availableSpeed}\n isHouseConnected={isHouseConnected}\n tariffName={title}\n isNotFlatAddress={isHouseCottage}\n addressStatus={addressStatus}\n />\n }\n {/* Альтернативные тарифы */}\n {displayAdditionalTariffLine &&\n \n \n \n }\n {selectedTariff &&\n \n }\n
\n );\n};\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const EditableContactsForm = styled.div`\n position: relative;\n flex-direction: column;\n align-items: flex-start;\n row-gap: 12px;\n width: 100%;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n align-items: stretch;\n }\n`;\n\nexport const NoWrapText = styled.span`\n display: contents;\n white-space: nowrap;\n`;\n\nexport const BoldText = styled.span`\n display: contents;\n ${FONTS.H5};\n`;\n\nexport const BlockWrap = styled.div`\n display: grid;\n flex-wrap: nowrap;\n align-items: flex-start;\n grid-template-columns: 524px min-content;\n column-gap: 12px;\n width: 100%;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n grid-template-columns: 1fr;\n row-gap: 24px;\n } \n`;\n\nexport const BlockTitle = styled.div`\n ${FONTS.S};\n color: ${COLORS.TextPrimary};\n`;\n","import { memo } from 'react';\n\nimport { PersonForm } from '~/src/features/full-buy/components/uiReactComponents/PersonForm';\n\nimport * as ST from './styled';\n\nexport type TField = {\n value: string,\n isValid: boolean,\n clearInput: () => void,\n}\n\nexport type TContactDetailsProps = {\n title: string,\n fio: string,\n phone: string,\n isConfirmButtonActive?: boolean,\n btnText?: string,\n hideBtn?: boolean,\n}\n\nexport type TContactDetailsCallbacks = {\n onFillFio: (fio: string) => void,\n onFillPhone: (phone: string) => void,\n onClick?: () => void,\n}\n\nconst EditableContactsForm = ({\n title,\n fio,\n phone,\n isConfirmButtonActive,\n btnText,\n hideBtn,\n onFillFio,\n onFillPhone,\n onClick,\n}: TContactDetailsProps & TContactDetailsCallbacks): JSX.Element => {\n return (\n \n {title && {title}}\n \n \n \n \n );\n};\n\nexport default memo(EditableContactsForm);\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport Throbber from '@r1-frontend/ui-react/components/loaders/Throbber';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nexport const StyledThrobber = styled(Throbber)`\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n background-color: rgba(0,0,0,0.1);\n`;\n\nexport const ContactPerson = styled.div`\n position: relative;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n padding: 24px;\n border-radius: ${BorderRadius.OuterBlockRadius};\n background-color: ${COLORS.BgSurface};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n padding: 16px;\n }\n`;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { batch, shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { selectTimeSlot } from '@r1-frontend/api-domru/full-buy/v1/sale-agent/select-time-slot';\nimport { ResponseDto } from '@r1-frontend/api-domru/full-buy/v1/sale-agent/select-time-slot/dto/ResponseDto';\nimport { saleAgentTimeSlots } from '@r1-frontend/api-domru/full-buy/v1/sale-agent/time-slots';\nimport { RequestDto } from '@r1-frontend/api-domru/full-buy/v1/sale-agent/time-slots/dto/RequestDto';\nimport {\n ResponseDto as GetTimeSlotsResponseDto,\n} from '@r1-frontend/api-domru/full-buy/v1/sale-agent/time-slots/dto/ResponseDto';\n\nimport DateOfServiceEngineerVisitWrapper, {\n ESaleAgentClientName,\n TReturnType,\n} from '@r1-frontend/service-engineer-visit';\n\nimport Alert from '@r1-frontend/ui-react/components/Alert';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { Danger } from '@r1-frontend/ui-react/components/svg/main';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport CallbackContacts from '~/src/features/full-buy/CallbackContacts';\nimport { MainLayout } from '~/src/features/full-buy/containers/MainLayout/MainLayout';\nimport { isConnectionCostByVisitShown } from '~/src/features/full-buy/helpers/ab/isConnectionCostHidden';\nimport selectTimeSubText from '~/src/features/full-buy/helpers/selectTimeSubText';\nimport { setIsLoadingShown, setSlot } from '~/src/features/full-buy/store/actions';\nimport { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport TariffInclude from '~/src/features/full-buy/TariffInclude';\nimport { TState } from '~/src/store';\nimport { selectDomain } from '~/src/store/selectors/domain';\n\nimport * as S from '~/src/features/full-buy/containers/pages/styled';\n\nconst TIME_SLOT_YK_ERROR = 'Предварительное согласование с УК/ТСЖ';\n\nenum ESlotsContainerState {\n SHOW_SLOTS = 1,\n HIDE_SLOTS = 2,\n SLOTS_EMPTY = 3\n}\n\ntype TSlotResult = {\n state: ESlotsContainerState,\n result: TReturnType | null,\n errorMsg: string,\n}\n\nexport const EngineerRequest = (): JSX.Element | null => {\n const analytics = useAnalytics();\n const dispatch = useDispatch();\n\n const isLaptop = useMatchMediaByWidth(wideBreakpoints.laptop);\n const [failureResponseFromSelectSlot, setFailureResponseFromSelectSlot] = useState(false);\n const [slotResult, setSlotResult] = useState({ state: ESlotsContainerState.SHOW_SLOTS, result: null, errorMsg: '' });\n\n const [isTimeSlotLoading, setIsTimeSlotLoading] = useState(true);\n\n const {\n products,\n agreementId,\n domain,\n providerId,\n slot,\n selectedTariff,\n } = useSelector((state: TState) => ({\n products: state.fullBuy.products,\n agreementId: state.fullBuy.agreement.agreementId,\n domain: selectDomain(state),\n providerId: state.city.provider.providerId,\n slot: state.fullBuy.slot,\n selectedTariff: selectCurrentTariff(state),\n }), shallowEqual);\n\n const dateTime = slot?.date;\n\n const hasEquipment = useMemo(() => !!products?.some(el => el.quantity > 0), []);\n\n useEffect(() => {\n dispatch(setIsLoadingShown(isTimeSlotLoading));\n }, [isTimeSlotLoading]);\n\n useEffect(() => {\n if (slotResult.result !== null && slotResult.result.date && slotResult.result.hour && agreementId) {\n (async(slot: TReturnType, agreement: number) => {\n const requestData = {\n agreementId: agreement,\n dateFrom: `${slot.date} ${slot.hour}`,\n saleAgentClientName: ESaleAgentClientName.FULL_BUY_SITE,\n info: slot.comment,\n };\n\n const resp = await doRequest.fullBuy(\n selectTimeSlot(providerId, requestData),\n );\n\n if (resp.isSuccess) {\n batch(() => {\n dispatch(setSlot(slot));\n dispatch(goToNextStep());\n });\n\n analytics.timeSlots.success();\n } else {\n setFailureResponseFromSelectSlot(true);\n\n analytics.timeSlots.failed(resp.error.message, domain);\n }\n })(slotResult.result, agreementId);\n }\n }, [domain, agreementId, slotResult]);\n\n const handleConfirm = (result: TReturnType | null, errorMsg?: string) => {\n setSlotResult(prevState => ({\n ...prevState,\n state: result === null ? ESlotsContainerState.SLOTS_EMPTY : ESlotsContainerState.SHOW_SLOTS,\n result,\n errorMsg: errorMsg || '',\n }));\n };\n\n const onUpdate = () => {\n setIsTimeSlotLoading(false);\n };\n\n const getTimeSlots = (providerId: number, body: RequestDto) => {\n return doRequest.fullBuy(saleAgentTimeSlots(providerId, body));\n };\n\n if (!agreementId) {\n throw new Error('FullBuy Error. Required agreementId in this page!');\n }\n\n return (\n \n \n

Визит инженера

\n {(slotResult.state === ESlotsContainerState.SHOW_SLOTS && !failureResponseFromSelectSlot) && (\n <>\n {isConnectionCostByVisitShown(!selectedTariff?.isCottage)\n ? <>\n \n Стоимость подключения составляет {selectedTariff?.connectionPrice.final} рублей. В эту сумму входят\n визит инженера, доставка и настройка оборудования, качественные материалы и прокладка восьмижильного\n кабеля длиной до 5 метров без ущерба для ремонта. Инженер поможет с настройкой услуг, онлайн\n оплатой, продемонстрирует работу услуг и ответит на ваши вопросы.\n \n \n Мы можем вам позвонить и уточнить детали. Убедитесь, что у вас отключен автоответчик\n и антиспам приложения.\n \n \n : \n {!hasEquipment && <>Инженер проложит кабель, подключит и настроит услуги.{'\\n'}}\n {selectTimeSubText(hasEquipment, false)}{'\\n'}\n Мы можем вам позвонить и уточнить детали. Убедитесь, что у вас отключен автоответчик и антиспам\n приложения.\n \n }\n \n )}\n\n {slotResult.state === ESlotsContainerState.SLOTS_EMPTY &&\n \n \n {slotResult.errorMsg.includes(TIME_SLOT_YK_ERROR)\n ? <>Мы свяжемся с вами в течение дня и поможем выбрать дату и время визита инженера.\n : <>Не удалось подтвердить время и дату. Мы свяжемся с вами в течение дня и поможем\n выбрать их заново.\n Чтобы мы смогли дозвониться — проверьте, что у вас отключен автоответчик и антиспам\n приложения.\n }\n \n \n }\n {failureResponseFromSelectSlot && (\n \n \n Не удалось подтвердить дату. Мы свяжемся с вами в течение дня и поможем выбрать её заново.\n Чтобы мы смогли дозвониться — проверьте, что у вас отключен автоответчик и антиспам приложения.\n \n \n )}\n\n {(slotResult.state === ESlotsContainerState.SHOW_SLOTS && !failureResponseFromSelectSlot) &&\n analytics.timeSlots.start()}\n contractId={agreementId}\n clientName={ESaleAgentClientName.FULL_BUY_SITE}\n withComment={true}\n gaCategory={analytics.category}\n domain={domain}\n onUpdateLoading={onUpdate}\n />\n }\n {(slotResult.state === ESlotsContainerState.SLOTS_EMPTY || failureResponseFromSelectSlot) && !isLaptop &&\n <>\n \n

Если остались вопросы

\n \n \n }\n
\n \n );\n};\n","import React, { useState } from 'react';\nimport { batch, useDispatch, useSelector } from 'react-redux';\n\nimport { fillFioAction } from '@r1-frontend/entities/ContactDetail/actions/fillFio';\nimport { fillPhoneAction } from '@r1-frontend/entities/ContactDetail/actions/fillPhone';\nimport { setConfirmedPhone } from '@r1-frontend/entities/ContactDetail/actions/setConfirmedPhone';\n\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\n\nimport { ConfirmNumberPopup } from '~/src/components/ConfirmNumberPopup';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport EditableContactsForm from '~/src/features/full-buy/ContactPerson/EditableContactsForm';\nimport { MainLayout } from '~/src/features/full-buy/containers/MainLayout/MainLayout';\nimport { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport { TState } from '~/src/store';\nimport { hidePopup } from '~/src/store/reducers/popups/actions';\nimport { getPopupData } from '~/src/store/reducers/popups/selectors';\n\nimport * as ST from './styled';\n\nconst popupId = 'confirmPopup';\n\nexport const Contacts = (): JSX.Element | null => {\n const analytics = useAnalytics();\n\n const {\n fio,\n phone,\n confirmPopup,\n } = useSelector((state: TState) => ({\n fio: state.contactDetails.editedFio,\n phone: state.contactDetails.editedPhone,\n confirmPopup: getPopupData(state, popupId),\n }));\n\n const dispatch = useDispatch();\n\n const [isFIOEnterStarted, setIsFIOEnterStarted] = useState(false);\n const [isPhoneEnterStarted, setIsPhoneEnterStarted] = useState(false);\n\n const onFillFio = (_person: string) => {\n if (!isFIOEnterStarted) {\n analytics.contacts.startEnterName();\n setIsFIOEnterStarted(true);\n }\n dispatch(fillFioAction(_person));\n };\n\n const onFillPhone = (_phone: string) => {\n if (!isPhoneEnterStarted) {\n analytics.contacts.startEnterPhoneNumber();\n setIsPhoneEnterStarted(true);\n }\n dispatch(fillPhoneAction(_phone));\n };\n\n const onCloseConfirmPopup = () => {\n dispatch(hidePopup(popupId));\n };\n\n const executeFinalAction = () => {\n dispatch(goToNextStep());\n };\n\n const onConfirmPhone = () => {\n batch(() => {\n dispatch(setConfirmedPhone(phone));\n dispatch(hidePopup(popupId));\n });\n executeFinalAction();\n };\n\n return (\n \n \n

Введите ваши ФИО и номер телефона

\n \n Они нужны, чтобы оформить заявку на подключение онлайн.\n Вам останется выбрать только дату и время визита инженера.\n \n
\n \n \n \n \n
\n );\n};\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n/**\n * Получение конечного идентификатора тарифа по набору подписок.\n *\n * @param salePackageId number\n * @param subscriptions number[]\n * @link https://master.api-tariffs.sandbox.d2c.r-one.io/docs#/Tariffs/TariffsController_getPackageIdBySubscriptions\n */\nconst getPackageIdBySubscriptions = (salePackageId: number, subscriptions: number[]): IRequest => ({\n uri: `v1/tariffs/${salePackageId}/package-id-by-subscriptions`,\n method: 'GET',\n queryParams: {\n subscriptions,\n },\n withProvider: true,\n});\n\nexport default getPackageIdBySubscriptions;\n","import { TResponse } from '@r1-frontend/do-request/core/types';\nimport { captureQueryError } from '@r1-frontend/do-request/error';\n\nimport { IBundlePackage } from '@r1-frontend/shared/types/tariff/bundle/IBundlePackage';\nimport { IInternetPackage } from '@r1-frontend/shared/types/tariff/mono/IInternetPackage';\n\nimport contentRequest from '~/src/api/requests/contentRequest';\nimport { getAccessModeByRights } from '~/src/helpers/accessMode';\n\nexport type TDataResponse = TResponse<{\n bundles: Record,\n mono: IInternetPackage[],\n}, any>;\n\nexport interface IGetCitiesTariffsQueryParams {\n availableAuth?: number, // Фильтр доступа для авторизованных пользователей\n availableNew?: number, // Фильтр доступа для неавторизованных\n selfOrder?: number, // Фильтр доступа для полной покупки (по-умолчанию - false)\n isBackcallAvailable?: number, // Доступно для оформления в обратном звонке (по-умолчанию - не учитывается, 1 да, 0 нет, * не переданный параметр - отсутствие фильрации по параметру)\n ignoreAvailable?: number, // Игонорировать параметр sale у пакетов и available у моно, это нужно чтобы получить все тарифы какие пришли от биллинга (по-умолчанию - 0)\n isLowSpeed?: number, // Если передан этот параметр, то вернутся тарифы со скорость до 100. По умолчанию - 0, чтобы заработало нужно передать 1\n restrictIgnore?: number, // Если передан этот параметр, то вернуться тарифы со скорость до 100 который отключены. По умолчанию - 0, чтобы заработало нужно передать 1\n landingAvailable?: string, // Если передан этот параметр, то вернуться тарифы, которые доступны из лендингов(берется из url query) (по-умолчанию - не учитывается, 1 да)\n}\n\nexport const getCitiesTariffs = async(providerId: number, params?: IGetCitiesTariffsQueryParams): Promise => {\n const url = '/v1/cities/tariffs';\n\n try {\n const response = await contentRequest.get(url, {\n params: {\n providerId,\n accessMode: getAccessModeByRights({}),\n ...(params || {}),\n },\n });\n\n return {\n isSuccess: true,\n payload: response.data,\n };\n } catch (error) {\n return captureQueryError(error);\n }\n};\n","import { IOfferCreateAddress, IOfferCreateItem, IOfferCreateRequestDto } from '@r1-frontend/api-domru/full-buy/v2/agreement/offer-create';\nimport { IAddressProps } from '@r1-frontend/entities/ContactAddress/selectors/selectAddressParams';\n\nimport { isServerSide } from '@r1-frontend/shared/helpers/ssr';\nimport { TSalePackage } from '@r1-frontend/shared/types/tariff/salePackage/TSalePackage';\n\nimport { getCitiesTariffs, IGetCitiesTariffsQueryParams } from '~/src/api/content/cities/tariffs';\nimport { DEALER_UID } from '~/src/constants/sessionStorageKeys';\nimport { getProductsCosts } from '~/src/features/full-buy/functions';\nimport { TUnifiedAddressData } from '~/src/features/full-buy/store/initialState';\n\nimport { IFullBuyTariff, tariffTransformer } from './tariffTransformer';\nimport { TProduct } from './transformShopItem';\n\ninterface IRequestBody {\n fio: string,\n phone: string,\n tariffId: number,\n productsByProps: IOfferCreateItem[],\n summaryCheckInfo: string,\n promoCode: string,\n analytics_id: string,\n}\n\n/**\n * Возвращает true если браузер поддерживает webp\n * Должен использоваться только на стороне браузера\n */\nconst isWebp = async(): Promise => {\n if (isServerSide()) {\n throw new Error('Проверка isWebp(), вызвана на стороне сервера (SSR)!');\n }\n\n return new Promise(resolve => {\n const image = new Image();\n image.onerror = () => resolve(false);\n image.onload = () => resolve(image.width === 1);\n image.src = 'data:image/webp;base64,UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoBAAEAAwA0JaQAA3AA/vuUAAA=';\n }).catch(() => false);\n};\n\n// Данные по пакетам тарифов\nexport const fetchTariffPackages = async(providerId: number, queryParams: IGetCitiesTariffsQueryParams, forCottage = false): Promise => {\n const resp = await getCitiesTariffs(providerId, queryParams);\n const retrieveTariffsFunction = forCottage ? getOnlyCottageTariffPackages : getOnlyCityTariffPackages;\n\n if (resp.isSuccess) {\n const { bundles, mono } = resp.payload;\n\n const bundlePackages = Object.values(bundles || {});\n const tariffs = retrieveTariffsFunction([...mono, ...bundlePackages]);\n\n if (!tariffs) {\n return null;\n }\n\n const isSupportsWebp = await isWebp();\n\n // @todo move transformer to the initialization action\n return tariffs?.map(tariff => tariffTransformer(tariff, isSupportsWebp)) || null;\n }\n\n return null;\n};\n\n// Получаем только тарифы для города\nexport const getOnlyCityTariffPackages = (tariffPackages: TSalePackage[] | null): TSalePackage[] | undefined => {\n return tariffPackages?.filter((pack) => {\n const isCottage = 'salePackage2in1' in pack ? pack.salePackage2in1.is_cottage : pack.is_cottage;\n return !isCottage;\n });\n};\n\nexport const getOnlyCottageTariffPackages = (tariffPackages: TSalePackage[] | null): TSalePackage[] | undefined => {\n return tariffPackages?.filter((pack) => {\n return 'salePackage2in1' in pack ? pack.salePackage2in1.is_cottage : pack.is_cottage;\n });\n};\n\ninterface ICheckInfoProps {\n promoPrice: number | null,\n price: number | null,\n products: TProduct[],\n connectPrice: number,\n oncePaymentSum: number,\n monthlyPaymentSum: number,\n}\n\n/**\n * Собирает информацию для комментария при создании договора\n */\nexport const getSummaryCheckInfo = ({\n promoPrice,\n price,\n\n products,\n connectPrice,\n oncePaymentSum,\n monthlyPaymentSum,\n}: ICheckInfoProps) => {\n const showPrice = promoPrice || price;\n const tariff = showPrice ? `, тариф ${showPrice}` : '';\n const productsCost = getProductsCosts(products);\n const oncePaymentEquipment = `, оборудование ${productsCost.once}`;\n const connection = `, подключение ${connectPrice}`;\n const monthlyPaymentEquipment = `, оборудование ${productsCost.monthly}`;\n\n return `Ежемесячно ${monthlyPaymentSum}` +\n tariff +\n monthlyPaymentEquipment +\n '. ' +\n `Разово ${oncePaymentSum}` +\n connection +\n oncePaymentEquipment +\n '. ' +\n `Итого: ${oncePaymentSum + monthlyPaymentSum}`;\n};\n\n// собираем данные для отправки запроса\nexport const createOfferRequestBody = (\n address: IAddressProps | null,\n unifiedAddress: TUnifiedAddressData | undefined,\n {\n fio,\n phone,\n tariffId,\n productsByProps,\n summaryCheckInfo,\n promoCode,\n analytics_id,\n }: IRequestBody,\n): IOfferCreateRequestDto => {\n const dealerUid = window.sessionStorage.getItem(DEALER_UID) ?? undefined;\n\n let addressData: IOfferCreateAddress = { companyId: 0, office: '' };\n\n if (address) {\n addressData = {\n houseId: address.house.value,\n office: address.flat,\n companyId: address.companyId,\n };\n }\n\n if (unifiedAddress) {\n addressData = {\n unifiedHouseId: unifiedAddress.address.unifiedHouseId,\n office: unifiedAddress.address.flat,\n companyId: 0,\n };\n }\n\n const result: IOfferCreateRequestDto = {\n address: addressData,\n personalInformation: {\n clientName: fio,\n clientPhone: phone,\n },\n tariff: {\n tariffId,\n },\n items: productsByProps,\n comment: summaryCheckInfo,\n promocodeName: promoCode,\n analyticsId: analytics_id,\n };\n\n if (dealerUid) {\n result.managerId = Number(dealerUid);\n window.sessionStorage.removeItem(DEALER_UID);\n }\n\n return result;\n};\n","import { createSelector } from 'reselect';\n\nimport { IAddressProps, selectAddressParamsMemoize } from '@r1-frontend/entities/ContactAddress/selectors/selectAddressParams';\nimport { selectIsPhoneConfirmed } from '@r1-frontend/entities/ContactDetail/selectors/selectIsPhoneConfirmed';\n\nimport { IFlow, TUnifiedAddressData } from '~/src/features/full-buy/store/initialState';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { IFullBuyTariff } from '~/src/features/full-buy/store/tariffTransformer';\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\nimport { TState } from '~/src/store';\nimport { selectDomain } from '~/src/store/selectors/domain';\n\nexport interface IDataForAgreement {\n domain: string,\n tariffPackage: IFullBuyTariff | null,\n addressParams: IAddressProps | null,\n isPhoneConfirmed: boolean,\n providerId: number,\n isHouseConnected: boolean,\n gigabitAvail: number,\n fio: string,\n phone: string,\n products: TProduct[],\n promoCode: string,\n flow: IFlow | null,\n selectedSubscriptions: number[],\n unifiedSelectedAddress: TUnifiedAddressData,\n}\n\n/**\n * Селектор выбирает данные для функции создания договора\n */\nexport const selectDataForCreateAgreement = createSelector(\n [\n (state: TState) => state,\n ],\n (state: TState): IDataForAgreement => ({\n domain: selectDomain(state),\n tariffPackage: selectCurrentTariff(state),\n addressParams: selectAddressParamsMemoize(state),\n isPhoneConfirmed: selectIsPhoneConfirmed(state),\n providerId: state.city.provider.providerId,\n isHouseConnected: state.contactAddress.verifiedAddressData.isHouseConnected,\n gigabitAvail: state.contactAddress.verifiedAddressData.gigabitAvail,\n fio: state.contactDetails.editedFio,\n phone: state.contactDetails.confirmedPhone.phone,\n products: state.fullBuy.products,\n promoCode: state.fullBuy.promoCode?.value || '',\n flow: state.fullBuy.flow,\n selectedSubscriptions: state.fullBuy.selectedSubscriptions,\n unifiedSelectedAddress: state.fullBuy.selectedAddress!,\n }),\n);\n","import React, { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { createAgreement } from '~/src/features/full-buy/store/actions/createAgreement';\n\n/**\n * Экран диспатчит создание договора\n */\nexport const CreateAgreementScreen = (): JSX.Element => {\n const analytics = useAnalytics();\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(createAgreement(analytics));\n }, []);\n\n return <>;\n};\n","import { doRequest } from '@r1-frontend/do-request';\nimport getPackageIdBySubscriptionIds\n from '@r1-frontend/api-domru/api-tariffs/v1/tariffs/[salePackageId]/packageIdBySubscriptions';\nimport {\n IOfferCreateResponseDto,\n offerCreate,\n} from '@r1-frontend/api-domru/full-buy/v2/agreement/offer-create';\n\nimport { getGaId } from '@r1-frontend/shared/helpers/getGaId';\n\nimport FullBuyAnalytics from '~/src/features/full-buy/analytics';\nimport {\n calculateTotalPrices,\n getErrorMessage,\n isGigabitCanConnected,\n isGigaSpeedRequired,\n isTariffCanConnected,\n submitRequest,\n} from '~/src/features/full-buy/functions';\nimport { buildProductsForRequest } from '~/src/features/full-buy/helpers';\nimport { setCalculatedSalePackageId, setPromoCode } from '~/src/features/full-buy/store/actions';\nimport { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport { getAgreementDataString } from '~/src/features/full-buy/store/actions/helpers';\nimport { setStep } from '~/src/features/full-buy/store/actions/setStep';\nimport { createOfferRequestBody, getSummaryCheckInfo } from '~/src/features/full-buy/store/functions';\nimport { selectDataForCreateAgreement } from '~/src/features/full-buy/store/selectors/selectDataForCreateAgreement';\nimport { TDispatch, TGetState } from '~/src/store';\nimport { selectCsrf } from '~/src/store/selectors/auth/selectCsrf';\n\nimport { setAgreementData } from './index';\n\n/**\n * Создание договора\n * TODO Рефакторинг функции, перенести второй запрос, подготовка дынных в отдельную функцию\n */\nexport const createAgreement = (analytics: FullBuyAnalytics) => {\n return async(dispatch: TDispatch, getState: TGetState): Promise => {\n const state = getState();\n const {\n tariffPackage,\n isPhoneConfirmed,\n providerId,\n promoCode,\n isHouseConnected,\n gigabitAvail,\n products,\n fio,\n phone,\n flow,\n selectedSubscriptions,\n\n addressParams,\n unifiedSelectedAddress,\n } = selectDataForCreateAgreement(state);\n const csrf = selectCsrf(state);\n\n if (!tariffPackage || !(addressParams || unifiedSelectedAddress) || !isPhoneConfirmed || !fio || !phone || !flow) {\n throw new Error('FullBuy Error. Required data is not set');\n }\n\n const lastStepKey = flow.steps.length - 1;\n\n let calculatedSalePackageId: number | null = null;\n\n if (selectedSubscriptions && selectedSubscriptions.length > 0) {\n const response = await doRequest.apiTariffs<{\n salePackageId: number,\n }>(getPackageIdBySubscriptionIds(tariffPackage.sale_package_id, selectedSubscriptions));\n\n if (response.isSuccess) {\n calculatedSalePackageId = Number(response.payload.salePackageId);\n dispatch(setCalculatedSalePackageId(calculatedSalePackageId));\n }\n }\n\n const { monthlyPayment, oncePayment } = calculateTotalPrices(\n tariffPackage.promoPrice || tariffPackage.price,\n tariffPackage.connectionPrice.final,\n products,\n );\n\n const summaryCheckInfo = getSummaryCheckInfo({\n promoPrice: tariffPackage.promoPrice,\n price: tariffPackage.price,\n products: products,\n connectPrice: tariffPackage.connectionPrice.final,\n oncePaymentSum: oncePayment,\n monthlyPaymentSum: monthlyPayment,\n });\n const tariffId = calculatedSalePackageId\n ? calculatedSalePackageId\n : tariffPackage.sale_package_id;\n\n const offerRequestBody = createOfferRequestBody(\n addressParams,\n unifiedSelectedAddress,\n {\n fio,\n phone,\n tariffId,\n productsByProps: buildProductsForRequest([...products, ...tariffPackage.additionalProducts]),\n summaryCheckInfo,\n promoCode,\n analytics_id: getGaId(),\n },\n );\n\n const respAgreement = await doRequest.fullBuy(\n offerCreate(providerId, offerRequestBody),\n );\n\n analytics.createAgreement.try();\n\n const agreementDataString = getAgreementDataString(tariffPackage.tariff_name, monthlyPayment, oncePayment);\n\n /* Ошибка при создании договора. Таймслоты пропускаем переходим к финальному шагу */\n if (!respAgreement.isSuccess) {\n const gigabitMayConnect = isGigabitCanConnected(gigabitAvail);\n const requiredGigaSpeed = isGigaSpeedRequired(tariffPackage.speed);\n const shouldConnect = isTariffCanConnected(isHouseConnected, requiredGigaSpeed, gigabitMayConnect);\n\n submitRequest({\n isMono: !!tariffPackage.isMono,\n fio,\n phone,\n csrf,\n sale_package_id: tariffPackage.sale_package_id,\n tariff_name: tariffPackage.tariff_name,\n additionalProducts: tariffPackage.additionalProducts,\n products: products,\n shouldConnect,\n address: unifiedSelectedAddress?.address.value,\n street: addressParams?.street.label,\n house: addressParams?.house.label,\n flat: addressParams?.flat,\n });\n\n dispatch(setAgreementData({\n agreementId: null,\n agreementNumber: null,\n isDouble: false,\n hasError: true,\n errorMessage: getErrorMessage({}),\n }));\n\n // TODO вызывать nextStep - логику пропуска шага таймслотов реализовать в контейнере EngineerRequest\n // Добавить тест на проверку шага\n dispatch(setStep(lastStepKey));\n\n analytics.createAgreement.fail(respAgreement.error?.message, agreementDataString);\n\n if (promoCode) {\n analytics.createAgreement.promocodeActivation(`error | ${promoCode}`);\n }\n\n return;\n }\n\n const { isDouble, fromCache, plbRegistrationSuccessful, promoCodeSuccessful } = respAgreement.payload;\n const agreementNumber = respAgreement.isSuccess ? Number(respAgreement.payload.agreementNumber) : null;\n const agreementId = respAgreement.isSuccess ? Number(respAgreement.payload.agreementId) : null;\n\n /* Создан двойной договор. Таймслоты пропускаем переходим к финальному шагу */\n if (isDouble || fromCache) {\n // TODO рефакторинг, не обрабатывается ситуация если fromCache = true, уточнить flow для fromCache = true\n dispatch(setAgreementData({\n agreementId: null,\n agreementNumber: null,\n isDouble,\n hasError: true,\n errorMessage: getErrorMessage({ isDouble, isFromCache: fromCache }),\n }));\n\n // TODO вызывать nextStep - логику пропуска шага таймслотов реализовать в контейнере EngineerRequest\n dispatch(setStep(lastStepKey));\n\n analytics.createAgreement.double(agreementNumber, agreementDataString);\n return;\n }\n\n if (!agreementId) {\n throw new Error('FullBuy Error. Required agreementId!');\n }\n\n if (!agreementNumber) {\n throw new Error('FullBuy Error. Required agreementNumber!');\n }\n\n /* Договор создан без ошибок, переходим к тайм-слотам */\n dispatch(setAgreementData({\n agreementId,\n agreementNumber,\n isDouble: false,\n hasError: false,\n errorMessage: '',\n }));\n\n // @ts-ignore\n dispatch(goToNextStep());\n\n analytics.createAgreement.success(agreementNumber, agreementDataString);\n\n if (promoCode) {\n // Проверяем, зарегистрирован ли промокод\n if (plbRegistrationSuccessful || promoCodeSuccessful) {\n analytics.createAgreement.promocodeActivation(`success | ${promoCode}`);\n } else {\n // Ошибка\n analytics.createAgreement.promocodeActivation(`error | ${promoCode}`);\n dispatch(setPromoCode({ value: promoCode, hasError: true }));\n }\n }\n\n return;\n };\n};\n","import { actionTypes } from '~/src/features/full-buy/store';\n\nexport const setCalculatedSalePackageId = (salePackageId: number) => ({\n type: actionTypes.SetCalculatedSalePackageId,\n payload: {\n salePackageId,\n },\n});\n","/* Информация о договоре */\nexport const getAgreementDataString = (tariffName: string, itogInMonth: number, itogInOnce: number) =>\n `${tariffName} total amount: ${itogInMonth + itogInOnce} monthly payment: ${itogInMonth} one-time payment: ${itogInOnce}`;\n","export const selectTimeSubText = (isInstallationHardware: boolean, isTimeSelected: boolean): string => {\n const endDot = (isTimeSelected ? '' : '.');\n\n return isInstallationHardware\n ? `Привезёт и подключит оборудование, проложит кабель, проверит и покажет, как всё работает. Поможет оплатить услуги онлайн: на сайте или в мобильном приложении${endDot}`\n : `А ещё покажет, как все работает, ответит на вопросы и поможет оплатить услуги на сайте или в мобильном приложении${endDot}`;\n};\n\nexport default selectTimeSubText;\n","import { actionTypes } from '~/src/features/full-buy/store';\n\nexport const setIsLoadingShown = (flag: boolean) => ({\n type: actionTypes.SET_LOADER_SHOWN_FLAG,\n payload: flag,\n});\n","import { useState } from 'react';\nimport { OrderedList } from 'packages/ui-react/src/components/List/OrderedList';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport DefaultPopup from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { InfoCircleFlip } from '@r1-frontend/ui-react/components/svg/main';\nimport ControlElement from '@r1-frontend/ui-react/components/typography/controlElement';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nexport const RouterChoiceInfo = (): JSX.Element => {\n const [isOpen, changePopupState] = useState(false);\n\n const handleClosePopup = () => {\n changePopupState(false);\n };\n\n const handleOpenPopup = () => {\n changePopupState(true);\n };\n\n return (\n <>\n \n Если хотите получить максимум скорости от своего тарифа. Как выбрать роутер\n \n\n \n \n \n

Как выбрать роутер?

\n \n Роутеры, которые мы продаём, отлично подойдут для любого тарифа: они быстрые, надёжные и используют технологию Wi-Fi 6.\n \n \n Главное, на что стоит обратить внимание при выборе роутера:\n \n
  • Площадь покрытия
  • \n
  • Максимальное количество устройств, которые можно одновременно подключить к роутеру
  • \n
    \n
    \n
    \n\n \n \n \n
    \n
    \n \n );\n};\n","import { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport { goToPrevStep } from '~/src/features/full-buy/store/actions/goToPrevStep';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\n/**\n * Пропускаем шаг выбора роутера, если есть в тарифе\n */\nconst skipEquipmentStep = () => (dispatch: TAppThunkDispatch, getState: TGetState) => {\n const state = getState();\n const selectedTariff = selectCurrentTariff(state);\n const { stepIndex, prevStepIndex } = state.fullBuy;\n\n const isBackward = prevStepIndex > stepIndex;\n\n const hasEquipmentInTariff = selectedTariff?.additionalProducts.some(product => product.category === 'router' && product.required);\n\n if (hasEquipmentInTariff) {\n dispatch(isBackward ? goToPrevStep() : goToNextStep());\n }\n};\n\nexport default skipEquipmentStep;\n","import React, { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\n\nimport { RouterChoiceInfo } from '~/src/features/full-buy/components/RouterChoiceInfo';\nimport { EquipmentList } from '~/src/features/full-buy/containers/EquipmentList';\nimport { MainLayout } from '~/src/features/full-buy/containers/MainLayout/MainLayout';\nimport skipEquipmentStep from '~/src/features/full-buy/store/actions/skipEquipmentStep';\n\nexport const Equipments = (): JSX.Element => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(skipEquipmentStep());\n }, []);\n\n return (\n \n \n

    Рекомендуем выбрать роутер

    \n \n
    \n\n \n
    \n );\n};\n","import { useState } from 'react';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport ListItemWithIcon from '@r1-frontend/ui-react/components/List/WithIcon';\nimport DefaultPopup from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { InfoCircleFlip } from '@r1-frontend/ui-react/components/svg/main';\nimport { Forward, VideoAdd, VideoVertical, VoiceSquare } from '@r1-frontend/ui-react/components/svg/media';\nimport ControlElement from '@r1-frontend/ui-react/components/typography/controlElement';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { ListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nexport const DecoderInfo = (): JSX.Element => {\n const [isOpen, changePopupState] = useState(false);\n\n const handleClosePopup = () => {\n changePopupState(false);\n };\n\n const handleOpenPopup = () => {\n changePopupState(true);\n };\n\n return (\n <>\n \n Она нужна, чтобы смотреть ТВ-каналы и подписки из своего тарифа. {' '}\n Все преимущества приставки\n \n\n \n \n \n \n

    ТВ-приставка Movix — это:

    \n\n Тысячи игр и приложений для Android TV\n Цифровое ТВ нового поколения с управлением прямым эфиром\n Кино и сериалы из разных подписок в одном каталоге\n Удобный голосовой поиск и родительский контроль\n
    \n\n \n \n \n
    \n
    \n
    \n \n );\n};\n","import React, { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\n\nimport { DecoderInfo } from '~/src/features/full-buy/components/DecoderInfo';\nimport { DecoderList } from '~/src/features/full-buy/containers/DecoderList';\nimport { MainLayout } from '~/src/features/full-buy/containers/MainLayout/MainLayout';\nimport { skipEquipmentTvStep } from '~/src/features/full-buy/store/actions/skipEquipmentTvStep';\n\nexport const EquipmentsTv = (): JSX.Element => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(skipEquipmentTvStep());\n }, []);\n\n return (\n \n \n

    Выберите ТВ-приставку

    \n \n
    \n \n
    \n );\n};\n","import { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport { goToPrevStep } from '~/src/features/full-buy/store/actions/goToPrevStep';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\n/**\n * Пропускаем шаг выбора приставки:\n * для моно-тарифов\n * если есть обязательная приставка в тарифе\n * если а/б тест - не отображать приставку\n */\nexport const skipEquipmentTvStep = () => (dispatch: TAppThunkDispatch, getState: TGetState) => {\n const state = getState();\n const selectedTariff = selectCurrentTariff(state);\n const { stepIndex, prevStepIndex } = state.fullBuy;\n\n const isBackward = prevStepIndex > stepIndex;\n\n const hasRequiredTvBox = selectedTariff?.additionalProducts.find(el => el.category === EShopCategory.Decoders && el.required);\n\n if (selectedTariff?.isMono || hasRequiredTvBox) {\n // пропускаем экран приставок\n dispatch(isBackward ? goToPrevStep() : goToNextStep());\n }\n};\n","import React, { useContext, useMemo } from 'react';\n\nimport { House } from '@r1-frontend/ui-react/components/svg/building';\nimport { Electricity } from '@r1-frontend/ui-react/components/svg/devices';\nimport { CalendarSecond, Clock } from '@r1-frontend/ui-react/components/svg/time';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport ListItemWithIcon from '@r1-frontend/ui-react/organisms/ListItemWithIcon';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport { FullBuyContext, TFullBuyContextProperties } from '~/src/features/full-buy/analytics/context';\nimport InfoBlock from '~/src/features/full-buy/InfoBlock';\n\ninterface IProps {\n date?: string,\n sla?: string,\n isInstallationHardware: boolean,\n}\n\nconst getEngineerText = (isVillage = false) => {\n return isVillage\n ? `Просверлит необходимое отверстие и проложит кабель от оборудования провайдера к вам домой.
    \n Если интернет-кабель у вас уже есть — проверит его и заменит при необходимости.
    \n Настроит оборудование и покажет, как всё работает.
    \n Поможет оплатить услуги через сайт или мобильное приложение «Мой Дом.ру».
    \n Если понадобится кабель длиннее 5 метров, за дополнительные метры нужно будет доплатить.\n `\n : `Просверлит отверстие между квартирой и подъездом и проложит кабель.
    \n Если интернет-кабель в квартире уже есть — проверит его и заменит при необходимости.
    \n Если кабеля потребуется более 5 метров, каждый дополнительный метр оплачивается отдельно.
    \n Настроит оборудование и покажет, как всё работает. А ещё поможет оплатить услуги через сайт или мобильное приложение «Мой Дом.ру».\n `;\n};\n\nconst getHowToPrepareText = (isInstallationHardware = false) => {\n let text = '';\n\n if (isInstallationHardware) {\n text += 'Выберите и освободите место для роутера или ТВ-приставки.
    ';\n }\n\n text += `Держите под рукой паспорт, логин и пароль от Госуслуг для оформления электронного договора.
    \n Убедитесь, что ваши телевизор, компьютер или ноутбук исправны.
    \n Заранее пополните баланс на карте. Оплатить услуги можно только онлайн на сайте или через мобильное приложение.`;\n\n return text;\n};\n\nconst EmployeeVisit = ({ date, sla, isInstallationHardware }: IProps): JSX.Element => {\n const { isVillage } = useContext(FullBuyContext);\n const engineerText = useMemo(() => getEngineerText(isVillage), [isVillage]);\n const howToPrepareText = useMemo(() => getHowToPrepareText(isInstallationHardware), [isVillage, isInstallationHardware]);\n\n return (\n \n \n }\n />\n }\n />\n \n \n );\n};\n\nexport default EmployeeVisit;\n","import React, { useContext, useMemo } from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport Alert from '@r1-frontend/ui-react/components/Alert';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { InfoCircle, TickCircle } from '@r1-frontend/ui-react/components/svg/main';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { FullBuyContext, TFullBuyContextProperties } from '~/src/features/full-buy/analytics/context';\nimport CallbackContacts from '~/src/features/full-buy/CallbackContacts';\nimport { MainLayout } from '~/src/features/full-buy/containers/MainLayout/MainLayout';\nimport EmployeeVisit from '~/src/features/full-buy/EmployeeVisit';\nimport { isHaveSelectedProducts } from '~/src/features/full-buy/store/selectors/products/isHaveSelectedProducts';\nimport TariffInclude from '~/src/features/full-buy/TariffInclude';\nimport { TState } from '~/src/store';\n\nimport * as S from '~/src/features/full-buy/containers/pages/styled';\n\nexport const Final = (): JSX.Element => {\n const { isVillage } = useContext(FullBuyContext);\n const isLaptop = useMatchMediaByWidth(wideBreakpoints.laptop);\n\n const {\n agreementData,\n hasProducts,\n slot,\n } = useSelector((state: TState) => ({\n agreementData: state.fullBuy.agreement,\n hasProducts: isHaveSelectedProducts(state),\n slot: state.fullBuy.slot,\n }), shallowEqual);\n\n const dateTime = useMemo(() => {\n const [hour, minutes] = slot?.hour.split(':') || ['00', '00'];\n return `${slot?.date} c ${slot?.hour} по ${String(Number(hour) + 1).padStart(2, '0')}:${minutes}`;\n }, [slot?.date, slot?.hour]);\n\n return (\n \n \n {agreementData.isDouble &&\n \n \n К вашим данным уже привязан другой договор. Скоро позвоним, чтобы во всём разобраться.{'\\n'}\n Чтобы мы смогли дозвониться — проверьте, что у вас отключен автоответчик и антиспам приложения.\n \n \n }\n {agreementData.hasError && !agreementData.isDouble &&\n \n \n Не удалось создать договор. Скоро позвоним, чтобы во всём разобраться.{'\\n'}\n Чтобы мы смогли дозвониться — проверьте, что у вас отключен автоответчик и антиспам приложения.\n \n \n }\n {!agreementData.hasError &&\n <>\n \n \n Ваша заявка создана и подтверждена. Мы не будем беспокоить вас звонками,\n всю информацию вы получите в смс-сообщении.\n \n \n \n \n }\n {!isLaptop &&\n <>\n \n

    Если остались вопросы

    \n \n \n }\n
    \n
    \n );\n};\n","import { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport { goToPrevStep } from '~/src/features/full-buy/store/actions/goToPrevStep';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\n/**\n * Пропускаем шаг выбора роутера, если есть в тарифе\n */\nconst skipPrivateSectorEquipmentStep = () => (dispatch: TAppThunkDispatch, getState: TGetState) => {\n const state = getState();\n const selectedTariff = selectCurrentTariff(state);\n\n const { stepIndex, prevStepIndex } = state.fullBuy;\n\n const isBackward = prevStepIndex > stepIndex;\n\n if (!selectedTariff?.isCottage) {\n dispatch(isBackward ? goToPrevStep() : goToNextStep());\n }\n};\n\nexport default skipPrivateSectorEquipmentStep;\n","import React, { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\n\nimport { EShopCategory } from '~/src/api/content/shop/getShopItems';\nimport { EquipmentList } from '~/src/features/full-buy/containers/EquipmentList';\nimport { MainLayout } from '~/src/features/full-buy/containers/MainLayout/MainLayout';\nimport skipPrivateSectorEquipmentStep from '~/src/features/full-buy/store/actions/skipPrivateSectorEquipment';\n\nconst PrivateSectorEquipments = (): JSX.Element => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(skipPrivateSectorEquipmentStep());\n }, []);\n\n return (\n \n \n

    Необходимо выбрать оборудование

    \n \n Без него услуги не будут работать, и мы не сможем вам их подключить.\n \n
    \n\n \n
    \n );\n};\n\nexport default PrivateSectorEquipments;\n","import { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TState } from '~/src/store';\n\nexport const getSubscriptionsSummary = (state: TState) => {\n const currentTariff = selectCurrentTariff(state);\n\n if (currentTariff?.subscriptionsSummary) {\n const activeSubscriptions = currentTariff.subscriptionsSummary.map((item)=>{\n if (item.alias === currentTariff.alias) {\n return { ...item, active: true };\n }\n return { ...item, active: false };\n });\n\n const currentVariant = currentTariff?.subscriptionsSummary.findIndex(item => item.alias === currentTariff.alias);\n const hasNext = currentTariff.subscriptionsSummary[currentVariant + 1];\n const nextStep = currentTariff.subscriptionsSummary[hasNext ? currentVariant + 1 : currentVariant];\n\n return {\n subscriptionsSummary: activeSubscriptions,\n nextStep: nextStep,\n isLast: !hasNext,\n };\n }\n return null;\n};\n","import { useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport DefaultPopup from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { InfoCircleFlip } from '@r1-frontend/ui-react/components/svg/main';\nimport ControlElement from '@r1-frontend/ui-react/components/typography/controlElement';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport {\n getSubscriptionsSummary,\n} from '~/src/features/full-buy/store/selectors/getSubscriptionsSummary/getSubscriptionsSummary';\n\nexport const WantMoreSubscriptions = () => {\n const analytics = useAnalytics();\n\n const [isOpen, changePopupState] = useState(false);\n const currentTariff = useSelector(getSubscriptionsSummary);\n const handleClosePopup = () => {\n changePopupState(false);\n };\n const handleOpenPopup = () => {\n changePopupState(true);\n analytics.subscriptions.clickMoreSubscriptions();\n };\n const onClick = () => {\n analytics.initializationByTariffLine(String(currentTariff?.nextStep.speed));\n handleClosePopup();\n };\n const getSubscriptionText = (count: number, index: number) => {\n return `${count} ${getPluralize(['подписка', 'подписки', 'подписок'])(count)}${currentTariff?.subscriptionsSummary?.length === index + 1 ? '.' : ','}`;\n };\n\n if (!currentTariff) {\n return null;\n }\n\n return (\n <>\n \n Подписки уже входят в стоимость тарифа. Каждый месяц их можно менять. {' '}\n {!currentTariff.isLast && (\n Хочу больше подписок\n )}\n \n\n \n \n \n

    Больше подписок

    \n \n Чем быстрее интернет, тем больше подписок в тарифе:\n \n
    \n {currentTariff.subscriptionsSummary.map((item, index) => {\n return (\n \n {item.active\n ? {item.speed} Мбит/с — {getSubscriptionText(item.cnt, index)}\n : <>{item.speed} Мбит/с — {getSubscriptionText(item.cnt, index)}\n }\n \n );\n })}\n \n \n \n \n \n \n
    \n
    \n \n );\n};\n","import { LazyLoadImage } from 'react-lazy-load-image-component';\nimport styled from 'styled-components';\n\nimport Svg from '@r1-frontend/ui-react/components/svg/Svg';\n\nexport const ImageBlock = styled(LazyLoadImage)<{ src?: string }>`\n width: 100%;\n background-size: cover;\n`;\n\nexport const BenefitsText = styled.div`\n flex-direction: row;\n flex-wrap: nowrap;\n width: 100%;\n gap: 8px;\n\n ${Svg} {\n max-width: 24px;\n width: 100%;\n }\n`;\n","import styled from 'styled-components';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport HtmlContentFromApi from '@r1-frontend/ui-react/components/HtmlContentFromApi';\nimport DefaultPopup from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { TickCircle } from '@r1-frontend/ui-react/components/svg/main';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { IndentContainer, ListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport * as ST from './styled';\n\ntype TSubscriptionsPopup = {\n displayImage: string,\n description: string[],\n title: string,\n onClose: () => void,\n isOpen: boolean,\n}\nconst SubscriptionsAdditionalInfoPopup = ({ displayImage, description, isOpen, title, onClose, ...props }: TSubscriptionsPopup) => {\n return (\n \n \n \n

    {title}

    \n \n {description.map((item: string, index: number) =>\n \n \n \n \n {item}\n \n \n )\n }\n \n \n \n Закрыть\n \n \n
    \n \n );\n};\n\nexport default styled(SubscriptionsAdditionalInfoPopup)`\n ${ListContainer} {\n margin-bottom: 16px;\n }\n`;\n","import { ISubscription } from '~/src/features/full-buy/store/helpers/tariffTransformerHelpers';\nimport { TSubscription } from '~/src/features/full-buy/store/initialState';\n\nexport const selectSubscriptionPopup = (subscription: TSubscription | ISubscription) => {\n if ('fullDescription' in subscription) {\n return {\n displayImage: subscription?.images.desktop || '',\n description: subscription.fullDescriptionList,\n title: subscription?.title || '',\n isOpen: true,\n };\n }\n return {\n displayImage: subscription?.imageForFullBuyWebp || '',\n description: subscription.fullDescriptionList,\n title: subscription?.title || '',\n isOpen: true,\n };\n};\n","import { createSelector } from 'reselect';\n\nimport { ResponseSubscriptionType } from '@r1-frontend/api-domru/api-tariffs/v1/tariffs/[salePackageId]/subscriptions';\n\nimport { TSubscription } from '~/src/features/full-buy/store/initialState';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TState } from '~/src/store';\n\n/**\n * Получение обязательных и доступных для выбора (не выбранных!)\n */\nexport const getRequiredAndSelectivelySubscriptions = createSelector(\n [\n (state: TState) => state.fullBuy,\n selectCurrentTariff,\n ],\n ({ subscriptions, selectedSubscriptions }, tariff) => {\n if (tariff && subscriptions && tariff.sale_package_id in subscriptions) {\n const needToSelect = Number(tariff?.subscriptionsSummary?.find(s => tariff.speed === s.speed)?.cnt || 1);\n const needToSelectMultiple = needToSelect - 1;\n\n let isOneOfSelected = false;\n\n const sbs = subscriptions[tariff.sale_package_id].items\n .reduce<{ oneOf: TSubscription[], multiple: TSubscription[] }>(\n (acc, cur) => {\n if (cur.type === ResponseSubscriptionType.oneOf) {\n acc.oneOf.push(cur);\n if (selectedSubscriptions.includes(cur.serviceId)) {\n isOneOfSelected = true;\n }\n } else {\n acc.multiple.push(cur);\n }\n\n return acc;\n }, { oneOf: [], multiple: [] },\n );\n\n const leftToSelect = needToSelectMultiple - (isOneOfSelected ? selectedSubscriptions.length - 1 : selectedSubscriptions.length);\n\n return {\n subscriptions: sbs,\n selected: selectedSubscriptions,\n needToSelect: { oneOf: 1, multiple: needToSelectMultiple },\n leftToSelect: { oneOf: isOneOfSelected ? 0 : 1, multiple: leftToSelect },\n tariffName: tariff.tariff_name,\n };\n } else {\n return {\n subscriptions: { oneOf: [], multiple: [] },\n selected: [],\n needToSelect: { oneOf: 0, multiple: 0 },\n leftToSelect: { oneOf: 0, multiple: 0 },\n tariffName: '',\n };\n }\n },\n);\n","import React, { useState } from 'react';\nimport { batch, useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { ResponseSubscriptionType } from '@r1-frontend/api-domru/api-tariffs/v1/tariffs/[salePackageId]/subscriptions';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { ListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { TvSubscription } from '@r1-frontend/ui-react/organisms/TariffSubscription';\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport SubscriptionsAdditionalInfoPopup from '~/src/features/full-buy/components/SubscriptionsPopup/SubscriptionsAdditionalInfoPopup';\nimport { selectSubscriptionPopup } from '~/src/features/full-buy/helpers/selectSubscriptionPopup';\nimport { selectSubscription, unSelectSubscription } from '~/src/features/full-buy/store/actions';\nimport {\n getRequiredAndSelectivelySubscriptions,\n} from '~/src/features/full-buy/store/selectors/getRequiredAndSelectivelySubscriptions';\n\nconst subscriptionPlural = getPluralize(['дополнительную подписку', 'дополнительные подписки', 'дополнительных подписок']);\n\nconst initPopupData = {\n displayImage: '',\n title: '',\n description: [],\n isOpen: false,\n};\ntype TSubscriptions = {\n displayImage: string,\n title: string,\n description: string[],\n isOpen: boolean,\n}\n\nconst RequiredAndSelectivelySubscriptionsContainer = ({ className }: { className?: string }): JSX.Element => {\n const analytics = useAnalytics();\n\n const dispatch = useDispatch();\n const { subscriptions, selected, leftToSelect, needToSelect } = useSelector(getRequiredAndSelectivelySubscriptions);\n const [selectedSubscription, setState] = useState(initPopupData);\n const handleToggleMultiple = (id: number, title: string) => () => {\n const state = !selected.includes(id);\n const callback = state\n ? selectSubscription\n : unSelectSubscription;\n\n dispatch(callback(id, title, analytics.subscriptions));\n };\n\n const handleToggleOneOf = (id: number, title: string) => () => {\n const state = !selected.includes(id);\n const callback = state\n ? selectSubscription\n : unSelectSubscription;\n\n const listOfActions = [callback(id, title, analytics.subscriptions)];\n\n if (state) {\n subscriptions.oneOf\n .filter(({ serviceId }) => serviceId !== id)\n .forEach(({ serviceId }) => {\n listOfActions.push(unSelectSubscription(serviceId));\n });\n }\n\n batch(() => {\n listOfActions.forEach(dispatch);\n });\n };\n\n const handleIconClick = (id: number, type: ResponseSubscriptionType) => () => {\n const subscription = subscriptions[type].find(s => s.serviceId === id);\n if (subscription) {\n setState(subscription ? selectSubscriptionPopup(subscription) : initPopupData);\n }\n };\n\n const handleClosePopup = () => {\n setState(initPopupData);\n };\n\n return
    \n

    Выберите одну из основных подписок

    \n \n {subscriptions.oneOf.map(subscription => (\n \n {subscription.title}\n \n ))}\n \n\n

    Выберите {needToSelect.multiple > 1 ? `${needToSelect.multiple} ` : ''}{subscriptionPlural(needToSelect.multiple)}

    \n \n {subscriptions.multiple.map(subscription => (\n \n {subscription.title}\n \n ))}\n \n \n
    ;\n};\n\nexport default styled(RequiredAndSelectivelySubscriptionsContainer)`\n ${ListContainer}:not(:last-child) {\n margin-bottom: 24px;\n }\n\n ${ListContainer} {\n width: 100%;\n flex-wrap: nowrap;\n flex-direction: column;\n }\n\n @media (min-width: ${wideBreakpoints.mobile}) {\n ${ListContainer}:not(:last-child) {\n margin-bottom: 32px;\n }\n\n ${ListContainer} {\n flex-direction: row;\n }\n\n ${TvSubscription} {\n min-height: 100%;\n width: 275px;\n }\n \n ${TvSubscription} img {\n height: auto;\n }\n }\n`;\n","import React, { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport NukaCarousel from '@r1-frontend/ui-react/components/NukaCarousel';\nimport { ListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { TvSubscription } from '@r1-frontend/ui-react/organisms/TariffSubscription';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport SubscriptionsAdditionalInfoPopup from '~/src/features/full-buy/components/SubscriptionsPopup/SubscriptionsAdditionalInfoPopup';\nimport { selectSubscriptionPopup } from '~/src/features/full-buy/helpers/selectSubscriptionPopup';\nimport { selectSubscription, unSelectSubscription } from '~/src/features/full-buy/store/actions';\nimport getSubscriptionsWithConditions from '~/src/features/full-buy/store/selectors/getSubscriptionsWithConditions';\n\nconst initPopupData = {\n displayImage: '',\n title: '',\n description: [],\n isOpen: false,\n};\ntype TSubscriptions = {\n displayImage: string,\n title: string,\n description: string[],\n isOpen: boolean,\n}\nexport const SubscriptionsContainer = ({ className }: { className?: string }): JSX.Element => {\n const analytics = useAnalytics();\n\n const dispatch = useDispatch();\n const isMobile = useMatchMediaByWidth(wideBreakpoints.mobile);\n const { subscriptions, selected, leftToSelect } = useSelector(getSubscriptionsWithConditions);\n const [selectedSubscription, setState] = useState(initPopupData);\n\n const handleToggle = (id: number, title: string) => () => {\n const state = !selected.includes(id);\n const callback = state ? selectSubscription : unSelectSubscription;\n dispatch(callback(id, title, analytics.subscriptions));\n };\n\n const handleIconClick = (id: number) => () => {\n const subscription = subscriptions.find(s => s.serviceId === id);\n if (subscription) {\n setState(subscription ? selectSubscriptionPopup(subscription) : initPopupData);\n }\n };\n\n const handleClosePopup = () => {\n setState(initPopupData);\n };\n\n return
    \n {isMobile\n ? (\n \n {subscriptions && subscriptions.map(subscription => (\n \n {subscription.title}\n \n ))}\n \n )\n : (\n \n {subscriptions && subscriptions.map(subscription => (\n \n {subscription.title}\n \n ))}\n \n )}\n \n
    ;\n};\n\nexport default styled(SubscriptionsContainer)`\n @media (min-width: ${wideBreakpoints.mobile}) {\n ${TvSubscription} {\n min-height: 100%;\n }\n }\n \n ${ListContainer} {\n width: 100%;\n }\n`;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\n\nimport { WantMoreSubscriptions } from '~/src/features/full-buy/containers/pages/Subscriptions/WantMoreSubscriptions';\nimport { RequiredAndSelectivelySubscriptionsContainer, SubscriptionsContainer } from '~/src/features/full-buy/containers/Subscriptions';\nimport { getRequiredAndSelectivelySubscriptions } from '~/src/features/full-buy/store/selectors/getRequiredAndSelectivelySubscriptions';\n\nimport * as S from '~/src/features/full-buy/containers/pages/styled';\n\nconst subscriptionPlural = getPluralize(['подписку', 'подписки', 'подписок']);\n\nconst CombinedContainerForMainPage = (): JSX.Element | null => {\n const {\n subscriptions,\n needToSelect,\n } = useSelector(getRequiredAndSelectivelySubscriptions);\n\n if (needToSelect.oneOf === 0 && needToSelect.multiple === 0) {\n return null;\n }\n\n return \n {subscriptions.oneOf.length > 0\n ? (\n \n )\n : (\n <>\n \n

    Выберите {needToSelect.multiple + needToSelect.oneOf} {subscriptionPlural(needToSelect.multiple + needToSelect.oneOf)}

    \n \n
    \n\n \n \n )\n }\n
    ;\n};\n\nexport default CombinedContainerForMainPage;\n","import { goToNextStep } from '~/src/features/full-buy/store/actions/goToNextStep';\nimport { goToPrevStep } from '~/src/features/full-buy/store/actions/goToPrevStep';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nconst skipSubscriptionsStep = () => (dispatch: TAppThunkDispatch, getState: TGetState) => {\n const state = getState();\n const tariff = selectCurrentTariff(state);\n const { stepIndex, prevStepIndex } = state.fullBuy;\n\n const isBackward = prevStepIndex > stepIndex;\n // @todo replace to a selector. Simplify condition by `!!tariff?.subscriptions Summary?.length && !!tariff?.sale Package Links?.length;`\n const hasSubscriptions = (tariff?.subscriptionsSummary && tariff?.subscriptionsSummary?.length > 0) && (tariff?.salePackageLinks && tariff?.salePackageLinks?.length > 0);\n\n if (!hasSubscriptions) {\n dispatch(isBackward ? goToPrevStep() : goToNextStep());\n }\n};\n\nexport default skipSubscriptionsStep;\n","import React, { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { ListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { TvSubscription } from '@r1-frontend/ui-react/organisms/TariffSubscription';\n\nimport { MainLayout } from '~/src/features/full-buy/containers/MainLayout/MainLayout';\nimport CombinedContainerForMainPage\n from '~/src/features/full-buy/containers/Subscriptions/CombinedContainerForMainPage';\nimport skipSubscriptionsStep from '~/src/features/full-buy/store/actions/skipSubscriptionsStep';\n\nexport const SubscriptionsPage = ({ className }: { className?: string }): JSX.Element => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(skipSubscriptionsStep());\n }, []);\n\n return \n \n \n \n ;\n};\n\nexport default styled(SubscriptionsPage)`\n @media (min-width: ${wideBreakpoints.mobile}) {\n ${TvSubscription} {\n min-height: 100%;\n }\n }\n`;\n","import dynamic from 'next/dynamic';\nimport styled from 'styled-components';\n\nconst SlideCarousel = dynamic(() => import('@r1-frontend/ui-react/components/SlideCarousel'));\n\nexport const CustomSwiper = styled(SlideCarousel)`\n padding-left: 0 !important;\n padding-right: 0 !important;\n\n & section,\n & div {\n outline: none;\n }\n\n & > section > div.slider-frame {\n padding: 10px 0 14px 0 !important;\n }\n`;\n","import React from 'react';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport * as ST from './styled';\n\ninterface IProps {\n children: JSX.Element[],\n slideIndex?: number,\n}\n\n/**\n * Слайдер с фиксом для прокрутки к указанному слайду\n * используется для минифицированных карточек тарифов с выбором тарифа\n */\n// todo: разобраться зачем нужен\nexport const CustomSwiper = ({ slideIndex = 0, children }: IProps): JSX.Element => {\n const isMobile = useMatchMedia(`(max-width: ${wideBreakpoints.mobile})`);\n\n return (\n \n {React.Children.map(children, (child) => child)}\n \n );\n};\n","import styled, { css } from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { BoxShadow } from '@r1-frontend/ui-react/tokens/boxShadow';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nconst getGradient = (colors: string[]): string => {\n const [leftColor, rightColor] = colors;\n return `linear-gradient(90deg, ${leftColor} 0%, ${rightColor} 100%)`;\n};\n\nexport const ActiveCardWrapper = styled.div<{ isActive: boolean }>`\n position: relative;\n width: 190px;\n min-height: 180px;\n flex-direction: column;\n flex-wrap: nowrap;\n white-space: pre-wrap;\n text-rendering: geometricPrecision;\n padding: 2px;\n border: ${p => p.isActive ? `3px solid ${COLORS.ButtonPrimary}` : '3px solid transparent'};\n border-radius: 27px;\n transition: all .3s ease;\n user-select: none;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: 148px;\n min-height: 140px;\n border: ${p => p.isActive ? `2px solid ${COLORS.ButtonPrimary}` : '2px solid transparent'};\n border-radius: 19px;\n }\n\n &:hover {\n box-shadow: ${BoxShadow.S};\n }\n`;\n\nexport const ArrowPositioner = styled.div<{ isActive: boolean }>`\n visibility: ${p => p.isActive ? 'initial' : 'hidden'};\n position: absolute;\n width: 100%;\n bottom: -24px;\n justify-content: center;\n`;\n\nexport const TariffCardMinimal = styled.div<{ bg?: string | null, colorText: string | null }>`\n flex-direction: column;\n flex-wrap: nowrap;\n padding: 12px 4px 4px 4px;\n color: ${({ colorText }) => colorText ? colorText : COLORS.TextPrimary};\n background: ${({ bg }) => `${bg}`} 0 0 / cover repeat-y;\n background: image-set(${({ bg }) => `${bg}`} 1x) 0 0 / cover repeat-y;\n background-color: ${({ bg }) => bg};\n border-radius: ${BorderRadius.InnerBlockRadius};\n overflow: hidden;\n z-index: 10;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n border-radius: ${BorderRadius.componentRadius};\n }\n`;\n\nexport const PromoText = styled.h3<{ colors?: Array, hasBg: boolean }>`\n display: block;\n ${FONTS.H5};\n text-transform: uppercase;\n background: ${({ colors }) => colors?.length ? getGradient(colors) : 'none'};\n color: ${({ colors, hasBg }) => colors?.length ? 'transparent' : hasBg ? 'inherit' : COLORS.TextPrimary};\n padding: 0 12px;\n height: 84px;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n padding: 0 8px;\n }\n`;\n\nexport const TariffTitle = styled.h3<{ colors?: Array, isSmall?: boolean, hasBg: boolean }>`\n display: block;\n ${({ isSmall }) => isSmall ? css`${FONTS.MediumXXS}` : css`${FONTS.MediumXS}`};\n background: ${({ colors }) => colors?.length ? getGradient(colors) : 'none'};\n color: ${({ colors, hasBg }) => colors?.length ? 'transparent' : hasBg ? 'inherit' : COLORS.TextSecondary};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0 12px;\n margin-bottom: 8px;\n \n @media (max-width: ${wideBreakpoints.mobile}) {\n ${({ isSmall }) => isSmall ? css`${FONTS.XXS} font-size: 8px; line-height: 12px;` : css`${FONTS.XXS}`};\n padding: 0 8px;\n }\n`;\n\nexport const TariffDescription = styled.div<{ colorText: string, bgColor: string, hasBg?: boolean, defaultBg: string }>`\n flex-direction: column;\n min-height: 136px;\n ${FONTS.XS};\n padding: 12px;\n background-color: ${({ bgColor, defaultBg, hasBg }) => bgColor || (hasBg ? 'rgba(255, 255, 255, 0.4)' : defaultBg)};\n border-radius: 22px;\n color: ${({ colorText = COLORS.TextPrimary }) => colorText};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n padding: 12px 8px;\n min-height: 100px;\n border-radius: 14px;\n\n & > .customSubscriptions{\n margin: 4px -10px 4px !important;\n & > [data-test=\"right-arrow\"] {\n margin-right: 4px;\n }\n & > [data-test=\"left-arrow\"].visible {\n margin-left: 4px;\n }\n }\n }\n`;\n\nexport const PropsBlock = styled.div`\n flex: 1;\n flex-direction: column;\n justify-content: center;\n min-height: 36px;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n min-height: auto;\n }\n`;\n\nexport const DescriptionRow = styled.div`\n flex-wrap: nowrap;\n min-height: 20px;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n min-height: 16px;\n ${FONTS.XXS};\n }\n`;\n\nexport const PriceBlock = styled.div`\n flex: 1;\n flex-direction: column;\n justify-content: center;\n min-height: 36px;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n min-height: auto;\n }\n`;\n\nexport const Price = styled.div`\n ${FONTS.MediumXS};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.MediumXXS};\n }\n`;\nexport const OldPrice = styled.div<{ hasBg: boolean }>`\n text-decoration: line-through;\n ${FONTS.XXS};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n font-size: 8px;\n position: relative;\n top: 1px;\n left: 2px;\n }\n`;\n","import { useEffect, useMemo, useState } from 'react';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport SingleArrowDown from '@r1-frontend/ui-react/components/svg/arrows/SingleArrowDown';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { channelPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport Subscriptions from '~/src/components/TariffCard/subscriptions';\nimport { ISubscriptionBody } from '~/src/components/TariffCard/subscriptions/types';\nimport { IOfferContents } from '~/src/entities/formattedTariff';\n\nimport * as ST from './styled';\n\nconst channelText = getPluralize(channelPluralize);\n\ninterface IActiveCardWrapper {\n children: React.ReactNode,\n isActive: boolean,\n onClick?: () => void,\n}\n\nexport const ActiveCardWrapper = ({ children, isActive = false, onClick }: IActiveCardWrapper) => {\n return (\n \n {children}\n \n );\n};\n\nexport const ArrowPointer = ({ isActive = false }: { isActive: boolean }) => (\n \n \n \n);\n\ninterface ITariffCardMinimalProps {\n title: string,\n price: number,\n speed: string,\n channelCount?: number,\n priceAction?: number | null,\n promoText?: string,\n bgColor: string | undefined,\n colorText?: string | null,\n imageBackground?: string | null,\n titleColors?: string[],\n isLightCard?: boolean,\n subscriptions: Array,\n}\n\nexport const TariffCardMinimal = ({\n title,\n speed,\n priceAction,\n price,\n promoText,\n channelCount,\n bgColor = '',\n colorText = '',\n imageBackground = '',\n titleColors = [],\n isLightCard,\n subscriptions,\n }: ITariffCardMinimalProps): JSX.Element => {\n const isMobile = useMatchMedia(`(max-width: ${wideBreakpoints.mobile})`);\n const [cardWidth, setCardWidth] = useState(148);\n\n const preparedSubscriptions = useMemo(() => {\n return subscriptions.map(item => ({\n id: item.id,\n image: item.image,\n imageWebp: item.image_webp,\n width: item.width,\n alt: item.title,\n type: 'subscription',\n sort: item.sort,\n }));\n }, [subscriptions]);\n\n useEffect(() => {\n setCardWidth(isMobile ? 100 : 148);\n }, [isMobile]);\n\n const hasBg = !!imageBackground;\n\n const cardBg = isLightCard ? COLORS.BgMain : COLORS.BgSurface;\n const descBg = isLightCard ? COLORS.BgSurface : COLORS.BgMain;\n\n return (\n \n {promoText &&\n \n {promoText}\n \n }\n \n {promoText ? `Тариф «${title}»` : title}\n \n \n \n {speed} Мбит/с\n {!!channelCount && {`${channelCount} ТВ-${channelText(channelCount)}`}}\n \n \n \n {priceAction || price} ₽/мес\n {!!priceAction && {price} ₽/мес}\n \n \n \n );\n};\n","import { ISubscriptionItem } from '~/src/api/common-types/sale-package';\nimport { ActiveCardWrapper, ArrowPointer, TariffCardMinimal } from '~/src/components/TariffCardMinimal';\nimport { IFullBuyTariff } from '~/src/features/full-buy/store/tariffTransformer';\n\nimport { ISubscription } from '../store/helpers/tariffTransformerHelpers';\n\ninterface IProps {\n tariffPackages: IFullBuyTariff[],\n selectedPackageId?: number,\n withArrowPointer?: boolean,\n onSelectTariff: (tariff: IFullBuyTariff) => void,\n sendAnalytics?: (tariffName: string) => void,\n}\n\nexport const renderTariffList = ({ tariffPackages, selectedPackageId, withArrowPointer, onSelectTariff, sendAnalytics }: IProps) => {\n const selectTariffHandler = (_tariff: IFullBuyTariff) => {\n onSelectTariff(_tariff);\n typeof sendAnalytics === 'function' && sendAnalytics(_tariff.tariff_name);\n };\n\n return (\n tariffPackages.map(tariff => {\n const isActive = tariff.sale_package_id === selectedPackageId;\n const imageBackground = tariff.image_background_webp ? tariff.image_background_webp : tariff.image_background;\n const sourceData: (ISubscriptionItem | ISubscription)[] = tariff?.salePackageLinks?.length > 0\n ? tariff.salePackageLinks.flatMap((packageLink) => packageLink.subscriptions || [])\n : tariff.subscriptions;\n\n const uniqueSourceData = sourceData.reduce<(ISubscriptionItem | ISubscription)[]>((acc, item) => {\n if (!acc.some((accItem) => accItem.id === item.id)) {\n acc.push(item);\n }\n return acc;\n }, []);\n\n const subscriptions = uniqueSourceData.map((item) => ({\n id: item.id,\n title: item.title,\n image: item.image,\n image_webp: item.image_webp || '',\n sort: item.sort,\n }));\n\n return (\n null : () => selectTariffHandler(tariff)}\n >\n \n {withArrowPointer &&\n \n }\n \n );\n })\n );\n};\n","import styled from 'styled-components';\n\nimport EquipPreview from '~/src/features/full-buy/EquipPreview';\n\nexport const SEquipPreview = styled(EquipPreview)`\n margin-bottom: 0;\n`;\n","import React from 'react';\n\nimport BasePopup from '@r1-frontend/ui-react/components/popups/basePopup';\n\nimport * as ST from './styled';\n\nexport interface IElementInfoProps {\n className?: string,\n title: string,\n displayImage: string,\n images: string[] | null,\n description: string,\n isOpen: boolean,\n onClose: () => void,\n}\n\nconst ElementInfo: React.FC = ({\n className,\n title,\n displayImage,\n images,\n description,\n isOpen,\n onClose,\n}): JSX.Element => {\n return (\n \n \n \n );\n};\n\nexport default React.memo(ElementInfo);\n","import styled from 'styled-components';\n\nimport { BaseButton } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const SelectedTariffElements = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n row-gap: 8px;\n`;\n\nexport const IncludedTariffElements = styled.div`\n width: 100%;\n flex-direction: column;\n align-items: flex-start;\n row-gap: 8px;\n`;\n\nexport const RecomendedTitle = styled.div`\n ${FONTS.H3};\n color: ${COLORS.TextPrimary};\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${FONTS.H4};\n }\n`;\n\nexport const SectionButton = styled(BaseButton)`\n margin-top: 8px;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: 100%;\n }\n`;\n","/* eslint-disable complexity */\nimport { useCallback, useMemo, useState } from 'react';\nimport uniqBy from 'lodash/uniqBy';\n\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { NBSP } from '@r1-frontend/ui-react/tokens/symbols';\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { channelPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport ChannelListPopup from '~/src/components/Bundles/ChannelListPopup';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport SubscriptionsAdditionalInfoPopup from '~/src/features/full-buy/components/SubscriptionsPopup/SubscriptionsAdditionalInfoPopup';\nimport { selectSubscriptionPopup } from '~/src/features/full-buy/helpers/selectSubscriptionPopup';\nimport ElementInfo from '~/src/features/full-buy/SelectedTariffElements/ElementInfo';\nimport { IFullBuyTariff } from '~/src/features/full-buy/store/tariffTransformer';\nimport { TariffElement } from '~/src/features/full-buy/TariffElementNew';\n\nimport * as ST from './styled';\n\nconst CHANNELS_BLOCK_TEXT = 'Смотрите на любом устройстве в приложении Movix. Подключайте дополнительные пакеты каналов.';\ntype RequiredProducts = {\n displayImage: string,\n images: string[] | null,\n title: string,\n description: string,\n isOpen: boolean,\n}\ntype Subscriptions = {\n displayImage: string,\n title: string,\n description: string[],\n isOpen: boolean,\n}\ninterface IElementsInfo {\n requiredProducts: RequiredProducts,\n subscriptions: Subscriptions,\n}\n\nconst initPopupData: IElementsInfo = {\n requiredProducts: {\n displayImage: '',\n images: [],\n title: '',\n description: '',\n isOpen: false,\n },\n subscriptions: {\n displayImage: '',\n title: '',\n description: [],\n isOpen: false,\n },\n};\n\nconst getChannelsTitle = (channelCount: number | null, hdCount: number | null) => {\n let hdCountsTitle = '';\n if (hdCount) {\n hdCountsTitle = `(включая ${hdCount} HD ${channelText(hdCount)})`;\n }\n if (channelCount) {\n return `${channelCount} ${channelText(channelCount)}${NBSP}${hdCountsTitle}`;\n }\n\n return '';\n};\n\ninterface IProps {\n tariffPackage: IFullBuyTariff,\n}\n\nconst channelText = getPluralize(channelPluralize);\n\n// TODO рефакторинг, пример компонент PurchaseItem (в ui-react)\nexport const SelectedTariffElements = ({\n tariffPackage,\n}: IProps): JSX.Element => {\n const analytics = useAnalytics();\n\n const [isChannelsPopupOpen, setIsChannelsPopupOpen] = useState(false);\n const [selectedTariff, setSelectedTariff] = useState(null);\n\n const {\n downloadSpeed,\n additionalProducts,\n subscriptions,\n channelCount,\n hdCount,\n alias,\n } = tariffPackage;\n const speed = tariffPackage.speed;\n\n const [elementsInfo, setElementInfo] = useState(initPopupData);\n\n const requiredAdditionalProducts = useMemo(() => {\n const filteredProducts = additionalProducts?.filter(item => item.required);\n return uniqBy(filteredProducts, 'id');\n }, [additionalProducts]);\n\n const sortedOfferContents = useMemo(() => [...subscriptions].sort((a, b) => {\n if (a.sort === null) {\n return 1;\n }\n if (b.sort === null) {\n return -1;\n }\n return a.sort - b.sort;\n }), [subscriptions]);\n\n const onProductButtonClickHandler = useCallback((id?: number) => {\n const shopItem = requiredAdditionalProducts.find(item => item.id === id);\n\n setElementInfo({\n ...elementsInfo,\n requiredProducts: {\n displayImage: shopItem?.image || '',\n description: shopItem?.description || '',\n title: shopItem?.title || '',\n images: shopItem?.images || null,\n isOpen: true,\n },\n });\n\n analytics.tariff.popupOpened(shopItem?.title);\n }, [requiredAdditionalProducts]);\n\n const onOfferButtonClickHandler = useCallback((id?: number) => {\n const offer = subscriptions.find(item => item.id === id);\n\n setElementInfo({\n ...elementsInfo,\n subscriptions: offer ? selectSubscriptionPopup(offer) : initPopupData.subscriptions,\n });\n\n analytics.tariff.popupOpened(offer?.title);\n }, [subscriptions]);\n\n const channelsPopupOpen = useCallback((tariff) => {\n setSelectedTariff(tariff);\n setIsChannelsPopupOpen(true);\n\n analytics.tariff.popupOpened('tv_channels');\n }, []);\n\n const channelsPopupClose = useCallback(() => {\n setIsChannelsPopupOpen(false);\n setSelectedTariff(null);\n }, []);\n\n const isShowChannel = !!channelCount;\n\n const hasTariffElements = !!requiredAdditionalProducts?.length || !!subscriptions?.length || isShowChannel;\n\n const isMega = alias?.toString().includes('mega');\n\n const closePopup = useCallback(() => {\n setElementInfo(initPopupData);\n }, []);\n\n return (\n \n {/* Выбранный тариф */}\n \n\n {hasTariffElements &&\n \n {/* Каналы */}\n {isShowChannel &&\n channelsPopupOpen(tariffPackage),\n }}\n />\n }\n\n {/* Оборудование */}\n {requiredAdditionalProducts?.map((requiredProduct) => {\n const isShowButton = requiredProduct.image && requiredProduct.description;\n\n return (\n onProductButtonClickHandler(requiredProduct.id) : null,\n }}\n key={requiredProduct.id}\n />\n );\n })}\n\n {/* Подписки */}\n {sortedOfferContents?.map((item) => {\n const isShowButton = !!item.imageForFullBuyWebp && !!item.bodyForFullBuy;\n\n return (\n onOfferButtonClickHandler(item.id) : null,\n }}\n />\n );\n })}\n \n }\n\n \n \n\n \n \n );\n};\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n/**\n * @param salePackageId\n * @param withAuth\n * @link https://master.api-tariffs.sandbox.d2c.r-one.io/docs#/Tariffs/TariffsController_equipment\n */\nconst equipment = (salePackageId: number, withAuth = false): IRequest => ({\n uri: `v1/tariffs/${salePackageId}/equipment`,\n method: 'GET',\n\n withProvider: true,\n withAuth,\n});\n\nexport default equipment;\n","import { getABNVariant } from '~/src/helpers/abn-tests';\n\nconst isOnlyPurchaseEquipment = () => {\n return getABNVariant('hiding_payment_installments') === 'hide_installment_plan';\n};\n\nexport default isOnlyPurchaseEquipment;\n","import { doRequest } from '@r1-frontend/do-request';\nimport getBodyForRequestEquipment from '@r1-frontend/api-domru/api-tariffs/v1/tariffs/[salePackageId]/equipment';\nimport { ResponseDto, ResponseEquipmentDto } from '@r1-frontend/api-domru/api-tariffs/v1/tariffs/[salePackageId]/equipment/dto/ResponseDto';\n\nimport isOnlyPurchaseEquipment from '~/src/features/full-buy/helpers/ab/isOnlyPurchaseEquipment';\nimport { setProducts, toggleBackgroundLoading } from '~/src/features/full-buy/store/actions';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TProduct } from '~/src/features/full-buy/store/transformShopItem';\nimport { TDispatch, TGetState } from '~/src/store';\n\nconst processEquipment = (equipment: ResponseEquipmentDto): TProduct => ({\n id: equipment.globalId || equipment.contentId,\n category: equipment.category.name,\n categoryTitle: equipment.category.title,\n title: equipment.title,\n description: equipment.fullBody,\n body: equipment.body,\n props: equipment.characteristics || [],\n // it is only for type assertion\n labels: equipment.labels.map(l => ({\n id: l.id,\n name: l.name,\n title: l.title,\n color: l.color || '',\n color_text: l.color_text || '',\n })) || [],\n\n image: equipment.images.shift() || '',\n images: equipment.images,\n\n prices: equipment.prices.map(p => ({ duration: p.duration === 1 ? 0 : p.duration, cost: p.value })),\n selectedPrice: { duration: equipment.prices[0].duration === 1 ? 0 : equipment.prices[0].duration, cost: equipment.prices[0].value },\n\n quantity: 0,\n});\n\n/**\n * Getting only purchasing routers for the WEB-50023 issue\n * @link https://ticket.ertelecom.ru/browse/WEB-50023\n */\nconst getOnlyPurchasePrices = (router: ResponseEquipmentDto) => {\n return {\n ...router,\n prices: router.prices.filter(price => price.duration === 1 && price.type === 1),\n };\n};\n\nconst getEquipment = () => async(dispatch: TDispatch, getState: TGetState) => {\n const tariff = selectCurrentTariff(getState());\n\n if (!tariff) {\n return;\n }\n\n dispatch(toggleBackgroundLoading(true));\n\n const response = await doRequest.apiTariffs(getBodyForRequestEquipment(tariff.sale_package_id));\n\n if (response.isSuccess) {\n if (isOnlyPurchaseEquipment()) {\n dispatch(setProducts([\n ...response.payload.routers.map(getOnlyPurchasePrices).map(processEquipment),\n ...response.payload.decoders.map(getOnlyPurchasePrices).map(processEquipment),\n ...response.payload.privateSectorEquipment.map(getOnlyPurchasePrices).map(processEquipment),\n ...response.payload.yandex.map(getOnlyPurchasePrices).map(processEquipment),\n ]));\n } else {\n dispatch(setProducts([\n ...response.payload.routers.map(processEquipment),\n ...response.payload.decoders.map(processEquipment),\n ...response.payload.privateSectorEquipment.map(processEquipment),\n ...response.payload.yandex.map(processEquipment),\n ]));\n }\n }\n\n dispatch(toggleBackgroundLoading());\n};\n\nexport default getEquipment;\n","import styled, { css } from 'styled-components';\n\nimport { BorderRadius } from '../../../tokens/borderRadius';\nimport { COLORS } from '../../../tokens/colors';\nimport { FONTS } from '../../../tokens/fonts';\n\nexport const MultiCheckbox = styled.div<{ isChecked: boolean | undefined, disabled?: boolean }>`\n display: flex;\n align-items: center;\n padding: ${p => p.isChecked ? '4px 16px' : '6px 16px'};\n column-gap: 4px;\n ${FONTS.MediumXS};\n color: ${COLORS.TextPrimary};\n white-space: nowrap;\n background-color: transparent;\n border: 2px solid ${COLORS.ButtonSecondary};\n border-radius: ${BorderRadius.OuterBlockRadius};\n transition: border 0.2s ease;\n cursor: pointer;\n\n @media (hover: hover) {\n &:hover {\n border: 2px solid ${COLORS.ButtonPrimary};\n }\n }\n\n ${p => p.isChecked && css`\n color: ${COLORS.TextWhite};\n background-color: ${COLORS.ButtonPrimary};\n border: 2px solid ${COLORS.ButtonPrimary};\n `}\n\n ${p => p.disabled && css`\n color: ${COLORS.TextHint};\n background-color: ${COLORS.GRAY_LIGHT};\n border: 2px solid ${COLORS.GRAY_LIGHT};\n user-select: none;\n\n @media (hover: hover) {\n &:hover {\n border: 2px solid ${COLORS.GRAY_LIGHT};\n cursor: default;\n }\n }\n `};\n`;\n","import React, { FC } from 'react';\n\nimport CheckIcon from '../../svg/main/Check';\n\nimport * as ST from './styled';\n\ninterface IRadioProps {\n value: string,\n label: string,\n isChecked?: boolean,\n disabled?: boolean,\n onClick: (id: string) => void,\n}\n\nconst MultiCheckboxWithIcon: FC = ({\n value,\n label,\n isChecked,\n onClick,\n disabled,\n ...rest\n}) => {\n const onClickHandler = () => {\n !disabled && onClick(value);\n };\n\n return (\n \n {isChecked && }\n {label}\n \n );\n};\n\nexport default MultiCheckboxWithIcon;\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\n\nexport const CheckboxList = styled.div`\n align-items: center;\n gap: 8px;\n`;\n\nexport const SwitcherWrap = styled.div`\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: 100%;\n }\n`;\n","import React from 'react';\n\nimport MultiCheckboxWithIcon from '@r1-frontend/ui-react/components/controls/multiCheckboxWithIcon';\nimport Toggle from '@r1-frontend/ui-react/components/controls/Toggle';\n\nimport * as ST from './styled';\n\nexport interface ICheckboxItem {\n id: string,\n checked: boolean,\n disabled?: boolean,\n label: string,\n}\n\nexport interface IFiltersProps {\n checkboxItems: ICheckboxItem[],\n switcherValues: { leftText: string, rightText: string },\n onClickCheckbox: (id: string) => void,\n onClickSwitcher: (id: string) => void,\n activeSwitcherTab: string,\n}\n\n/**\n * Выводит свитчер и список чекбоксов\n */\nexport const CheckboxList = ({\n checkboxItems,\n switcherValues,\n onClickSwitcher,\n onClickCheckbox,\n activeSwitcherTab,\n ...rest\n}: IFiltersProps) => {\n return (\n \n \n \n \n\n {checkboxItems.map(item => {\n return (\n \n );\n })}\n \n );\n};\n","import { ICheckboxItem } from 'packages/ui-react/src/components/controls/CheckboxList';\n\nimport { IFullBuyTariff } from '~/src/features/full-buy/store/tariffTransformer';\n\nexport const toggleFilter = (id: string, filters: ICheckboxItem[]): ICheckboxItem[] => {\n const currElem = filters.find(el => el.id === id);\n\n if (currElem) {\n currElem.checked = !currElem.checked;\n\n return [\n ...filters,\n ];\n }\n\n return filters;\n};\n\nconst getFilterTags = (tariffs: IFullBuyTariff[]) => {\n if (!tariffs) {\n return [];\n }\n\n const tagsSet = tariffs.reduce((mySet, tariff) => {\n tariff.tariffTags.forEach(mySet.add, mySet);\n return mySet;\n }, new Set([]));\n\n return [...tagsSet].sort();\n};\n\nexport const getFiltersFromTariffsTag = (tariffs: IFullBuyTariff[], currentFilters: ICheckboxItem[], currTariffs: IFullBuyTariff[] = []): ICheckboxItem[] => {\n const tags = getFilterTags(tariffs);\n\n return tags.map((tag) => {\n const curr = currentFilters.find(el => el.id === tag);\n\n return ({\n id: tag,\n checked: curr ? curr.checked : false,\n disabled: currTariffs.length > 0 ? currTariffs.every((tariff) => tariff.tariffTags.includes(tag)) : false,\n label: tag,\n });\n });\n};\n\nexport const getTariffsFilteredByTags = (tariffs: IFullBuyTariff[], filters: ICheckboxItem[]) => {\n let _tariffs: IFullBuyTariff[] = tariffs;\n\n filters.forEach((filter) => {\n if (filter.checked) {\n _tariffs = _tariffs.filter(el => el.tariffTags.includes(filter.id));\n }\n });\n\n return _tariffs;\n};\n\nexport const getTariffsFilteredByType = (tariffs: IFullBuyTariff[], isMono: boolean) => {\n return tariffs.filter(el => el.isMono === isMono);\n};\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const Wrapper = styled.div`\n gap: 8px;\n @media (max-width: ${wideBreakpoints.mobile}) {\n flex-direction: column;\n }\n`;\n\nexport const Text = styled.div`\n white-space: nowrap;\n align-items: center;\n ${FONTS.MediumXS};\n`;\n\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { CheckboxList, ICheckboxItem } from '@r1-frontend/ui-react/components/controls/CheckboxList';\nimport MultiCheckboxWithIcon from '@r1-frontend/ui-react/components/controls/multiCheckboxWithIcon';\n\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { IFullBuyTariff } from '~/src/features/full-buy/store/tariffTransformer';\n\nimport { getFiltersFromTariffsTag, getTariffsFilteredByTags, getTariffsFilteredByType, toggleFilter } from './helpers';\n\nimport * as ST from './styled';\n\nenum ESwitcherValues {\n mono = 'Только интернет',\n bundle = 'Интернет+ТВ',\n}\n\nconst switcherValues = {\n leftText: ESwitcherValues.bundle,\n rightText: ESwitcherValues.mono,\n};\n\nexport const useFiltersByTags = (tariffs: IFullBuyTariff[], defaultDisplayMono = false) => {\n const hideSwitcher = useMemo(() => {\n if (!tariffs?.length) {\n return false;\n }\n const firstTariff = tariffs[0].isMono;\n return tariffs.every(tariff => tariff.isMono === firstTariff);\n }, [tariffs]);\n const analytics = useAnalytics();\n\n const [filters, setFilters] = useState([]);\n const [tariffsByType, setTariffsByType] = useState(tariffs);\n const [filteredTariffs, setFilteredTariffs] = useState(tariffs);\n const [activeSwitcherTab, setActiveSwitcherTab] = useState(defaultDisplayMono ? ESwitcherValues.mono : ESwitcherValues.bundle);\n\n const changeTariffs = useCallback((currTariffs, currFilters) => {\n\n const _tariffs = getTariffsFilteredByTags(currTariffs, currFilters);\n\n const filtersByTags = getFiltersFromTariffsTag(_tariffs, currFilters, currTariffs);\n\n _tariffs.sort((a, b) => {\n if (a.sort_on_bundles && b.sort_on_bundles) {\n return a.sort_on_bundles - b.sort_on_bundles;\n }\n return a.speed - b.speed;\n });\n\n setFilteredTariffs(_tariffs);\n setFilters(filtersByTags);\n }, []);\n\n useEffect(() => {\n setActiveSwitcherTab(defaultDisplayMono ? ESwitcherValues.mono : ESwitcherValues.bundle);\n }, [defaultDisplayMono]);\n\n useEffect(() => {\n if (tariffs) {\n const _tariffs = getTariffsFilteredByType(tariffs, defaultDisplayMono);\n setTariffsByType(_tariffs);\n const newFilters = getFiltersFromTariffsTag(_tariffs, []);\n changeTariffs(_tariffs, newFilters);\n }\n }, [tariffs, defaultDisplayMono, changeTariffs]);\n\n const onToggleFilter = useCallback((name) => {\n analytics.tariff.chooseRecommendedFilter(name);\n const newFilters = toggleFilter(name, filters);\n changeTariffs(tariffsByType, newFilters);\n }, [tariffsByType, filters, changeTariffs]);\n\n const onToggleSwitcher = useCallback(() => {\n const values = Object.values(switcherValues);\n\n const newTab = values.find(el => el !== activeSwitcherTab);\n\n if (newTab) {\n const isMono = newTab === ESwitcherValues.mono;\n analytics.tariff.chooseRecommendedFilter(isMono ? ESwitcherValues.mono : ESwitcherValues.bundle);\n const _tariffs = getTariffsFilteredByType(tariffs, isMono);\n const filtersByTags = getFiltersFromTariffsTag(_tariffs, []);\n\n setActiveSwitcherTab(newTab);\n setTariffsByType(_tariffs);\n setFilters(filtersByTags);\n changeTariffs(_tariffs, filtersByTags);\n }\n }, [tariffs, activeSwitcherTab, changeTariffs]);\n\n const Component = useMemo(() => (\n \n В тарифе:\n {hideSwitcher\n ? (\n filters.map(item =>\n )\n )\n : (\n \n )\n }\n \n ), [activeSwitcherTab, filters, onToggleFilter, onToggleSwitcher]);\n\n return {\n TagFilters: () => Component,\n tariffsFilterByTags: filteredTariffs,\n };\n};\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\n\nexport const TariffLineWrapper = styled.div`\n width: 100%;\n flex-direction: column;\n align-items: flex-start;\n padding: 24px 0 14px 20px;\n border-radius: ${BorderRadius.OuterBlockRadius};\n background-color: ${COLORS.BgSurface};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n padding: 16px 0 6px 16px;\n }\n`;\n\nexport const TariffLineWrapperFullWidth = styled(TariffLineWrapper)`\n @media (max-width: ${wideBreakpoints.mobile}) {\n margin-left: -16px;\n margin-right: -16px;\n width: 100vw;\n border-radius: 0;\n }\n`;\n","import React, { useCallback, useMemo } from 'react';\nimport { batch, shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\n\nimport { CustomSwiper } from '~/src/components/CustomSwiper';\nimport { useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { MainLayout } from '~/src/features/full-buy/containers/MainLayout/MainLayout';\nimport {\n CombinedSubscriptionContainerForTariffItem,\n} from '~/src/features/full-buy/containers/Subscriptions';\nimport { renderTariffList } from '~/src/features/full-buy/renderTariffList';\nimport { SelectedTariffElements } from '~/src/features/full-buy/SelectedTariffElements';\nimport { selectTariff } from '~/src/features/full-buy/store/actions';\nimport getEquipment from '~/src/features/full-buy/store/actions/getEquipment';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { selectFilteredTariffs } from '~/src/features/full-buy/store/selectors/selectFilteredTariffs';\nimport { IFullBuyTariff } from '~/src/features/full-buy/store/tariffTransformer';\nimport { useFiltersByTags } from '~/src/features/full-buy/useFiltersByTags';\nimport { TState } from '~/src/store';\n\nimport * as S from '~/src/features/full-buy/containers/pages/styled';\nimport * as ST from './styled';\n\nconst hasBundleTariff = (tariffs: IFullBuyTariff[]) => tariffs.some(el => el.isMono === false);\n\nexport const TariffInfo = (): JSX.Element => {\n const analytics = useAnalytics();\n const dispatch = useDispatch();\n\n const {\n selectedTariff,\n filteredTariffs,\n displayTariffLine,\n } = useSelector((state: TState) => ({\n selectedTariff: selectCurrentTariff(state),\n filteredTariffs: selectFilteredTariffs(state),\n displayTariffLine: state.fullBuy._displayTariffLine,\n }), shallowEqual);\n\n const tariffName = selectedTariff?.title || '';\n\n const onSelectTariff = useCallback((_tariff: IFullBuyTariff) => {\n batch(() => {\n dispatch(selectTariff({\n salePackageId: _tariff.sale_package_id,\n }));\n dispatch(getEquipment());\n });\n\n }, [dispatch]);\n\n const defaultDisplayMono = !!selectedTariff?.isMono || !hasBundleTariff(filteredTariffs);\n const { TagFilters, tariffsFilterByTags } = useFiltersByTags(filteredTariffs, defaultDisplayMono);\n\n const slideIndex = tariffsFilterByTags.findIndex((el) => el.sale_package_id === selectedTariff?.sale_package_id);\n const swiperKey = useMemo(() => {\n return tariffsFilterByTags.map(tariff => tariff.sale_package_id).join(',');\n }, [tariffsFilterByTags]);\n\n return (\n \n

    {tariffName ? `Вы выбрали тариф «${tariffName}»` : 'Выберите тариф'}

    \n \n {!!filteredTariffs.length && displayTariffLine &&\n \n \n\n \n {renderTariffList({\n tariffPackages: tariffsFilterByTags,\n selectedPackageId: selectedTariff?.sale_package_id,\n withArrowPointer: true,\n onSelectTariff,\n sendAnalytics: (name: string) => analytics.tariff.chooseRecommended(name),\n })}\n \n \n }\n\n {selectedTariff &&\n \n }\n \n\n \n
    \n );\n};\n","import isAdditionalEquipment from '~/src/features/full-buy/helpers/ab/isAdditionalEquipment';\nimport { IFlow } from '~/src/features/full-buy/store/initialState';\nimport { ESteps } from '~/src/features/full-buy/types';\n\n/**\n * Проверка адреса после выбора тарифа\n */\nexport const traditionFlow: IFlow = {\n name: 'traditionFlow',\n steps: [\n ESteps.tariffInfo,\n ESteps.equipments,\n ESteps.equipmentsCottage,\n ESteps.equipmentsTv,\n ESteps.address,\n ESteps.contacts,\n ESteps.agreementCreated,\n ESteps.timeSlots,\n ESteps.final,\n ],\n};\n\n/**\n * Проверка адреса на первом шаге\n */\nexport const notTraditionFlow: IFlow = {\n name: 'FirstAddressSteps',\n steps: [\n ESteps.address,\n ESteps.subscriptions,\n ESteps.equipments,\n ESteps.equipmentsCottage,\n ESteps.equipmentsTv,\n ESteps.contacts,\n ESteps.agreementCreated,\n ESteps.timeSlots,\n ESteps.final,\n ],\n};\n\n/**\n * Логика последовательности шагов\n * Логика пропуска и объединения шагов реализована в контейнерах\n *\n * Если ЧС, то убираем шаг с выбором роутеров.\n * Если не ЧС и включен аб-тест скрытия шагов оборудования, то убираем роутеры и декодеры.\n * Если не ЧС и включен аб-тест отображение доп оборудования, то убираем роутеры и декодеры.\n *\n */\nconst getFlow = (\n isAddressVerificationOnFirstStep = false,\n isCottage?: boolean,\n) => {\n const flow = isAddressVerificationOnFirstStep ? notTraditionFlow : traditionFlow;\n\n if (isCottage) {\n const stepsWithoutRouters = flow.steps.filter(step => step !== ESteps.equipments);\n\n return {\n ...flow,\n steps: stepsWithoutRouters,\n };\n } else {\n\n let needToExclude = [ESteps.equipmentsCottage];\n\n if (isAdditionalEquipment()) {\n needToExclude = [...needToExclude, ESteps.equipments, ESteps.equipmentsTv];\n }\n\n return {\n ...flow,\n steps: flow.steps.filter(step => !needToExclude.includes(step)),\n };\n }\n};\n\nexport default getFlow;\n","import { doRequest } from '@r1-frontend/do-request';\nimport subscriptions, { ResponseDto, ResponseSubscriptionType } from '@r1-frontend/api-domru/api-tariffs/v1/tariffs/[salePackageId]/subscriptions';\n\nimport { setSubscriptions } from '~/src/features/full-buy/store/actions';\nimport { setBundleOfSubscriptions } from '~/src/features/full-buy/store/actions/setBundleOfSubscriptions';\nimport { toggleBackgroundLoading } from '~/src/features/full-buy/store/actions/toggleBackgroundLoading';\nimport { getListDescription } from '~/src/features/full-buy/store/helpers/getListDescription';\nimport { TSubscription } from '~/src/features/full-buy/store/initialState';\nimport { IFullBuyTariff } from '~/src/features/full-buy/store/tariffTransformer';\nimport { TAppThunkDispatch } from '~/src/store';\n\nconst needToLoadSubscriptions = (tariff: IFullBuyTariff) => {\n return 'salePackageLinks' in tariff && Array.isArray(tariff.salePackageLinks) && tariff.salePackageLinks.length > 0;\n};\n\nconst getSubscriptions = (tariff: IFullBuyTariff) => async(dispatch: TAppThunkDispatch) => {\n if (!tariff || !needToLoadSubscriptions(tariff)) {\n return;\n }\n\n dispatch(toggleBackgroundLoading(true));\n\n const response = await doRequest.apiTariffs(subscriptions(tariff.sale_package_id));\n\n if (response.isSuccess) {\n const dataWithFullDescriptionList = response.payload.map(item => {\n return {\n ...item,\n fullDescriptionList: getListDescription(item.fullDescription),\n };\n });\n dispatch(setSubscriptions(tariff.sale_package_id, dataWithFullDescriptionList));\n }\n\n dispatch(toggleBackgroundLoading(false));\n};\n\nconst receiveSubscriptions = async(tariff: IFullBuyTariff) => {\n if (tariff && needToLoadSubscriptions(tariff)) {\n const response = await doRequest.apiTariffs(subscriptions(tariff.sale_package_id));\n\n if (response.isSuccess) {\n return {\n tariffId: tariff.sale_package_id,\n subscriptions: response.payload.map(item => {\n return {\n ...item,\n fullDescriptionList: getListDescription(item.fullDescription),\n };\n }),\n };\n }\n }\n};\n\nexport const getBundleOfSubscriptions = (tariffs: IFullBuyTariff[]) => async(dispatch: TAppThunkDispatch) => {\n dispatch(toggleBackgroundLoading(true));\n\n const response = await Promise.all(tariffs.map(receiveSubscriptions));\n\n const result = response\n // eslint-disable-next-line\n .reduce>(\n (acc, item) => {\n if (!item) {\n return acc;\n }\n\n acc[item.tariffId] = {\n oneOf: item.subscriptions\n .filter(s => s.type === ResponseSubscriptionType.oneOf)\n .map(s => s.serviceId),\n items: item.subscriptions,\n };\n return acc;\n }, {},\n );\n\n dispatch(setBundleOfSubscriptions(result));\n dispatch(toggleBackgroundLoading(false));\n};\n\nexport default getSubscriptions;\n","import { actionTypes } from '~/src/features/full-buy/store';\nimport { TSubscription } from '~/src/features/full-buy/store/initialState';\n\nexport const setBundleOfSubscriptions = (subscriptionsBundle: Record) => ({\n type: actionTypes.SetBundleOfSubscriptions,\n payload: {\n bundle: subscriptionsBundle,\n },\n});\n","import React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useRouter } from 'next/router';\n\nimport { resetAddress } from '@r1-frontend/entities/ContactAddress/actions/resetAddress';\n\nimport { isClientSide } from '@r1-frontend/shared/helpers/ssr';\n\nimport { FullBuyContext, TFullBuyContextProperties, useAnalytics } from '~/src/features/full-buy/analytics/context';\nimport { ANALYTICS } from '~/src/features/full-buy/constants/analytics';\nimport AdditionalEquipment from '~/src/features/full-buy/containers/AdditionalEquipment';\nimport OneLineAddress from '~/src/features/full-buy/containers/pages/OneLineAddress';\nimport isFullBuyVillage from '~/src/features/full-buy/helpers/ab/isFullBuyVillage';\nimport isOneLineAddressScreen from '~/src/features/full-buy/helpers/ab/isOneLineAddressScreen';\nimport { TariffInfoPageSkeleton } from '~/src/features/full-buy/skeleton';\nimport selectStepName from '~/src/features/full-buy/store/selectors/selectStepName';\nimport { useSendReferrerToGA } from '~/src/helpers/useSendReferrerToGA';\nimport { TState } from '~/src/store';\n\nimport Loader from './containers/Loader';\nimport { Address } from './containers/pages/Address';\nimport { Contacts } from './containers/pages/Contacts';\nimport { CreateAgreementScreen } from './containers/pages/CreateAgreement';\nimport { EngineerRequest } from './containers/pages/EngineerRequest';\nimport { Equipments } from './containers/pages/Equipments';\nimport { EquipmentsTv } from './containers/pages/EquipmentsTv';\nimport { Final } from './containers/pages/Final';\nimport PrivateSectorEquipments from './containers/pages/PrivateSectorEquipments';\nimport Subscriptions from './containers/pages/Subscriptions';\nimport { TariffInfo } from './containers/pages/TariffInfo';\nimport { resetFullBuy } from './store/actions';\nimport { initFullBuy } from './store/actions/initFullBuy';\nimport { selectCurrentTariff } from './store/selectors/selectCurrentTariff';\nimport { getQueryParams } from './helpers';\nimport { ESteps } from './types';\n\nimport * as ST from './styled';\n\nexport const FullBuy = (): JSX.Element => {\n const analytics = useAnalytics();\n const router = useRouter();\n const dispatch = useDispatch();\n const { isVillage } = useContext(FullBuyContext);\n\n useSendReferrerToGA(analytics.category, ANALYTICS.action.goToPage);\n\n const {\n salePackageId,\n tariffName: tariffNameAlias,\n monoTariff,\n tariffLine: tariffLineAlias,\n filters,\n landingAvailable,\n } = useMemo(() => getQueryParams(router.query), [router]);\n\n const {\n tariffPackage,\n initialized,\n stepIndex,\n stepName,\n isShownLoader,\n isAddressVerification,\n } = useSelector((state: TState) => ({\n tariffPackage: selectCurrentTariff(state),\n initialized: state.fullBuy.initialized,\n stepIndex: state.fullBuy.stepIndex,\n stepName: selectStepName(state),\n flow: state.fullBuy.flow,\n isShownLoader: state.fullBuy.isShownLoader,\n isAddressVerification: state.fullBuy._addressVerificationOnFirstStep,\n }), shallowEqual);\n\n const [isTimeSlotsLoading, setIsTimeSlotsLoading] = useState(false);\n\n const isOneLineAddressFormScreen = isOneLineAddressScreen() || isVillage;\n const isFullBuyVillageRedirect = isFullBuyVillage();\n\n useEffect(() => {\n // если это ЧС (те мы явно заходим в ЧС и есть редирект), то уходим. Оставлять только проверку на АБ тест некорректно, тк в нее могут попасть МКД\n if (isVillage && !isFullBuyVillageRedirect) {\n router.push('/bundles');\n }\n }, []);\n\n // При переключении между страницами fullBuy, прокручиваем в начало страницы\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [stepIndex]);\n\n // Если передали некорректный salePackageId нужно редиректить на страницу /full-buy\n // с использованием полной перезагрузкой страницы(без router.push())\n // так, как не сбрасывается состояние выбранной линейки тарифов при смене домена\n useEffect(() => {\n if (salePackageId && initialized && tariffPackage === null && isClientSide()) {\n location.href = '/full-buy';\n }\n }, [salePackageId, initialized, tariffPackage]);\n\n // Получение данных по линейке\n useEffect(() => {\n dispatch(initFullBuy({\n filters,\n tariffLineAlias,\n landingAvailable,\n\n salePackageId,\n tariffNameAlias,\n monoTariff: monoTariff === 'true',\n analytics,\n }));\n\n return () => {\n dispatch(resetAddress());\n dispatch(resetFullBuy());\n };\n }, []);\n\n // Сброс лоадера после первичной загрузки тайм-слотов\n useEffect(() => {\n if (isClientSide()) {\n const portal = document.getElementById('loader-portal');\n\n if (!isShownLoader && portal) {\n portal.style.minHeight = 'auto';\n portal.innerHTML === '';\n setIsTimeSlotsLoading(true);\n }\n }\n }, [isShownLoader, isTimeSlotsLoading]);\n\n if (!initialized) {\n return (\n \n );\n }\n\n return (\n \n {stepName === ESteps.tariffInfo && }\n {stepName === ESteps.subscriptions && }\n {stepName === ESteps.equipments && }\n {stepName === ESteps.equipmentsTv && }\n {stepName === ESteps.equipmentsCottage && }\n {stepName === ESteps.address && (\n isOneLineAddressFormScreen\n ? \n :
    \n )}\n {stepName === ESteps.contacts && }\n {stepName === ESteps.agreementCreated && }\n {stepName === ESteps.timeSlots && }\n {stepName === ESteps.final && }\n {(stepName === ESteps.agreementCreated || stepName === ESteps.timeSlots && !isTimeSlotsLoading) &&\n \n }\n \n
    \n \n );\n};\n","import { batch } from 'react-redux';\n\nimport { IGetCitiesTariffsQueryParams } from '~/src/api/content/cities/tariffs';\nimport FullBuyAnalytics from '~/src/features/full-buy/analytics';\nimport getFlow from '~/src/features/full-buy/helpers/getFlow';\nimport getEquipment from '~/src/features/full-buy/store/actions/getEquipment';\nimport { getBundleOfSubscriptions } from '~/src/features/full-buy/store/actions/getSubscriptions';\nimport { selectCurrentTariff } from '~/src/features/full-buy/store/selectors/selectCurrentTariff';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { fetchTariffPackages } from '../functions';\nimport { ETariffFilters } from '../initialState';\n\nimport { setTariffFilters } from './filters';\nimport {\n selectTariff,\n setDisplayTariffLineState,\n setFlow,\n setInitialized,\n setTariffLineAlias,\n setTariffs,\n} from './index';\n\nexport type TIncomingQueryString = {\n salePackageId?: string | undefined,\n tariffNameAlias?: string | undefined,\n monoTariff: boolean,\n landingAvailable?: string,\n}\n\ninterface IInitParams {\n filters: ETariffFilters[] | undefined,\n tariffLineAlias: string | undefined,\n analytics: FullBuyAnalytics,\n}\n\n/**\n * Получение данных для страницы fullBuy\n */\nexport const initFullBuy = (\n {\n filters = [],\n tariffLineAlias,\n landingAvailable,\n\n salePackageId,\n tariffNameAlias,\n monoTariff,\n analytics,\n }: IInitParams & TIncomingQueryString,\n) => async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n const { providerId } = getState().city.provider;\n // We should remove the \"Cottage\" filter from the list of filters,\n // as other filters (except \"Cottage\") are involved in the main flow of the \"Full Buy\" logic.\n const withoutCottageFilters = filters?.filter(f => f !== ETariffFilters.COTTAGE) || [];\n const isCottage = filters?.some(f => f === ETariffFilters.COTTAGE) || false;\n\n const isAddressVerificationOnFirstStep = !tariffLineAlias &&\n withoutCottageFilters.length === 0 &&\n (Boolean(salePackageId) || Boolean(tariffNameAlias));\n\n const flow = getFlow(isAddressVerificationOnFirstStep, isCottage);\n\n const fetchTariffPackagesQueryParams: IGetCitiesTariffsQueryParams = {\n availableNew: 1,\n };\n\n if (landingAvailable) {\n fetchTariffPackagesQueryParams.landingAvailable = landingAvailable;\n }\n\n // Очень надеюсь, что это решение в скором времени будет изменено.\n // В админке контента признаки у тарифов 100Мбит/с. отключены, но имеются адреса, у которых только такая максимальная скорость может быть.\n // в api-content был добавлен флаг, позволющий получить отключенные тариф (не все, включаются некоторые в ручном режиме).\n if (filters?.includes(ETariffFilters.SPEED100)) {\n fetchTariffPackagesQueryParams.restrictIgnore = 1;\n }\n\n const tariffPackages = await fetchTariffPackages(\n providerId,\n fetchTariffPackagesQueryParams,\n isCottage,\n );\n\n if (tariffPackages) {\n batch(() => {\n dispatch(setTariffs(tariffPackages));\n dispatch(setTariffFilters(filters));\n dispatch(setTariffLineAlias(tariffLineAlias || ''));\n dispatch(getBundleOfSubscriptions(tariffPackages));\n });\n }\n\n if (tariffLineAlias || (!salePackageId && !tariffNameAlias)) {\n dispatch(setDisplayTariffLineState(true));\n }\n\n if (salePackageId) {\n dispatch(selectTariff({\n salePackageId: Number(salePackageId),\n }));\n }\n\n if (tariffNameAlias) {\n dispatch(selectTariff({\n tariffNameAlias,\n monoTariff,\n }));\n }\n\n // in case when user came from a direct link for tariff, we should send notification to the dataLayer\n if (salePackageId || tariffNameAlias || tariffLineAlias || (salePackageId && tariffLineAlias) || (tariffNameAlias && tariffLineAlias)) {\n const currentTariff = selectCurrentTariff(getState());\n\n if (analytics.category) {\n analytics.initializationByTariffLine(\n [\n tariffLineAlias ?? tariffNameAlias,\n currentTariff?.tariff_name,\n ]\n .filter(Boolean).join(' | '),\n );\n }\n\n dispatch(getEquipment());\n }\n\n batch(() => {\n // set full-buy flow\n dispatch(setFlow(flow));\n dispatch(setInitialized(true, isAddressVerificationOnFirstStep));\n });\n};\n","import { actionTypes } from '../index';\nimport { IFullBuyTariff } from '../tariffTransformer';\n\n// @todo remove action and move implementation to the initialization method\nexport const setTariffs = (tariffs: IFullBuyTariff[]) => ({\n type: actionTypes.SET_TARIFFS,\n payload: tariffs,\n});\n","import { actionTypes } from '~/src/features/full-buy/store';\nimport { IFlow } from '~/src/features/full-buy/store/initialState';\n\nexport const setFlow = (steps: IFlow) => {\n return {\n type: actionTypes.SET_FLOW,\n payload: {\n flow: steps,\n },\n };\n};\n","import { actionTypes } from '../index';\n\nexport const resetFullBuy = () => ({\n type: actionTypes.RESET_FULLBUY,\n payload: null,\n});\n","import { useMemo } from 'react';\n\nimport FullBuyAnalytics from '~/src/features/full-buy/analytics';\nimport FullBuyProvider from '~/src/features/full-buy/analytics/context';\nimport { FullBuy as FullBuySteps } from '~/src/features/full-buy/indexByPage';\n\ntype TFullBuyProps = {\n isVillage: boolean,\n}\n\nconst FullBuy = ({ isVillage }: TFullBuyProps): JSX.Element | null => {\n const analytics = useMemo(() => new FullBuyAnalytics(isVillage ? 'fullbuy_village' : 'fullbuy'), [isVillage]);\n\n return (\n \n \n \n );\n};\n\nexport default FullBuy;\n","import React from 'react';\nimport { NextPage } from 'next';\n\nimport { ICurrentCity } from '@r1-frontend/entities/City/models/ICurrentCity';\n\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport Layout from '~/src/features/_layout';\nimport FullBuy from '~/src/features/full-buy';\nimport { ETariffFilters } from '~/src/features/full-buy/store/initialState';\nimport { initialProps } from '~/src/helpers/basePageFunc';\nimport { nonPermanentRedirect } from '~/src/helpers/url';\nimport type { TState } from '~/src/store';\n\ninterface IProps {\n currentCity: ICurrentCity,\n isVillage: boolean,\n}\n\nconst FullBuyPage: NextPage = ({ currentCity, isVillage }): JSX.Element => {\n const cityText = currentCity.cityIn;\n const title = `Пакет услуг в ${cityText}.`;\n const description = 'Выгодный интернет, цифровое ТВ в пакете.';\n\n return (\n \n \n \n );\n};\n\nFullBuyPage.getInitialProps = async(ctx): Promise => {\n const { validatedAccessToken } = await initialProps(ctx, { isNeedAuthData: true });\n const { res, store, query } = ctx;\n\n const state: TState = store.getState();\n const { city: { currentCity } } = state;\n\n if (validatedAccessToken) {\n nonPermanentRedirect({ res, location: '/lk' });\n // @ts-ignore\n return {};\n }\n\n const isVillage = Boolean(query?.filters?.includes(ETariffFilters.COTTAGE));\n\n return {\n currentCity,\n isVillage,\n };\n};\n\nexport default FullBuyPage;\n","export const DEALER_UID = 'dealerUid';\n","import React, { memo } from 'react';\n\nimport HtmlContentFromApi from '@r1-frontend/ui-react/components/HtmlContentFromApi';\n\nimport { ButtonElement, IButtonProps } from './components/ButtonElement';\nimport { IImageProps, ImageElement } from './components/ImageElement';\n\nimport * as ST from './styled';\n\nexport interface TariffElementProps {\n title?: string,\n titleText?: string,\n imageProps: IImageProps,\n btnProps?: IButtonProps,\n}\n\nexport const TariffElement = (item: TariffElementProps): JSX.Element => {\n const {\n title,\n titleText,\n imageProps,\n btnProps,\n } = item;\n\n return (\n \n \n \n \n\n \n {title}\n\n {titleText &&\n \n \n \n {titleText}\n \n \n \n }\n \n \n\n \n \n\n {titleText &&\n \n \n \n {titleText}\n \n \n \n }\n \n );\n};\n\nexport default memo(TariffElement);\n","import styled from 'styled-components';\n\nimport { BaseButton } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const Button = styled(BaseButton)`\n ${FONTS.MediumS};\n svg {\n fill: ${COLORS.Control};\n stroke: ${COLORS.Control};\n }\n`;\n","import React from 'react';\n\nimport { btnSizes, btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { ICONS_PATH } from '~/src/constants';\n\nimport * as ST from './styled';\n\nexport interface IButtonProps {\n btnTextDesktop?: string,\n btnTextMobile?: string,\n iconNameDesktop?: string,\n iconNameMobile?: string,\n isDisabled?: boolean,\n onButtonClick?: (() => void) | null,\n}\n\nexport const ButtonElement = ({\n btnTextDesktop = 'Добавить',\n btnTextMobile = '',\n iconNameDesktop,\n iconNameMobile,\n isDisabled,\n onButtonClick,\n} : IButtonProps): JSX.Element => {\n const isMobile = useMatchMedia(`(max-width: ${wideBreakpoints.mobile})`);\n\n if (!onButtonClick) {\n return <>;\n }\n\n return (\n \n );\n};\n","import React from 'react';\n\nimport * as ST from './styled';\n\nexport interface IImageProps {\n imgBgColor?: string,\n imageSrc?: string,\n imageAlt?: string,\n textForImage?: string,\n bgForImage?: string,\n channelCount?: number, // костыль для вывода каналов в углу картинки\n isMega?: boolean,\n}\n\nexport const ImageElement = ({\n imgBgColor,\n imageSrc,\n imageAlt = 'иконка',\n textForImage = '',\n bgForImage,\n channelCount,\n isMega,\n} : IImageProps): JSX.Element => {\n const displayText = !imageSrc && !!textForImage;\n\n if (displayText) {\n return (\n \n {textForImage}\n \n );\n }\n\n return (\n \n {imageAlt}\n \n );\n};\n","import styled, { css } from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nconst ImgWrap = styled.div`\n position: relative;\n flex: 0 0 90px;\n justify-content: center;\n align-items: center;\n width: 90px;\n height: 60px;\n ${FONTS.H4};\n border-radius: 20px;\n overflow: hidden;\n background-color: ${COLORS.BgMain};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n flex: 0 0 72px;\n width: 72px;\n height: 48px;\n border-radius: 16px;\n }\n`;\n\nexport const ImageElement = styled(ImgWrap)<{ imgBgColor?: string, channelCount?: number }>`\n ${p => p.imgBgColor && css`\n background-color: ${p.imgBgColor};\n `};\n\n ${p => p.channelCount && css`\n &:after {\n content: \"+${p.channelCount}\";\n position: absolute;\n bottom: 2px;\n right: 19px;\n width: 20px;\n height: 20px;\n ${FONTS.XXS};\n fontSize: 10;\n color: ${COLORS.TextPrimary};\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n &:after {\n bottom: -1px;\n right: 14px;\n }\n }\n `};\n\n img {\n width: 100%;\n max-height: 100%;\n }\n`;\n\nexport const ImageElementWithText = styled(ImgWrap)<{ imgSrc?: string, isMega?: boolean }>`\n overflow: hidden;\n ${FONTS.H3};\n color: ${({ imgSrc, isMega }) => isMega ? COLORS.TextPrimary : (imgSrc ? COLORS.TextWhite : COLORS.TextSecondary)};\n background-color: #E6EEF5;\n background-image: ${({ imgSrc }) => imgSrc ? `url(${imgSrc})` : 'none'};\n background-repeat: no-repeat;\n background-size: cover;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H4};\n }\n`;\n","import styled, { css } from 'styled-components';\n\nimport { BaseButton } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const TariffElement = styled.div`\n flex-direction: column;\n justify-content: center;\n row-gap: 8px;\n width: 100%;\n min-height: 76px;\n padding: 4px 12px 4px 8px;\n border-radius: ${BorderRadius.InnerBlockRadius};\n background-color: ${COLORS.BgSurface};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n justify-content: flex-start;\n padding: 8px 12px 12px 8px;\n }\n`;\n\nexport const RowWrap = styled.div`\n flex-wrap: nowrap;\n column-gap: 24px;\n align-items: center;\n width: 100%;\n`;\n\nexport const DescriptionWrap = styled.div`\n flex: 1 0 1%;\n flex-wrap: nowrap;\n align-items: center;\n column-gap: 12px;\n`;\n\nexport const MobileOnlyWrap = styled(RowWrap)`\n display: none;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n display: flex;\n justify-content: space-between;\n padding: 0 0 0 4px;\n }\n`;\n\nexport const DesktopOnlyWrap = styled.div<{ withCounts?: boolean }>`\n display: flex;\n align-items: center;\n column-gap: 24px;\n\n @media (min-width: ${wideBreakpoints.mobile}) {\n ${({ withCounts }) => withCounts\n ? css`\n width: 240px;\n flex-wrap: nowrap;\n column-gap: initial;\n justify-content: space-between;\n `\n : ''\n }\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n display: none;\n }\n`;\n\nexport const TitleWrap = styled.div`\n flex: 1 0 1%;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n flex-wrap: nowrap;\n row-gap: 4px;\n`;\n\nexport const Title = styled.div`\n width: 100%;\n ${FONTS.MediumS};\n color: ${COLORS.TextPrimary};\n`;\n\nexport const Description = styled.div`\n ${FONTS.XS};\n color: ${COLORS.TextSecondary};\n`;\n\nexport const Button = styled(BaseButton)`\n svg {\n fill: ${COLORS.Control};\n stroke: ${COLORS.Control};\n }\n`;\n","import { useRouter } from 'next/router';\n\n/**\n * @deprecated использовать useRouter\n */\nexport const usePrepareQueryData = (): Record => {\n const { query } = useRouter();\n const _query: Record = {};\n\n for (const key in query) {\n const _value = query[key];\n _query[key] = _value ? (typeof _value === 'string' ? _value : _value[0]) : '';\n }\n\n return _query;\n};\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n\nexport interface ICheckResponse {\n sum: number,\n type: number,\n expireDate?: string,\n}\n\nexport enum ErrorCodeStatus {\n PROMOCODE_NOT_FOUND = 'PROMOCODE_NOT_FOUND',\n UNKNOWN = 'UNKNOWN'\n}\n\n/*\n* Проверка доступности промокода для неавторизованного пользователя\n* https://master.api-loyalty.sandbox.d2c.r-one.io/docs/v1#/Promocode/7eddd66cd85b641c15598f640c8c4250\n* */\nexport const check = (providerId: number, promoCode: string): IRequest => ({\n uri: '/v1/unauth-promocode/check',\n method: 'GET',\n headers: { providerId: `${providerId}` },\n queryParams: { promocodeName: promoCode },\n});\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n/*\n* Регистрация платежа\n* https://master.api-pay.sandbox.d2c.r-one.io/docs/v1#/Payment/f5610719af05925870dc02555a45b38d\n*\n*/\nexport const makePaymentAuth = (providerId: number, params = {}): IRequest => ({\n uri: '/payment/add',\n withAuth: true,\n withProvider: true,\n method: 'POST',\n body: JSON.stringify(params),\n queryParams: {\n providerId,\n },\n});\n\n/*\n* Простая оплата без токена по timestamp и client_secret\n* https://master.api-pay.sandbox.d2c.r-one.io/docs/v1#/UnauthPayment/2daace48edd50f86130bdbe7fc5cd644\n*/\nexport const makePaymentUnauth = (providerId: number, params = {}): IRequest => ({\n uri: '/unauth-payment/add',\n method: 'POST',\n body: JSON.stringify(params),\n queryParams: {\n providerId,\n },\n});\n","import { EContactDetailTypes, TResetData } from '../index';\nimport { initialState } from '../initialState';\n\nexport const resetAddress = (): TResetData => ({\n type: EContactDetailTypes.RESET_DATA,\n payload: initialState,\n});\n","import { RefObject, useCallback, useState } from 'react';\n\nimport { useIsomorphicLayoutEffect } from '@r1-frontend/shared/hooks/useIsomorphicLayoutEffect';\n\ninterface IResult {\n height: number | undefined,\n width: number | undefined,\n}\n\nexport const useResizeObserver = (\n ref: RefObject,\n callback?: (entry: DOMRectReadOnly) => void,\n): IResult => {\n const [width, setWidth] = useState();\n const [height, setHeight] = useState();\n\n const handleResize = useCallback(\n (entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n\n const entry = entries[0];\n setWidth(entry.contentRect.width);\n setHeight(entry.contentRect.height);\n\n if (callback) {\n callback(entry.contentRect);\n }\n },\n [callback],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (!ref.current) {\n return;\n }\n\n let RO: ResizeObserver | null = new ResizeObserver((entries) => window.requestAnimationFrame(() => handleResize(entries)));\n RO.observe(ref.current);\n\n return () => {\n RO?.disconnect();\n RO = null;\n };\n }, [ref]);\n\n return { width, height };\n};\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const HtmlContentFromApi = styled.div`\n display: block;\n word-break: break-word;\n \n ul, ol {\n display: list-item;\n }\n \n ul {\n list-style: disc;\n }\n \n ol {\n list-style: decimal;\n }\n \n h1 {\n ${FONTS.H2};\n\n @media (min-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H0}\n }\n }\n\n h2 {\n ${FONTS.H3};\n \n @media (min-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H1}\n }\n }\n\n h3 {\n ${FONTS.H4};\n\n @media (min-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H3}\n }\n }\n\n h4 {\n ${FONTS.H5};\n\n @media (min-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H4}\n }\n }\n\n h5, h6 {\n ${FONTS.H6};\n }\n \n p, li {\n ${FONTS.XS};\n \n b {\n ${FONTS.MediumXS};\n }\n\n @media (min-width: ${wideBreakpoints.mobile}) {\n b {\n ${FONTS.MediumS};\n }\n }\n \n @media (min-width: ${wideBreakpoints.mobile}) {\n ${FONTS.S};\n }\n }\n \n a {\n color: ${COLORS.Link}\n }\n \n img {\n max-width: 100%;\n height: auto;\n object-fit: contain;\n }\n`;\n","import * as ST from './styled';\n\ntype THtmlContentFromApiProps = {\n children: string,\n};\n\nconst HtmlContentFromApi = ({ children }: THtmlContentFromApiProps): JSX.Element => {\n return (\n \n );\n};\n\nexport default HtmlContentFromApi;\n","import styled from 'styled-components';\n\n// todo: Этот компонент требует доработки, использовался в 2х местах поэтому вынес в ui-react\nexport const OrderedList = styled.ol`\n padding-left: 16px;\n list-style: decimal;\n`;\n","import { TSliderProps } from '@r1-frontend/ui-react/components/NukaCarousel/SliderHoc/types';\n\n/**\n * Медиавыражения для определения соответствия документа определенному разрешению (Исп-ся для смены контейнера карточек на слайдер)\n *\n * @name constants.EMediaWidth\n * @type {enum}\n */\nexport enum EMediaWidth {\n desktop = '(min-width: 1601px)',\n sDesktop = '(max-width: 1600px) and (min-width: 1280px)',\n laptop = '(max-width: 1279px) and (min-width: 768px)',\n sLaptop = '(max-width: 1024px)',\n mobile = '(max-width: 767px)',\n}\n\n/**\n * Первоначальный стейт maxCardsData\n *\n * @name constants.DEFAULT_STATE_MAX_CARDS\n * @type {TSliderProps}\n */\nexport const DEFAULT_STATE_MAX_CARDS: TSliderProps = { value: 1, gap: 40 };\n\n/**\n * Данные для слайдера в соответсвии разрешению (value - макс кол-во карточек без переполнения, gap - расстояние между слайдами)\n *\n * Страница /promo\n *\n * @name constants.DATA_SLIDER_PARAMS_DEFAULT\n * @type { Record}\n */\nexport const DATA_SLIDER_PARAMS_DEFAULT: Record = {\n mobile: { value: 1, gap: 35 },\n laptop: { value: 2, gap: 66 },\n sDesktop: { value: 3, gap: 96 },\n desktop: { value: 4, gap: 129 },\n};\n\n/**\n * Ширина карточки для слайдера\n *\n * @name constants.CARD_WIDTH\n * @type {string}\n */\nexport const CARD_WIDTH = '316px';\n","import styled from 'styled-components';\n\nexport const Wrapper = styled.div<{needWrapGap?: boolean}>`\n margin-top: 20px;\n ${({ needWrapGap }) => needWrapGap ? 'gap: 32px' : ''};\n`;\n\nexport const Container = styled.div`\n width: 100%;\n\n & > div:first-of-type {\n padding-left: 0;\n padding-right: 0;\n }\n`;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\n\nimport NukaCarousel from '@r1-frontend/ui-react/components/NukaCarousel';\nimport {\n CARD_WIDTH,\n DATA_SLIDER_PARAMS_DEFAULT,\n DEFAULT_STATE_MAX_CARDS,\n EMediaWidth,\n} from '@r1-frontend/ui-react/components/NukaCarousel/SliderHoc/constants';\nimport type { TSliderProps } from '@r1-frontend/ui-react/components/NukaCarousel/SliderHoc/types';\nimport type { IProps } from '@r1-frontend/ui-react/components/NukaCarousel/SliderHoc/types';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport * as ST from './styled';\n\nexport const SliderHoc: FC = ({ children, cardLength, needWrapGap, withoutArrows, slideWidth, cellSpacing }) => {\n const isMobile = useMatchMedia(EMediaWidth.mobile);\n const isLaptop = useMatchMedia(EMediaWidth.laptop);\n const isSDesktop = useMatchMedia(EMediaWidth.sDesktop);\n const isDesktop = useMatchMedia(EMediaWidth.desktop);\n const isTablet = useMatchMedia(EMediaWidth.sLaptop);\n const arrayMedia = [isMobile, isLaptop, isSDesktop, isDesktop];\n const [maxCardsData, setMaxCardsData] = useState(DEFAULT_STATE_MAX_CARDS);\n\n useEffect(() => {\n if (~arrayMedia.indexOf(true)) {\n setMaxCardsData(currentSliderProps);\n }\n }, [isMobile, isLaptop, isSDesktop, isDesktop]);\n\n const currentSliderProps = useMemo((): TSliderProps => {\n switch (true) {\n case isMobile:\n return DATA_SLIDER_PARAMS_DEFAULT.mobile;\n case isLaptop:\n return DATA_SLIDER_PARAMS_DEFAULT.laptop;\n case isSDesktop:\n return DATA_SLIDER_PARAMS_DEFAULT.sDesktop;\n case isDesktop:\n return DATA_SLIDER_PARAMS_DEFAULT.desktop;\n default: return DEFAULT_STATE_MAX_CARDS;\n }\n }, [isMobile, isLaptop, isSDesktop, isDesktop]);\n\n return (\n cardLength > maxCardsData.value\n ? \n \n {children}\n \n \n : {children}\n );\n};\n","import styled, { css } from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nconst StylesTab = css`\n position: relative;\n padding: 6px 24px;\n border-style: solid;\n border-color: transparent;\n background: transparent;\n overflow: hidden;\n font: inherit;\n cursor: pointer;\n`;\n\nexport const Container = styled.div<{isDisabled : boolean, fontSize?: FONTS}>`\n width: fit-content;\n min-width: max-content;\n max-width: 600px;\n display: flex;\n position: relative;\n box-sizing: content-box;\n ${p => p.fontSize || FONTS.MediumXS};\n background-color: transparent;\n border-radius: 100px;\n border: 2px solid ${COLORS.Outline_Light};\n pointer-events: ${p => p.isDisabled ? 'none' : 'auto' };\n user-select: none;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n max-width: 300px;\n }\n`;\n\nexport const TabLeft = styled.button`\n ${StylesTab};\n border-width: 2px 0 2px 2px;\n border-radius: 100px 0 0 100px;\n`;\n\nexport const TabRight = styled.button`\n ${StylesTab};\n border-width: 2px 2px 2px 0;\n border-radius: 0 100px 100px 0;\n`;\n\nexport const LayoutLeft = styled.span<{translateValue: number, colorTab: string}>`\n position: absolute;\n top: 0;\n height: 100%;\n border-radius: 100px;\n transition: transform 100ms ease-in-out;\n width: 100%;\n right: 0;\n background-color: ${p => p.colorTab};\n transform: ${p => `translateX(${p.translateValue}%)`};\n`;\n\nexport const LayoutRight = styled(LayoutLeft)`\n right: 100%;\n`;\n\nexport const Text = styled.span<{ isActive: boolean, isDifferentColorText: boolean }>`\n position: relative;\n z-index: 1;\n color: ${(p) => p.isDifferentColorText && !p.isActive ? COLORS.TextPrimary : COLORS.TextWhite};\n white-space: pre;\n`;\n","import React, { FC } from 'react';\n\nimport * as ST from '@r1-frontend/ui-react/components/controls/Toggle/styled';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\ninterface IProps {\n textsValues: { leftText: string, rightText: string },\n isDisabled?: boolean,\n colorTab?: string,\n onChangeCallback: (activeTab: string) => void,\n activeTab: string,\n fontSize?: FONTS,\n isDifferentColorText?: boolean,\n}\n\nconst Toggle: FC = ({\n textsValues,\n isDisabled = false,\n colorTab = COLORS.ButtonPrimary,\n onChangeCallback,\n activeTab,\n fontSize,\n isDifferentColorText = true,\n ...args\n}) => {\n const translateData = { max: 100, min: 0 };\n const { leftText, rightText } = textsValues;\n const isRightTabActive = activeTab === rightText;\n\n const onClickHandler = () => {\n const activeText = isRightTabActive ? leftText : rightText;\n onChangeCallback(activeText);\n };\n\n return (\n \n \n \n \n {leftText}\n \n \n \n \n \n {rightText}\n \n \n \n );\n};\n\nexport default Toggle;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactSelect, { components } from 'react-select';\nimport styled from 'styled-components';\n\nimport Icon from '../../../deprecated/icon';\nimport { COLORS } from '../../../tokens/colors';\nimport { Menu, MenuList, Option as BigOption, SmallOption } from '../dropdown';\n\nconst ControlTitle = styled.div`\n cursor: pointer;\n`;\nconst Control = (props) => {\n const { children, isDisabled, isFocused, innerRef, innerProps } = props;\n return (\n \n {children}\n \n );\n};\n\nconst ValueContainer = styled(components.ValueContainer)`\n padding: 0!important;\n flex: auto!important;\n align-items: flex-start!important;\n`;\n\nconst TitleValue = styled.div`\n color: ${COLORS.TextPrimary};\n`;\nconst SingleValue = (props) => {\n const { children, isDisabled, innerRef, innerProps } = props;\n return (\n \n {children}\n \n );\n};\n\nconst Indicator = styled(components.DropdownIndicator)`\n min-width: 20px;\n justify-content: center;\n align-items: center;\n margin-left: 5px;\n padding: 0!important;\n`;\nconst DropdownIndicator = (props) => {\n return (\n \n \n \n );\n};\n\nexport default class Select extends React.Component {\n static propTypes = {\n options: PropTypes.arrayOf(PropTypes.shape({\n label: PropTypes.any,\n value: PropTypes.any,\n })),\n defaultValue: PropTypes.any,\n placeholder: PropTypes.string,\n onChange: PropTypes.func,\n value: PropTypes.shape({\n label: PropTypes.any,\n value: PropTypes.any,\n }),\n };\n\n static defaultProps = {\n options: [],\n placeholder: '',\n onChange: () => { },\n };\n\n onChange = (value) => {\n this.props.onChange(value);\n };\n\n render() {\n const { options, defaultValue, value, placeholder, minWidth, extStyle, smallOption, ...rest } = this.props;\n\n const Option = (props) => smallOption ? : ;\n const customComponents = {\n IndicatorSeparator: null,\n Control,\n ValueContainer,\n SingleValue,\n Option,\n Menu,\n MenuList,\n DropdownIndicator,\n };\n\n const customStyles = {\n menu: base => ({\n ...base,\n minWidth: minWidth,\n }),\n ...extStyle,\n };\n return (\n \n );\n }\n}\n","import { createSvg } from '@r1-frontend/ui-react/components/svg/createSvg';\n\nconst Check = (\n {\n strokeWidth = 1.5,\n },\n): JSX.Element => {\n return (\n \n \n \n );\n};\n\nexport default createSvg(\n Check,\n 'check',\n);\n","import { createSvg } from '@r1-frontend/ui-react/components/svg/createSvg';\n\nconst Coin = (\n {\n strokeWidth = 1.5,\n },\n): JSX.Element => {\n return (\n <>\n \n \n \n \n \n \n );\n};\n\nexport default createSvg(\n Coin,\n 'coin',\n);\n","import { createSvg } from '@r1-frontend/ui-react/components/svg/createSvg';\n\nconst VideoPlay = (\n {\n strokeWidth = 1.5,\n },\n): JSX.Element => {\n return (\n <>\n \n \n \n \n \n \n \n \n );\n};\n\nexport default createSvg(\n VideoPlay,\n 'video-play',\n);\n","import styled from 'styled-components';\n\n/**\n * @deprecated\n * Use @r1-frontend/ui-react/components/svg instead\n */\nconst Icon = styled.div`\n display: inline-block;\n font-family: 'icomoon' !important;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n text-decoration: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-size: ${props => props.fontSize ? props.fontSize : 'inherit'};\n color: ${props => props.color || 'black'};\n &::before {\n content: ${props => `\"${props.content}\"`};\n }\n`;\n\nexport default Icon;\n","/**\n * Медиавыражения для определения соответствия документа определенному разрешению\n *\n * @name data.EMediaWidth\n * @type {enum}\n */\nexport enum EMediaWidth {\n sDesktop = '(max-width: 1365px)',\n sDesktopMin = '(min-width: 1366px)',\n sDesktopOnly = '(max-width: 1365px) and (min-width: 1023px)',\n tablet = '(max-width: 1023px)',\n tabletOnly = '(max-width: 1023px) and (min-width: 768px)',\n mobile = '(max-width: 767px)',\n}\n","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/banner-152033077c7bae27a78900a7e2a0b07b.png\";"],"names":["module","exports","e","t","default","n","o","Promise","i","a","s","l","next","r","throw","done","value","then","apply","document","createElement","src","async","removeEventListener","remove","Error","addEventListener","body","appendChild","constructor","this","handleClick","config","createLoadPaymentDataRequest","onClick","defaultPrevented","client","loadPaymentData","onLoadPaymentData","statusCode","onCancel","onError","console","error","options","getElement","element","isGooglePayLoaded","window","g","google","payments","api","PaymentsClient","mount","appendStyles","updateElement","unmount","configure","oldInvalidationValues","isClientInvalidated","getInvalidationValues","resolve","createClientOptions","environment","merchantInfo","createMerchantInfo","onPaymentDataChanged","onPaymentAuthorized","paymentDataCallbacks","createIsReadyToPayRequest","paymentRequest","apiVersion","apiVersionMinor","allowedPaymentMethods","existingPaymentMethodRequired","Object","assign","softwareInfo","id","softwareInfoId","version","softwareInfoVersion","isMounted","isConnected","removeButton","ShadowRoot","Element","Array","from","children","tagName","buttonType","buttonColor","buttonSizeMode","buttonLocale","getRootNode","buttonRootNode","createButton","setClassName","className","isReadyToPay","result","paymentMethodPresent","prefetchPaymentData","log","split","filter","onReadyToPayChange","isButtonVisible","join","removeAttribute","cssSelector","replace","getElementById","call","type","innerHTML","Document","head","some","merchantId","merchantName","Component","super","arguments","manager","elementRef","createRef","componentDidMount","current","props","componentWillUnmount","componentDidUpdate","render","ref","style","baseFlatten","baseOrderBy","baseRest","isIterateeCall","sortBy","collection","iteratees","length","baseIteratee","baseUniq","array","iteratee","__NEXT_P","push","ANALYTICS","clickGuide","goToPage","ControlsWithQuantity","quantity","minQuantity","disabled","onIncrement","onDecrement","onClose","isMobile","useMatchMediaByWidth","wideBreakpoints","Stepper","min","summaryLimitsReached","$bgColor","COLORS","$color","Button","bType","size","EquipmentControlsComponent","styled","ListContainer","Cost","Paragraph5","EquipmentControls","cost","onAddClick","text","isMonthly","useMatchMedia","ST","$direction","$wrap","$size","data-bType","NBSP","Item","isChecked","ItemRadio","BaseRadio","TextWrapper","FONTS","period","onSelect","name","customText","onChange","checked","span","br","b","PurchaseContainer","selectedOption","handleSelect","hasAdded","limits","elseOptions","option","useMemo","sortedOptions","values","lowestPriceOption","isFullPriceChecked","fullPriceOption","isFullPriceDisabled","total","isLowestPriceChecked","isLowestPriceDisabled","installment","H4","$smaller","SlideCarousel","withoutArrows","withoutDots","slideWidth","cellSpacing","framePadding","PurchaseOptionsItem","Paragraph4","$withIndent","map","isInstallment","product","selectedPrice","duration","limitsByCategories","EShopCategory","getTotalCount","products","reduce","acc","curr","getLimits","category","limit","productsByCategory","el","installmentCount","installmentItems","getProductsInInstallments","getInstalmentCount","getIsDisabledByLimits","productQuantity","isInstallmentLimit","BasePopupRightAlign","isOpen","dPadding","mPadding","popupHeight","desktopPadding","scrollPaddingDesktop","isIndent","mobilePadding","scrollPaddingMobile","rightIndent","DefaultPopup","width","height","overflowY","alignSelf","margin","popupIndent","maxWidth","maxHeight","borderRadius","BorderRadius","customStyles","popup","closePopup","top","right","mobile","IndentContainer","$desktop","$mobile","display","flexDirection","flexWrap","position","TheScrollbar","CustomScrollbar","view","paddingRight","selectProductsByCategory","createSelector","state","items","fullBuy","item","CarouselContainer","ContentContainer","RoundedContainer","Footer","title","images","characteristics","description","labels","useState","setOption","analytics","useAnalytics","equipments","useSelector","isDisabled","textForOptions","NukaCarousel","slidesToShow","img","alt","FullWidthListContainer","H3","dangerouslySetInnerHTML","__html","PurchaseOptionsSlider","equipment","chooseCostType","chooseDuration","index","Characteristics","HtmlContentFromApi","chooseEquipmentContinue","PopupCustomStyles","Popup","$props","EquipmentPopup","memo","DecoderCardView","openAddEquipmentPopup","handleDecrement","handleIncrement","isSkipImages","image","categoryTitle","TVSetTopSelectable","group","onButtonClick","onCostClick","btnText","DecoderCardsViewWithButton","cardCount","useValueByBreakpoint","desktop","sDesktop","usePartialList","partialEquipments","isPartial","setIsPartial","showMoreText","ControlElement","Icon","SingleArrowDown","SingleArrowUp","clickShowMore","DecoderCardsViewWithCarousel","AdaptiveNukaCarousel","slidesToScroll","desktopSlideWidth","mobileSlideWidth","data-test","getPurchaseOptions","prices","isInstallmentDisable","sort","key","setTariffFilters","filters","actionTypes","payload","addProduct","productId","decProductQuantity","setProducts","selectSubscription","subscriptionId","clickSubscriptionsCheckBox","selectTariff","params","addressData","selectedAddress","setAgreementData","agreementId","agreementNumber","isDouble","hasError","errorMessage","setDisplayTariffLineState","displayState","setInitialized","status","isAddressVerificationOnFirstStep","setPrevStep","stepIndex","setPromoCode","data","setSlot","slot","setStep","setTariffLineAlias","tariffLineAlias","toggleBackgroundLoading","newState","unSelectSubscription","addEquipment","currentEquipment","dispatch","find","batch","changeEquipmentCount","elementId","isIncrement","getState","currentEl","deleteEquipment","DecoderList","withCarousel","useDispatch","isPopupOpen","setIsPopupOpen","currentEquipmentId","setCurrentEquipmentId","setIsInstallmentDisable","isInstallmentDisabled","handleClosePopup","EquipmentInfo","label","Label","bgColor","color","textColor","color_text","prepareCharacteristic","elem","truncate","Flash","RouterCardView","slicedProps","slice","RouterCard","RouterCardsViewWithButton","entity","getShowMoreEquipmentText","RouterCardsViewWithCarousel","EquipmentList","useEffect","clickAddProduct","TOGGLE_MODES","leftText","rightText","getABNVariant","ESteps","tariffInfo","subscriptions","equipmentsTv","equipmentsCottage","address","contacts","agreementCreated","timeSlots","final","EXCLUDE_STEPS","useCheckAdditionalEquipment","useContext","FullBuyContext","isVillage","routerCategory","flow","routerEquipments","decoderEquipments","shallowEqual","step","steps","hasAdditionalEquipment","isAdditionalEquipment","equipmentComponentType","includes","componentForEquipment","toggleState","setToggleState","Toggle","textsValues","onChangeCallback","activeTab","colorTab","fontSize","isDifferentColorText","StyledAdditionalEquipment","EquipmentComponent","WideContainer","$united","Separator","BannerBlockContainer","BlockContainer","BannerView","subtitle","buttonText","indent","rounder","require","selectBannerInfoForFullBuy","selectCurrentTariff","tariff","speedInRange","inRange","speed","isMono","recommendedPackets","recommendedPacket","priceFinal","promoPriceFinal","promoDuration","sale_package_id","tariffName","format","monthly","path","Banner","banner","verifiedAddressDataStatus","contactAddress","verifiedAddressData","isAddressNotVerified","EVerificationStatus","clickBanner","location","href","S","as","$inline","Boolean","isConnectionAvailable","isTariffAvailable","newPrice","checkingResult","connectionPrice","isValid","undefined","selectedSubscriptions","forEach","sId","serviceId","periodText","getPluralize","monthPluralize","productName","finalPrice","startPrice","changePopupState","InfoCircleFlip","ButtonGroup","dMonth","str","max","suffix","substr","lastIndexOf","givenQuantityForCost","isRequired","required","getTitleByQuantity","trim","AdditionalProductDetailedInfo","firstMonthPrice","basePrice","Indentation2SatisfyTheDesignIdea","analyticsCallback","selectedTariff","stepName","selectStepName","isShownLoader","addressCheckingResult","getAddressCheckingResult","orderSummary","fullSummaryData","isApartmentPackage","additionalProducts","tariffPrice","promoPrice","price","productsCost","getProductsCosts","instalmentProducts","oneTimePurchaseProducts","totalCost","once","allData","getDescriptionForTariffForNewSubscriptions","promoPeriod","TariffDetailedInfo","processProduct","isCottage","ItemWithoutCost","previousCost","isDiscounted","base","ConnectionConditions","withoutTitle","clickViewConnectionCostPopup","summary","bind","getSummaryInfo","BaseOrderSummary","gapSize","Wrapper","OrderSummaryItem","providerId","domain","callback","isError","setIsError","setErrorMessage","isLoading","setIsLoading","processCheck","promoCode","respPromoCode","promocodeClickVerification","doRequest","check","isSuccess","amount","sum","promocodeFailVerification","message","clearErrors","PromoWrapper","FormLine","StyledInputSimple","InputSimple","ResultLine","TickCircle","Text","StyledButton","EBonusTypes","AMOUNT","PERCENT","hasAgreement","selectDomain","selectProviderId","bonusAmount","bonusType","promoCodeValue","setPromoCodeValue","startInput","setStartInput","usePrepareQueryData","code","useCheckPromoCode","promocodeSuccessVerification","onCheckCode","useCallback","bonusMessage","onClickClear","onInputCLick","promocodeClickedOnHave","Close","placeholder","promocodeStartedTyping","target","onInputChange","isNotValid","BottomStickyOrderSummaryWrapper","OrderSummaryWrapper","RoundedBlock","TiketContainer","withPromocode","agreementData","agreement","isLaptop","onOpenBottomSticky","useOnceExecute","clickOpenBottomStickySummary","BottomStickyBlock","InnerComponent","OrderSummary","PromoCode","OuterComponent","TotalSummary","onOpen","fio","contactDetails","editedFio","phone","confirmedPhone","getAddressByStr","promoCodeError","InfoBlock","header","isCollapsable","isRightSide","wrapper","InfoBlockItem","icon","User","content","CallCalling","Location","Coin","Phone","StBaseButton","BaseButton","city","currentCity","callCenterNumber","callCenter","clickCallTouch","btnSizes","btnTypes","clickChat","openChat","FeedbackWrapper","FeedbackTitle","FeedbackButtonsContainer","FeedbackButton","clickable","css","FeedbackEmoticon","FeedbackButtonTitle","InputMessage","ButtonMessage","StyledThrobber","Throbber","EFeedback","not_grade","bad_grade","good_grade","feedback","setFeedback","setMessage","setIsValid","isSentFeedback","setIsSentFeedback","sendGoodGrade","positive","sendBadGrade","negative","WebpImage","urlWebp","div","inputType","onChangeMessage","CardWrapper","CardImage","LazyLoadImage","isCover","CardContent","CardTitle","CardDescription","card","webpImg","CardCircle","CardArrow","imgUrl","CardLabel","BlockTitle","SwiperContainer","BlockArray","CardRowWrapper","cardGap","rowCards","arrayCount","cardWidth","amountInRow","rowIndex","isShowAll","innerIndex","CardLoader","Card","shopItemTypeIDs","finalsalePackageLink","showLink","parentBlock","useRef","useResizeObserver","setIsShowAll","EMediaWidth","tariffPackage","salePackageId","calculatedSalePackageId","salePackageLinks","subscriptionsArray","finalSubscriptions","service_id","filteredSubscriptionsArray","requiredAdditionalProducts","filteredProducts","uniqBy","allTariffIncludes","tariffIncludesResult","prop","toString","toLowerCase","image_width","image_height","image_webp","shopItem","extend_image_for_full_buy","extend_image_for_full_buy_webp","extend_body_for_full_buy","body_for_full_buy","imageForFullBuy","imageForFullBuyWebp","extendBodyForFullBuy","bodyForFullBuy","countWithGap","Math","floor","rowsCardsToShow","res","chunk","SliderHoc","cardLength","needWrapGap","CardRow","Link","USER_LOGIN_ROUTE","passHref","fetchAuthorizeApplePaySession","headers","resp","axios","url","method","captureQueryError","cachedScripts","loadScript","existing","promise","reject","script","onScriptLoad","onScriptError","AppleBtnGlobalStyle","createGlobalStyle","AppleBtnWrapper","ApplePayBtn","paySumm","onPaymentCreate","isLoadedScript","setIsLoadedScript","paymentMethodData","setPaymentMethodData","onPayClick","paymentResp","details","request","payToken","payResult","currency","PaymentRequest","onmerchantvalidation","event","appleSession","complete","show","token","paymentData","initialazeClient","methodData","uri","withProvider","withAuth","info","supportedMethods","IS_PRODUCTION_ENVIROMENT","merchantIdentifier","merchantCapabilities","supportedNetworks","countryCode","canMakePayment","appleBtn","querySelector","apple-pay-button","buttonstyle","locale","GoogleBtnWrapper","GooglePayBtn","paymentDataRequest","setPaymentDataRequest","setMerchantInfo","parameters","allowedAuthMethods","allowedCardNetworks","tokenizationSpecification","gateway","gatewayMerchantId","transactionInfo","totalPriceStatus","totalPriceLabel","totalPrice","currencyCode","getDataRequest","ev","preventDefault","tokenizationData","GooglePayButton","PaymentVariants","isLastStep","isGoogleBtnDisplay","setGoogleBtnDisplay","isAppleBtnDisplay","setAppleBtnDisplay","router","useRouter","onPaymentMake","pathname","query","pay","MD","gateTransactionId","PaReq","TermUrl","acsUrl","billingTransactionId","paymentToken","tokenType","paymentResult","btoa","JSON","stringify","number_type","number_value","payment_token","payment_token_type","payment_value","payment_source","return_url","origin","makePaymentUnauth","regStatus","captureException","abnGoogleVariant","abnAppleVariant","onGoToPayment","clickPayment","StyledTicket","TicketFinal","isEquipment","marginBottom","p","successStatus","isLeasingPrice","isName","Select","RubleSymbol","bottomContent","DoubleColumnLayout","isHide","StageWrap","Section","BlocksWrapper","TiketContainerFinal","calculateTotalPrices","monthlyPayment","oncePayment","dateTime","date","AgreementInfo","Feedback","TariffInclude","CallbackContacts","goToNextStep","newIndex","selectFilteredTariffs","tariffs","filteredPackages","tariffPackages","packages","tariffPack","getTariffsByTariffLine","filterType","ETariffFilters","pack","available_on_address_restrict","GIGABIT_SPEED","getfilteredPack","filteredTariffs","addressStatus","isEdit","isAgree","isConfirmButtonActive","isAddressFilled","isHouseConnected","isHouseCottage","availableSpeed","tariffSpeed","addressIsVerified","tariffSpeedAcrossEnum","EAvailableSpeed","MEGABIT_SPEED","shouldConnect","Number","stopPropagation","checkAddress","setAddressEdit","checkClicked","continueClicked","getSelectedProductsByCategory","hasSelected","clickContinue","ADDRESS_VERIFICATION_SINGLE_INPUT","on","off","getStep","getFlow","isOneLineAddressFormScreen","isOneLineAddressScreen","_step","String","selectIsPhoneConfirmed","editedPhone","isPhoneConfirmed","isConfirmButtonDisabled","getStateForContactsButton","openVerification","showPopup","submitVerificationForm","isHaveSelectedProducts","hasProducts","doNotDisplay","needToSelect","subscriptionsSummary","cnt","leftToSelect","selected","tariff_name","subscriptionPlural","getSubscriptionsWithConditions","choose","_backgroundLoading","loading","getStateForTariffInfoButton","UnifiedAddressFormContext","uafDispatch","unifiedAddressFormHooks","submitButtonProps","getSubmitButtonProps","onAddressConfirmedCallback","setAddress","isTariffAvailableForActivation","connectionCost","submit","unifiedAddressAnalytics","hooksList","useTariffInfoNextButton","useSubscriptionsNextButton","useEquipmentsNextButton","useEquipmentsTvNextButton","usePrivateSectorEquipmentNextButton","useUnifiedAddressFormNextButton","useOldAddressFormNextButton","useContactsNextButton","useStubNextButton","getStepForNextButton","useDynamicHook","createSvg","strokeWidth","d","strokeLinecap","strokeLinejoin","stroke","guideSteps","isActive","Game","House","VideoPlay","ProfileCircle","CalendarSecond","MovixHelper","CloseBox","getGuideData","isSalePackageId","currentStep","hasEquipmentInTariff","hasRequiredTvBox","hasSubscriptions","findStep","mappedItem","isTruthy","GuideFullBuy","guideData","createDescriptionElements","OpenChat","Guide","goToPrevStep","onClickInfoIcon","_addressVerificationOnFirstStep","gigabitAvail","canConnectAfterCheckedAddress","_gigabitMayConnect","MEGABIT_AVAIL_CODES_LIST","_shouldConnect","progress","dynamicProps","hasPrevBtn","imgName","getProgressTitles","imgPath","SteppableProgressBar","RequestContent","LeftSide","MainLayout","showFinalTicket","isOpenGuide","setIsOpenGuide","isHideGuideIcon","UnifiedAddressFormCtx","unifiedAddressForm","ProgressBarWithBackBtnContainer","GoToNextStepButton","HasAgreementPopup","popupAddressAgreement","PersonForm","onChangeFio","onChangePhone","isNeedToBlockInvalidFio","actionButtonProps","onLoadSuggestions","suggestFio","suggestions","suggestion","PersonFormComponent","EditableContactsForm","BlockWrap","RequestForm","csrf","selectCsrf","useResultPopup","PopupResult","showResult","setFio","setPhone","unifiedSelectedAddress","addressParams","selectAddressParamsMemoize","gigabitMayConnect","isGigabitCanConnected","requiredGigaSpeed","isGigaSpeedRequired","isTariffCanConnected","onSubmitRequest","ok","submitRequest","street","house","flat","EResultPopupStatus","OneLineAddressInput","AddressInput","withoutFlat","BoldText","Alert","BaseAlert","Block","GrayBlock","RounderContainer","addressFormDispatch","useCtxDispatch","scrollTo","handleChangeAddress","changeAddressClicked","flush","FullBuyST","InfoCircle","ListItemWithIcon","isCompatible","ResultMessage","restrictions","only100Clicked","lessThan1000Clicked","isFullBuyVillage","PolicyNote","agreeUrl","POLICY_PAGE_LINK","$lastIndent","UnifiedAddressForm","FullBuy","FullBuyByPage","isNotNeedGap","RightSide","isLastStage","isOnTimeslots","SkeletonTheme","inline","StageTitle","stageTitle","stageNumber","currentNumber","Skeleton","count","useSendReferrerToGA","action","referrer","withoutOrigin","dataLayerPush","EVENTS","sendReferrer","SInteractiveLoader","InteractiveLoader","parent","root","setRoot","isClientSide","portal","minHeight","createPortal","textItems","agreementCreationStatuses","delay","loopSegmentAtIndex","results","canConnected","getText","hasCallRequest","messageType","notConnected","gigabitError","checkError","flatError","AddressCheckMessage","isNotFlatAddress","isGigabitError","isTariffCanConnect","resultType","EditableForm","onFillAddress","onConfirmBtnClick","defaultAddress","showConfirmButton","withSatelliteFilter","AddressInputFields","catchAddressData","disableCityChange","gtmCategory","gtmSenderCallback","send","AddressWrapper","StyledMenu","STrobber","ContactAddress","showConfirmForm","addressBlockRef","verifiedAddress","editedAddress","editedAddressData","useStorageAddress","onEdit","fillAddressAction","ConfirmedForm","isDisableBtn","Address","displayAdditionalTariffLine","setDisplayAdditionalTariffLine","allowedSpeed","verificationFailed","verificationSuccess","hideBtn","onFillFio","onFillPhone","ContactPerson","popupId","Contacts","confirmPopup","getPopupData","isFIOEnterStarted","setIsFIOEnterStarted","isPhoneEnterStarted","setIsPhoneEnterStarted","_person","startEnterName","fillFioAction","_phone","startEnterPhoneNumber","fillPhoneAction","ConfirmNumberPopup","isShow","onClosePopup","hidePopup","onConfirmed","setConfirmedPhone","dataLayerPushCategory","queryParams","getCitiesTariffs","response","contentRequest","accessMode","getAccessModeByRights","isWebp","isServerSide","Image","onerror","onload","catch","fetchTariffPackages","forCottage","retrieveTariffsFunction","bundles","mono","bundlePackages","isSupportsWebp","getOnlyCottageTariffPackages","getOnlyCityTariffPackages","tariffTransformer","salePackage2in1","is_cottage","getSummaryCheckInfo","connectPrice","oncePaymentSum","monthlyPaymentSum","showPrice","oncePaymentEquipment","connection","monthlyPaymentEquipment","createOfferRequestBody","unifiedAddress","tariffId","productsByProps","summaryCheckInfo","analytics_id","dealerUid","sessionStorage","getItem","DEALER_UID","companyId","office","houseId","unifiedHouseId","personalInformation","clientName","clientPhone","comment","promocodeName","analyticsId","managerId","removeItem","selectDataForCreateAgreement","provider","CreateAgreementScreen","lastStepKey","offerRequestBody","respAgreement","agreementDataString","fromCache","plbRegistrationSuccessful","promoCodeSuccessful","getPackageIdBySubscriptionIds","buildProductsForRequest","getGaId","offerCreate","createAgreement","try","itogInMonth","itogInOnce","getErrorMessage","fail","promocodeActivation","isFromCache","double","success","isInstallationHardware","isTimeSelected","endDot","ESlotsContainerState","SHOW_SLOTS","HIDE_SLOTS","SLOTS_EMPTY","EngineerRequest","failureResponseFromSelectSlot","setFailureResponseFromSelectSlot","errorMsg","slotResult","setSlotResult","isTimeSlotLoading","setIsTimeSlotLoading","hasEquipment","flag","hour","requestData","dateFrom","saleAgentClientName","ESaleAgentClientName","selectTimeSlot","failed","selectTimeSubText","Danger","DateOfServiceEngineerVisitWrapper","getTimeSlotsFunc","saleAgentTimeSlots","onConfirm","prevState","onClickConfirm","start","contractId","withComment","gaCategory","onUpdateLoading","RouterChoiceInfo","marginRight","OrderedList","li","isBackward","prevStepIndex","Equipments","skipEquipmentStep","DecoderInfo","VideoVertical","Forward","VideoAdd","VoiceSquare","EquipmentsTv","sla","engineerText","getEngineerText","howToPrepareText","getHowToPrepareText","isBiggerFont","Electricity","Clock","Final","minutes","padStart","EmployeeVisit","skipPrivateSectorEquipmentStep","getSubscriptionsSummary","currentTariff","activeSubscriptions","alias","active","currentVariant","findIndex","hasNext","nextStep","isLast","WantMoreSubscriptions","initializationByTariffLine","getSubscriptionText","clickMoreSubscriptions","ImageBlock","BenefitsText","Svg","displayImage","fullWidth","visibleByDefault","selectSubscriptionPopup","subscription","fullDescriptionList","getRequiredAndSelectivelySubscriptions","needToSelectMultiple","isOneOfSelected","sbs","cur","ResponseSubscriptionType","oneOf","multiple","initPopupData","selectedSubscription","setState","handleIconClick","TvSubscription","onToggle","listOfActions","imagePath","onIconClick","SubscriptionsAdditionalInfoPopup","handleToggle","RequiredAndSelectivelySubscriptionsContainer","SubscriptionsContainer","skipSubscriptionsStep","CombinedContainerForMainPage","dynamic","CustomSwiper","slideIndex","disableEdgeSwiping","cursorType","React","child","getGradient","colors","leftColor","rightColor","ActiveCardWrapper","BoxShadow","ArrowPositioner","TariffCardMinimal","colorText","bg","PromoText","hasBg","TariffTitle","isSmall","TariffDescription","defaultBg","PropsBlock","DescriptionRow","PriceBlock","Price","OldPrice","channelText","channelPluralize","ArrowPointer","priceAction","promoText","channelCount","imageBackground","titleColors","isLightCard","setCardWidth","preparedSubscriptions","imageWebp","cardBg","descBg","Subscriptions","imageHeight","hasBorderRadius","cardInnerWidth","parentWithOneBtn","parentWithTwoBtn","buttonWidth","renderTariffList","selectedPackageId","withArrowPointer","onSelectTariff","sendAnalytics","image_background_webp","image_background","flatMap","packageLink","accItem","_tariff","sdCount","hdCount","SEquipPreview","EquipPreview","ElementInfo","BasePopup","customScrollBarStyles","customDefaultPopupStyles","withDescTitle","SelectedTariffElements","IncludedTariffElements","requiredProducts","getChannelsTitle","hdCountsTitle","isChannelsPopupOpen","setIsChannelsPopupOpen","setSelectedTariff","downloadSpeed","elementsInfo","setElementInfo","sortedOfferContents","onProductButtonClickHandler","popupOpened","onOfferButtonClickHandler","offer","channelsPopupOpen","channelsPopupClose","isShowChannel","hasTariffElements","isMega","TariffElement","titleText","imageProps","textForImage","bgForImage","imageSrc","imgBgColor","btnProps","btnTextDesktop","iconNameMobile","requiredProduct","isShowButton","image_mobile","ChannelListPopup","freePackets","processEquipment","globalId","contentId","fullBody","shift","getOnlyPurchasePrices","getBodyForRequestEquipment","isOnlyPurchaseEquipment","routers","decoders","privateSectorEquipment","yandex","MultiCheckbox","rest","CheckIcon","CheckboxList","SwitcherWrap","checkboxItems","switcherValues","onClickSwitcher","onClickCheckbox","activeSwitcherTab","MultiCheckboxWithIcon","toggleFilter","currElem","getFilterTags","tagsSet","mySet","tariffTags","add","Set","getFiltersFromTariffsTag","currentFilters","currTariffs","tags","tag","every","getTariffsFilteredByTags","_tariffs","getTariffsFilteredByType","ESwitcherValues","bundle","TariffLineWrapper","TariffLineWrapperFullWidth","TariffInfo","displayTariffLine","_displayTariffLine","getEquipment","useFiltersByTags","defaultDisplayMono","hideSwitcher","firstTariff","setFilters","tariffsByType","setTariffsByType","setFilteredTariffs","setActiveSwitcherTab","changeTariffs","currFilters","filtersByTags","sort_on_bundles","newFilters","onToggleFilter","chooseRecommendedFilter","onToggleSwitcher","newTab","TagFilters","tariffsFilterByTags","swiperKey","chooseRecommended","CombinedSubscriptionContainerForTariffItem","traditionFlow","notTraditionFlow","stepsWithoutRouters","needToExclude","needToLoadSubscriptions","isArray","receiveSubscriptions","getListDescription","fullDescription","getBundleOfSubscriptions","all","subscriptionsBundle","getQueryParams","monoTariff","tariffLine","landingAvailable","initialized","isAddressVerification","isTimeSlotsLoading","setIsTimeSlotsLoading","isFullBuyVillageRedirect","tariffNameAlias","withoutCottageFilters","fetchTariffPackagesQueryParams","f","availableNew","restrictIgnore","initFullBuy","resetAddress","PrivateSectorEquipments","OneLineAddress","Loader","AdditionalEquipment","TariffInfoPageSkeleton","FullBuyAnalytics","FullBuyProvider","FullBuySteps","FullBuyPage","cityText","cityIn","Layout","withMenu","withFooter","withChat","getInitialProps","ctx","validatedAccessToken","store","initialProps","isNeedAuthData","nonPermanentRedirect","ImageElement","ButtonElement","btnTextMobile","iconNameDesktop","iconsSprite","ICONS_PATH","symbolId","imageAlt","imgSrc","ImgWrap","ImageElementWithText","RowWrap","DescriptionWrap","MobileOnlyWrap","DesktopOnlyWrap","withCounts","TitleWrap","Title","Description","_query","_value","ErrorCodeStatus","PROMOCODE_NOT_FOUND","UNKNOWN","makePaymentAuth","EContactDetailTypes","initialState","setWidth","setHeight","handleResize","entries","entry","contentRect","useIsomorphicLayoutEffect","RO","ResizeObserver","requestAnimationFrame","observe","disconnect","DEFAULT_STATE_MAX_CARDS","gap","DATA_SLIDER_PARAMS_DEFAULT","Container","laptop","isSDesktop","isDesktop","isTablet","sLaptop","arrayMedia","maxCardsData","setMaxCardsData","indexOf","currentSliderProps","wrapAround","StylesTab","TabLeft","TabRight","LayoutLeft","translateValue","LayoutRight","args","translateData","isRightTabActive","onClickHandler","ControlTitle","Control","isFocused","innerRef","innerProps","ValueContainer","components","TitleValue","SingleValue","Indicator","DropdownIndicator","defaultValue","minWidth","extStyle","smallOption","customComponents","IndicatorSeparator","Option","SmallOption","BigOption","Menu","MenuList","menu","ReactSelect","isClearable","isSearchable","styles","propTypes","PropTypes","defaultProps","strokeMiterlimit"],"sourceRoot":""}